1.NFS起文件系统的制作
(根文件系统是由一系列目录组成的,其中目录包含了应用程序,C库,以及相关的配置文件)
1.创建文件系统的目录
#mkdir /test_disk/rootfs/
#cd /test_disk/rootfs
#mkdir bin dev etc lib sbin proc sys var mnt tmp usr
#mkdir usr/bin usr/lib usr/sbin lib/modules
2.创建设备节点
#cd dev/
#mknod -m 666 console c 5 1
#mknod -m 666 null c 1 3
3.安装(或创建)设备文件(inittab, profile,rcS,)
(#tar -xzvf etc/tar.gz -C /test_disk/fs/rootfs/)
4.编译内核模块
#cd */linux-kernel/
#make modules ARCH=arm CROSS_COMPILE=arm-linux-
5.安装内核模块
#make modules_install ARCH=arm INSTALL_MOD_PATH=/test_disk/rootfs/
#cd /test_disk/rootfs/lib/modules/
#ls
6.配置busybox
#tar xzvf busybox.tar.gz
#cd busybox
#make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
必须选中和修改的项:
1."Build Busybox as a static binary(no share libs)"
2."Don't use /usr"
3."cross compiler prefix"--------->arm-linux-
4."Busybox Installation prefix"--->/test_disk/rootfs/
(1选择的是静态连接库的方式,如果不选就是使用动态连接库的方式)
(采用动态连接库的方式,在lib目录中添加应用程序所需的库文件)
(Archival Utilities-->gzip这个选项一定不能掉)
其他的命令配置选项可自行裁剪
7.编译安装busybox
#make ARCH=arm CROSS_COMPILE=arm-linux-
#make install
(第一个命令:在当前的目录下有个busybox的应用程序)
(第二个命令:安装配置的应用程序到/test_disk/rootfs/bin 和 /sbin)
(其实在/test_disk/rootfs/bin下所有的应用程序,都是软连接到busybox)
(busybox根据参数的不同,执行不同的命令)
(检查是否安装好了--在bin目录下是否有busybox, sbin目录下是否有init)
8.配置内核支持NFS启动,并编译
进入到内核所在的目录下
#vim .config
?CMDLINE
找到CONFIG_COMPILE哪行,修改为:
CONFIG_COMPILE="root=/dev/nfs nfsroot=192.168.1.16:/test_disk/tftpboot/
ip=192.168.1.230 rw console=ttySAC0 mem=64M"
root=/dev/nfs 内核采用nfs起根文件系统
nfsroot=192.168.1.16:/test_disk/tftpboot/
(nfs起根文件系统位于nfs服务器/test_disk/tftpboot目录,服务器IP:192.168.1.16)
ip=192.168.1.230 开发板IP,要求与服务起在网段(Bridged)
rw 文件系统可读可写
console=ttySAC0 以ttySAC0作为控制台
mem=64M 开发板的内存大小64MB
(以上其实可以在make menuconfig中修改,但是很麻烦)
#make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-
必须选中和修改的选项:
"File systems"->"Network File systems"->
<*>NFS client support
[*]NFS client support NFS version 3
[*]Root file system on NFS
#make uImage ARCH=arm CROSS_COMPILE=arm-linux-
(在arch/arm/boot/目录下会生成uImage文件)
#cp */arch/arm/boot/uImage /test_disk/tftpboot/
9.在主机上,启动NFS服务
参见搭建nfs服务
(启动:#/etc/init.d/nfs-kernel-server restart)
(修改配置文件:/etc/exports文件)
10.测试NFS文件系统
启动开发板,进入Uboot
uboot> printenv
uboot> setenv serverip 192.168.1.16
uboot> setenv ipaddr 192.168.1.230
uboot> setenv ethaddr 00:01:02:03:04:05
uboot> saveenv
uboot> ping 192.168.1.16
(如果打印"host 192.168.1.16 is alive" 表示网络可用)
uboot> tftp 31000000 uImage (#/etc/init.d/xinet restart)
(tftp命令将服务器目录中uImage读入到开发板地址为31000000处)
uboot> bootm 31000000
出现一下情况:
eth0: link down
IP-Config: Complete:
device=eth0, addr=192.168.0.2, mask=255.255.255.0, gw=255.255.255.255,
host=192.168.0.2, domain=, nis-domain=(none),
bootserver=192.168.0.1, rootserver=192.168.0.1, rootpath=
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
(文件系统挂载失败,导致无法启动系统)
(由上面的IP-config信息可以看出nfs服务器IP和开发板自身的IP)
如果在Uboot命令行下使用命令使用setenv serverIP{ip}修改都无法改变以上参数中的值
那么使用如下命令:
uboot> setenv bootargs noinitrd root=/dev/nfs rw nfsroot=192.168.1.16:/test_disk/fs/rootfs ip=192.168.1.230:192.168.1.16::255.255.255.0 console=ttySAC0,115200 init=/linuxrc mem=64M
确定/etc/exports .config中CMDLINE= bootargs三者共享的目录是一样的