一.编译安装busybox
1.sudo su进入root权限
2.make menuconfig配置一下busybox
3.make编译
4.mkdir /work/nfs_root/first_fs目录
5.一定要 make CONFIG_PREFIX=/work/nfs_root/first_fs install这样安装busybox,不能直接make install否则会安装在pc机上破坏系统,这一步一定要切换到root模式,不然安装不了
二.制作最小根文件系统
2.1制作字符设备文件/dev/console /dev/null
a)首先查看pc机文件系统格式ls /dev/console /dev/null -l
b)创建文件夹 mkdir dev,并进入cd dev/
c) 创建console字符设备主设备号5,次设备号1,mknod console c 5 1
d) 创建null字符设备主设备号1,次设备号3,mknod null c 1 3
2.2制作etc目录下的配置文件
a)返回根目录系统/work/nfs_root/first_fs
b)创建etc目录mkdir etc
c)编译该目录配置文件vi etc/inittab,添加console::askfirst:-/bin/sh,即把标准输入、标准输出、标准错误输出console上
2.3安装glibc库,我电脑glibc库的位置/usr/local/arm/gcc-3.4.5-glibc-2.3.6/arm-linux/lib
a)在库目录创建lib目录mkdir -p /work/nfs_root/first_fs/lib
b)把加载器拷贝到lib目录cp *.so* /work/nfs_root/first_fs/lib -d,加-d意思是拷贝时直接是链接一起拷贝,这样不会把真实库拷贝覆盖导致库文件太大
2.4 制作yaffs文件映像文件,yaffs1适用小页nandflash,每页512字节,对于大页系统需适用yaffs2,比如每页2018字节
a)解压yaffs文件tar -jxf yaffs_source_util_larger_small_page_nand.tar.bz2
b)进入解压后的文件,/home/linux/u_boot/Development_util_ok/yaffs2/utils
c)make编译生成mkyaffs2image
d)拷贝到pc机根目录下 sudo cp mkyaffs2image /usr/local/bin/
e)加上可执行权限sudo chmod +x /usr/local/bin/mkyaffs2image
f)在root模式下,cd /work/nfs_root
e)首先mkyaffs2image,查看怎么制作,如下
/work/nfs_root$ mkyaffs2image
mkyaffs2image: image building tool for YAFFS2 built Oct 9 2019
usage: mkyaffs2image dir image_file [convert]
dir the directory tree to be converted
image_file the output file to hold the image
'convert' produce a big-endian image from a little-endian machine
e)使用这个命令制作 mkyaffs2image first_fs first_fs.yaffs2
f)proc目录,内核提供的虚拟文件系统,收集当前系统运行程序的信息,如ps命令通过该目录查看当前进程的运行信息,
>修改、etc/inittab加上::sysinit:/etc/init.d/rcs
>创建一个脚本文件mkdir /etc/init.d
>编辑脚本文件vi /etc/init.d/rcs 添加mount -t none /proc或者用用rcs脚本添加mount -a 去读出/etc/fstab根据配置文件里面内容来挂载文件系统,
vi /etc/fstab 添加#device mount-point type options dump fsck order
proc /proc proc defaults 0 0
2.5 制作NFS根文件系统
1)cd /work/nfs_root/first_fs,进入该目录
2)拷贝该目录,sudo vi /etc/exports ,在最后一行添加被挂载共享的目录
/work/nfs_root/first_fs *(rw,sync,no_root_squash,no_subtree_check)
3)重启服务器
sudo /etc/init.d/nfs-kernel-server restart
4)本机测试sudo mount -t nfs 192.168.0.102:/work/nfs_root/first_fs /mnt,将本机ip地址/work/nfs_root/first_fs 目录内容挂载到/mnt目录
5)打开开发板执行 mount -t nfs -o nolock 192.168.0.102:/work/nfs_root/first_fs /mnt,ls可以看见本机该目录的内容被挂载到/mnt目录下
2.6 设置直接从NFS系统启动,需要设置环境参数
bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0
在内核树种输入grep "nfsroot=" * -nR
可以搜到在源码树中Documentation/nfsroot.txt:52:nfsroot=[
三.调试错误
原先,arm-linux-gcc -v 4.4.3 制作根文件系统,虽然能打开/dev/console/ 但是老是卡住子linuxrc,然后不动,
解决办法:更好gcc编译器,换成arm-linux-gcc -v 3.4.5 ok!