全部博文(66)
分类:
2012-11-29 09:05:31
原文地址:busybox根文件系统制作记录 作者:chumojing
1. 编译kernel的时候在Kernel Features选项中选上EABI
2. 所有的软件都是用支持EABI的编译器(例如arm-linux-4.3.2)来编
四、文件系统打包
文件说明:文件系统为twzyg ,zygfs为目录
1、dd if=/dev/zero of=twzyg count=6000 bs=1K
2、/sbin/mke2fs -F -v -m0 twzyg 格式化成文件系统twzyg
3、sudo mount -o loop twzyg zygfs 将文件系统twzyg挂载到zygfs目录下
4、cp -avd _install/* zygfs 将_install文件夹下的目录拷贝到zygfs目录下,此时zygfs中包含_install的所有文件
5、sudo umount zygfs 将目录中的文件放入到twzyg中,构成文件系统,此时zygfs中无内容
6、gzip -9 twzyg 压缩成twzyg.gz,并可以烧入目标板中
注:
以上六条命令可以在终端界面一条一条的执行,也可以产用shell.具体步骤如下:
tw123@ubuntu:~/zyg/busybox-1.14.2$ gedit fscreate (建立文件fscreate)
之后弹出文件,在内容里面添加命令
rm –rf zygfs
mkdir zygfs
dd if=/dev/zero of=twzyg count=6000 bs=1K
/sbin/mke2fs -F -v -m0 twzyg
sudo mount -o loop twzyg zygfs
cp -avd _install/* zygfs
sudo umount zygfs
gzip -9 twzyg
保存文件之后退出,然后执行命令
tw123@ubuntu:~/zyg/busybox-1.14.2$ chmod 777 fscreate (设置fscreate的访问权限)
tw123@ubuntu:~/zyg/busybox-1.14.2$ ./fscreate (运行fscreate文件,之后便生成文件系统)
五、将生成的u-boot,uImage以及twzyg.gz烧入到目标板上
u-boot 烧入到0x10000000中
uImage烧入到0x10100000中
twzyg.gz烧入到0x10300000中(twzyg.gz大小为880KB,因此烧入到板子中要避免与uImage发生冲突)
超级终端产用波特率为115200.断电启动目标板之后输入命令如下:
U-BOOT>> cp.b 10100000 20200000 200000 (将内核uImage拷贝到SDRAM的20200000地址中,每次拷贝200000字节)
U-BOOT>> cp.b 10300000 20410000 200000(将文件系统twzyg.gz拷贝到SDRAM的20410000地址中)
U-BOOT>> bootm 20200000 (启动内核uImage)
注:
将文件系统拷贝至20410000的原因查找。
tw123@ubuntu:~/zyg/linux-2.6.32$ make menuconfig
弹出界面:
选择Boot options ---> 进入
Initrd = 0x20410000可以得知,文件系统应该拷贝到0X20410000中。
mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw的设置:
找到linux-2.6.32/arch/arm/configs/at91rm9200dk_defconfig文件并修改如下:
191行 CONFIG_CMDLINE="mem=32M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
改为 #CONFIG_CMDLINE="mem=16M console=ttyS0,115200 initrd=0x20410000,3145728 root=/dev/ram0 rw"
编译文件系统中遇到的一些问题及解决办法:
更改busybox1.14.2目录下的Makefile文件。
164行: CROSS_COMPILE ?=
改 为: CROSS_COMPILE ?=/home/tw123/zyg/3.4.5/bin/arm-linux-
如何查找 /home/tw123/zyg/3.4.5/bin/arm-linux- ?? 查找方法如下: tw123@ubuntu:~/zyg/busybox-1.14.2$ which arm-linux-gcc /home/tw123/zyg/3.4.5/bin/arm-linux-gcc |
191行: ARCH ?= $(SUBARCH)
改为: ARCH ?= arm
tw123@ubuntu:~/zyg/busybox-1.14.2$make
错误一:
CC miscutils/inotifyd.o
miscutils/inotifyd.c:31:27: linux/inotify.h: No such file or directory
miscutils/inotifyd.c: In function `inotifyd_main':
miscutils/inotifyd.c:61: error: `IN_ALL_EVENTS' undeclared (first use in this function)
miscutils/inotifyd.c:61: error: (Each undeclared identifier is reported only once
miscutils/inotifyd.c:61: error: for each function it appears in.)
miscutils/inotifyd.c:129: error: dereferencing pointer to incomplete type
miscutils/inotifyd.c:139: error: dereferencing pointer to incomplete type
miscutils/inotifyd.c:140: error: dereferencing pointer to incomplete type
miscutils/inotifyd.c:140: error: dereferencing pointer to incomplete type
miscutils/inotifyd.c:143: error: invalid application of `sizeof' to incomplete type `inotify_event'
miscutils/inotifyd.c:143: error: dereferencing pointer to incomplete type
make[1]: *** [miscutils/inotifyd.o] Error 1
make: *** [miscutils] Error 2
网上说这是busybox的一个bug(本人的busybox版本过低,高一些的版本可能不会出现此问题),解决方法:去掉对inotifyed的支持,具体步骤如下:
# make menuconfig
Miscellaneous Utilities --->
[ ]inotifyd
还有另一个bug是taskset,也要将它去掉,不然编译时又会出错。
Miscellaneous Utilities --->
[ ]taskset
tw123@ubuntu:~/zyg/busybox-1.14.2$make
错误二:缺少头文件 input.h
CC util-linux/acpid.o
util-linux/acpid.c: In function `acpid_main':
util-linux/acpid.c:145: error: `EV_SW' undeclared (first use in this function)
util-linux/acpid.c:145: error: (Each undeclared identifier is reported only once
util-linux/acpid.c:145: error: for each function it appears in.)
util-linux/acpid.c:146: error: `SW_LID' undeclared (first use in this function)
make[1]: *** [util-linux/acpid.o] 错误 1
make: *** [util-linux] 错误 2
解决方案:
tw123@ubuntu:~/zyg/busybox-1.14.2$
cp -rafl /usr/src/linux-headers-2.6.32-24/include/linux/input.h ./include/linux/
tw123@ubuntu:~/zyg/busybox-1.14.2$make