如何交叉编译mkfs.jffs2等工具链mtd-utils_mkfs交叉编译-程序员宅基地

技术标签: include  image  library  linux  工具  vim  flash  

首先说明一下:

在YAFFS2源文件的utils目录下,执行make就可以生成 mkyaffs2image工具,执行

.(要制作yaffs2的目录) (目标镜像)/mkyaffs2image


acl_2.2.47.orig.tar.gz
lzo-2.03.tar.gz
mtd-utils_20080508.orig.tar.gz
zlib-1.2.3.tar.gz

mkfs.jffs2.for.arm-linux-gcc.3.4.1平台.tar.bz2
mkfs.jffs2.for.arm-linux-gcc.4.3.2平台.tar.bz2
mkfs.jffs2.for.pc平台.tar.bz2


如果只需要mkfs.jffs2工具,那么ubuntu 8.10下直接安装jffnms软件包即可,
luther@gliethttp:~$ sudo apt-get install jffnms
如果需要将jffs2移植到arm开发板上,那么就需要下载源码进行交叉编译了,这就是本文的内容.

1.下载工具软件源码包
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/m/mtd-utils/mtd-utils_20080508.orig.tar.gz
luther@gliethttp:~$ wget http://www.zlib.net/zlib-1.2.3.tar.gz
luther@gliethttp:~$ wget http://www.oberhumer.com/opensource/lzo/download/lzo-2.03.tar.gz
luther@gliethttp:~$ mkdir libs 用来存放下面生成的lib库.

2.编译zlib库
luther@gliethttp:~/zlib-1.2.3$ ./configure --prefix=~/libs --shared
对于交叉编译输入如下指令
luther@gliethttp:~/zlib-1.2.3$ CC=arm-linux-gcc ./configure --prefix=~/libs --shared
luther@gliethttp:~/zlib-1.2.3$ make -j4
luther@gliethttp:~/zlib-1.2.3$ make install
luther@gliethttp:~$ tree ~/libs
/home/ubuntu/libs
|-- include
|   |-- zconf.h
|   `-- zlib.h
|-- lib
|   |-- libz.so -> libz.so.1.2.3
|   |-- libz.so.1 -> libz.so.1.2.3
|   `-- libz.so.1.2.3
`-- share
    `-- man
        `-- man3
            `-- zlib.3

5 directories, 6 files
这就表示完成了.

3.编译lzo库
luther@gliethttp:~/lzo-2.03$ ./configure --prefix=/home/ubuntu/libs --enable-shared
对于交叉编译输入如下指令
luther@gliethttp:~/lzo-2.03$ CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/home/ubuntu/libs --enable-shared --disable-static
这个还必须要绝对路径才行.
luther@gliethttp:~/lzo-2.03$ make
luther@gliethttp:~/lzo-2.03$ make install
luther@gliethttp:~$ tree ~/libs
.
|-- include
|   |-- lzo
|   |   |-- lzo1.h
|   |   |-- lzo1a.h
|   |   |-- lzo1b.h
|   |   |-- lzo1c.h
|   |   |-- lzo1f.h
|   |   |-- lzo1x.h
|   |   |-- lzo1y.h
|   |   |-- lzo1z.h
|   |   |-- lzo2a.h
|   |   |-- lzo_asm.h
|   |   |-- lzoconf.h
|   |   |-- lzodefs.h
|   |   `-- lzoutil.h
|   |-- zconf.h
|   `-- zlib.h
|-- lib
|   |-- liblzo2.a
|   |-- liblzo2.la
|   |-- liblzo2.so -> liblzo2.so.2.0.0
|   |-- liblzo2.so.2 -> liblzo2.so.2.0.0
|   |-- liblzo2.so.2.0.0
|   `-- libz.a
`-- share
    `-- man
        `-- man3
            `-- zlib.3

6 directories, 22 files
手工将静态库删掉就行了,
如果是arm平台还需要strip优化.

4.编译mtd-utils-20080508前的准备工作.
编译之前的代码工作
luther@gliethttp:~$ wget http://ftp.de.debian.org/debian/pool/main/a/acl/acl_2.2.47.orig.tar.gz
luther@gliethttp:~$ mkdir libs/include/sys -p
luther@gliethttp:~$ cp acl-2.2.47/include/acl.h libs/include/sys
luther@gliethttp:~/mtd-utils-20080508$ export LD_LIBRARY_PATH=~/libs/lib:$LD_LIBRARY_PATH
如果还找不到-llzo2,那么把他拷到/usr/lib下,对于交叉编译器,就是拷贝到
比如
luther@gliethttp:~/libs/lib$ sudo cp -a * /vobs/tools/arm-tools/arm-linux-gcc-3.4.1/arm-linux/lib/
luther@gliethttp:~/mtd-utils-20080508$ vim Makefile
修改安装路径
DESTDIR=.
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include
修改CFLAGS变量
CFLAGS := -I./include -I/home/ubuntu/libs/include $(OPTFLAGS)
如果是arm-linux-gcc定义为
CFLAGS := -I./include -I/home/ubuntu/libs/include -DAI_ADDRCONFIG=0x0020 $(OPTFLAGS)
来自/usr/include/netdb.h
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/Makefile
DESTDIR := ~/mtd-utils-20080508
SBINDIR=gliethttp/sbin
MANDIR=gliethttp/share/man
INCLUDEDIR=gliethttp/include

luther@gliethttp:~/mtd-utils-20080508$ vim recv_image.c
拷贝/usr/include/netinet/in.h文件中
arm-linux-gcc中不需要拷贝它.
struct ip_mreq
{
    /* IP multicast address of group.  */
    struct in_addr imr_multiaddr;

    /* Local IP address of interface.  */
    struct in_addr imr_interface;
};
结构体数据到头部,否则在u盘版的ubuntu 8.10上老是提示没有ip_mreq定义,虽然上面明明写了#define _USE_MISC
arm-linux-gcc中还需要创建如3下个目录
luther@gliethttp:~/mtd-utils-20080508$ mkdir arm-linux
luther@gliethttp:~/mtd-utils-20080508$ cp -r ubi-utils arm-linux/
luther@gliethttp:~/mtd-utils-20080508$ cp -r include arm-linux/

luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/libpfiflash.c
将所有EBUF(PFIFLASH_ERRSTR[-rc]);全部替换为EBUF("%s", PFIFLASH_ERRSTR[-rc]);
vim下替换脚本为
:%s/EBUF(PFIFLASH_ERRSTR/[-rc/]);/EBUF("/%s", PFIFLASH_ERRSTR/[-rc/]);/g
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/ubimirror.c
将第206行的
fprintf(stderr, err_buf);
改为
fprintf(stderr, "%s", err_buf);  // 想法是好的,因为err_buf中含有%d等format信息,这样接口更加统一,但是编译器似乎还并不支持这样的操作.[luther.gliethttp]
luther@gliethttp:~/mtd-utils-20080508$ vim ubi-utils/src/unubi.c
将第898行
char fname[PATH_MAX];
改为
char fname[PATH_MAX+1];
luther@gliethttp:~/mtd-utils-20080508$ cd ubi-utils/new-utils
因为-O2优化的原因,会导致如下log信息
error: ignoring return value of ‘scanf’, declared with attribute warn_unused_result
所有手工先编译.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
对于交叉编译执行如下1条语句
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ arm-linux-gcc -Iinclude -Isrc -I../../include -Wall -Werror -Wall src/ubiformat.c -c -o ubiformat.o
luther@gliethttp:~/mtd-utils-20080508/ubi-utils/new-utils$ cd -

好了,上面的所有修改完成之后,就可以执行make成功编译了[luther.gliethttp].
luther@gliethttp:~/mtd-utils-20080508$ make
如果是交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux-

luther@gliethttp:~/mtd-utils-20080508$ make install
对于交叉编译,执行
luther@gliethttp:~/mtd-utils-20080508$ make CROSS=arm-linux- install

luther@gliethttp:~/mtd-utils-20080508$ tree gliethttp/
gliethttp/
|-- sbin
|   |-- bin2nand
|   |-- doc_loadbios
|   |-- docfdisk
|   |-- flash_erase
|   |-- flash_eraseall
|   |-- flash_info
|   |-- flash_lock
|   |-- flash_otp_dump
|   |-- flash_otp_info
|   |-- flash_unlock
|   |-- flashcp
|   |-- ftl_check
|   |-- ftl_format
|   |-- jffs2dump
|   |-- mkbootenv
|   |-- mkfs.jffs2
|   |-- mkpfi
|   |-- mtd_debug
|   |-- nand2bin
|   |-- nanddump
|   |-- nandtest
|   |-- nandwrite
|   |-- nftl_format
|   |-- nftldump
|   |-- pddcustomize
|   |-- pfi2bin
|   |-- pfiflash
|   |-- recv_image
|   |-- rfddump
|   |-- rfdformat
|   |-- serve_image
|   |-- sumtool
|   |-- ubiattach
|   |-- ubicrc32
|   |-- ubicrc32.pl
|   |-- ubidetach
|   |-- ubigen
|   |-- ubimirror
|   |-- ubimkvol
|   |-- ubinfo
|   |-- ubinize
|   |-- ubirmvol
|   |-- ubiupdatevol
|   `-- unubi
`-- share
    `-- man
        `-- man1
            `-- mkfs.jffs2.1.gz

4 directories, 45 files

ep9312开发板上没有任何文件系统flash数据读取
# ./mtd_debug read /dev/mtd0 0 100 gliethttp.bin
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
# hexdump gliethttp.bin
0000000 03ff ea00 350c e59f 001c e583 410e e3a0
0000010 4004 e583 4a03 e3a0 4001 e254 fffd 1aff
0000020 4106 e3a0 4004 e583 420f e202 5000 e594
0000030 4001 e084 5000 e594 4001 e084 5000 e594
0000040 4001 e084 5000 e594 4010 e3a0 4008 e583
0000050 4050 e3a0 4001 e254 fffd 1aff 4e1e e3a0
0000060 4008 e583                             
0000064
#
# ./mtd_debug read /dev/mtd2 0 100 gliethttp.bin;hexdump gliethttp.bin -Cv
Copied 100 bytes from address 0x00000000 in flash to gliethttp.bin
00000000  1f 8b 08 00 ca 14 7d 4a  02 03 e4 5a 0f 70 93 e7  |......}J...Z.p..|
00000010  79 7f 3f 49 36 b2 31 41  80 a0 0e 38 cd 57 70 16  |y.?I6.1A...8.Wp.|
00000020  93 18 f3 19 3b 60 12 9a  d9 60 08 09 4e 22 c0 a4  |....;`...`..N"..|
00000030  b4 81 ca 42 92 6d 0d 59  d2 49 72 02 2b 4d dd 60  |...B.m.Y.Ir.+M.`|
00000040  72 84 e1 86 03 a7 21 01  8a d2 b2 4b 2e f3 56 76  |r.....!....K..Vv|
00000050  63 b7 34 0b 1d cd b1 1d  6b b3 95 36 dc 95 db d1  |c.4.....k..6....|
00000060  8b 90 d1 ea                                       |....|
00000064

 

本文来自程序员宅基地,转载请标明出处:http://blog.csdn.net/qiaoliang328/archive/2009/10/08/4643945.aspx

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/merry3688/article/details/5359329

智能推荐

针对自定义查询结果封装结构数值说明(curson - array)-程序员宅基地

文章浏览阅读108次。如果有一段代码如下:SELECT d.code, COUNT(ac.int_id)-COUNT(subac.int_id) as free_num, COUNT(subac.int_id) as online_num FROM g_com_dict d 他并不是查询出表的具体字段,而是分组查询统计了某写数据,如果我们要将此结构从 curson 中赋值给 array ,就需要自定义结构了...._sql查询结果怎么按特定结构封装

C#【必备技能篇】Hex文件转bin文件的代码实现_c# hex-程序员宅基地

文章浏览阅读4.9k次,点赞6次,收藏45次。整个过程主要分为三步: 遍历整个hex文件,找出最小地址和最大地址(也就是起始地址和结束地址),算出数据长度(数据长度=结束地址-起始地址+1),根据得到的数据长度,分配对应大小的内存(开辟一个数组); 再次遍历整个hex文件,计算每条数据记录中的起始地址与hex文件起始地址的偏移量,按照偏移量将该条数据记录中的数据部分写入第一步的数组中。(这样就实现了按照从低到高的地址顺序排列整个hex文件的数据)。 最后只需要将该数组写出到文件中即可。..............._c# hex

spring boot企业网站设计与实现毕业设计源码211750_基于springboot的企业官网的设计与实现-程序员宅基地

文章浏览阅读202次。本文研究的企业网站主要功能模块包括企业资讯、企业招聘、留言交流、简历投递、企业文化、留言分类模块等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作采用SSM框架、JSP技术、Ajax技术进行业务系统的编码及其开发,实现了本系统的全部功能。_基于springboot的企业官网的设计与实现

Swift 的访问控制(private,internal,public)_swift 类 public private-程序员宅基地

文章浏览阅读868次。在Swift语言中,访问修饰符有三种,分别为private,internal和public。同时,Swift对于访问权限的控制,不是基于类的,而是基于文件的。1.privateprivate访问级别所修饰的属性或者方法只能在当前的Swift源文件里可以访问。2.internalinternal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问。 如果是框架或者库代码,则在整个框架内部都可以_swift 类 public private

VMWare 黑苹果卡在Logo页面_vm虚拟机进系统卡log-程序员宅基地

文章浏览阅读7.7k次,点赞7次,收藏5次。解决方法:1、在选项中,将虚拟机改为Windows 10 x64。等安装好新系统后,再改回Mac OS X(没有此选项,需要运行unlocker的window-installer)2、以上操作建议都以管理员权限运行..._vm虚拟机进系统卡log

数据流图DFD-程序员宅基地

文章浏览阅读4.4k次,点赞3次,收藏41次。数据流图是一种以图形方式表示数据处理过程的工具,它描绘了数据在系统中的流动路径和经过的处理过程。在数据流图中,可以清晰地看出系统的数据处理流程、信息交流以及各部分之间的关系,有助于分析人员更好地理解系统的结构和功能,从而更好地进行系统设计和实现。:在绘制完初步的数据流图后,根据系统的实际情况和完善需求,完善图中的细节,例如添加注释、标明数据类型和格式等。:数据存储是系统中存储数据的单元,它可以是一个文件、数据库或内存中的变量。:数据流是系统中数据的流动,它可以是输入、输出或存储在系统中的数据。_数据流图

随便推点

自监督学习(十)Unsupervised Learning of Visual Representations by Solving Jigsaw Puzzles-程序员宅基地

文章浏览阅读3.7k次,点赞4次,收藏12次。Unsupervised Learning of Visual Representations by Solving Jigsaw PuzzlesIntroductionMethod排列选择prevent shortcutsExperimentsResults on Pascal VOC07Results ImageNet ClassificationAblation StudiesConclusionsIntroduction本文使用拼图游戏作为自监督学习的pretext task,取图像中的某一部分_unsupervised learning of visual representations by solving jigsaw puzzles

docker 部署kafka集群_kafka是否适合在容器中部署-程序员宅基地

文章浏览阅读848次。在部署kafka集权之前必须要先部署好zookeeper集权,kafka注册在zookeeper集群中,zookeeper集群可参看:docker 安装zookeeper集群涉及到的虚拟主机:192.168.1.104 node1192.168.1.105 node2创建本地目录mkdir -p /docker/kafka/logs创建容器第一个节点上:..._kafka是否适合在容器中部署

雅思阅读话题词汇61-70_雅思阅读but fuel consumption and exhaust-程序员宅基地

文章浏览阅读303次。61.excavatoreg1:Excavator should be handling at least some of their bounty with gloves,and freezing samples as they are found.----------------------------------------------------------------------..._雅思阅读but fuel consumption and exhaust

MySQL 5.6.26几种安装包的区别_数据库安装包的区别-程序员宅基地

文章浏览阅读2.3w次,点赞3次,收藏12次。一、MySQL Installer 5.6.26mysql-installer-community-5.6.26.0.msi, 364.2MBMySQL Installer 提供了简单易用、向导式的 MySQL 软件的安装体验过程(目前只支持 Windows),包含的产品有:MySQL Server,所有的 connectors,Workbench 和示例模型,示例数据库,文档。该安装包大_数据库安装包的区别

PCM、FLTP、S16资料了解-程序员宅基地

文章浏览阅读1.6w次,点赞2次,收藏13次。ffmpeg PCM_S16LE和PCM_S16BE怎么转换:只要交换每个sample的高8bit和低8bit就可以了AV_SAMPLE_FMT_FLTP转为AV_SAMPLE_FMT_S16P(ffmpeg),在使用ffmpeg解码aac的时候,如果使用avcodec_decode_audio4函数解码,那么解码出来的会是AV_SAMPLE_FMT_FLTP 格式的数据( f_fltp

JavaWeb (HTTP Request)_java httpwebrequest-程序员宅基地

文章浏览阅读238次。HTTP前言概念:Hyper Text Transfer Protocol 超文本传输协议传输协议:定义了,客户端和服务器端通信时,发送数据的格式特点:1. 基于TCP/IP的高级协议2. 默认端口号:803. 基于请求/响应模型的:一次请求对应一次响应4. 无状态的:每次请求之间相互独立,不能交互数据* 历史版本: * 1.0:每一次请求响应都会建立新的连接 * 1.1:复用连接请求消息数据格式——1. 请求行请求方式 请求url 请求协议/版本GET /login.ht_java httpwebrequest

推荐文章

热门文章

相关标签