微软 php Firefox linux命令 Python java shell google 开源 HTML5 mysql wordpress Ubuntu linux centos nginx apache Windows Android 程序员

交叉编译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 roo

到此,我们就完成了最小的根文件系统,下面我们可以直接采用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

重新启动开发板,然后,我们就看到最小的根文件系统了.

延伸阅读

  • 抱歉,暂无相关内容!

评论