[ TOP | Recently ]

2017-08-09 uboot on RaspberryPi3


夏休みの宿題のためRasPI3にubootを入れてみる。

https://kernelnomicon.org/?p=682 を見ながら…見てもよくわからない。
幸いRasPI3はググれば星の数ほど解説ページが出てくるので、色々なページをつらつらと読んでみた所

・RasPI3のUARTはbluetooth用に使われていて使えない?
・mini-uartという機能でcpu clockからbaud rateを作って通信する機能があってそっちなら使える
・そのためserialのスピードがcpu clock(可変)に引きづられ通信できない環境がある?

ということのようだ。しかし手元の環境だと普通に通信できてるので問題ないのかな。

とりあえずRPI3 uboot SD cardの作り方

https://www.raspberrypi.org/downloads/raspbian/ からRaspbian Jessie Liteのイメージを落とす
・SD cardにddで書き込む
・SD cardにFATとLinuxのパーティションができる。Linux Partitionは使わないので無視
・FATパーティションをmountして、config.txt に以下の3行を追加

arm_control=0x200
enable_uart=1
kernel=u-boot.bin

・適当なLinux hostにaarch64なcross gccを入れる。apt-cache search aarch64-linux-gnuしてbinutil、gccをapt-get install
http://git.denx.de/?p=u-boot.git を clone してビルドする

# make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EFI=y rpi_3_defconfig
# make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- CONFIG_EFI=y

・できた u-boot.bin を、SD cardのFATパーティションにコピー
・できあがり!

RasPI3のGPIO14(=TXD=PIN8)とGPIO15(=RXD=PIN10)にシリアルをつないでBoot!

U-Boot 2017.09-rc1-00133-geaa90e5-dirty (Aug 09 2017 - 02:23:24 +0900)

DRAM:  944 MiB
RPI 3 Model B (0xa02082)
MMC:   sdhci@7e300000: 0
reading uboot.env
In:    serial
Out:   vidconsole
Err:   vidconsole
Net:   No ethernet found.
starting USB...
USB0:   Core Release: 2.80a
scanning bus 0 for devices... 3 USB Device(s) found
       scanning usb for storage devices... 0 Storage Device(s) found
U-Boot> ?
?       - alias for 'help'
base    - print or set address offset
bdinfo  - print Board Info structure
boot    - boot default, i.e., run 'bootcmd'
bootd   - boot default, i.e., run 'bootcmd'
bootefi - Boots an EFI payload from memory
bootelf - Boot from an ELF image in memory
booti   - boot arm64 Linux Image image from memory
bootm   - boot application image from memory
bootp   - boot image via network using BOOTP/TFTP protocol
bootvx  - Boot vxWorks from an ELF image
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dhcp    - boot image via network using DHCP/TFTP protocol
dm      - Driver model low level access
echo    - echo args to console
editenv - edit environment variable
env     - environment handling commands
exit    - exit script
ext2load- load binary file from a Ext2 filesystem
ext2ls  - list files in a directory (default /)
ext4load- load binary file from a Ext4 filesystem
ext4ls  - list files in a directory (default /)
ext4size- determine a file's size
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fatsize - determine a file's size
fatwrite- write file into a dos filesystem
fdt     - flattened device tree utility commands
fstype  - Look up a filesystem type
go      - start application at address 'addr'
gpio    - query and control gpio pins
help    - print command description/usage
iminfo  - print header information for application image
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
lcdputs - print string on video framebuffer
load    - load binary file from a filesystem
loadb   - load binary file over serial line (kermit mode)
loads   - load S-Record file over serial line
loadx   - load binary file over serial line (xmodem mode)
loady   - load binary file over serial line (ymodem mode)
loop    - infinite loop on address range
ls      - list files in a directory (default /)
md      - memory display
mii     - MII utility commands
mm      - memory modify (auto-incrementing address)
mmc     - MMC sub system
mmcinfo - display MMC info
mw      - memory write (fill)
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
part    - disk partition related commands
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
pxe     - commands to get and boot from pxe files
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
save    - save file to a filesystem
saveenv - save environment variables to persistent storage
setcurs - set cursor position within screen
setenv  - set environment variables
setexpr - set environment variable as the result of eval expression
showvar - print local hushshell variables
size    - determine a file's size
sleep   - delay execution for some time
source  - run script from memory
sysboot - command to get and boot from syslinux files
test    - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
true    - do nothing, successfully
usb     - USB sub-system
usbboot - boot from USB device
version - print monitor, compiler and linker version
U-Boot> bdinfo
arch_number = 0x00000000
boot_params = 0x00000100
DRAM bank   = 0x00000000
-> start    = 0x00000000
-> size     = 0x3B000000
baudrate    = 115200 bps
TLB addr    = 0x3AFF0000
relocaddr   = 0x3AF55000
reloc off   = 0x3AED5000
irq_sp      = 0x3AB4E0F0
sp start    = 0x3AB4E0F0
Early malloc usage: 2d8 / 2000
fdt_blob = 000000003ab4e100
U-Boot>


EOF