在嵌入式開發中,經常需要對系統的各個部分進行修改。倘若每次修改都燒寫到板子中,一來浪費時間,其次影響存儲介質壽命。
所以,需要一些手段來避免此類問題。
概覽:
-
編譯uboot
-
將uboot寫入SD卡,並通過硬件設置從sd卡啟動uboot程序
-
編譯kernel,設置其可以通過NFS掛載根文件系統
-
開發環境安裝TFTP服務器、NFS服務器
-
目標環境設置uboot參數,並進行測試
-
制作根文件系統(optional)
-
將uboot參數改回,燒寫各部分到板子上
第2步不一定是用sd卡,根據硬件特性的差異決定,也可以考慮將uboot寫入板子中,再進行此后的操作。
在這里我們重點介紹第三步以及第五步。其他步驟請參考其他資料。第三步以修改bootcmd為主,第五步以修改bootargs為主。
設置uboot,使其通過下載並引導內核
1.確保配置好了tftp服務器,並在tftp服務器指定的根目錄下存放kernel鏡像
2.明白鏡像的運行地址位於何處(第三步中需要用到)
3.在uboot的下載模式中,設置bootcmd
setenv bootcmd 'tftp 0x42000000 kernel;bootm 0x42000000' saveenv
嵌入式系統Linux內核對nfs文件系統的支持:
這里只做簡單的介紹,具體細節可以參考:《配置uboot指定nfs掛載根文件系統》
1.進入內核配置頁,根據以下參數進行配置
-> Networking support -> Networking options [*] IP: kernel level autoconfiguration -> File systems [*] Network File Systems <*> NFS client support <*> NFS client support for NFS version 3 [*] NFS client support for the NFSv3 ACL protocol extension [*] Root file system on NFS
2.uboot修改bootargs(最好是備份好bootargs) 添加下划線部分*其中的ip根據自己的實際情況進行修改
setenv bootargs 'root=/dev/nfs nfsroot=${serverip}:/xxx/fs,v3,tcp rw ip=${ipaddr}:${serverip}:${gatewayip}:${netmask} ::eth0:on init=/linuxrc console=ttyAMA0,115200' saveenv
這樣一來,調試就非常方便而且高效了。
改編自:《Tiny210v2( S5PV210 )平台下: 利用uboot啟動遠程Kernel(TFTP)以及掛載遠程ROOTFS(NFS)