经过上一篇《Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核》,已经实现了通过u-boot加载Kernel启动开发板,并且挂载根文件系统,本文讲述通过NFS网络挂载根文件系统。
通过NFS网络根文件系统,可以实现开发板在通过u-boot启动内核后,通过NFS网络在别的PC主机上挂载根文件系统。对于开发调试阶段的工作学习提供了很大的便利,可以直接在Linux主机上开发、编译驱动或者APP,并将目标文件拷贝到NFS服务目录中进行使用(此时文件相当于被拷贝到了开发板的根文件系统中)。也可以在主机端直接修改rootfs文件系统中别的文件,等效于在开发板上直接修改。
本文来介绍NFS挂载网络根文件系统的操作步骤,本方法不仅仅适用于Qemu搭建的ARM vexpress开发板环境,也适用于所有其他的开发板实体。
由于各个开发板的NFS网络文件系统制作方法是相同的,也可以参考Exynos4412和NanopiNEO开发板环境搭建中的NFS网络文件系统制作方法部分内容。
1. 环境配置
Linux主机支持NFS服务
修改bootargs启动参数
设置NFS为根文件系统
设置主机NFS文件系统地址
内核支持NFS挂载文件系统
2. 安装并配置NFS服务
2.1 Linux主机开启NFS服务
安装:
# sudo apt install nfs-kernel-server
配置NFS:
# vim /etc/exports
// 添加NFS共享目录
/home/mcy/qemu/rootfs *(rw, sync, no_root_squash, no_subtree_check)
rw 可读可写操作
sync 内存和磁盘上的内容保持同步
no_root_squash Linux主机不再将开发板设置为匿名用户,可以操作文件读写
no_subtree_check 不检查根文件系统子目录文件
重启NFS服务:
sudo /etc/init.d/rpcbind restart
sudo /etc/init.d/nfs-kernel-server restart
或者:
# systemctl restart nfs-kernel-server
检查NFS共享目录是否创建:
# sudo showmount -e
Export list for mcy-VirtualBox:
/home/mcy/qemu/rootfs *
注:
使用NFS网络文件系统时,需要Linux主机关闭系统防火墙,否则,系统在运行时会出现异常。
2.2 开发板配置支持NFS网络
修改u-boot中的启动参数:
# vim include/configs/
CONFIG_BOOTCOMMAND
setenv bootargs 'root=/dev/nfs rw
nfsroot=192.168.0.105:/home/mcy/qemu/rootfs init=/linuxrc
ip=192.168.0.110 console=ttyAMA0';
配置内核支持NFS挂载文件系统
完善NFS文件系统
重启reboot命令
3. 制作根文件系统
编译busybox
nfs
Linux System Utilities --->
[*] mount (30 kb)
[*] Support mounting NFS file systems on Linux < 2.6.23
创建rootfs目录,并在rootfs目录下创建文件:
# mkdir etc
# cd etc
# vim inittab
::sysinit:/etc/init.d/rcS // 执行rcS脚本
#::respawn:-/bin/sh
#tty2::askfirst:-/bin/sh
#::ctrlaltdel:/bin/umount -a -r
console::askfirst:-/bin/sh
::ctrlaltdel:/sbin/reboot
::shutdown:/bin/umount -a -r
# vim init.d/rcS
#! /bin/sh
PATH=/sbin:/bin:/user/sbin:/usr/bin
LD_LIBRARY_PATH=/lib
export PATH LD_LIBRARY_PATH
mount -a // 挂载根文件系统 fstab
mkdir -p /dev/pts
mount -t devpts devpts dev/pts
mdev -s
mkdir -p /var/lock
echo "......"
# vim fstab
proc /proc proc defaults 0 0
tmpfs /tmp tmpfs default 0 0
sysfs /sys sysfs default 0 0
tmpfs /dev tmpfs default 0 0
var /dev tmpfs default 0 0
ramfs /dev ramfs default 0 0
# vim profile
PS1='xiami@vexpress:w #'
export PS1
也可以在~/.bashrc中修改或设置PS1
启动流程:
Linux内核启动之后,挂载根文件系统
开启init进程,bootargs init=/linuxrc,启动第一个用户进程
在用户进程中读取inittab脚本,
构建其他目录
其他的目录可以是空目录
# cd rootfs
# mkdir proc mnt tmp sys root
上一篇:基于全志H3芯片的ARM开发环境搭建
下一篇:Qemu搭建ARM vexpress开发环境(二)----通过u-boot启动Linux内核
设计资源 培训 开发板 精华推荐
- 采用 12V 输入的 LTC3859EFE 高效三路 24V/1V/1.2V 转换器的典型应用电路
- FC-135R_STM32F401,STM32F401 MCU的32.768kHz晶振单元的振荡电路及选型指南
- EVAL-ADF7024DB1Z,用于 ADF7024 射频收发器的评估板(射频子板,862 MHz 至 928 MHz,单独匹配)
- LTM4622EV 4 相、1V 输出、10A 设计的典型应用电路,采用 LTC6902
- 使用 Analog Devices 的 LT1129CT-3.3 的参考设计
- LT6604CUFF-15 双路极低噪声、差分放大器和 15MHz 低通滤波器的典型应用电路
- NCL30051LEDGEVB,恒压恒流隔离LED驱动器
- 使用 ROHM Semiconductor 的 BD4938 的参考设计
- STEVAL-BCN002V1B,BlueTile - 支持蓝牙 LE 的传感器节点开发套件
- 降低 MCP16301 高压降压转换器中的高频开关噪声
- 【分享成长,10月有奖】EEWORLD优秀主题/回复第15期活动开始啦!!!
- NXP COG趣味有奖问答
- 力源带你了解安森美半导体开发神器——高度灵活的物联网开发套件( IDK )!看视频轻松答题享好礼!
- 2023 DigiKey KOL 系列——将TinyML融入IoT物联网应用中
- EEWORLD年度人物公布啦!2013,感谢有你!
- 是德科技有奖直播:元宇宙测试系列研讨会之VR/AR 数字接口测试的挑战
- 打造健康生活,成就强劲工具 TE Connectivity (TE) 智慧生活子系统解决方案
- TI有奖创意征集,CC3200开发套件等100份礼品等你来
- TTI Asia 2016慕尼黑上海电子展关注有礼活动
- 深入剖析恩智浦LPC1000处理器