ARM9嵌入式Linux开发-构建嵌入式Linux根文件系统

安装BusyBox

在主机上新建一个目录,比如myroot,用于存放开发板的根文件系统。编译安装后BusyBox,将其中_install中的bin、sbin目录和linuxrc复制到myroot中。

linuxrc、bin和sbin中所有命令都是bin/BusyBox的符号链接。

构建etc目录

init进程根据/etc/inittab文件创建其他子进程,比如调用脚本文件配置IP地址,挂载其他文件系统,启动shell和应用程序等。     

etc目录中的文件主要取决于要运行的程序,在本文章中是创建了3个文件:etc/inittab、etc/init.d/rcS和etc/fstab,下面分别介绍。

etc/inittab

仿照BusyBox的example/inittab文件,在myroot/etc中创建inittab文件,内容如下:

#/etc/inittab
::sysinit:/etc/init.d/rcS//init进程启动的第一个进程,启动一个脚本
s3c2410_serial0::askfirst:-/bin/sh//启动shell
::ctrlaltdel:/sbin/reboot//按下Ctrl+Alt+Del之后执行的程序,但在终端下无法输入这个组合键
::shutdown:/bin/umount -a -r//重启、关机前执行的程序

etc/init.d/rcS

mount -a //挂载/etc/fstab文件指定的文件系统
mkdir /dev/pts
mount -t devpts devpts /dev/pts //dev/pts用来支持网络连接(telnet)的虚拟终端
echo /sbin/mdev > /proc/sys/kernel/hotplug //设置内核,当有设备拔插时调用/bin/mdev
mdev -s //在/dev目录下生成内核所支持的所有设备的节点

etc/fstab

#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tmpfs defaults 0 0 //使用内存文件系统,减少对flash的读写
var /dev tmpfs defaults 0 0
  • device :要挂接的设备。比如/dev/mtdblock1等设备文件,也可以是其他格式,比如proc文件系统这个字段就没有意义,可以是任意值
  • mount-point :挂载点 type :文件系统的类型。比如proc、jiffs2、yaffs2等;也可以是auto,表示自动检测文件系统类型
  • options :挂载参数,用逗号隔开。     

构建dev目录

我们使用mdev动态创建设备文件,mdev是通过init进程来启动的,在使用mdev构造/dev之前,init进程至少要用到设备dev/console和dev/null,所有要静态建立这两个设备文件。

mknod console c 5 1

mknod null c 1 3
 

构建lib目录

从交叉编译工具的lib库文件拷贝过来即可。

构建其他目录

其他的目录可以为空目录,比如proc、mnt、tmp、sys、root等,使用如下命令建立即可: mkdir proc mnt tmp sys root。     

至此,myroot目录下就是一个非常小的根文件系统。使用mkyaffs2img将其制作成镜像文件后就可以烧写到开发板中。

BusyBox移植和根文件系统制作

  1. 解压BusyBox  tar jxvf busybox-1.13.0.tar.bz2
  2. cd busybox-1.13.0
  3. make menuconfig 交叉编译器 静态 安装
  4. Make install

你可能感兴趣的:(ARM9嵌入式Linux开发)