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,如下圖