制作文件系统

1 busybox 源码下载

busybox官方主页http://www.busybox.net,下载busybox源码,目前最新版本为busybox-1.23.0.tar.bz2

#tar –jvxf busybox-1.23.0.tar.bz2

进入解压后的busybox源码目录

#cdbusybox-1.23.0


2 busybox编译及安装


编译busybox主要配置以下两个方面:

  1. busybox的安装目录

  2. busybox的交叉编译器

步骤跟编译linux内核时很像

#makemenuconfig

出现一个图形界面,如图1所示


1

选择BusyboxSettings,如图2。这里可以对编译、安装以及调试等模式进行配置。


2

配置安装路径选择InstallationOptions-->Busybox installationprefix输入自定义的安装目录,这里安装在/home/smdt/rootfs,如图3,图4所示。









3








4

【注】如果不指定安装目录,则busybox将默认在busybox源码目录下生成一个_install目录。

然后选择BuildOptions,对交叉编译器以及编译方式进行配置。如图5所示

5

其中的第一项是BuildBusybox as a static binarynosharedlibs),如果选择上,则busybox将以静态形式进行编译,否则将以动态方式编译。此外,还需要对交叉编译环境进行配置,选择其中的CrossCompilerPerfix,输入交叉编译器的前缀,我们的嵌入式平台上使用的是arm-linux-gnueabihf-的交叉编译工具。如图6所示

6

这里我们先选择静态编译,动态方式的稍后再讲,注意Buildwith Large File Support (for accessing files > 2GB)不要选(默认是选上的),否则编译后会出现如下错误:

miscutils/lib.areadahead.:Infunction ‘readahead_main’

readahead.(.text.readahead_main+0×70):undefinedreference to ‘readahead’

collect2:ldreturned 1 exit status

make:***[busybox_unstripped ]Error 1

另外,除了上述图形化界面设置交叉编译器的方式外,也可以直接在busybox的目录下打开Makefile文件,修改CROSS_COMPILE?=arm-linux-gnueabihf-即可。

#make

#makeinstall

此时在/home/smdt/rootfs/下可以看到一共有3个目录和一个文件,分别是:binsbinusr目录以及linuxrc文件。如图7所示。


7

3添加etc目录及基本配置文件


参考一个正常的linux系统将会发现,此时busybox建立的文件系统还缺少很多文件。如果用这个作为文件系统,将是无法运行的。生成这些配置可以选择的方法有2种,一种是直接从一个正常运行的系统中拷贝,另一种是借助于busyboxexamples。显然,选择第二种会容易的多,我们直接拷贝examples/bootfloopy/etcinstall目录下。

#cp–a -R /home/smdt/busybox-1.23.0/examples/bootfloppy/etc/examples/bootfloppy/etc/home/smdt/rootfs


4添加dev目录及基本设备文件

调试时要通过串口发送消息到终端显示。因此串口控制台和终端2个设备文件是必不可少的。

#mkdirdev

#mknoddev/console c 5 1

#mknoddev/ttyS0 c 4 64

其中console,ttyS0的主次设备可以通过自己ubuntu系统下ls-l 得到,如下所示:

smdt@smdt-System-Product-Name:/$ls -l /dev/ttyS0

crw-rw----1 root dialout 4, 64 11917:47 /dev/ttyS0

同样的方法建立fb0

#mknoddev/fb0 c 29 0


5.添加其他常用目录

可以选择homerootprocmntlibvaropttmp

#mkdirroot home lib tmp mnt sys proc opt

#mkdirusr/lib usr/bin

此时,一个基本的文件系统的功能就已经完成了。

6将文件系统做成roofs.img

//初始化一个名为rootfs.img大小为1024M的内存,其中if=inputfile of=output file bs代表一个block的大小,默认为512bytescount代表block的数量

#ddif=/dev/zero of=./rootfs.img bs=512 count=2097152

//格式化该内存空间

#mkfs.ext4./rootfs.img

//挂载该内存空间到/mnt

#mount-t ext4 rootfs.img /mnt

//复制刚才做的文件系统的内容到/mnt

#cp-R -a /home/smdt/rootfs/* /mnt

//卸载该设备

#umount/mnt


7 测试中可能遇到的问题

可能会遇到如下问题,系统登录后终端上会不断打印:

cannotopen /dev/ttyS2:No such file or directory.

原因出在/etc目录下的inittab文件,我们看一下其内容:

::sysint:/etc/init.d/rcS

::respawn:-/bin/sh

tty2::askfirst-/bin/sh

::ctrlaltdel:/bin/umount–a -r

这条语句表示在第3个虚拟终端打开一个无须登录验证的shell。而我们之前没有建立这个tty2设备,因此会出错。解决的办法有2个:一是屏蔽该语句,二是建立该设备节点。我们选择将其屏蔽。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值