2015年11月12日 星期四

在 raspberry pi 2 上使用 u-boot

一般 soc 都會提供 u-boot 來當作 bootloader, 不過 rpi2 並沒有, u-boot 有很多豐富的功能, 在操作 rpi2 時, 也許有額外的助益, 來看看怎麼安裝 u-boot。
ref:
http://elinux.org/RPi_U-Boot
git clone git://github.com/swarren/u-boot.git
git checkout -b rpi_dev origin/rpi_dev
make rpi_2_defconfig
make

cp u-boot.bin /sd_card/part1
cp /sd_card/part1/config.txt /sd_card/part1/config.txt.bak
echo 'kernel=u-boot.bin' > /sd_card/part1/config.txt

u-boot 環境變數
dhcpuboot=usb start; dhcp u-boot.uimg; bootm
distro_bootcmd=for target in ${boot_targets}; do run bootcmd_${target}; done
fdt_addr_r=0x02000000
fdtfile=bcm2836-rpi-2-b.dtb
kernel_addr_r=0x01000000
loadaddr=0x00200000
mmc_boot=if mmc dev ${devnum}; then setenv devtype mmc; run scan_dev_for_boot_part; fi
pxefile_addr_r=0x00100000
ramdisk_addr_r=0x02100000
scan_dev_for_boot=echo Scanning ${devtype} ${devnum}:${bootpart}...; for prefix in ${boot_prefixes}; do rune
scan_dev_for_boot_part=part list ${devtype} ${devnum} -bootable devplist; env exists devplist || setenv deve
scan_dev_for_extlinux=if test -e ${devtype} ${devnum}:${bootpart} ${prefix}extlinux/extlinux.conf; then echi
scan_dev_for_scripts=for script in ${boot_scripts}; do if test -e ${devtype} ${devnum}:${bootpart} ${prefixe
scriptaddr=0x00000000
soc=bcm283x
stderr=serial,lcd
stdin=serial,usbkbd
stdout=serial,lcd
usb_boot=usb start; if usb dev ${devnum}; then setenv devtype usb; run scan_dev_for_boot_part; fi
usbethaddr=b8:27:eb:90:b1:7b
vendor=raspberrypi

Environment size: 2188/16380 bytes
U-Boot> 

可以用 uart 接出來看到 u-boot 畫面。當然電視的畫面也有, 不過有點歪歪的就是。

u-boot 畫面

zImage 是我自己編譯出來的 kernel, 複製到 sdcard 上, 使用以下 u-boot 指令載入 kernel:
載入 linux
 1 # Tell Linux that it is booting on a Raspberry Pi2
 2 setenv machid 0x00000c42
 3 # Set the kernel boot command line
 4 setenv bootargs "earlyprintk console=tty0 console=ttyAMA0 root=/dev/mmcblk0p2 rootfstype=ext4 rootwait noinitrd"
 5 # Save these changes to u-boot's environment
 6 saveenv
 7 # Load the existing Linux kernel into RAM
 8 fatload mmc 0:1 ${kernel_addr_r} zImage
 9 # Boot the kernel we have just loaded
10 bootz ${kernel_addr_r}

u-boot 已經愈來愈複雜了, 熟悉它不是壞事, 很多 soc 有提供了 u-boot, 也提供很複雜的載入指令, 在接觸到其他 soc 時, 就不會那麼陌生。

ref:
Booting a Raspberry Pi2, with u-boot and HYP enabled

沒有留言:

張貼留言

使用 google 的 reCAPTCHA 驗證碼, 總算可以輕鬆留言了。

我實在受不了 spam 了, 又不想讓大家的眼睛花掉, 只好放棄匿名留言。這是沒辦法中的辦法了。留言的朋友需要有 google 帳號。