交叉编译busybox,最小根文件系统搭建
环境:
交叉编译链:arm-linux-gcc version 4.4.1
busybox版本:busybox-1.15.1
Linux发行版:Fedora Core release 6 (Zod)
busybox下载之后,直接进行解压,然后类似配置内核一样,我们输入:
make menuconfig
需要注意的几点:
[勾选]如下选项:
1:BusyBox Settings --> Build Options --> Build busybox as a static binary(no shared libs)
2:BusyBox Settings --> Build Options --> Cross Compiler Prefix --> 输入: arm-linux-
3:BusyBox Settings --> Installation Options --> Don't use /usr
确定好以上步骤之后,可以退出,选择yes保存刚才的操作,然后执行:
make ARCH=arm
如果没有错的话,那么就可以安装了,可以采用perfix参数安装到指定目录下,格式为:make install prefix=xxx目录,如果不特别指定
,将默认在busybox源码目录下生成一个_install目录.到此,busybox基本上可以功成身退了.
我们需要的就是busybox编译出来的这个_install目录,我们暂时不需要指定目录,所以我们执行:
make install
编译好之后,我们便可以在当前目录下找到_install目录.对install目录下的几个文件进行一些说明.
bin包含用户工具,其中,busybox可执行文件就在这个目录下,该目录下其他所有文件都是指向busybox的符号链接
sbin目录包含操作系统工具,同样也指向busybox.
linuxrc是一个链接文件,指向busybox
完成以上之后,我们只完成了最小系统的命令构建,我们还需要添加启动需要的配置文件.
1:添加etc目录
参考一个正常的linux系统将会发现,此时busybox建立的文件系统还缺少很多文件.如果用这个作为文
件系统,将是无法运行的.生成这些 配置可以选择的方法有2种,一种是直接从一个正常运行的系统中
拷贝,另一种是借助于busybox的examples.显然,选择第二种会容易的多,我们直接拷贝examples/bootfloopy/etc到install目录下.
cp –a ../examples/bootfloppy/etc/ .
然后可以看看etc目录下的文件,一共有3个目录和文件,下面逐一对以上几个文件进行分析和说明.
inittab文件:系统启动后访问的第一个脚本文件,后续启动的文件都由它指定.
下面看一下busybox中原始的inittab文件内容:
::sysint:/etc/init.d/rcS
::respawn:-/bin/sh
tty2::askfirst:-/bin/sh
::ctrlaltdel:/bin/umount –a -r
其中第一行指定系统的启动脚本为/etc/init.d/rcS
第二行指定打开一个登录会话
第三行指定在第三个虚拟终端打开一个无须登录验证的shell,注意这个tty2,tty2是个设备,所以,我们后边还需要把这个设备创建出来,否则没有这个设备的话在未来启动系统后不停的报"Can't open /dev/tty2"的警告
第四行指定了当按下ctrl+alt+del组合键时的执行命令
fstab文件:定义了文件系统的各个"挂载点",需要与实际的系统相配合.默认的fstab文件内容为:
proc /proc proc defaults 0 0
我们可以根据其他的需要再进行添加
2:添加dev目录及基本设备文件
mknod console c 5 1 mknod null c 1 3 mknod ttySAC0 c 204 64 mknod tty2 c 204 65 mknod mtdblock0 b 31 0 mknod mtdblock1 b 31 1 mknod mtdblock2 b 31 2
3:构建其他的一些目录(可有可无,最好有)
mkdir proc mnt tmp sys root
到此,我们就完成了最小的根文件系统,下面我们可以直接采用nfs网络文件系统挂载,或者制作yaffs镜像文件,我们采用制作yaffs镜像.
制作yaffs2的话就使用yaffs2img这个工具,不过这个可以百度找下或者自己下载yaffs源码去编译,此处不讲.我们通过下面方法得到yaffs文件:
mkyaffs2image fs_mini fs_mini.yaffs
得到fs_mini.yaffs之后,我们要做的就是烧写到开发板里,命令如下:
tftp 0x40000000 fs_mini.yaffs nand erase 0x600000 $filesize nand write.yaffs 0x40000000 0x600000 $filesize
设置启动参数:
setenv bootargs console=ttySAC2,115200 noinitrd root=/dev/mtdblock2 init=/linuxrc radio=none saveenv
重新启动开发板,然后,我们就看到最小的根文件系统了.
文章的脚注信息由WordPress的wp-posturl插件自动生成