首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

U-Boot 啟動內核掛載 NFS 根文件系統完整指南

     編輯:關於C語言

嵌入式開發:U-Boot 网络启动与 NFS 掛載實戰

記錄一次開發板通過 U-Boot 下載內核並掛載 NFS 根文件系統的完整過程,包含網絡協議選擇避坑與 NAND 燒寫後的網卡驅動問題排查。

環境準備與 TFTP 下載

  1. 編譯內核生成 uImage,拷貝至服務器 /tftpboot/
  2. U-Boot 下執行:tftp 31000000 uImage
  3. 配置啟動參數 bootargs:
setenv bootargs noinitrd console=ttySAC0,115200 init=/init \
root=/dev/nfs rw nfsroot=192.168.1.118:/home/rootfs,proto=tcp,nfsvers=3 \
ip=192.168.1.119:192.168.1.118:192.168.1.1:255.255.255.0::eth0:off

關鍵點:TCP 協議解決丟包

DM9000 網卡在 UDP 模式下丟包率超 50%,將 nfsroot 參數指定 proto=tcp 後穩定掛載。

NAND 燒寫後的啟動失敗排查

現象:燒寫內核到 NAND,配置 bootcmd=nand read 31000000 300000 300000; bootm 31000000,重啟後內核啟動但掛載根文件系統失敗,提示找不到網卡。

掛載失敗錯誤信息

根因分析與解決

  • U-Boot 階段僅執行網絡命令(如 tftp)才會使能網卡硬件
  • 直接 bootm 時網卡未初始化,內核驅動無法接管
  • 解決方案:在 bootcmd 中加入 tftp 命令(哪怕不下載文件)以啟用網卡:
setenv bootcmd tftp 31000000 uImage; nand read 31000000 300000 300000; bootm 31000000

經驗總結

  1. NFS 掛載優先選 TCP 協議,避免廉價網卡 UDP 丟包
  2. U-Boot 到內核的設備驅動交接需確保硬件已使能
  3. bootcmd 應包含必要的硬件初始化序列
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved