1. 前言 根文件系统是linux内核启动之后挂载的第一个文件系统,上篇文章里已经介绍过,如何使用busybox来制作根文件系统。这篇文章介绍根文件系统制作成功后,如何让内核找到文件系统,并完成挂载,进入到系统命令行终端。
根文件系统支持从网络挂载和本地挂载两种方式:
(1)如果是采用网络挂载就将路径设置为/dev/nfs,nfs是linux下常用的网络文件系统,这种方式挂载一般是在系统开发阶段,方便修改调试代码,也就是将根文件系统放在pc机上,嵌入式开发板通过网络到pc机进行访问。
(2)本地挂载就是让内核从sd卡、emmc、光盘等设备里加载根文件系统,设备路径设置为/dev/sda、/dev/ram等等。具体设备节点名称是什么就填什么。本地挂载一般用在产品发布的时候,当整个系统开发完毕,就将pc机上的完整目录拷贝到本地存储设备里,让内核直接从本地加载,这样开启启动的速度会快很多,文件读写也快很多,不在经过网络传输。本地挂载不方便调试代码,一般开发阶段还是nfs方式比较方便。
上面说的路径设置这些配置是在uboot里设置,uboot有一个环境变量专门用于给内核传参,当内核启动之后,会根据uboot传递的参数完成执行。
当前采用的开发板是友善之臂的tiny4412,内核、uboot、交叉编译器都采用官方光盘自带的文件。
如果设置内核为nfs网络挂载,uboot的环境变量设置格式如下:
tiny4412 # setenv bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttysac0 lcd=s702 tiny4412 # saveenv tiny4412 # reset复制代码 2. nfs网络方式挂载 前提是先把根文件系统制作好才能继续这一步。当前的宿主机采用redhat6.3,这个系统比较老,但是功能是很齐全的,运行起来很流畅。要进行nfs网络挂载,需要先把pc机的网络与开发板的网络设置好,保证在同一个局域网内。当前的redhat6.3系统是跑在vm虚拟机里,接下来就对网络进行配置。
开发板nfs网络挂载的思路:
pc机开启nfs服务器,配置nfs共享的路径: 将rootfs共享出来. 开发板当做nfs客户端,去挂载pc机共享的目录,完成文件系统的访问 (1)配置虚拟机网络
(2)配置pc机nfs服务器
[wbyq@wbyq rootfs]$ sudo vim /etc/exports /home/wbyq/work/rootfs *(insecure,rw,no_root_squash,sync)复制代码 编写个脚本方便启动nfs服务器: 可以放在用户目录下 比如: nfs_restart.sh 运用脚本要使用管理员权限,脚本改权限为可执行
service nfs restart #重启 nfs 服务器 service iptables stop #关闭防火墙 ifconfig eth0 192.168.10.11 #设置ip地址复制代码 查看系统网卡名称: ifconfig
(3)运行脚本启动nfs服务器
[wbyq@wbyq ~]$ sudo ./nfs_restart.sh [sudo] password for wbyq: 关闭 nfs 守护进程: [失败] 关闭 nfs mountd: [失败] 关闭 nfs quotas: [失败] 关闭 nfs 服务: [确定] 启动 nfs 服务: [确定] 关掉 nfs 配额: [确定] 启动 nfs mountd: [确定] 正在启动 rpc idmapd: [确定] 正在启动 rpc idmapd: [确定] 启动 nfs 守护进程: [确定] [wbyq@wbyq ~]$ sudo ./nfs_restart.sh 关闭 nfs 守护进程: [确定] 关闭 nfs mountd: [确定] 关闭 nfs quotas: [确定] 关闭 nfs 服务: [确定] 启动 nfs 服务: [确定] 关掉 nfs 配额: [确定] 启动 nfs mountd: [确定] 正在启动 rpc idmapd: [确定] 正在启动 rpc idmapd: [确定] 启动 nfs 守护进程: [确定] [wbyq@wbyq ~]$ 复制代码 (4)设置uboot的环境变量
进入到uboot的命令行,设置环境变量。 set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttysac0 lcd=s702 set bootargs root=/dev/nfs nfsroot=: ip=:::255.255.255.0::eth0:off init=/linuxrc console=ttysac0 lcd=s702 执行示例: tiny4412 # set bootargs root=/dev/nfs nfsroot=192.168.10.11:/home/wbyq/work/rootfs ip=192.168.10.123:192.168.10.11:192.168.10.1:255.255.255.0::eth0:off init=/linuxrc console=ttysac0 lcd=s702 tiny4412 # save tiny4412 # reset复制代码共享路径> 重启之后开发板正常就会进入到linux命令行:
将德国和荷兰之间输电容量提高750兆瓦的新电力互联线路已经投运
能源产业迎来新面貌 可视化监控可以推进能源控制站建设
华为全场景智能光伏解决方案助力电力清洁化转型
鸿蒙即将开源系统,并在武汉大学等15个学校开展harmonyOS课程
张艺谋团队把LED技术的应用展现出一场视觉盛宴!
嵌入式Linux开发-根文件系统NFS网络挂载
dma和串口直接发送的区别
刚刚,AMD又收购了一家公司
java有哪些定时任务的框架 分布式任务调度系统对比
三星12英寸闪存芯片二期助推加快形成新发展格局
半导体设备业兼并求生 迷雾中的希望
PC并行端口作为数字I/O口的应用
首款3nm芯片:苹果A17性能跑分出炉
美国研发新型柔软固体电解质,可延长电动汽车续航
苹果13会有银色吗
继亚马逊后,微软宣布暂停向警方出售面部识别技术
扩展MAX9930在有线电视应用中的功能
食品甲醛含量检测仪的特点及其相关功能的介绍
俄罗斯MC-21型国产客机的生产计划因受美国制裁影响被迫延期一年
什么是应用交付网络ADN