08.构建根文件系统

元气小坏坏 提交于 2019-11-29 07:48:43

 终于自动挂载文件系统成功了!!!出错的地方两个!!!
  第一,恢复出厂设置一定要用eop下载uboot,dnw下载的不行!!!最后记得erase nand params!!
  第二,set bootargs noinitrd root=/dev/nfs nfsroot=202.193.61.195:/work/nfs_root/first_fs ip=202.193.61.196:202.193.61.195:202.193.61.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
参数解读:
 nfsroot=202.193.61.195: ubuntu ip地址
 /work/nfs_root/first_fs要挂载的目录
 ip=202.193.61.196: 单板ip(恢复出厂设置后记得先配置ip,手动挂载下能不能成功,可以成功的话再修改bootargs自动挂载!)
 202.193.61.195: 依然是ubuntu ip !!!!!注意!!!
 202.193.61.1: 网关,只要处于同一网段就好。
 255.255.255.0:: 子网掩码
 eth0: 网卡,一般都是0
 off 是否自动配置 off就可以

下面回顾下整个过程!

最小根文件系统的组成:1.dev/console /dev/null 2.init程序(来源busybox)3./etc/inittab 4.配置文件指定的应用程序 5.C库

1.配置编辑busybox

 (1)将busybox-1.7.0.tar.bz2文件上传到ubuntu中work/system,使用tar xjf busybox-1.7.0.tar.bz2解压,查看install文件,在这里插入图片描述
 (2)在busybox-1.7.0文件夹下中使用make menuconfig 配置busybox(其实什么都不用改),配置完成执行make命令。
 (3)执行mkdir -p /work/nfs_root/first_fs创建first_fs文件夹。使用make CONFIG_PREFIX=/work/nfs_root/first_fs install安装到first_fs文件夹中。安装完成,使用ls命令查看,已经有了一些文件夹。bin下面的ls指向busybox的链接。在这里插入图片描述

2.创建dev目录

 (1)在busybox-1.7.0文件夹下使用 vi Makefile打开Makefile,找到交叉编译工具链,设置为CROSS_COMPILE__?=arm-linux-,之后保存退出。
  (2)在ubuntu下创建目录/work/nfs_root/first_fs,使用ls /dev/console /dev/null -l命令查看主设备号和次设备号
在这里插入图片描述
  (3)在first_fs目录下使用mkdir dev命令创建dev文件夹,进入dev文件夹中是要用sudo mknod console c 5 1和sudo mknod null c 1 3命令申请设备文件,之后在dev文件夹下ls -l就可以看到我们创建的设备文件。
在这里插入图片描述
 (4)在first_fs文件夹下使用mkdir etc创建目录,vi /etc/inittab打开inittab文件,加入console::askfirst:-bin/sh和::sysinit:/etc/init.d/rcS。
拷贝C库,
在first_fs目录下创建脚本文件,mkdir etc/init.d,然后vi etc/init.d/rcS,在rcS文件中加入mount -t proc none /proc。加上可执行属性,chmod +x etc/init.d/rcS。之后ls查看创建的proc。
在这里插入图片描述
 (5)文件系统一烧进板子,启动的时候就会执行 etc/init.d/rcS 中的mount -t proc none /proc。
也可以使用mount -a命令挂载根文件系统。使用vi etc/init.d/rcS打开文件,注释掉之前的脚本内容,加入mount -a。mount -a会依赖于文件etc/ fstab,在fstab中加入 proc /proc proc defaults 0 0。mount -a命令根据fstab的内容去挂载文件系统。
在这里插入图片描述
 (6)使用mkyaffs2image first_fs first_fs.yaffs2制作yaffs映像文件(这里略过)。具体参考嵌入式linux开发完全手册371页或者韦东山衔接视频第十一课第四节6min中处。
 (7)进入开发板的文件系统之后,使用cat /proc/mounts查看挂在了那些文件系统。
在这里插入图片描述
udev机制 自动创建dev目录下的设备节点 busybox中有mdev。打开mdev.txt。步骤如下
在这里插入图片描述
在first_fs中 mkdir sys。在first_fs下使用vi /etc/fstab打开文件(参考linux应用开发手册370页!!!认真看!!!少了那个都不行),加入
 sysfs /sys sysfs defaults 0 0
 tmpfs /tmp tmpfs defaults 0 0
 tmpfs /dev tmpfs defaults 0 0。
打开etc/init.d/rcS,加入
  mkdir /dev/pts
 mount -t devpts devpts /dev/pts
 echo /sbin/mdev > /proc/sys/kernel/hotplug
 mdev -s
之后制作yaffs2映像文件,烧写到板子。

烧写fs_mini.yaffs2后,在板子文件系统中配置ip,ifconfig etn0 202.193.61.1,处于同一网段,ping 通服务器即可
在这里插入图片描述
下面重头戏!!!!!
手工挂接根文件系统!!!

挂接NFS条件:
 1.服务器允许目录可被别人挂接。在first_fs目录下sudo vi /etc/exports,打开配置文件,加上要挂接的目录
在这里插入图片描述
 重启nfs服务 sudo /etc/init.d/nfs-kernel-server restart
之后,在服务器上自己挂接自己,sudo mount -t nfs 202.193.61.195:/work/nfs_root/first_fs /mnt。没有报错表明挂载成功。
 2.单板去挂接
 从flash上启动根文件系统,再用命令挂接NFS。先使用mkdir /mnt创建目录,使用mount -t nfs -o nolock 202.193.61.195:/work/nfs_root/first_fs /mnt(注意,要先修改开发板ip,ifconfig临时修改。永久修改方法?)
在这里插入图片描述
 挂载成功如图所示。/mnt目录下的和服务器上的内容一样。
 直接从nfs启动,修改set bootargs noinitrd root=/dev/nfs nfsroot=202.193.61.195:/work/nfs_root/first_fs ip=202.193.61.196:202.193.61.195:202.193.61.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
重启 就可以

编译驱动文件
 在ubuntu下建立文件夹并进入work/drivers_and_test/first_drv,将pc机上写好的.c文件放入。使用make命令编译。成功后会有.ko文件生成。

/*编译驱动程序依赖于内核,下面是内核的目录。编译驱动之前要先编译内核*/
KERN_DIR = /work/system/linux-2.6.22.6
/*make -C 目录,表示进入目录当中使用makefile编译。*/
all:
	make -C $(KERN_DIR) M=`pwd` modules 

clean:
	make -C $(KERN_DIR) M=`pwd` modules clean
	rm -rf modules.order

obj-m	+= first_drv.o

 在单板文件系统中看到的文件和ubuntu中的一样。
在这里插入图片描述
 首先使用cat /proc/devices查看当前的设备
在这里插入图片描述
 使用insmod first_drv.ko即可加载驱动。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!