Linux中的“瑞士军刀”--busybox制作根文件系统

【Z-turn Board试用体验】+Linux中的“瑞士军刀”--busybox制作根文件系统



网址:http://bbs.elecfans.com/jishu_504758_1_1.html



本节讲述在Ubuntu12.04下面怎样制作完整启动 嵌入式Linux所需要的根文件系统。因为z-turn板子上已有的flash是qspi flash(nor flash的一种),所有如果要从qspi flash启动根文件系统,那我我们就需要制作与nor flash想对应的文件系统类型----jfss/jfss2文件系统。其他类型的flash/存储设备需要制作对应的根文件系统类型,在此不再赘述!!!
首先从http://www.busybox.net下载相应版本的busybox,这里下载的是busybox1.19.4版本(其他版本应该也是一样的吧)。
接下来,就开始吧~~~~~~~~~~
一.编译并生成根文件系统文件
1. 解压该包
tar jxvf busybox-1.19.4.tar.bz2
cd busybox-1.19.4
 
2. 修改 Makefile
CROSS_COMPILE ?=
修改为
CROSS_COMPILE ?=CROSS_COMPILE ?= /opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/arm-xilinx-linux-gnueabi-

ARCH ?= $(SUBARCH)
修改为
ARCH ?= arm

3. 进行默认配置
make defconfig

4. 对配置信息进行修改
make menuconfig

Miscellaneous Utilities---> 去除 taskset
同时设置如下:
Busybox Settings --->
        Build Options --->
           Build BusyBox as a static binry (no shared libs)           
        Installation Options --->
           Don't use /usr

#make
如果出现下面的 错误:
In file included from miscutils/ubi_tools.c:63:0:
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:329:3: error: conflicting types for '__packed'
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of '__packed' was here
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:371:3: error: conflicting types for '__packed'
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of '__packed' was here
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:386:3: error: conflicting types for '__packed'
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of '__packed' was here
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:398:3: error: conflicting types for '__packed'
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of '__packed' was here
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:412:4: error: conflicting types for '__packed'
/opt/zynq_zturn/workdir/04-Linux_Source/Toolchain/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin/../arm-xilinx-linux-gnueabi/libc/usr/include/mtd/ubi-user.h:313:3: note: previous declaration of '__packed' was here
make[1]: *** [miscutils/ubi_tools.o] Error 1
make: *** [miscutils] Error 2

那么就行重新配置make menuconfig 去除所有与ubi***相关的选项再重新make即可。
#make install
所生成的文件就在当前目录的 _install目录下。
二.准备制作jffs2文件系统的所有文件

编译结束后,自己随便找个目录,并在该目录下建立myrootfs文件夹(我是放在/opt下面)
并在其中建立如下路径
1.  #mkdir bin sbin lib etc dev mnt usr/bin usr/sbin usr/lib proc sys -p
2.  把刚才编译busybox生成的在_install目录下的文件全部copy到rootfs/目录下,注意用 cp命令带 –arf 参数

3.拷贝动态链接库  
 

4.建立必要的文件
进入根文件系统的etc目录
#cd /opt/myrootfs/etc
增加为SHELL导入全局变量的文件/etc/profile
#vi profile
内容如下:
# /etc/profile: system-wide .profile file for the Bourne shells

echo
echo -n "Processing /etc/profile... "
# no-op
echo "Set search library path in /etc/profile"
export LD_LIBRARY_PATH=/lib:/usr/lib
echo "Set user path in /etc/profile"
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
echo "Set PS1 in /etc/profile"
PS1="[$USER@$HOSTNAME \\w]\\$"
PATH=$PATH
echo "Done"
echo
增加初始化文件
#vi inittab
内容如下:
::sysinit:/etc/init.d/rcS
::respawn:-/bin/sh
::restart:/sbin/init
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
::shutdown:/sbin/swapoff -a
#vi fstab
内容如下
proc      /proc  proc   defaults    0 0
none            /tmp    ramfs   defaults    0   0
none            /var    ramfs   defaults    0   0
mdev            /dev    ramfs   defaults    0   0
sysfs           /sys sysfs  defaults    0   0
增加初始化脚本
#vi init.d/rcS
内容如下
#! /bin/sh
./etc/host
hostname ${HOSTNAME}
echo "*****************mount all**********"
/bin/mount -a
echo "*****************Starting mdev******"
/bin/echo /sbin/mdev > /proc/sys/kernel/hotplug
mdev -s
/usr/etc/init
echo "************************************"
echo "*******nick's rootfs 2009.3*********"
echo "************************************"
为mdev创建配置文件
#vi mdev.conf
内容为空
#vi /opt/myrootfs/usr/etc/init
内容如下:
#!/bin/sh
ifconfig eth0 192.168.1.10 up
ifconfig lo 127.0.0.1
在/opt/myrootfs/dev下面建立两个节点
#mknod -m 660 console c 5 1
#mknod -m 660 null c 1 3
安装MTD-Utils工具,这个需要四个文件(见下图),安装方法不再赘述。。。


这样就差不多大功告成了
----------------------------------------完美的黄金分割线------------------------------------------------
三. 制作jffs2文件系统
1.使用mkfs.jffs2
mkfs.jffs2 -r /opt/myrootfs -o /opt/zynq_zturn/target/rfs/myfirstrootfs.jffs2 -e 0x4000 --pad=0x1000000 -s 0x200 –n
生成的文件rootfs.jffs2就是要烧写的文件系统
注意:--pad=0x1000000 这个值应该跟你文件系统分区的大小一样(主义各参数的含义)。
结果如下图所示:
图片里面的jfss2文件就是需要我们烧写的文件。。。。。






未完待续、、、、、、





3.png (71.8 KB, 下载次数: 7)

3.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Busybox创建nfs文件系统 1、解压busybox-1.19.4.tar.bz2 修改Makefilez的ARCH和CROSS_COMPILE与本机的路径一致: CROSS_COMPILE ?= /opt/crosstool/bin/arm-s3c2410-linux-gnu- ... ARCH ?= arm 2、编译busybox。先make menuconfig,修改以下: Busybox Settings ---> Build Options ---> Build BusyBox as a static binary (no shared libs) //直接编译成静态库,省事点 (/opt/crosstool/bin/arm-s3c2410-linux-gnu-) Cross Compiler prefix //这里和Makefile里保持一致,应该写一处就行了 Installation Options ---> Don't use /usr //不用本机的目录 Shells ---> Choose your default shell (ash) ---> //这里选择shell为ash,应该是默认选的 --- ash //把ash这档的选项全部选上 保存退出,直接make,make install。 3、用shell脚本创建文件系统的目录结构,并在想要建立文件系统的地方运行此脚本。我是用root用户登陆的,直接创建了设备节点。 [root@Sure root-s3c2410]# vim makedir.sh #!/bin/sh echo "makeing rootdir" mkdir rootfs cd rootfs echo "makeing dir: bin dev etc lib proc sbin sys usr" mkdir bin dev etc lib proc sbin sys usr #8 dirs mkdir usr/bin usr/lib usr/sbin lib/modules #Don't use mknod, unless you run this Script as mknod -m 600 dev/console c 5 1 mknod -m 666 dev/null c 1 3 echo "making dir: mnt tmp var" mkdir mnt tmp var chmod 1777 tmp mkdir mnt/etc mnt/jiffs2 mnt/yaffs mnt/data mnt/temp mkdir var/lib var/lock var/log var/run var/tmp chmod 1777 var/tmp echo "making dir: home root boot" mkdir home root boot echo "done" 执行这个sh: [root@Sure root-s3c2410]# sh makedir.sh 创建出一个主文件夹rootfs,里面有一批文件: [root@Sure rootfs]# ls bin boot dev etc home lib mnt proc root sbin sys tmp usr var 4、把busybox源码目录下的etc的内容拷贝到这里的etc下 [root@Sure rootfs]# cd etc/ [root@Sure etc]# cp -a /home/jacky/busybox-1.11.1/examples/bootfloppy/etc/* ./ 5、修改拷贝过来的profile文件 [root@Sure etc]# vim profile # /etc/profile: system-wide .profile file for the Bourne shells echo "Processing /etc/profile" # no-op # Set search library path echo " Set search library path" export LD_LIBRARY_PATH=/lib:/usr/lib # Set user path echo " Set user path" PATH=/bin:/sbin:/usr/bin:/usr/sbin export PATH # Set PS1 echo " Set PS1" HOSTNAME=`/bin/hostname` # 此处让shell提示符显示host名称的。是`,不是’,要注意 # 会在进入系统后显示Jacky export PS1="\\e[32m[$USER@$HOSTNAME \\w\\a]\\$\\e[00;37m " # 此处\\e[32m是让后面的“[$USER@$HOSTNAME \\w\\a]”显示为绿色 # \\e[00是关闭效果 # \\e[05是闪烁 # 37m是让后面的显示为白色 # 多个命令可以;号隔开 echo "All done!" echo 6、修改初始化文件inittab和fstab [root@Sure etc]# vim inittab ::sysinit:/etc/init.d/rcS ::respawn:-/bin/sh ::restart:/sbin/init tty2::askfirst:-/bin/sh ::ctrlaltdel:/bin/umount -a -r ::shutdown:/bin/umount -a -r ::shutdown:/sbin/swapoff –a [root@Sure etc]# vim fstab proc /proc proc defaults 0 0 none /tmp ramfs defaults 0 0 mdev /dev ramfs defaults 0 0 sysfs /sys sysfs defaults 0 0 7、修改初始化的脚本文件init.d/rcS [root@Sure etc]# vim init.d/rcS #! /bin/sh echo "Processing etc/init.d/rc.S" #hostname ${HOSTNAME} echo " Mount all" /bin/mount -a echo " Start mdev...." /bin/echo /sbin/mdev > proc/sys/kernel/hotplug mdev -s echo "****************************************************" echo " RootFS by NFS, s3c2410" echo " Created by Jacky Xu @ 2008.7.13" echo " Enjoy it!!!" echo "****************************************************" echo 8、创建一个空的mdev.conf文件,在挂载文件系统时会用到的 [root@Sure etc]# touch mdev.conf 9、从本机拷贝passwd、shadow、group文件。 [root@Sure etc]# cp /etc/passwd . [root@Sure etc]# cp /etc/shadow . [root@Sure etc]# cp /etc/group . 修改passwd文件,把第一行和最后一行的bash修改成ash。 10、把busybox默认安装目录的文件全部复制到这里的rootfs。会发现多了linuxrc -> bin/busybox文件,这是挂载文件系统需要执行的。 [root@Sure etc]# cd .. [root@Sure rootfs]# cp -Rfv /home/jacky/busybox-1.11.1/_install/ ./ OK,以上用busybox创建了一个基本的文件系统
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

a746742897

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值