0、目标
为了方便驱动阶段的开发,并且使用英伟达提供的上层应用,这里希望使jetson nano 从NFS启动,同时使用英伟达提供的rootfs根文件系统。
1、硬件准备
确保jetson nano 板子和开发主机之间使用网线进行连接(保持板子和开发主机的IP地址在同一网段,板子端在u-boot阶段设置,开发主机侧可以设置虚拟网卡),并且板子的调试口通过串口转USB连接到开发主机;确保板子能够停在u-boot启动阶段(方便设置启动参数、进行tftp传输)。
2、关键操作
1)拷贝官方bsp的Linux_for_Tegra目录下的rootfs;cp -r
拷贝到/nfs/rootfs_nvidia/rootfs
,修改nfs服务(在文件/etc/exports
末尾添加 /nfs/rootfs_nvidia/rootfs *(rw,sync,no_subtree_check,no_root_squash)
);
2)取消英伟达自带的登录初始化操作;在英伟达 Linux_for_Tegra/tools 下使用sudo ./l4t_create_default_user.sh -u ubuntu -p nvidia -a
,然后再
sudo chroot /nfs/rootfs_nvidia/rootfs /bin/bash
systemctl disable nv-oem-config.service
systemctl disable nv-oem-config.target
systemctl disable nv-oem-config-debconf.service
exit
3)最后用一开始提供的uboot命令,成功进入ubuntu系统;但此时发现没有加载任何内核模块,于是有了下一步;
4)使用下面命令,发现modules目录下的文件名与当前内核不匹配,
uname -r
ls /lib/modules/$(uname -r)
于是,进入到bsp的kernel源码目录,进行安装模块到我们的nfs目录:
export INSTALL_MOD_PATH=/nfs/rootfs_nvidia/rootfs
sudo -E make ARCH=arm64 modules_install
完成后,在/nfs/rootfs_nvidia/rootfs
下得到4.9.253
,删掉原来的4.9.253-tegra
,最后重新从nfs启动即可成功。
5)解决sudo
无法使用的问题:
//在开发机 x86 虚拟机 chroot 修复 sudo 权限
sudo chroot /nfs/rootfs_nvidia/rootfs /bin/bash
chown root:root /usr/bin/sudo
chmod 4755 /usr/bin/sudo
3、u-boot启动参数设置
//新的 测试环境
setenv ipaddr 192.168.137.9
setenv serverip 192.168.137.118
pci enum; pci //激活网卡
ping 192.168.137.118 //测试网络连接
setenv bootargs root=/dev/nfs rw nfsroot=192.168.137.118:/nfs/rootfs_nvidia/rootfs,v3 console=ttyS0,115200 init=/sbin/init ip=192.168.137.9
setenv nfs_bootcmd pci enum \; pci \; ext4load mmc 0:1 0x84000000 /home/zhan/Image \; tftp 0x83100000 tegra210-p3448-0000-p3449-0000-b00.dtb \; booti 0x84000000 - 83100000
run nfs_bootcmd
最终成功进入ubuntu,如下图