• 编译mtd-utils(使用uclibc编译)


    目录

    1、Build Zlib: zlib-1.2.11.tar.gz

    (1)tar -xvf ~/download/zlib-1.2.11.tar.gz

    (2)cd zlib-1.2.11/

    (3)./configure --prefix=`pwd`/../__install/

    (4)Change Makefile:修改Makefile -:删除 +:增加

    (5)make

    (6)make install

    二、Build LZO: lzo-2.10.tar.gz

    (1)tar -xvf ~/download/lzo-2.10.tar.gz

    (2)cd lzo-2.10/  

    (3)./configure --host=mips-linux-gnu --prefix=`pwd`/../__install/    

    (4)vi Makefile(添加  -muclibc):

    (5)make     

    (6)make install

    三、Build e2fsprogs: e2fsprogs-1.45.2.tar.gz

    (1)tar -xvf e2fsprogs-1.45.2.tar.gz    

    (2)cd e2fsprogs-1.45.2/    

    (3)./configure --host=mips-linux-gnu --prefix=`pwd`/../__install    

    (4)vi Makefile:

     (5)vi lib/uuid/gen_uuid.c

    (6)make    

    (7)make install-libs

    四、Build mtd-utils: mtd-utils-2.1.0.tar.bz2    

    (1)tar -xvf mtd-utils-2.1.0.tar.bz2    

    (2)cd mtd-utils-2.1.0/    

    (3)export PKG_CONFIG_PATH=`pwd`/../__install/lib/pkgconfig/

    (4)export PREFIX=`pwd`/../__install

    (5)执行

    (6)vi Makefile:

    (7)vi ubifs-utils/mkfs.ubifs/mkfs.ubifs.h

    (8)vi include/config.h

    (9)vi tests/fs-tests/integrity/integck.c

     (10) vi tests/mtd-tests/flash_speed.c

    (11)make    

    (12)make install

    编译结束!!


    所需文件:

    从720工具链中mips-gcc720-glibc229-r5.1.4/mips-linux-gnu/libc/uclibc/lib复制两个库文件(ld-uClibc-mipsn8.so.0、libc.so.0)到库文件系统的/lib下(mtd-utils-2.1.0/lib/)

    mtd-utils的交叉编译,压缩包中是已经使用720工具链交叉编译好的,可直接使用,也可自己编译,方法参考如下:


    1、Build Zlib: zlib-1.2.11.tar.gz

    (1)tar -xvf zlib-1.2.11.tar.gz

    (2)cd zlib-1.2.11/

    (3)

    ./configure --prefix=`pwd`/../__install/

    (4)Change Makefile:修改Makefile -:删除 +:增加

    1.         --- a/Makefile
    2.         +++ b/Makefile
    3.         @@ -16,7 +16,7 @@
    4.          # To install in $HOME instead of /usr/local, use:
    5.          #    make install prefix=$HOME
    6.         -CC=gcc
    7.         +CC=mips-linux-gnu-gcc
    8.  
    9.          -CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
    10.         +CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN -muclibc
    11.         #CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7
    12.         CFLAGS=-O3 -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
    13.          SFLAGS=-O3 -fPIC -D_LARGEFILE64_SOURCE=1 -DHAVE_HIDDEN
    14.          -LDFLAGS=
    15.         +LDFLAGS=-muclibc
    16.          TEST_LDFLAGS=-L. libz.a
    17.         -LDSHARED=gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
    18.         -CPP=gcc -E
    19.         +LDSHARED=mips-linux-gnu-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
    20.         +CPP=mips-linux-gnu-gcc -E
    21.          STATICLIB=libz.a
    22.          SHAREDLIB=libz.so
    23.          SHAREDLIBV=libz.so.1.2.11
    24.          SHAREDLIBM=libz.so.1
    25.          LIBS=$(STATICLIB) $(SHAREDLIBV)
    26.         -AR=ar
    27.         +AR=mips-linux-gnu-ar
    28.         ARFLAGS=rc
    29.         -RANLIB=ranlib
    30.         +RANLIB=mips-linux-gnu-ranlib
    31.          LDCONFIG=ldconfig
    32.          LDSHAREDLIBC=-lc
    33.         TAR=tar

    (5)make

    (6)make install

    二、Build LZO: lzo-2.10.tar.gz

    (1)tar -xvf lzo-2.10.tar.gz

    (2)cd lzo-2.10/  

    (3)

    ./configure --host=mips-linux-gnu --prefix=`pwd`/../__install/  

    (4)vi Makefile(添加  -muclibc):

    1.          371+CFLAGS = -g -O2 -muclibc
    2.          373+CPPFLAGS = -muclibc
    3.          393+LDFLAGS = -muclibc

    (5)make     

    (6)make install

    三、Build e2fsprogs: e2fsprogs-1.45.2.tar.gz

    (1)tar -xvf e2fsprogs-1.45.2.tar.gz    

    (2)cd e2fsprogs-1.45.2/    

    (3)

    ./configure --host=mips-linux-gnu --prefix=`pwd`/../__install

    (4)vi Makefile:

    1.          96+CFLAGS = -g -O2 -muclibc
    2.          99+CPPFLAGS = -I. -I$(top_builddir)/lib -I$(top_srcdir)/lib -muclibc
    3.         103+LDFLAGS = $(SANITIZER_LDFLAGS) -muclibc 

     (5)vi lib/uuid/gen_uuid.c

    1.         356     if (state_fd >= 0) {
    2.         357         unsigned int cl;
    3.         358         unsigned long tv1, tv2;
    4.         359         int a;
    5.         360
    6.         361 /*      if (fscanf(state_f, "clock: %04x tv: %lu %lu adj: %d\n",
    7.         362                &cl, &tv1, &tv2, &a) == 4) {
    8.         363             clock_seq = cl & 0x3FFF;
    9.         364             last.tv_sec = tv1;
    10.         365             last.tv_usec = tv2;
    11.         366             adjustment = a;
    12.         367         }*/  /**注释if**/
    13.         368     }    

    (6)make    

    (7)make install-libs

    四、Build mtd-utils: mtd-utils-2.1.0.tar.bz2    

    (1)tar -xvf mtd-utils-2.1.0.tar.bz2    

    (2)cd mtd-utils-2.1.0/    

    (3)

    export PKG_CONFIG_PATH=`pwd`/../__install/lib/pkgconfig/

    (4)

    export PREFIX=`pwd`/../__install

    (5)执行

    ./configure --host=mips-linux-gnu CC=mips-linux-gnu-gcc --prefix=${PREFIX} WITHOUT_XATTR=1 LDFLAGS=-L${PREFIX}/lib CFLAGS='-I${PREFIX}/include -I${PREFIX}/include/lzo -I${PREFIX}/include/uuid/ -g -O2' UUID_CFLAGS='-I${PREFIX}/include/uuid/' LZO_CFLAGS='-I${PREFIX}/include/' ZLIB_CFLAGS='-I${PREFIX}/include' --without-crypto

    (6)vi Makefile:

    1. 1205+CFLAGS = -I${PREFIX}/include -I${PREFIX}/include/lzo -I${PREFIX}/include/uuid/ -g -O2 -muclibc
    2. 1209+CPPFLAGS = -muclibc
    3. 1229+LDFLAGS = -L/home/user/yqhuang/QS/1.1.4/mtd-utils-2.1.0/../__install//lib -muclibc

    (7)vi ubifs-utils/mkfs.ubifs/mkfs.ubifs.h

    1.         #include
    2.         #include
    3.         #include
    4.         +#ifdef WITH_CRYPTO
    5.         #include
    6.         +#endif
    7.         #include

    (8)vi include/config.h

    1. 4 /* Define to 1 if you have the `clock_gettime' function. */
    2. 5 #define HAVE_CLOCK_GETTIME 1
    3. 6
    4. 7 /* Define to 1 if you have the header file. */
    5. 8 #define HAVE_DLFCN_H 1
    6. 9
    7. 10 /* Define to 1 if you have the header file. */
    8. 11 //#define HAVE_EXECINFO_H 1                            /***改动(注释掉)****/
    9. 12
    10. 13 /* Define to 1 if you have the header file. */
    11. 14 #define HAVE_INTTYPES_H 1
    12. 15
    13. 16 /* Define to 1 if you have the header file. */
    14. 17 #define HAVE_MEMORY_H 1

    (9)vi tests/fs-tests/integrity/integck.c

    1.         2877         else if (!strcmp(opt, "ro"))
    2.         2878             fsinfo.mount_flags |= MS_RDONLY;
    3.         2879     //  else if (!strcmp(opt, "dirsync"))         /***注释掉***/
    4.         2880     //      fsinfo.mount_flags |= MS_DIRSYNC;       /***注释掉***/
    5.         2881         else if (!strcmp(opt, "noatime"))
    6.         2882             fsinfo.mount_flags |= MS_NOATIME;
    7.         2883         else if (!strcmp(opt, "nodiratime"))
    8.         2884             fsinfo.mount_flags |= MS_NODIRATIME;
    9.         2885         else if (!strcmp(opt, "noexec"))
    10.         2886             fsinfo.mount_flags |= MS_NOEXEC;
    11.         2887         else if (!strcmp(opt, "nosuid"))
    12.         2888             fsinfo.mount_flags |= MS_NOSUID;
    13.         2889     //  else if (!strcmp(opt, "relatime"))         /***注释掉***/
    14.         2890     //      fsinfo.mount_flags |= MS_RELATIME;     /***注释掉***/
    15.         2891         else if (!strcmp(opt, "sync"))
    16.         2892             fsinfo.mount_flags |= MS_SYNCHRONOUS;

     (10) vi tests/mtd-tests/flash_speed.c

    1.         261 static void start_timing(void)
    2.         262 {
    3.         263     clock_gettime(CLOCK_MONOTONIC, &start);      /***改动***/
    4.         264 }
    5.         265
    6.         266 static void stop_timing(void)
    7.         267 {
    8.         268     clock_gettime(CLOCK_MONOTONIC, &finish);    /***改动***/
    9.         269 }

    (11)make    

    (12)make install


    编译结束!!

    查看分区:cat /proc/mtd

    查看挂接主次设备号:cat /proc/partitions
    擦除要烧写的分区:
    flash_eraseall /dev/mtd5

    nandwrite烧写(先擦除烧写的分区):
    ./nandwrite -a /dev/mtd5 data.img

    flashcp烧写到分区:
    ./flashcp -v data.img /dev/mtd5

    (PS:nandwrite、flash_eraseall等执行文件位于__install/sbin文件夹下)

    flash_eraseall擦除之后flashcp烧写失败解决办法:https://blog.csdn.net/weixin_43615992/article/details/126721414

  • 相关阅读:
    【Leetcode】1027. Longest Arithmetic Subsequence
    Flutter之hydrated_bloc源码分析
    Java面向对象---尚硅谷Java入门视频学习
    【MySQL-->数据操作】
    mysql报错:Duplicate entry ‘...‘ for key ‘field‘
    vue3全屏功能实现
    无人机航拍技术基础入门,无人机拍摄的方法与技巧
    centos编译升级cmake,痛苦的Linux小白
    spark完全分布式部署
    华为HCIA(二)
  • 原文地址:https://blog.csdn.net/weixin_43615992/article/details/126619408