cubieboard uboot中修改掛載的根文件系統路徑


特別鳴謝《構建嵌入式Linux系統》第九章 設置bootloader U-Boot引導
 
cubieboard6本想把rootfs放到移動硬盤上/dev/sda1,結果修改uenv.txt后,無法啟動。
用網上的辦法,把固件燒到TF卡上也不能啟動,最后通過修改uboot啟動參數解決。
另外的方法沒試:1. 直接連接miniUSB重新裝系統 2.uboot tftp方式啟動
經此一役,趕緊把uenv.txt做了一個備份uenv.txt.bak,下次直接改uboot的環境變量bootenv=uEnv.txt即可。
 
默認uenv.txt的內容(在/dev/mmcblk0p1路徑下)
uenvcmd=setenv os_type ubuntu;setenv ramdisk_addr_r -;
bootargs=earlyprintk clk_ignore_unused selinux=0 root=/dev/mmcblk0p2 rw console==ttyS3 real_rootflags=rw loglevel=4 rootfstype=ext4
uboot常用命令:
printenv查看環境變量
setenv 設置環境變量
setenv abc 123
printenv abc查看設置的環境變量
setenv abc 不跟值即是刪除環境變量
saveenv 保存環境變量
 
第一步,接上串口,拷貝出所有的錯誤日志
Hit any key to stop autoboot: 0
boot from emmc card ...
reading uEnv.txt
183 bytes read in 2 ms (88.9 KiB/s)
Loaded environment from uEnv.txt
Running uenvcmd ...
reading boot.scr
reading uImage
5681616 bytes read in 242 ms (22.4 MiB/s)
... 省略
cmdline: console=ttyS3 earlyprintk clk_ignore_unused selinux=0 root=/dev/sda1 rw console=ttyS3 real_rootflags=rw loglevel=4 rootfstype2
boot_append_bootargs_add, bootargs console=ttyS3 earlyprintk clk_ignore_unused selinux=0 root=/dev/sda1 rw console=ttyS3 real_rootflag2
 
Starting kernel ...
 
第二步,啟動過程中按任意鍵,進入uboot
Hit any key to stop autoboot: 0
owl> printenv
...省略
研究第一步中串口啟動過程中的打印日志和printenv打印出的內容推測啟動順序:
bootcmd=run emmcboot
emmcboot=echo boot from emmc card ...; run emmcargs; run setbootenv
setbootenv=if run loadbootenv; then echo Loaded environment from ${bootenv};env import -t ${scriptaddr} ${filesize};fi;if test -n "${uenvcmd}"; then echo Run;
mboot= run loadkernel; run loadramdisk; run loadfdt;bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}
 
第三步,測試推測
setenv emmcboot ' echo boot from emmc card zzz...; run emmcargs; run setbootenv'
printenv emmcboot
saveenv
reset #重啟
從啟動過程中的日志打印,能夠看出推測是正確的
 
第四步,在啟動內核之前,修改啟動參數,以下兩條命令均是單行命令,沒有換行。
setenv bootargs_base 'setenv bootargs 'earlyprintk clk_ignore_unused selinux=0 root=/dev/mmcblk0p2 rw console==ttyS3 real_rootflags=rw loglevel=4 rootfstype=ext4''
 
setenv mboot 'run bootargs_base; run loadkernel; run loadramdisk; run loadfdt;bootm ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r}'
查看修改是否生效:
printenv bootargs_base
printenv mboot
保存修改:saveenv
重啟:reset
 
終於可以正常啟動了,看到了久違的Welcome to Debian GNU/Linux 9 (stretch)!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM