Temat: Kompilacja własnego obrazu

ponieważ temat http://eko.one.pl/forum/viewtopic.php?id=6518&p=5 został zamkniety musiałem założyc nowy.

Próbuje cały czas skompilować sobie obraz Gargoyle dla siebie , tak jak chcialbym mieć... i mam problem. Otóż najpier skompilowałem obraz default dla ar71xx na domyslnych ustawieniach. Nastepnie dokonałem kilku zmian w plikach w lokalizacji np. /gargoyle/package/gargoyle/www/basic.sh

Zmieniłem też domyślne rzeczy które mają być w obrazie:
ze scieżki /gargoyle/ar71xx-src  dałem polecenie make menuconfig

przy wychodzeniu było pytanie czy zapisac zmiany wiec dałem tak. Wycofałem sie do katalogu wyżej czyli /gargoyle i dałem polecenie

Make ar71xx

Skompilowało jednak jest problem bo zmiany w pliku basic.sh są ale nie ma rzeczy ktore miały być w obrazie. Co zrobiłem żle ?

2

Odp: Kompilacja własnego obrazu

Zmienić to w katalogu wyżej. Tam jest konfiguracja domyślnych obrazów zapisana, w poszczególnych katalogach target, w tym dla którego kompilujesz.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3 (edytowany przez pepe_lodz 2013-08-11 17:11:45)

Odp: Kompilacja własnego obrazu

ale jesli w katalogu /gargoyle daje polecenie make menuconfig to mam taki blad:

piotr@piotr-XXXXXX:~/gargoyle$ make menuconfig
( \
        target=`echo menuconfig  | sed 's/\..*$//'` ; \
        profile=`echo menuconfig | sed 's/^.*\.//'`  ; \
        have_profile=`echo menuconfig | grep "\."`  ; \
        if [ -z "$have_profile" ] ; then profile="" ; fi ; \
        if [ ! -d "targets/${target}" ] ; then echo "ERROR: Specified Target Does Not Exist" ; exit ; fi ; \
        if [ -n "$profile" ] && [ ! -d "targets/${target}/profiles/${profile}" ] ; then echo "ERROR: Specified Target Profile Does Not Exist" ; exit ; fi ; \
        if [ ! -d "${target}-src" ] || [ "false" = "1" -o "false" = "true" -o "false" = "TRUE" ] ; then \
            bash build.sh "$target" "1.5.10.11" "99" "ar71xx" "true" "$profile" ; \
        else \
            bash rebuild.sh "$target" "1.5.10.11" "99" "true" "$profile"; \
        fi ; \
    )
ERROR: Specified Target Does Not Exist


w katalogu gargoyle/target/ar71xx sa profile typu routerstation, usb , large_usb tak ?

4

Odp: Kompilacja własnego obrazu

A ty ciągle swoje. Tu się nie robi make menuconfig, system budowania od gargoyle nie ma czegoś takiego. To polecenie od buildroota z openwrt, nie z gargoyle. Ręcznie zmień konfigi. Poprzednim razem już siedziałeś tydzień czasu nad tym i nie nauczyłeś się tego że na tym poziomie katalogów tego nie ma?

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5 (edytowany przez pepe_lodz 2013-08-11 17:21:28)

Odp: Kompilacja własnego obrazu

Aaa no ok widzisz jakbys od poczatku mi tak napisal a tak nic o tym nie mowiles.... ok w takim razie probuje.

A config graficznie moge zrobic sobie bedac w /gargoyle/ar71xx-src nastepnie zapisac do pliku i plik podmienic w /gargoyle/target/ar71xx i w odpowiedni profil i to wtedy zadziala ?



Jeszcze tylko mam problem ze zmiana strefy czasu...
Bo nie moge znalezc dokladnie tego pliku  gdzie jest to base file/config sysyem...
Mozesz mi napisac dokladna sciezke gdzie ten plik jest jak caly GIT sciagnal sie do katalogu /gargoyle?

6 (edytowany przez pepe_lodz 2013-08-12 00:25:06)

Odp: Kompilacja własnego obrazu

Ok z kompilacją obrazu dla siebie poradziłem sobie...
1.Teraz mam jeszcze problem z tym ustawieniem strefy czasowej co napisałem w poprzednim poście.

2. Jak zmienic plik mktplinkfw.c aby mozna było zbudować obraz z firmware dla kostki zmienionej z 8MB na 16MB w WDR3600? Bo chyba w tym sie zmienia tylko czy gdzieś jeszcze ?

/*
 * Copyright (C) 2009 Gabor Juhos <juhosg@openwrt.org>
 *
 * This tool was based on:
 *   TP-Link WR941 V2 firmware checksum fixing tool.
 *   Copyright (C) 2008,2009 Wang Jian <lark@linux.net.cn>
 *
 * This program is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License version 2 as published
 * by the Free Software Foundation.
 *
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include <string.h>
#include <unistd.h>     /* for unlink() */
#include <libgen.h>
#include <getopt.h>     /* for getopt() */
#include <stdarg.h>
#include <errno.h>
#include <sys/stat.h>

#include <arpa/inet.h>
#include <netinet/in.h>

#include "md5.h"

#define ALIGN(x,a) ({ typeof(a) __a = (a); (((x) + __a - 1) & ~(__a - 1)); })

#define HEADER_VERSION_V1    0x01000000
#define HWID_TL_MR3020_V1    0x30200001
#define HWID_TL_MR3220_V1    0x32200001
#define HWID_TL_MR3420_V1    0x34200001
#define HWID_TL_WA701N_V1    0x07010001
#define HWID_TL_WA7510N_V1    0x75100001
#define HWID_TL_WA901ND_V1    0x09010001
#define HWID_TL_WA901ND_V2    0x09010002
#define HWID_TL_WR703N_V1    0x07030101
#define HWID_TL_WR741ND_V1    0x07410001
#define HWID_TL_WR741ND_V4    0x07410004
#define HWID_TL_WR740N_V1    0x07400001
#define HWID_TL_WR740N_V3    0x07400003
#define HWID_TL_WR743ND_V1    0x07430001
#define HWID_TL_WR841N_V1_5    0x08410002
#define HWID_TL_WR841ND_V3    0x08410003
#define HWID_TL_WR841ND_V5    0x08410005
#define HWID_TL_WR841ND_V7    0x08410007
#define HWID_TL_WR941ND_V2    0x09410002
#define HWID_TL_WR941ND_V4    0x09410004
#define HWID_TL_WR1043ND_V1    0x10430001
#define HWID_TL_WR1041N_V2    0x10410002
#define HWID_TL_WR2543N_V1    0x25430001

#define MD5SUM_LEN    16

struct file_info {
    char        *file_name;    /* name of the file */
    uint32_t    file_size;    /* length of the file */
};

struct fw_header {
    uint32_t    version;    /* header version */
    char        vendor_name[24];
    char        fw_version[36];
    uint32_t    hw_id;        /* hardware id */
    uint32_t    hw_rev;        /* hardware revision */
    uint32_t    unk1;
    uint8_t        md5sum1[MD5SUM_LEN];
    uint32_t    unk2;
    uint8_t        md5sum2[MD5SUM_LEN];
    uint32_t    unk3;
    uint32_t    kernel_la;    /* kernel load address */
    uint32_t    kernel_ep;    /* kernel entry point */
    uint32_t    fw_length;    /* total length of the firmware */
    uint32_t    kernel_ofs;    /* kernel data offset */
    uint32_t    kernel_len;    /* kernel data length */
    uint32_t    rootfs_ofs;    /* rootfs data offset */
    uint32_t    rootfs_len;    /* rootfs data length */
    uint32_t    boot_ofs;    /* bootloader data offset */
    uint32_t    boot_len;    /* bootloader data length */
    uint16_t    ver_hi;
    uint16_t    ver_mid;
    uint16_t    ver_lo;
    uint8_t        pad[354];
} __attribute__ ((packed));

struct flash_layout {
    char        *id;
    uint32_t    fw_max_len;
    uint32_t    kernel_la;
    uint32_t    kernel_ep;
    uint32_t    rootfs_ofs;
};

struct board_info {
    char        *id;
    uint32_t    hw_id;
    uint32_t    hw_rev;
    char        *layout_id;
};

/*
 * Globals
 */
static char *ofname;
static char *progname;
static char *vendor = "TP-LINK Technologies";
static char *version = "ver. 1.0";
static char *fw_ver = "0.0.0";

static char *board_id;
static struct board_info *board;
static char *layout_id;
static struct flash_layout *layout;
static char *opt_hw_id;
static uint32_t hw_id;
static char *opt_hw_rev;
static uint32_t hw_rev;
static int fw_ver_lo;
static int fw_ver_mid;
static int fw_ver_hi;
static struct file_info kernel_info;
static uint32_t kernel_la = 0;
static uint32_t kernel_ep = 0;
static uint32_t kernel_len = 0;
static struct file_info rootfs_info;
static uint32_t rootfs_ofs = 0;
static uint32_t rootfs_align;
static struct file_info boot_info;
static int combined;
static int strip_padding;
static int add_jffs2_eof;
static unsigned char jffs2_eof_mark[4] = {0xde, 0xad, 0xc0, 0xde};

static struct file_info inspect_info;
static int extract = 0;

char md5salt_normal[MD5SUM_LEN] = {
    0xdc, 0xd7, 0x3a, 0xa5, 0xc3, 0x95, 0x98, 0xfb,
    0xdd, 0xf9, 0xe7, 0xf4, 0x0e, 0xae, 0x47, 0x38,
};

char md5salt_boot[MD5SUM_LEN] = {
    0x8c, 0xef, 0x33, 0x5b, 0xd5, 0xc5, 0xce, 0xfa,
    0xa7, 0x9c, 0x28, 0xda, 0xb2, 0xe9, 0x0f, 0x42,
};

static struct flash_layout layouts[] = {
    {
        .id        = "4M",
        .fw_max_len    = 0x3c0000,
        .kernel_la    = 0x80060000,
        .kernel_ep    = 0x80060000,
        .rootfs_ofs    = 0x140000,
    }, {
        .id        = "4Mlzma",
        .fw_max_len    = 0x3c0000,
        .kernel_la    = 0x80060000,
        .kernel_ep    = 0x80060000,
        .rootfs_ofs    = 0x100000,
    }, {
        .id        = "8M",
        .fw_max_len    = 0x7c0000,
        .kernel_la    = 0x80060000,
        .kernel_ep    = 0x80060000,
        .rootfs_ofs    = 0x140000,
    }, {
        .id        = "8Mlzma",
        .fw_max_len    = 0x7c0000,
        .kernel_la    = 0x80060000,
        .kernel_ep    = 0x80060000,
        .rootfs_ofs    = 0x100000,
    }, {
        /* terminating entry */
    }
};

static struct board_info boards[] = {
    {
        .id        = "TL-MR3020v1",
        .hw_id        = HWID_TL_MR3020_V1,
        .hw_rev        = 1,
        .layout_id    = "4Mlzma",
    }, {
        .id        = "TL-MR3220v1",
        .hw_id        = HWID_TL_MR3220_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-MR3420v1",
        .hw_id        = HWID_TL_MR3420_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WA701Nv1",
        .hw_id        = HWID_TL_WA701N_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WA7510N",
        .hw_id        = HWID_TL_WA7510N_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WA901NDv1",
        .hw_id        = HWID_TL_WA901ND_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id             = "TL-WA901NDv2",
        .hw_id          = HWID_TL_WA901ND_V2,
        .hw_rev         = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR741NDv1",
        .hw_id        = HWID_TL_WR741ND_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR741NDv4",
        .hw_id        = HWID_TL_WR741ND_V4,
        .hw_rev        = 1,
        .layout_id    = "4Mlzma",
    }, {
        .id        = "TL-WR740Nv1",
        .hw_id        = HWID_TL_WR740N_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR740Nv3",
        .hw_id        = HWID_TL_WR740N_V3,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR743NDv1",
        .hw_id        = HWID_TL_WR743ND_V1,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR841Nv1.5",
        .hw_id        = HWID_TL_WR841N_V1_5,
        .hw_rev        = 2,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR841NDv3",
        .hw_id        = HWID_TL_WR841ND_V3,
        .hw_rev        = 3,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR841NDv5",
        .hw_id        = HWID_TL_WR841ND_V5,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR841NDv7",
        .hw_id        = HWID_TL_WR841ND_V7,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR941NDv2",
        .hw_id        = HWID_TL_WR941ND_V2,
        .hw_rev        = 2,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR941NDv4",
        .hw_id        = HWID_TL_WR941ND_V4,
        .hw_rev        = 1,
        .layout_id    = "4M",
    }, {
        .id        = "TL-WR1041Nv2",
        .hw_id        = HWID_TL_WR1041N_V2,
        .hw_rev        = 1,
        .layout_id    = "4Mlzma",
    }, {
        .id        = "TL-WR1043NDv1",
        .hw_id        = HWID_TL_WR1043ND_V1,
        .hw_rev        = 1,
        .layout_id    = "8M",
    }, {
        .id        = "TL-WR2543Nv1",
        .hw_id        = HWID_TL_WR2543N_V1,
        .hw_rev        = 1,
        .layout_id    = "8Mlzma",
    }, {
        .id        = "TL-WR703Nv1",
        .hw_id        = HWID_TL_WR703N_V1,
        .hw_rev        = 1,
        .layout_id    = "4Mlzma",
    }, {
        /* terminating entry */
    }
};

/*
 * Message macros
 */
#define ERR(fmt, ...) do { \
    fflush(0); \
    fprintf(stderr, "[%s] *** error: " fmt "\n", \
            progname, ## __VA_ARGS__ ); \
} while (0)

#define ERRS(fmt, ...) do { \
    int save = errno; \
    fflush(0); \
    fprintf(stderr, "[%s] *** error: " fmt "\n", \
            progname, ## __VA_ARGS__, strerror(save)); \
} while (0)

#define DBG(fmt, ...) do { \
    fprintf(stderr, "[%s] " fmt "\n", progname, ## __VA_ARGS__ ); \
} while (0)

static struct board_info *find_board(char *id)
{
    struct board_info *ret;
    struct board_info *board;

    ret = NULL;
    for (board = boards; board->id != NULL; board++){
        if (strcasecmp(id, board->id) == 0) {
            ret = board;
            break;
        }
    };

    return ret;
}

static struct board_info *find_board_by_hwid(uint32_t hw_id)
{
    struct board_info *board;

    for (board = boards; board->id != NULL; board++) {
        if (hw_id == board->hw_id)
            return board;
    };

    return NULL;
}

static struct flash_layout *find_layout(char *id)
{
    struct flash_layout *ret;
    struct flash_layout *l;

    ret = NULL;
    for (l = layouts; l->id != NULL; l++){
        if (strcasecmp(id, l->id) == 0) {
            ret = l;
            break;
        }
    };

    return ret;
}

static void usage(int status)
{
    FILE *stream = (status != EXIT_SUCCESS) ? stderr : stdout;
    struct board_info *board;

    fprintf(stream, "Usage: %s [OPTIONS...]\n", progname);
    fprintf(stream,
"\n"
"Options:\n"
"  -B <board>      create image for the board specified with <board>\n"
"  -c              use combined kernel image\n"
"  -E <ep>         overwrite kernel entry point with <ep> (hexval prefixed with 0x)\n"
"  -L <la>         overwrite kernel load address with <la> (hexval prefixed with 0x)\n"
"  -H <hwid>       use hardware id specified with <hwid>\n"
"  -F <id>         use flash layout specified with <id>\n"
"  -k <file>       read kernel image from the file <file>\n"
"  -r <file>       read rootfs image from the file <file>\n"
"  -a <align>      align the rootfs start on an <align> bytes boundary\n"
"  -R <offset>     overwrite rootfs offset with <offset> (hexval prefixed with 0x)\n"
"  -o <file>       write output to the file <file>\n"
"  -s              strip padding from the end of the image\n"
"  -j              add jffs2 end-of-filesystem markers\n"
"  -N <vendor>     set image vendor to <vendor>\n"
"  -V <version>    set image version to <version>\n"
"  -v <version>    set firmware version to <version>\n"
"  -i <file>       inspect given firmware file <file>\n"
"  -x              extract kernel and rootfs while inspecting (requires -i)\n"
"  -h              show this screen\n"
    );

    exit(status);
}

static int get_md5(char *data, int size, char *md5)
{
    MD5_CTX ctx;

    MD5_Init(&ctx);
    MD5_Update(&ctx, data, size);
    MD5_Final(md5, &ctx);
}

static int get_file_stat(struct file_info *fdata)
{
    struct stat st;
    int res;

    if (fdata->file_name == NULL)
        return 0;

    res = stat(fdata->file_name, &st);
    if (res){
        ERRS("stat failed on %s", fdata->file_name);
        return res;
    }

    fdata->file_size = st.st_size;
    return 0;
}

static int read_to_buf(struct file_info *fdata, char *buf)
{
    FILE *f;
    int ret = EXIT_FAILURE;

    f = fopen(fdata->file_name, "r");
    if (f == NULL) {
        ERRS("could not open \"%s\" for reading", fdata->file_name);
        goto out;
    }

    errno = 0;
    fread(buf, fdata->file_size, 1, f);
    if (errno != 0) {
        ERRS("unable to read from file \"%s\"", fdata->file_name);
        goto out_close;
    }

    ret = EXIT_SUCCESS;

 out_close:
    fclose(f);
 out:
    return ret;
}

static int check_options(void)
{
    int ret;

    if (inspect_info.file_name) {
        ret = get_file_stat(&inspect_info);
        if (ret)
            return ret;

        return 0;
    } else if (extract) {
        ERR("no firmware for inspection specified");
        return -1;
    }

    if (board_id == NULL && opt_hw_id == NULL) {
        ERR("either board or hardware id must be specified");
        return -1;
    }

    if (board_id) {
        board = find_board(board_id);
        if (board == NULL) {
            ERR("unknown/unsupported board id \"%s\"", board_id);
            return -1;
        }
        if (layout_id == NULL)
            layout_id = board->layout_id;

        hw_id = board->hw_id;
        hw_rev = board->hw_rev;
    } else {
        if (layout_id == NULL) {
            ERR("flash layout is not specified");
            return -1;
        }
        hw_id = strtoul(opt_hw_id, NULL, 0);

        if (opt_hw_rev)
            hw_rev = strtoul(opt_hw_rev, NULL, 0);
        else
            hw_rev = 1;
    }

    layout = find_layout(layout_id);
    if (layout == NULL) {
        ERR("unknown flash layout \"%s\"", layout_id);
        return -1;
    }

    if (!kernel_la)
        kernel_la = layout->kernel_la;
    if (!kernel_ep)
        kernel_ep = layout->kernel_ep;
    if (!rootfs_ofs)
        rootfs_ofs = layout->rootfs_ofs;

    if (kernel_info.file_name == NULL) {
        ERR("no kernel image specified");
        return -1;
    }

    ret = get_file_stat(&kernel_info);
    if (ret)
        return ret;

    kernel_len = kernel_info.file_size;

    if (combined) {
        if (kernel_info.file_size >
            layout->fw_max_len - sizeof(struct fw_header)) {
            ERR("kernel image is too big");
            return -1;
        }
    } else {
        if (rootfs_info.file_name == NULL) {
            ERR("no rootfs image specified");
            return -1;
        }

        ret = get_file_stat(&rootfs_info);
        if (ret)
            return ret;

        if (rootfs_align) {
            kernel_len += sizeof(struct fw_header);
            kernel_len = ALIGN(kernel_len, rootfs_align);
            kernel_len -= sizeof(struct fw_header);

            DBG("kernel length aligned to %u", kernel_len);

            if (kernel_len + rootfs_info.file_size >
                layout->fw_max_len - sizeof(struct fw_header)) {
                ERR("images are too big");
                return -1;
            }
        } else {
            if (kernel_info.file_size >
                rootfs_ofs - sizeof(struct fw_header)) {
                ERR("kernel image is too big");
                return -1;
            }

            if (rootfs_info.file_size >
                (layout->fw_max_len - rootfs_ofs)) {
                ERR("rootfs image is too big");
                return -1;
            }
        }
    }

    if (ofname == NULL) {
        ERR("no output file specified");
        return -1;
    }

    ret = sscanf(fw_ver, "%d.%d.%d", &fw_ver_hi, &fw_ver_mid, &fw_ver_lo);
    if (ret != 3) {
        ERR("invalid firmware version '%s'", fw_ver);
        return -1;
    }

    return 0;
}

static void fill_header(char *buf, int len)
{
    struct fw_header *hdr = (struct fw_header *)buf;

    memset(hdr, 0, sizeof(struct fw_header));

    hdr->version = htonl(HEADER_VERSION_V1);
    strncpy(hdr->vendor_name, vendor, sizeof(hdr->vendor_name));
    strncpy(hdr->fw_version, version, sizeof(hdr->fw_version));
    hdr->hw_id = htonl(hw_id);
    hdr->hw_rev = htonl(hw_rev);

    if (boot_info.file_size == 0)
        memcpy(hdr->md5sum1, md5salt_normal, sizeof(hdr->md5sum1));
    else
        memcpy(hdr->md5sum1, md5salt_boot, sizeof(hdr->md5sum1));

    hdr->kernel_la = htonl(kernel_la);
    hdr->kernel_ep = htonl(kernel_ep);
    hdr->fw_length = htonl(layout->fw_max_len);
    hdr->kernel_ofs = htonl(sizeof(struct fw_header));
    hdr->kernel_len = htonl(kernel_len);
    if (!combined) {
        hdr->rootfs_ofs = htonl(rootfs_ofs);
        hdr->rootfs_len = htonl(rootfs_info.file_size);
    }

    hdr->ver_hi = htons(fw_ver_hi);
    hdr->ver_mid = htons(fw_ver_mid);
    hdr->ver_lo = htons(fw_ver_lo);

    get_md5(buf, len, hdr->md5sum1);
}

static int pad_jffs2(char *buf, int currlen)
{
    int len;
    uint32_t pad_mask;

    len = currlen;
    pad_mask = (64 * 1024);
    while ((len < layout->fw_max_len) && (pad_mask != 0)) {
        uint32_t mask;
        int i;

        for (i = 10; i < 32; i++) {
            mask = 1 << i;
            if (pad_mask & mask)
                break;
        }

        len = ALIGN(len, mask);

        for (i = 10; i < 32; i++) {
            mask = 1 << i;
            if ((len & (mask - 1)) == 0)
                pad_mask &= ~mask;
        }

        for (i = 0; i < sizeof(jffs2_eof_mark); i++)
            buf[len + i] = jffs2_eof_mark[i];

        len += sizeof(jffs2_eof_mark);
    }

    return len;
}

static int write_fw(char *data, int len)
{
    FILE *f;
    int ret = EXIT_FAILURE;

    f = fopen(ofname, "w");
    if (f == NULL) {
        ERRS("could not open \"%s\" for writing", ofname);
        goto out;
    }

    errno = 0;
    fwrite(data, len, 1, f);
    if (errno) {
        ERRS("unable to write output file");
        goto out_flush;
    }

    DBG("firmware file \"%s\" completed", ofname);

    ret = EXIT_SUCCESS;

 out_flush:
    fflush(f);
    fclose(f);
    if (ret != EXIT_SUCCESS) {
        unlink(ofname);
    }
 out:
    return ret;
}

static int build_fw(void)
{
    int buflen;
    char *buf;
    char *p;
    int ret = EXIT_FAILURE;
    int writelen = 0;

    buflen = layout->fw_max_len;

    buf = malloc(buflen);
    if (!buf) {
        ERR("no memory for buffer\n");
        goto out;
    }

    memset(buf, 0xff, buflen);
    p = buf + sizeof(struct fw_header);
    ret = read_to_buf(&kernel_info, p);
    if (ret)
        goto out_free_buf;

    writelen = sizeof(struct fw_header) + kernel_len;

    if (!combined) {
        if (rootfs_align)
            p = buf + writelen;
        else
            p = buf + rootfs_ofs;

        ret = read_to_buf(&rootfs_info, p);
        if (ret)
            goto out_free_buf;

        if (rootfs_align)
            writelen += rootfs_info.file_size;
        else
            writelen = rootfs_ofs + rootfs_info.file_size;

        if (add_jffs2_eof)
            writelen = pad_jffs2(buf, writelen);
    }

    if (!strip_padding)
        writelen = buflen;

    fill_header(buf, writelen);
    ret = write_fw(buf, writelen);
    if (ret)
        goto out_free_buf;

    ret = EXIT_SUCCESS;

 out_free_buf:
    free(buf);
 out:
    return ret;
}

/* Helper functions to inspect_fw() representing different output formats */
static inline void inspect_fw_pstr(char *label, char *str)
{
    printf("%-23s: %s\n", label, str);
}

static inline void inspect_fw_phex(char *label, uint32_t val)
{
    printf("%-23s: 0x%08x\n", label, val);
}

static inline void inspect_fw_phexpost(char *label,
                                       uint32_t val, char *post)
{
    printf("%-23s: 0x%08x (%s)\n", label, val, post);
}

static inline void inspect_fw_phexdef(char *label,
                                      uint32_t val, uint32_t defval)
{
    printf("%-23s: 0x%08x                  ", label, val);

    if (val == defval)
        printf("(== OpenWrt default)\n");
    else
        printf("(OpenWrt default: 0x%08x)\n", defval);
}

static inline void inspect_fw_phexexp(char *label,
                                      uint32_t val, uint32_t expval)
{
    printf("%-23s: 0x%08x ", label, val);

    if (val == expval)
        printf("(ok)\n");
    else
        printf("(expected: 0x%08x)\n", expval);
}

static inline void inspect_fw_phexdec(char *label, uint32_t val)
{
    printf("%-23s: 0x%08x / %8u bytes\n", label, val, val);
}

static inline void inspect_fw_phexdecdef(char *label,
                                         uint32_t val, uint32_t defval)
{
    printf("%-23s: 0x%08x / %8u bytes ", label, val, val);

    if (val == defval)
        printf("(== OpenWrt default)\n");
    else
        printf("(OpenWrt default: 0x%08x)\n", defval);
}

static inline void inspect_fw_pmd5sum(char *label, uint8_t *val, char *text)
{
    int i;

    printf("%-23s:", label);
    for (i=0; i<MD5SUM_LEN; i++)
        printf(" %02x", val[i]);
    printf(" %s\n", text);
}

static int inspect_fw(void)
{
    char *buf;
    struct fw_header *hdr;
    uint8_t md5sum[MD5SUM_LEN];
    struct board_info *board;
    int ret = EXIT_FAILURE;

    buf = malloc(inspect_info.file_size);
    if (!buf) {
        ERR("no memory for buffer!\n");
        goto out;
    }

    ret = read_to_buf(&inspect_info, buf);
    if (ret)
        goto out_free_buf;
    hdr = (struct fw_header *)buf;

    inspect_fw_pstr("File name", inspect_info.file_name);
    inspect_fw_phexdec("File size", inspect_info.file_size);

    if (ntohl(hdr->version) != HEADER_VERSION_V1) {
        ERR("file does not seem to have V1 header!\n");
        goto out_free_buf;
    }

    inspect_fw_phexdec("Version 1 Header size", sizeof(struct fw_header));

    if (ntohl(hdr->unk1) != 0)
        inspect_fw_phexdec("Unknown value 1", hdr->unk1);

    memcpy(md5sum, hdr->md5sum1, sizeof(md5sum));
    if (ntohl(hdr->boot_len) == 0)
        memcpy(hdr->md5sum1, md5salt_normal, sizeof(md5sum));
    else
        memcpy(hdr->md5sum1, md5salt_boot, sizeof(md5sum));
    get_md5(buf, inspect_info.file_size, hdr->md5sum1);

    if (memcmp(md5sum, hdr->md5sum1, sizeof(md5sum))) {
        inspect_fw_pmd5sum("Header MD5Sum1", md5sum, "(*ERROR*)");
        inspect_fw_pmd5sum("          --> expected", hdr->md5sum1, "");
    } else {
        inspect_fw_pmd5sum("Header MD5Sum1", md5sum, "(ok)");
    }
    if (ntohl(hdr->unk2) != 0)
        inspect_fw_phexdec("Unknown value 2", hdr->unk2);
    inspect_fw_pmd5sum("Header MD5Sum2", hdr->md5sum2,
                       "(purpose yet unknown, unchecked here)");
    if (ntohl(hdr->unk3) != 0)
        inspect_fw_phexdec("Unknown value 3", hdr->unk3);

    printf("\n");

    inspect_fw_pstr("Vendor name", hdr->vendor_name);
    inspect_fw_pstr("Firmware version", hdr->fw_version);
    board = find_board_by_hwid(ntohl(hdr->hw_id));
    if (board) {
        layout = find_layout(board->layout_id);
        inspect_fw_phexpost("Hardware ID",
                            ntohl(hdr->hw_id), board->id);
        inspect_fw_phexexp("Hardware Revision",
                           ntohl(hdr->hw_rev), board->hw_rev);
    } else {
        inspect_fw_phexpost("Hardware ID",
                            ntohl(hdr->hw_id), "unknown");
        inspect_fw_phex("Hardware Revision",
                        ntohl(hdr->hw_rev));
    }

    printf("\n");

    inspect_fw_phexdec("Kernel data offset",
                       ntohl(hdr->kernel_ofs));
    inspect_fw_phexdec("Kernel data length",
                       ntohl(hdr->kernel_len));
    if (board) {
        inspect_fw_phexdef("Kernel load address",
                           ntohl(hdr->kernel_la),
                           layout ? layout->kernel_la : 0xffffffff);
        inspect_fw_phexdef("Kernel entry point",
                           ntohl(hdr->kernel_ep),
                           layout ? layout->kernel_ep : 0xffffffff);
        inspect_fw_phexdecdef("Rootfs data offset",
                              ntohl(hdr->rootfs_ofs),
                              layout ? layout->rootfs_ofs : 0xffffffff);
    } else {
        inspect_fw_phex("Kernel load address",
                        ntohl(hdr->kernel_la));
        inspect_fw_phex("Kernel entry point",
                        ntohl(hdr->kernel_ep));
        inspect_fw_phexdec("Rootfs data offset",
                           ntohl(hdr->rootfs_ofs));
    }
    inspect_fw_phexdec("Rootfs data length",
                       ntohl(hdr->rootfs_len));
    inspect_fw_phexdec("Boot loader data offset",
                       ntohl(hdr->boot_ofs));
    inspect_fw_phexdec("Boot loader data length",
                       ntohl(hdr->boot_len));
    inspect_fw_phexdec("Total firmware length",
                       ntohl(hdr->fw_length));

    if (extract) {
        FILE *fp;
        char *filename;

        printf("\n");

        filename = malloc(strlen(inspect_info.file_name) + 8);
        sprintf(filename, "%s-kernel", inspect_info.file_name);
        printf("Extracting kernel to \"%s\"...\n", filename);
        fp = fopen(filename, "w");
        if (fp)    {
            if (!fwrite(buf + ntohl(hdr->kernel_ofs),
                        ntohl(hdr->kernel_len), 1, fp)) {
                ERR("error in fwrite(): %s", strerror(errno));
            }
            fclose(fp);
        } else {
            ERR("error in fopen(): %s", strerror(errno));
        }
        free(filename);

        filename = malloc(strlen(inspect_info.file_name) + 8);
        sprintf(filename, "%s-rootfs", inspect_info.file_name);
        printf("Extracting rootfs to \"%s\"...\n", filename);
        fp = fopen(filename, "w");
        if (fp)    {
            if (!fwrite(buf + ntohl(hdr->rootfs_ofs),
                        ntohl(hdr->rootfs_len), 1, fp)) {
                ERR("error in fwrite(): %s", strerror(errno));
            }
            fclose(fp);
        } else {
            ERR("error in fopen(): %s", strerror(errno));
        }
        free(filename);
    }

 out_free_buf:
    free(buf);
 out:
    return ret;
}

int main(int argc, char *argv[])
{
    int ret = EXIT_FAILURE;
    int err;

    FILE *outfile;

    progname = basename(argv[0]);

    while ( 1 ) {
        int c;

        c = getopt(argc, argv, "a:B:H:E:F:L:V:N:W:ci:k:r:R:o:xhsjv:");
        if (c == -1)
            break;

        switch (c) {
        case 'a':
            sscanf(optarg, "0x%x", &rootfs_align);
            break;
        case 'B':
            board_id = optarg;
            break;
        case 'H':
            opt_hw_id = optarg;
            break;
        case 'E':
            sscanf(optarg, "0x%x", &kernel_ep);
            break;
        case 'F':
            layout_id = optarg;
            break;
        case 'W':
            opt_hw_rev = optarg;
            break;
        case 'L':
            sscanf(optarg, "0x%x", &kernel_la);
            break;
        case 'V':
            version = optarg;
            break;
        case 'v':
            fw_ver = optarg;
            break;
        case 'N':
            vendor = optarg;
            break;
        case 'c':
            combined++;
            break;
        case 'k':
            kernel_info.file_name = optarg;
            break;
        case 'r':
            rootfs_info.file_name = optarg;
            break;
        case 'R':
            sscanf(optarg, "0x%x", &rootfs_ofs);
            break;
        case 'o':
            ofname = optarg;
            break;
        case 's':
            strip_padding = 1;
            break;
        case 'i':
            inspect_info.file_name = optarg;
            break;
        case 'j':
            add_jffs2_eof = 1;
            break;
        case 'x':
            extract = 1;
            break;
        case 'h':
            usage(EXIT_SUCCESS);
            break;
        default:
            usage(EXIT_FAILURE);
            break;
        }
    }

    ret = check_options();
    if (ret)
        goto out;

    if (!inspect_info.file_name)
        ret = build_fw();
    else
        ret = inspect_fw();

 out:
    return ret;
}

3. Czy da sie skompilować obrazy tylko np dla profilu usb platformy ar71xx ? Do tej pory robiłem kompilacje calej platformy ( make ar71xx) ale nie potrzebne mi wiec chcialbym zrobic tylko ar71xx profil USB. Jakim poleceniem to wykonać.

4. Dlaczego po skompilowaniu obrazów i wgraniu do WDR3600 w statusie i pod pozycja model mam:  Model:TP-LINK TL-WDR3600/4300/4310  ? W jaki sposób to zmienić aby rozdzielić...

7

Odp: Kompilacja własnego obrazu

1. package/base-files/files/etc/config/system
2. tak podając po kolei wszystkie parametry - 6 argumentów wymagane jest, zobacz plik build.sh w okolicach linii 178. Musisz podać wszystkie, a zmienne mówią czym one są
3. zdefiniować 16Mlzma w pliku który podałeś (mktplinkfw.c)  i zmienić to w target/linux/ar71xx/image/Makefile w źródłach openwrt dla danego urządzenia
4. Przenieść lib/ar71xx.sh z trunka, pisałem Ci to.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

8

Odp: Kompilacja własnego obrazu

Cezary napisał/a:

1. package/base-files/files/etc/config/system
2. tak podając po kolei wszystkie parametry - 6 argumentów wymagane jest, zobacz plik build.sh w okolicach linii 178. Musisz podać wszystkie, a zmienne mówią czym one są
3. zdefiniować 16Mlzma w pliku który podałeś (mktplinkfw.c)  i zmienić to w target/linux/ar71xx/image/Makefile w źródłach openwrt dla danego urządzenia
4. Przenieść lib/ar71xx.sh z trunka, pisałem Ci to.

AD 1
własnie problem w tym że wchodzac w /home/piotr/gargoyle/package
nie mam katalogu base-files

AD 3
A jakie są parametry adresów dla kości 16MB?  I jak zmienie to w /downloaded/attitude_adjustment_r37743/target/linux/ar71xx/image/Makefile to chyba przy kompilacji to sie ndpisze bo znow wersja Attitude_adjustment zostanie pobrana do katalogu. Czy ona jest pobierana raz a jesli juz istnieje to nie jest nadpisywana ?

AD 4
A gdzie znaleźć tego trunka ?
Czyli przeniesc mam z trunka jeden plik tak ? ar71xx.sh ?

9 (edytowany przez Cezary 2013-08-12 10:14:28)

Odp: Kompilacja własnego obrazu

1. W źródłach openwrt...
3. Wylicz sobie. Offsety są w hexach, ew weź z działającego systemu który ma 16MB flash (wypisuje to przy starcie). Więc musisz to tak sobie zorganizować żeby pamiętać co później masz poprawić. Jakiekolwiek zmiany wykonane tam zostaną nadpisane jak pojawi się nowa wersja. Gargoyle używa patalogu patches-generic do nakładania własnych zmian na źródła openwrt, możesz zrobić własną łatkę.
4. https://dev.openwrt.org/browser#trunk, Dawałem Ci już nie raz linki. Czemu za każdym razem się pytasz to samo? Zaraz będzie że nie umiesz tego pobrać.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

10

Odp: Kompilacja własnego obrazu

ad 1
czyli w katalogu /gargoyle/attitude_adjustment R37743 ?

A czy jesli to zmienie tutaj to czasem przy kompilacji to nie jest ponownie nadpisane oryginalnymi plikami znow sciagnietymi przy kompilacji ? Nie nowa wersją.... tylko aktualna ta co mam wpisana w build.sh

ad 3
A jak odpalic to w konsoli aby przy starcie zobaczyć te offsety? To sie w konsoli patrzy ? Jakim poleceniem...


A jak wrzuce własną łatkę do patches-generic to czy ona automatycznie zostanie zastosowana czy gdzis trzeba ja dopisac gdzies aby została zastosowana ?

5.
Czy da sie skompilowac tylko profil USB dla platformy ar71xx ? Chce aby trwało to krócej a nie moge sobie poradzić jakiego polecenia użyc bo tak uzywam  make ar71xx

11

Odp: Kompilacja własnego obrazu

1. Może być i tu lub zrób sobie łatkę i do generic-patches ją dodaj.
3. dmesg lub logread.
5. Przeczytałeś punkt 2? make ar71xx to jeden argument, a 6 potrzebujesz bo ostatni jest właśnie ten określony profil.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

12

Odp: Kompilacja własnego obrazu

A Twoje łatki patchujące też można wrzucić do generic-patches ?

13

Odp: Kompilacja własnego obrazu

Nie zadziałają, one są przystosowanie do łatania w katalogu packages, nie poziom wyżej.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

14 (edytowany przez pepe_lodz 2013-08-12 13:28:39)

Odp: Kompilacja własnego obrazu

Aha ok. Czyli wszystkie inne zwiazane ze zmiana plików systemowych typu ustawienie strefy czasowej, wrzucam do generic-patches a zwizane ze spolszczeniem itd to recznie uruchamiam.

A jeszcze jak mam ten skrypt z katalogu /sbin/e3276 to w jaki sposob wrzucić go tez do obrazu ? Tez trzeba w base-files chyba wrzucić ale tak jak pisalem przy kompilacji nadpisuje mi sie chyba katalog /gargoyle/donwloaded/attitude_adjustment_r37743 i wtedy skrypt nie dodaje sie do obrazu. A jakoś patchem też da sie wrzucić plik skryptu ? Aby tez był w generic-patches...

15

Odp: Kompilacja własnego obrazu

Kurcze patrzyłem w ten plik build.sh w lini 178 i profil platformy jest pod chyba parametrem $6 jednak za cholere nie wiem jak wpisać polecenie aby skompilować tylko obrazy z profilu USB ? Nie potrafie tego z tego pliku odczytać...

16

Odp: Kompilacja własnego obrazu

Łatki się robi poleceniem diff. I zanim się zapytasz jak - przeczytaj manual od tego polecenia. Nikt tego za Ciebie nie zrobi.

Masz wydać polecenie wpisując 6 parametrów - nazwy celów, to czy ma być kompresja js czy nie itd.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

17

Odp: Kompilacja własnego obrazu

A jak wpisuje make ar71xx to nie podaje 6 parametrow...
Tylko w jakiej postaci pisac to z tymi parametrami ?

18

Odp: Kompilacja własnego obrazu

A masz wpisać 6 a nie jeden. Człowieku, ile razy można pisać w kółko to samo?

./build.sh ar71xx.usb_large 1.5.x 1 x true usb_large

Naprawdę, za trudne to jest dla Ciebie - wróć do oryginalnego oprogramowania i ciesz się działającym routerem.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

19

Odp: Kompilacja własnego obrazu

A czy aby dodać do kompilacji Paczkę Kernela kmod-usb-net-ncm to musze dodać w pliku:

/home/piotr/gargoyle/downloaded/attitude_adjustment-37743/package/kernel/modules

zapisy w postaci:
define KernelPackage/usb-net-cdc-ncm
  TITLE:=Support for CDC NCM connections
  KCONFIG:=CONFIG_USB_NET_CDC_NCM
  FILES:= $(LINUX_DIR)/drivers/$(USBNET_DIR)/cdc_ncm.ko
  AUTOLOAD:=$(call AutoLoad,61,cdc_ncm)
  $(call AddDepends/usb-net)
endef

define KernelPackage/usb-net-cdc-ncm/description
Kernel support for CDC NCM connections
endef

$(eval $(call KernelPackage,usb-net-cdc-ncm))

i następnie w pliku config_usb od platformy ar71xx dodać wpisy:

CONFIG_PACKAGE_kmod-usb-net-cdc-ncm=y

i wtedy bedzie wkompilowana do obrazu ?


Czy w takim razie za kazdym razem jak sciagnie sie nowa wersja ATTITUDE ADJUSTMENT r3xxxx to musze w niej zdefiniować te dodatkowe paczki kernela ?

20

Odp: Kompilacja własnego obrazu

Pytałeś się o inne rzeczy czy przetrwają, dostałeś odpowiedź że nie i co z tym zrobić. A w tym przypadku dlaczego uważasz że miało by być inaczej? Nie odpowiadaj, przeczytaj poprzednie posty po prostu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

21 (edytowany przez pepe_lodz 2013-08-13 07:02:37)

Odp: Kompilacja własnego obrazu

Ok fakt...to przez to caly czas probuje to wszystko pojac i ju czasem mi sie miesza.

Ale czy dobrze dopisuje aby dodac dodatkowe pacKi kernela ktorych nie bylo a chce aby byly ?

bo dodałem w pliku usb.mk dodatkowe zapisy dla:

define KernelPackage/usb-net-cdc-ncm
  TITLE:=Support for CDC NCM connections
  KCONFIG:=CONFIG_USB_NET_CDC_NCM
  FILES:= $(LINUX_DIR)/drivers/$(USBNET_DIR)/cdc_ncm.ko
  AUTOLOAD:=$(call AutoLoad,61,cdc_ncm)
  $(call AddDepends/usb-net)
endef

define KernelPackage/usb-net-cdc-ncm/description
Kernel support for CDC NCM connections
endef

$(eval $(call KernelPackage,usb-net-cdc-ncm))

define KernelPackage/usb-wdm
  TITLE:=USB Wireless Device Management
  KCONFIG:=CONFIG_USB_WDM
  FILES:=$(LINUX_DIR)/drivers/usb/class/cdc-wdm.ko
  AUTOLOAD:=$(call AutoLoad,60,cdc-wdm)
$(call AddDepends/usb)
$(call AddDepends/usb-net)
endef

define KernelPackage/usb-wdm/description
USB Wireless Device Management support
endef   
$(eval $(call KernelPackage,usb-wdm))

define KernelPackage/usb-net-qmi-wwan
  TITLE:=QMI WWAN driver
  KCONFIG:=CONFIG_USB_NET_QMI_WWAN
  FILES:= $(LINUX_DIR)/drivers/$(USBNET_DIR)/qmi_wwan.ko
  AUTOLOAD:=$(call AutoLoad,61,qmi_wwan)
  $(call AddDepends/usb-net,+kmod-usb-wdm)
endef

define KernelPackage/usb-net-qmi-wwan/description
QMI WWAN driver for Qualcomm MSM based 3G and LTE modems
endef

$(eval $(call KernelPackage,usb-net-qmi-wwan))


Czyli dla kmod-usb-net-cdc-ncm, kmod-usb-wdm, kmod-usb-net-qmi-wwan

Zbudowałem z tym obraz i w obrazie jak wrzuciłem go do routera i dałem polecenie:

opkg list_installed

to jest np:
kmod-usb-net-cdc-ncm    ale juz nie ma kmod-usb-wdm, kmod-usb-net-qmi-wwan

I nie wiem dlaczego. Tak mysle i chyba w pliku od profilu USB w config dałem wpisy dla
kmod-usb-net-cdc-ncm, dałem od kmod-usb-net-qmi-wwan ale chyba nie dałem wpisu od zależności kmod-usb-wdm aby był też w obrazie. Czy to wtedy tak własnie zadziała ze skompiluje mi obraz z CDC-NCM ale juz NET-QMI-WWAN bo zaleznośc od tego nie została wprowadzona do configa ?

22

Odp: Kompilacja własnego obrazu

Cezary napisał/a:

./build.sh ar71xx.usb_large 1.5.x 1 x true usb_large

Jak dałem takie polecenie to odpaliło mi sie menu konfiguracji to graficzne jak make menuconfig

23

Odp: Kompilacja własnego obrazu

Próbowałem własnie spatchować gargoyle na PL za pomocą łatek Cezarego i niestety łatki mają błedy i nie działają wszystkie. Np łatka Gargoyle nie działa w 100%. Oto jakie błedy są:

GARGOYLE

piotr@piotr-XXXXXX:~/gargoyle.orig/package/gargoyle$ patch -p1 -i /home/piotr/Pulpit/mod_gargoyle/patche/gargoyle-pl.patch
patching file files/etc/config/gargoyle
patching file files/etc/init.d/gargoyle_themes
patching file files/usr/lib/gargoyle/switchinfo.sh
patching file files/www/about.sh
patching file files/www/access.sh
patching file files/www/backup.sh
patching file files/www/bandwidth_distribution.sh
patching file files/www/bandwidth.sh
patching file files/www/basic_edit_mac.sh
patching file files/www/basic.sh
Hunk #10 FAILED at 459.
Hunk #11 succeeded at 467 (offset -2 lines).
Hunk #12 succeeded at 505 (offset -2 lines).
Hunk #13 succeeded at 569 (offset -2 lines).
Hunk #14 succeeded at 593 (offset -2 lines).
Hunk #15 succeeded at 624 (offset -2 lines).
Hunk #16 succeeded at 637 (offset -2 lines).
Hunk #17 succeeded at 670 (offset -2 lines).
Hunk #18 succeeded at 707 (offset -2 lines).
Hunk #19 succeeded at 735 (offset -2 lines).
Hunk #20 succeeded at 760 (offset -2 lines).
1 out of 20 hunks FAILED -- saving rejects to file files/www/basic.sh.rej
patching file files/www/connlimits.sh
patching file files/www/conntrack.sh
patching file files/www/ddns_edit_service.sh
patching file files/www/ddns.sh
patching file files/www/dhcp.sh
patching file files/www/firstboot.sh
patching file files/www/hosts.sh
patching file files/www/identification.sh
patching file files/www/js/access.js
patching file files/www/js/backup.js
patching file files/www/js/bandwidth.js
patching file files/www/js/basic.js
patching file files/www/js/bdist.js
patching file files/www/js/common.js
patching file files/www/js/connlimits.js
patching file files/www/js/conntrack.js
patching file files/www/js/ddns.js
patching file files/www/js/dhcp.js
patching file files/www/js/firstboot.js
patching file files/www/js/hosts.js
patching file files/www/js/identification.js
patching file files/www/js/login.js
patching file files/www/js/overview.js
patching file files/www/js/plugins.js
patching file files/www/js/port_forwarding.js
patching file files/www/js/qos.js
patching file files/www/js/quotas.js
patching file files/www/js/quota_usage.js
patching file files/www/js/reboot.js
patching file files/www/js/restrictions.js
patching file files/www/js/routing.js
patching file files/www/js/svg_bandwidth.js
patching file files/www/js/table.js
patching file files/www/js/themes.js
patching file files/www/js/time.js
patching file files/www/js/update.js
patching file files/www/js/webmon.js
patching file files/www/js/wol.js
patching file files/www/login.sh
patching file files/www/multi_forward_edit.sh
patching file files/www/no_ajax.sh
patching file files/www/overview.sh
patching file files/www/password_confirm.sh
patching file files/www/plugins.sh
patching file files/www/port_forwarding.sh
patching file files/www/qos_distribution.sh
patching file files/www/qos_download.sh
patching file files/www/qos_edit_class.sh
patching file files/www/qos_edit_rule.sh
patching file files/www/qos_upload.sh
patching file files/www/quotas_edit.sh
Hunk #1 succeeded at 23 with fuzz 2.
patching file files/www/quotas.sh
patching file files/www/quota_usage.sh
patching file files/www/reboot.sh
patching file files/www/restriction_edit_rule.sh
Hunk #1 succeeded at 9 with fuzz 2.
patching file files/www/restriction.sh
patching file files/www/routing.sh
patching file files/www/single_forward_edit.sh
patching file files/www/static_ip_edit.sh
patching file files/www/static_route_edit.sh
patching file files/www/templates/multi_forward_template
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file files/www/templates/multi_forward_template.rej
patching file files/www/templates/quotas_template
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 16.
Hunk #3 FAILED at 63.
Hunk #4 FAILED at 83.
Hunk #5 FAILED at 106.
5 out of 5 hunks FAILED -- saving rejects to file files/www/templates/quotas_template.rej
patching file files/www/templates/restriction_template
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 97.
Hunk #3 FAILED at 112.
Hunk #4 FAILED at 136.
4 out of 4 hunks FAILED -- saving rejects to file files/www/templates/restriction_template.rej
patching file files/www/templates/single_forward_template
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file files/www/templates/single_forward_template.rej
patching file files/www/templates/static_ip_template
Hunk #1 FAILED at 1.
1 out of 1 hunk FAILED -- saving rejects to file files/www/templates/static_ip_template.rej
patching file files/www/templates/static_route_template
patching file files/www/templates/whitelist_template
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 97.
Hunk #3 FAILED at 111.
Hunk #4 FAILED at 135.
4 out of 4 hunks FAILED -- saving rejects to file files/www/templates/whitelist_template.rej
patching file files/www/themes.sh
patching file files/www/time.sh
patching file files/www/update.sh
patching file files/www/utility/reboot_test.sh
patching file files/www/utility/uwk.sh
patching file files/www/webmon.sh
patching file files/www/whitelist_edit_rule.sh
Hunk #1 succeeded at 9 with fuzz 2.
patching file files/www/wol.sh
patching file src/gargoyle_header_footer.c
Hunk #2 FAILED at 291.
Hunk #3 FAILED at 308.
Hunk #4 FAILED at 321.
3 out of 4 hunks FAILED -- saving rejects to file src/gargoyle_header_footer.c.rej

-----------------------------------------------------------------------
Następna to od MINIDLNA:
piotr@piotr-XXXXXX:~/gargoyle.orig/package/plugin-gargoyle-minidlna$ patch -p1 -i /home/piotr/Pulpit/mod_gargoyle/patche/plugin-gargoyle-minidlna-pl.patch
patching file files/www/js/minidlna.js
patching file files/www/minidlna.sh
Hunk #1 FAILED at 14.
1 out of 2 hunks FAILED -- saving rejects to file files/www/minidlna.sh.rej
patching file Makefile

-------------------------------------------------------------------------
Kolejna PING WATCDOG:
piotr@piotr-XXXXXX:~/gargoyle.orig/package/plugin-gargoyle-ping-watchdog$ patch -p1 -i /home/piotr/Pulpit/mod_gargoyle/patche/plugin-gargoyle-ping-watchdog-pl.patch
patching file files/etc/uci-defaults/plugin-gargoyle-ping-watchdog
patching file files/www/js/ping_watchdog.js
patching file files/www/ping_watchdog.sh
Hunk #1 FAILED at 11.
1 out of 1 hunk FAILED -- saving rejects to file files/www/ping_watchdog.sh.rej
patching file Makefile

-------------------------------------------------------------------------
USB STORAGE

piotr@piotr-XXXXXX:~/gargoyle.orig/package/plugin-gargoyle-usb-storage$ patch -p1 -i /home/piotr/Pulpit/mod_gargoyle/patche/plugin-gargoyle-usb-storage-pl.patch
patching file files/etc/init.d/usb_storage
patching file files/www/js/usb_storage.js
patching file files/www/share_user_edit.sh
patching file files/www/templates/usb_storage_template
patching file files/www/usb_storage_edit.sh
Hunk #1 succeeded at 9 with fuzz 2.
patching file files/www/usb_storage.sh
patching file Makefile

------------------------------------------------------------
WEBCAM

piotr@piotr-XXXXXX:~/gargoyle.orig/package/plugin-gargoyle-webcam$ patch -p1 -i /home/piotr/Pulpit/mod_gargoyle/patche/plugin-gargoyle-webcam-pl.patch
patching file files/www/js/webcam.js
patching file files/www/webcam.sh
Hunk #1 FAILED at 27.
Hunk #2 FAILED at 71.
2 out of 2 hunks FAILED -- saving rejects to file files/www/webcam.sh.rej
patching file Makefile




Nie wiem czemu. Inne zadziałały OK.

24

Odp: Kompilacja własnego obrazu

svn info (lub git log -1 zależy czy używasz repo z svn czy git)

zrób na źródłach (w katalogu gdzie jest build.sh) i pokaż wynik.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

25 (edytowany przez pepe_lodz 2013-08-14 06:41:27)

Odp: Kompilacja własnego obrazu

Używam git
Wczoraj klonowałem gita z http na czysto.Wcześniejsze dane skasowałem. Dopiero później wrzucę rezultat polecenia.