说明:本篇文章是笔者自己用的,可以参考,由于环境不同,所以可能读者不是太理解。
根文件系统的命令都是busybox的连接命令比如执行ls与执行 busybox ls 是同样的效果
一、 最小根文件系统:
1 /dev/console /dev/null
2 init程序 ,来源于busybox
3 /etc/inittab
4 配置文件中制定的程序
5 c库
二、配置、编译、安装busybox
1 在Makefile中修改CROSS中加上一句arm-linux-
2 makemenuconfig 进行配置
3 make 进行编译
4 make install (千万不能直接执行makeinstall,因为现在是交叉编译,会破坏电脑文件系统)
需要先新建一个文件夹,然后安装在新建的文件夹中,命令为:
make CONFIG_PREFIX=新建的文件夹(/work/…) install
在busybox文件下的INSTALL文件下有说明
三、构造根文件系统
1 首先查看一下PC机上的/dev/目录下的console和null是什么东西,执行命令
ls /dev/console /dev/null –l 出现如下信息
crw------- 1 root root 5, 1 2016-02-1210:04 /dev/console
crw-rw-rw- 1 root root 1, 3 2016-02-1209:32 /dev/null
说明console和null都是为字符设备,上面还有其主副设备号
根据这个,我们在自己的文件夹下新建一个dev文件,在该文件夹下新建两个设备节点
执行命令:
mkdir dev
cd dev
sudo mknod console c 5 1
sudo mknod null c 1 3
2 etc/inittab 构造inittab,如果不构造就会有默认的配置项 ,创建etc目录,在etc目录下创建inittab文件
mkdir etc
vietc/inittab
编辑内容 console::askfirst:-/bin/sh
3 c库
创建lib目录,将pc机上的/work/tools/gcc-3.4.5-glibc-2.3.6/arm-linux/lib目录下的库文件拷贝到我们新建的lib目录下,命令最后加一个-d是为了让连接依然为连接,不让其拷贝,如果拷贝的话会让根文件系统变得很大。
cp *.so* /work/nfs_root/my_first_fs/lib -d
通过二、三两步就建立好了我们的最小根文件系统,下面就是将我们自己建立的最小根文件系统做成镜像文件(yaffs(小叶(每页512字节)的nand)、yaffs2(大页(每页2048字节)nand)、jffs2等)
1 在/work/system/目录下有个文件yaffs_source_util_larger_small_page_nand.tar.bz2,该文件就是制作映像文件的工具。
2 将该文件解压就会得到Development_util_ok文件夹,该文件夹下含有两个文件夹:yaffs yaffs2
3 进入到yaffs2中,然后进入utils文件夹下,ls该文件夹,出现以下文件
Makefile mkyaffs2image.c mkyaffsimage.c nand_ecc.c yaffs_packedtags1.c
4 然后在utils文件夹下执行make就会编译出很多工具,其中包括mkyaffs2image,我们要用到的工具就是mkyaffs2image
5 将mkyaffs2image文件拷贝到PC及的系统目录中,并将该文件加上可执行属性
sudo cp mkyaffs2image /usr/local/bin/
sudo chmod +x /usr/local/bin/mkyaffs2image
其中chmod命令是用来改变权限的格式为
chmod +[权限代号] 文件
其中权限代号r可读、w可写、x可执行
6 返回到制作好的根文件系统文件夹,执行制作映像文件命令即可制作映像文件
可以先执行以下mkyaffs2image看以下调用该工具的格式
mkyaffs2image my_first_fs my_first_fs.yaffs2
注:将某个工具拷贝到PC记得系统目录usr/local/bin/中,该工具就可以当成命令使用了
7 将我们制作好的额最小根文件系统装载到开发板上
8 完善根文件系统,建立proc目录 mkdir /proc
将proc目录,内核提供了一个虚拟的文件系统 mount -t proc none /proc
这样做的话是手工挂载,如果不想手工挂载的话,就在etc/inittab中添加配置项
::sysinit:/etc/init.d/rcS 添加脚本,还要创建一个脚本文件/etc/init.d/rcS
在rcS文件中编辑如
mount -t proc none /proc
然后在加一个可执行的属性 sudo chmod +x /etc/init.d/rcS最后编译成映像文件
在rcS中运用mount –a ,然后在/etc下建立fstab文件,fstab格式为:
#device mount-point(挂载点) type option dump fack order
proc /proc proc 0 0
etc 目录下有init.d(文件夹) inittab fatab, init.d文件夹下放着rcS文件
inittab的内容如下:
console::askfirst:-/bin/sh
::sysinit:/etc/init.d/rcS
rcS的内容如下:
#mount -t proc none /proc
mount –a
fstab的内容:
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
9udev机制:自动创建dev目录下的设备节点,在busybox中以后个udev的简化版mdev
在busybox-1.7.0\docs目录下有个mdev.txt文件,里面有教程
Here'sa typical code snippet from the init script:
[1]mount -t sysfs sysfs /sys
[2]echo /bin/mdev > /proc/sys/kernel/hotplug
[3]mdev -s
Ofcourse, a more "full" setup would entail executing this before theprevious
codesnippet:
[4]mount -t tmpfs mdev /dev
[5]mkdir /dev/pts
[6]mount -t devpts devpts /dev/pts
a 安装虚拟文件系统,在fstab中添加如下内容
#device mount-point type option dump fsck order
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
tmpfs /dev tpfs defsults 0 0
b 在rcS文件中加入内容
mkdir/dev/pts
mount-t devpts devpts /dev/pts
echo/bin/mdev > /proc/sys/kernel/hotplug
mdev-s