一、U-Boot 指令介紹
接續前一章節 Rootfs 植入 sdcard.img 開機 ,當我們進入 U-Boot# 後 ,有以下幾個常用的指令介紹:
0. help
指令總覽1. mmc
跟 SD/MMC 有關的指令及輸出。下面 mmc list 可以印出,
目前裝置所接有的 SD Card 代號為 mmc 0
U-Boot# mmc list OMAP SD/MMC: 0
下面 mmc part 可以印出,
mmc 0 這裝置之磁區分割 (Partition)
U-Boot# mmc part Partition Map for MMC device 0 -- Partition Type: DOS Part Start Sector Num Sectors UUID Type 1 2048 163840 925db895-01 0b Boot 2 165888 1931264 925db895-02 83
下面 mmc info 可以看到目前 sd card 相關資訊。
U-Boot# mmc info Device: OMAP SD/MMC Manufacturer ID: aa OEM: 5859 Name: QEMU! Tran Speed: 25000000 Rd Block Len: 512 SD version 1.0 High Capacity: No Capacity: 1 GiB Bus Width: 4-bit
2. bdinfo
查看嵌入式版子資訊,
其中比較需要注意的是第五行 -> start = 0x80000000,
這跟我們載入開機的記憶體位址有關。
U-Boot# bdinfo arch_number = 0x0000060A boot_params = 0x80000100 DRAM bank = 0x00000000 -> start = 0x80000000 -> size = 0x08000000 DRAM bank = 0x00000001 -> start = 0x88000000 -> size = 0x08000000 eth0name = usb_ether ethaddr = (not set) current eth = usb_ether ip_addr =baudrate = 115200 bps TLB addr = 0x8FFF0000 relocaddr = 0x8FF4C000 reloc off = 0x0FE4C000 irq_sp = 0x8EF2BEE0 sp start = 0x8EF2BED0
3. ls
查看 SD Card 內容之檔案目錄。
其中 mmc 0:1 是指 sdcard.img1:
U-Boot# ls mmc 0:1 1852516 u-boot 392152 u-boot.bin 51100 mlo 392216 u-boot.img 2533720 uimage 5 file(s), 0 dir(s)
其中 mmc 0:2 是指 sdcard.img2:
U-Boot# ls mmc 0:2 4096 . 4096 .. 16384 lost+found 4096 bin 4096 boot 4096 dev 4096 etc 4096 home 4096 lib 4096 media 4096 mnt 4096 opt 4096 proc 4096 root 4096 run 4096 sbin 4096 selinux 4096 srv 4096 sys 4096 tmp 4096 usr 4096 var
4. reset
重新啟動 U-Boot5. printenv
印出 u-boot environment 設定檔。二、建立 uEnv.txt
0. 進入 U-Boot#
參考前一章 Rootfs 植入 sdcard.img 開機 ,最後面用 runsdcard.sh 進到 U-boot 內。
runsdcard.sh 內容如下:
qemu-system-arm -M beagle -m 512 -nographic -sd sdcard.img
1. printenv -> uEnv.txt
於 U-Boot# 內使用指令 printenv 將全部內容複製,並貼上建立一個 uEnv.txt ,其原始內容如下:
arch=arm baudrate=115200 beaglerev=C4 board=beagle board_name=beagle bootargs=console=ttyO2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs bootcmd=run findfdt; mmc dev ${mmcdev}; if mmc rescan; then if run userbutton; then setenv bootenv uEnv.txt;else setenv bootenv user.txt;fi;echo SD/MMC found on device ${mmcdev};if run loadbootenv; then echo Loaded environment from ${bootenv};run importbootenv;fi;if test -n $uenvcmd; then echo Running uenvcmd ...;run uenvcmd;fi;if run loadimage; then run mmcboot;fi;fi;run nandboot;setenv bootfile uImage;if run loadimage; then run loadfdt;run mmcbootz; fi; bootdelay=1 bootdir=/ bootenv=uEnv.txt bootfile=uImage bootpart=0:1 buddy=none camera=none console=ttyO2,115200n8 cpu=armv7 defaultdisplay=dvi dieid#=51454d5551454d555400000051454d55 dvimode=640x480MR-16@60 ethact=usb_ether fdt_high=0xffffffff fdtaddr=0x80f80000 fdtfile=omap3-beagle.dtb findfdt=if test $beaglerev = AxBx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = Cx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = C4; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = xMAB; then setenv fdtfile omap3-beagle-xm-ab.dtb; fi; if test $beaglerev = xMC; then setenv fdtfile omap3-beagle-xm.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi; importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize loadaddr=0x80000000 loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv} loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile} loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile} loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk} mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr} mmcbootz=echo Booting with DT from mmc${mmcdev} ...; run mmcargs; bootz ${loadaddr} - ${fdtaddr} mmcdev=0 mmcroot=/dev/mmcblk0p2 rw mmcrootfstype=ext4 rootwait mpurate=auto nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype} nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr} nandroot=ubi0:rootfs ubi.mtd=4 nandrootfstype=ubifs ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype} ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ramdisk=ramdisk.gz ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M ramrootfstype=ext2 rdaddr=0x81000000 soc=omap3 stderr=serial stdin=serial stdout=serial usbtty=cdc_acm userbutton=if gpio input 173; then run userbutton_xm; else run userbutton_nonxm; fi; userbutton_nonxm=gpio input 7; userbutton_xm=gpio input 4; validatefdt=if test $beaglerev = xMAB; then if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then setenv fdtfile omap3-beagle-xm.dtb; fi; fi; vendor=ti ver=U-Boot 2014.07 (Oct 14 2014 - 12:06:49) vram=12M
2. 整理語法
先將 uEnv.txt 備份為 uEnv.txt.sh ,
並對其內容做語法整理,方便我們了解它寫的內容,
我的整理如下:
真正最後要載入 sdcard.img 的是 uEnv.txt ,
所以邊看 .sh 那份做修改,同時也要改 uEnv.txt,
兩者同步進行,改的主要項目為:
並對其內容做語法整理,方便我們了解它寫的內容,
我的整理如下:
arch=arm baudrate=115200 beaglerev=C4 board=beagle board_name=beagle bootargs=console=ttyO2,115200n8 mpurate=auto buddy=none camera=none vram=12M omapfb.mode=dvi:640x480MR-16@60 omapdss.def_disp=dvi root=ubi0:rootfs ubi.mtd=4 rootfstype=ubifs bootcmd=run findfdt; mmc dev ${mmcdev}; if mmc rescan; then if run userbutton; then setenv bootenv uEnv.txt; else setenv bootenv user.txt; fi; echo SD/MMC found on device ${mmcdev}; if run loadbootenv; then echo Loaded environment from ${bootenv}; run importbootenv; fi; if test -n $uenvcmd; then echo Running uenvcmd ...; run uenvcmd; fi; if run loadimage; then run mmcboot; fi; fi; run nandboot; setenv bootfile uImage; if run loadimage; then run loadfdt; run mmcbootz; fi; bootdelay=1 bootdir=/ bootenv=uEnv.txt bootfile=uImage bootpart=0:1 buddy=none camera=none console=ttyO2,115200n8 cpu=armv7 defaultdisplay=dvi dieid#=51454d5551454d555400000051454d55 dvimode=640x480MR-16@60 ethact=usb_ether fdt_high=0xffffffff fdtaddr=0x80f80000 fdtfile=omap3-beagle.dtb findfdt=if test $beaglerev = AxBx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = Cx; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = C4; then setenv fdtfile omap3-beagle.dtb; fi; if test $beaglerev = xMAB; then setenv fdtfile omap3-beagle-xm-ab.dtb; fi; if test $beaglerev = xMC; then setenv fdtfile omap3-beagle-xm.dtb; fi; if test $fdtfile = undefined; then echo WARNING: Could not determine device tree to use; fi; importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize loadaddr=0x80000000 loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv} loadfdt=run validatefdt; load mmc ${bootpart} ${fdtaddr} ${bootdir}/${fdtfile} loadimage=load mmc ${bootpart} ${loadaddr} ${bootdir}/${bootfile} loadramdisk=load mmc ${bootpart} ${rdaddr} ${bootdir}/${ramdisk} mmcargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${mmcroot} rootfstype=${mmcrootfstype} mmcboot=echo Booting from mmc ...; run mmcargs; bootm ${loadaddr} mmcbootz=echo Booting with DT from mmc${mmcdev} ...; run mmcargs; bootz ${loadaddr} - ${fdtaddr} mmcdev=0 mmcroot=/dev/mmcblk0p2 rw mmcrootfstype=ext4 rootwait mpurate=auto nandargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} camera=${camera} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${nandroot} rootfstype=${nandrootfstype} nandboot=echo Booting from nand ...; run nandargs; nand read ${loadaddr} 280000 400000; bootm ${loadaddr} nandroot=ubi0:rootfs ubi.mtd=4 nandrootfstype=ubifs ramargs=setenv bootargs console=${console} ${optargs} mpurate=${mpurate} buddy=${buddy} vram=${vram} omapfb.mode=dvi:${dvimode} omapdss.def_disp=${defaultdisplay} root=${ramroot} rootfstype=${ramrootfstype} ramboot=echo Booting from ramdisk ...; run ramargs; bootm ${loadaddr} ramdisk=ramdisk.gz ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M ramrootfstype=ext2 rdaddr=0x81000000 soc=omap3 stderr=serial stdin=serial stdout=serial usbtty=cdc_acm userbutton=if gpio input 173; then run userbutton_xm; else run userbutton_nonxm; fi; userbutton_nonxm=gpio input 7; userbutton_xm=gpio input 4; validatefdt=if test $beaglerev = xMAB; then if test ! -e mmc ${bootpart} ${bootdir}/${fdtfile}; then setenv fdtfile omap3-beagle-xm.dtb; fi; fi; vendor=ti ver=U-Boot 2014.07 (Oct 14 2014 - 12:06:49) vram=12M
3. 修改 uEnv.txt內容
我們看的是 uEnv.txt.sh ,真正最後要載入 sdcard.img 的是 uEnv.txt ,
所以邊看 .sh 那份做修改,同時也要改 uEnv.txt,
兩者同步進行,改的主要項目為:
- zImage -> uImage
- loadaddr=0x80200000 -> loadaddr=0x80000000
- bootpart=0:2 -> bootpart=0:1
- mmcrootfstype=ext3 -> mmcrootfstype=ext4
- bootdir=/boot -> bootdir=/
4. 植入 uEnv.txt -> sdcard1
將修變好的 uEnv.txt 植入到 sdcard partition 1 內。mount -o loop,offset=$[512*2048] sdcard.img /mnt rsync-av ~/qrmu_img/bootloader/uEnv.txt /mnt
5. 執行 runsdcard.sh
sh runsdcard.sh
執行結果,若正確的話,
應該要自動且快速通過 U-boot ,並直接載入 kernel ,
做正確的開機程序。
Reference:
http://pominglee.blogspot.tw/2013/12/uboot.html
http://pominglee.blogspot.tw/2014/12/uboot.html
沒有留言:
張貼留言