上一篇文章讲解了linux系统移植到开发板上的步骤,本篇文章讲解根文件系统的制作。
1.配置编译busybox,在busybox源码目录中的install文件说明了怎么编译。
①打开Makefile,修改ARCH和CROSS_COMPILE
②make menuconfig
③make install或make CONFIG_PREFIX=/path install安装到指定的目录,一面破坏PC机的根文件系统
2.修改完善文件系统
①创建/dev/console和/dev/null两个设备节点
mknod console c 5 1
mknod null c 3 1
②创建/etc/inittab文件,添加:console::askfirst:-/bin/sh(这个就是linux启动的第一个应用程序)
inittab文件格式:
<id>:<runlevels>:<action>:<process>
id=>/dev/id,用作终端:stdin、stdout、stderr:printf,scanf,err
runlevels:可以忽略
action:执行时机
process:应用程序或脚本
③安装C库
将交叉编译工具中的so文件拷贝到busybox中的lib目录下
到此为止,一个最小根文件系统做好了,可以烧到开发板上运行了。
下面我们继续完善。
在烧有最小文件系统的开发板上执行ps命令提示不能打开/proc,没有目录,ps命令就是去/proc目录看看有什么内容,并显示在终端上。
创建proc目录:mkdir proc
挂载proc文件系统:mount -t proc none /proc(proc是内核提供的虚拟文件系统)
这时在终端上输入ps命令,正常。
另一种方法:
vi /etc/inittab
添加:::sysinit:/etc/init.d/rcS
创建脚本文件:
mkdir /etc/init.d
vi rcS
添加:mount -t proc none /proc
为rcS添加执行属性:chmod +x /etc/init.d/rcS
在一中方法:mount -a,根据/etc/fstab内容来挂载根文件系统
创建:vi /etc/fstab
fstab文件的格式:
# device mount-point type options dump fsck order
proc /proc proc default 0 0
下面完善dev目录:
linux系统中用udev自动创建/dev目录下的设备节点,在busybox里用的是udev的简化版本mdev。
首先创建sys目录:mkdir /sys
在/etc/fstab文件中添加
sysfs /sys sysfs default 0 0
tmpfs /dev tmpfs default 0 0
在vi /etc/init.d/rcS中添加如下内容:
mount -a
mkdir /dev/pts
mount -t devpts devpts /dev/pts
echo /sbin/mdev > /proc/sys/kernel/hotplug //当加在某个模块时内核会调用hotplug,而这个hotplug指向了/sbin/mdev,这个程序会自动创建设备节点
mdev -s //意思是将内核现有的节点先创建出来
在开发调试过程中经常用到网络文件系统。
1.服务器端:
修改/etc/exports文件,添加如下内容:
/opt/EmbedSky/root_nfs *(rw,sync,no_root_squash)
添加的内容表示:表示允许任何IP地址范围的计算机以读写的方式访问/opt/EmbedSky/root_nfs目录
/opt/EmbedSky/root_nfs称为服务器输出共享目
括号内的参数意义描述如下: rw:读/写权限,只读权限的参数为ro; sync:数据同步写入内存和硬盘,也可以使用async,此时数据会先暂存于内存中,而不立即写入硬盘。 no_root_squash:NFS服务器共享目录用户的属性,如果用户是 root,那么对于这个共享目录来说就具有 root 的权限。
重启nfs服务:service rpcbind restart service nfs start
2.客户端:
mkdir /mnt/nfs
mount -t nfs -o nolock 192.168.1.58:/opt/EmbedSky/root_nfs /mnt/nfs/
注意:这里的-o nolock不能省略,否则提示:rpcbind: server localhost not responding, timed out
开机自动挂在网络文件系统:
set bootargs noinitrd root=/dev/nfs nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autocof> init=/linuxrc console=ttySAC0