Ubuntu22.04虚拟机通过NFS连接开发板

在进行Linux驱动开发时,通过NFS将虚拟机上的文件系统挂载到开发板上遇到错误,原因是NFS服务版本不兼容。解决方案包括修改虚拟机的NFS配置,启用V2版本支持,并调整相关服务选项,使低版本开发板能成功挂载NFS文件系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在学习驱动开发是,为了方便编译,通过NFS将Linux的跟文件目录挂载到开发板的系统上。

1. 首先在虚拟机上安装NFS:

sudo apt-get install nfs-kernel-server rpcbind

2. 在虚拟机上新建文件夹,配置nfs,使得开发板可以通过网络来访问nfs文件夹:

sudo vi /etc/exports

打开/etc/exports 后,在文件最后添加以下内容:

/home/zuozhongkai/linux/nfs *(rw,sync,no_root_squash)

3. 重启NFS服务

sudo /etc/init.d/nfs-kernel-server restart

在构建好根文件系统之后,通过设置环境变量将根文件系统挂载到开发板上:

setenv bootargs 'console=ttymxc0,115200 root=/dev/nfs nfsroot=192.168.1.250:/home/zuozhongkai/linux/nfs/rootfs,proto=tcp rw ip=192.168.1.251:192.168.1.250:192.168.1.1:255.255.255.0::eth0:off' //设置 bootargs
saveenv //保存环境变量

在开启系统之后出现如下错误:

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
0100           65536 ram0  (driver?)
0101           65536 ram1  (driver?)
0102           65536 ram2  (driver?)
0103           65536 ram3  (driver?)
0104           65536 ram4  (driver?)
0105           65536 ram5  (driver?)
0106           65536 ram6  (driver?)
0107           65536 ram7  (driver?)
0108           65536 ram8  (driver?)
0109           65536 ram9  (driver?)
010a           65536 ram10  (driver?)
010b           65536 ram11  (driver?)
010c           65536 ram12  (driver?)
010d           65536 ram13  (driver?)
010e           65536 ram14  (driver?)
010f           65536 ram15  (driver?)
b300         1943552 mmcblk0  driver: mmcblk
  b301         1942528 mmcblk0p1 70682931-01
b310         7634944 mmcblk1  driver: mmcblk
  b311          131072 mmcblk1p1 40bcc898-01
  b312         7493632 mmcblk1p2 40bcc898-02
b340             512 mmcblk1rpmb  (driver?)
b330            4096 mmcblk1boot1  (driver?)
b320            4096 mmcblk1boot0  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
---[ end Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

在分析之后发现,是开发板安装的NFS服务版本过低,Ubuntu22.04下载的NFS版本高,默认情况下不支持较低版本NFS挂载服务,需要我们手动对配置进行修改。
首先查看虚拟机支持的NFS版本,在终端输入指令

sudo cat /proc/fs/nfsd/versions

发现为

“-2"表示系统不支持V2版本的NFS,”+3"表示支持V3版本的NFS。

解决办法:

在终端中输入vim /etc/default/nfs-kernel-server,在nfs-kernel-server文件中添加以下内容

RPCNFSDCOUNT="-V 2 8";
RPCMOUNTDOPTS="-V 2 --manage-gids";
RPCSNFSDOPTS="--nfs-version 2,3,4 --debug --syslog";

更改后保存文件

# Number of servers to start up
RPCNFSDCOUNT="-V 2 8"

# Runtime priority of server (see nice(1))
RPCNFSDPRIORITY=0

# Options for rpc.mountd.
# If you have a port-based firewall, you might want to set up
# a fixed port here using the --port option. For more information, 
# see rpc.mountd(8) or http://wiki.debian.org/SecuringNFS
# To disable NFSv4 on the server, specify '--no-nfs-version 4' here
RPCMOUNTDOPTS="-V 2 --manage-gids"

# Do you want to start the svcgssd daemon? It is only required for Kerberos
# exports. Valid alternatives are "yes" and "no"; the default is "no".
NEED_SVCGSSD=""

# Options for rpc.svcgssd.
RPCSVCGSSDOPTS=""
RPCSNFSDOPTS="--nfs-version 2,3,4 --debug --syslog"

再在终端中输入sudo vim /etc/nfs.conf,将文件中的udp和ver2打开

[nfsd]
# debug=0
# threads=8
# host=
# port=0
# grace-time=90
# lease-time=90
udp=y
# tcp=y
vers2=y
# vers3=y
# vers4=y
# vers4.0=y
# vers4.1=y
# vers4.2=y
# rdma=n
# rdma-port=20049

设置好后,重启nfs服务,发现开发板可以将nfs文件中的根目录挂载到开发板上

can-3v3: disabling
ALSA device list:
  No soundcards found.
VFS: Mounted root (nfs filesystem) readonly on device 0:15.
devtmpfs: mounted
Freeing unused kernel memory: 404K (8090f000 - 80974000)
### 支持 Ubuntu 22.04开发板 Ubuntu 22.04 是一个长期支持版本(LTS),因此许多现代开发板和嵌入式设备都支持该操作系统。以下是一些兼容 Ubuntu 22.04开发板,以及它们的特点: #### 1. **Raspberry Pi 系列** Raspberry Pi 系列开发板广泛支持 Ubuntu,尤其是较新的型号如 Raspberry Pi 4 和 Raspberry Pi 5。这些设备可以通过官方的 Ubuntu 镜像进行安装[^3]。 ```bash sudo apt update && sudo apt upgrade ``` 这些命令可用于更新系统软件包。 #### 2. **NVIDIA Jetson 系列** NVIDIA Jetson 系列(如 Jetson Nano、Jetson Xavier NX)是高性能 AI 开发板,官方支持 Ubuntu 20.0422.04。通过 NVIDIA 提供的工具链可以轻松配置开发环境[^4]。 ```bash sudo dpkg -i jetpack_ubuntu22.04.deb ``` #### 3. **STM32MP1 系列** STM32MP1 系列(如 STM32MP157)是一个低功耗、高性价比的开发板系列。虽然官方支持可能偏向于 Yocto 或 Buildroot,但社区提供了在 Ubuntu 22.04 上搭建开发环境的指南[^2]。 #### 4. **Rockchip 系列** Rockchip 系列(如 RK3588、RK3399)支持 Ubuntu 22.04,并且有丰富的文档说明如何编译和部署系统。例如,在 RK3588 上可以使用 `build-linux.sh` 脚本来构建特定的 NPU 模型[^4]。 ```bash ./build-linux.sh -t rk3588 -a aarch64 -d yolov8 ``` #### 5. **BeagleBone 系列** BeagleBone Black 和 BeagleBone AI 等开发板也支持 Ubuntu 22.04。这些设备适合 IoT 应用和嵌入式开发。 #### 6. **Orange Pi 系列** Orange Pi 系列开发板(如 Orange Pi 5、Orange Pi Zero 2)支持 Ubuntu 22.04,并且社区活跃,提供了详细的安装教程。 --- ### 注意事项 - 如果开发板需要挂载 NFS 作为根文件系统,需要注意 Ubuntu 22.04 默认内核可能不支持 NFS v2 协议。解决方案包括切换到较低版本的内核或调整 NFS 版本设置[^1]。 - 对于某些开发板,可能需要降低 GCC 版本来编译特定的库或框架(如 Qt5)。这可以通过 `update-alternatives` 命令实现。 --- ### 示例代码:降低 GCC 版本 ```bash sudo apt install gcc-8 g++-8 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 800 --slave /usr/bin/g++ g++ /usr/bin/g++-8 sudo update-alternatives --config gcc ``` --- ###
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值