目录
在前面编译安装了busybox,得到了几个基本的文件夹,下面开始构建最小的根文件系统。
1最小根文件系统
1.1 创建/dev/console /dev/null
我们先看一下X86上这两个文件是什么样的
最前面的c表示是字符设备,后面的5是主设备号,1是次设备号,
1.2 busybox
已经编译安装
1.3 /etc/inittab
里面内容写上
console::askfirst:-/bin/sh
1.4 安装glibc库
我们直接把交叉编译工具链路径下的库拷贝过来
经过上面几步,就得到了我们的最小根文件系统
2 制作yaffs映像文件
我们做好了最小根文件系统后,要制作映像文件,然后才能烧写到板子上面,我们需要使用工具制作,我们先编译得到制作yaffsimage的工具
得到
然后把这个工具拷贝到系统目录中,然后我们就可以创建文件系统映像了。
sudo cp mkyaffs2image /usr/local/bin/
sudo chmod +x /use/local/bin/mkyaffs2image
使用如下命令生成文件系统映像
3 下载烧写
生成文件系统映像后,我们开始下载,首先打开在uboot中输入y命令,
然后打开DNW开始发送文件,
烧写完之后,输入b命令启动。
4 完善根文件系统
4.1 构建etc目录
将前面说的最小根文件系统烧写到板子上之后,我们执行ps命令,发现没有这个命令
接下来我们开始完善根文件系统,
我们首先创建proc目录
在我们的内核中,当前有哪些应用程序在跑,这些信息是怎么收集的呢,内核提供了一个虚拟的proc文件系统, 我们把proc挂载到/proc里面,然后执行ps命令
这个ps命令就会去proc目录看下有哪些程序,
所以我们前面创建了proc目录,然后我们要在etc/inittab配置文件中增加这个mount挂载命令,我们先在inittab中添加一个脚本/etc/init.d/rcS
然后我们创建这个脚本
然后rcS里面加上我们刚才说的mount命令
mount -t proc none /proc
然后给脚本加上可执行的属性,
chmod +x etc/init.d/rcS
在rcS脚本里面我们也可以用mount -a命令,mount -a会根据/etc/fstab文件里面的内容去挂载proc,所以我们创建/etc/fstab,然后在里面增加
fstab文件的格式为
4.2 构建dev目录
dev目录下现在只有
我们dev目录下的东西对应着设备,对应着驱动,如果我们有成千上百个驱动,我们要是一个个的创建这些设备会很麻烦,这里我们采用udev机制方法,这个方法就是自动创建dev目录下的设备节点,在busybox里面有一个udev的简化版本mdev,我们看一下medv的用法
5 其他文件系统格式--jffs2
我们前面只做了yaffs3文件系统,现在我们试一下其他格式的文件系统。
-o表示输出文件,
制作完成之后我们把他下载到板子上,重启系统,然后在uboot的菜单中选择j
然后用dnw发送过去
下载完之后启动后发现
所以我们要在命令行参数中修改下跟文件系统的类型, 根
6 网络文件系统
我们前面制作根文件系统的方法中,我们发现,我们每改动一次,就需要重新烧写根文件系统影像文件,太麻烦了,接下来我们用一个不需要烧写的文件系统,NFS网络文件系统,也就是这个文件系统是放在服务器上的,我们内核启动的时候,自动的识别出服务器上的这个目录,把它当做我们的根文件系统,
我们把开发板接上网线,然后配置IP和我们的服务器在同一个网段,
ifconfig eth0 192.168.1.11
ping 192.168.1.19 #ping服务器
然后我们先试一下手工挂接NFS系统,要想挂接NFS网络文件系统,那么我们的服务器要允许那个目录可以被别人挂接,在服务器中有个nfs服务,然后它的配置文件在/etc/exports,我们在/etc/exports配置文件里面定义这个目录即可。我们在/etc/exports里面增加
然后重启服务器上的nfs服务
sudo /etc/init.d/nfs-kernel-server restart
然后我们现在服务器上试一下自己挂载自己看能否成功,
然后我们在单板上开始挂载,
上面我们说的这种方式时先从flash上启动之前的根文件系统,系统起来之后,我们在用命令行挂载nfs网络文件系统,还有一种方式是直接从nfs文件系统启动,我们reboot重启开发板,然后进入uboot菜单,设置命令行参数,那么命令行参数中至少应该包含
- 服务器ip地址,目录。
- 设置开发板自己的ip地址。
我们在内核的Documentation目录下找到一个nfsroot.txt,里面说明了怎么在命令行中增加服务器地质以及设置开发板自己的地址,
nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>]
ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>
这里我们设置为
nfsroot=192.168.1.19:/work/nfs_root/first_fs
ip=192.168.1.11:192.168.1.19:192.168.1.1:255.255.255.0::eth0:off
最终参数为
网络文件系统方便的地方在于,比如我们在开发阶段,我们用nfs网络文件系统,然后我们在电脑上开发了程序,编译完之后,不需要下载,我们板子上就自然有这个可执行程序,我们可以直接进行测试,