G-cluster の起動時にシリアルコンソールから何らかの入力があるとU-boot のコマンドインタプリタに落ちます。
I2C: ready
DRAM: 256 MiB
SPI Speed at [R:23MHz/W:47MHz] Flash Size: 128KB
NAND: 128 MiB
MMC:
initializing secure environment
Bad block table found at page 65472, version 0x01
Bad block table found at page 65408, version 0x01
In: serial
Out: serial
Err: serial
MAC: 00:1a:cc:00:00:01
Hit any key to stop autoboot: 0
CNCl800L>
CNCl800L>
CNCl800L>
CNCl800L>
CNCl800L>
CNCl800L>
U-boot とは Linux ではありませんが、Linux を呼び出すためのブートローダーです。
PC にとっての GRUB に当てはまります。
cf.,「GRUB と U-boot の比較」
https://qiita.com/nanbuwks/items/f0813a4a4749189e57d1
組み込み用ですが、機能は組み込まれたシステムによって様々です。
G-cluster の U-boot で使えるコマンドを確認しましょう。
CNCl800L> help
? - 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'
bootm - boot application image from memory
bootp - boot image via network using BOOTP/TFTP protocol
boots - Boot Secure Kernel
burnsplash- Utility to burn splash image
cmp - memory compare
coninfo - print console devices and information
cp - memory copy
crc32 - checksum calculation
cryptotest- execute decrypt/encrypt cycle on memory
cuid - read/write the customer unique chip ID from/to the e-fuses
dcache - enable or disable data cache
debug - enable debug
dhcp - boot image via network using DHCP/TFTP protocol
disled - Disable LED display and enable GPIO2
echo - echo args to console
editenv - edit environment variable
eeprom - EEPROM sub-system
env - environment handling commands
esp1800l_flash_util- Utility to flash signed_encrypted Image on Nand
exit - exit script
false - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls - list files in a directory (default /)
fpcd - Display data on frontpanel led
fpcraw - Display raw data on frontpanel led
fsinfo - print information about filesystems
fsload - load binary file from a filesystem image
go - start application at address 'addr'
gpio - gpio - gpio read/write bit
help - print command description/usage
i2c - I2C sub-system
icache - enable or disable instruction cache
iminfo - print header information for application image
imxtract- extract a part of a multi-image
itest - return true/false on integer compare
loadb - load binary file over serial line (kermit mode)
loads - load S-Record file over serial line
loady - load binary file over serial line (ymodem mode)
logo - logo -display logo picture on TV Screen
loop - infinite loop on address range
ls - list files in a directory (default /)
md - memory display
mm - memory modify (auto-incrementing address)
mmc - MMC sub system
mmcinfo - display MMC info
mtest - simple RAM read/write test
mw - memory write (fill)
nand - NAND sub-system
nboot - boot from NAND device
nfs - boot image via network using NFS protocol
nm - memory modify (constant address)
nvram_set_defaults- nvram_set_defaults - reset environment to factory defaults
ping - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
printsecenv- printsecenv- print secured environment variables
pswdsec - pswdsec - to save secured parameter enter password
readotpuid- read the unique chip ID from the e-fuses
reset - Perform RESET of the CPU
run - run commands in an environment variable
saveenv - save environment variables to persistent storage
savesecenv- savesecenv - save secured environment variables to storage
secinit - secinit- initialize secure environment stuff
(for testing purposes only)
setenv - set environment variables
setsecenv- setsecenv - set environment variables
sfer - sfer - spi flash erase
sfinfo - sfinfo - display spi flash informations.
sfre - sfre - spi flash read byte.
sfwr - sfwr - spi flash write byte
showvar - print local hushshell variables
sleep - delay execution for some time
source - run script from memory
test - minimal test like /bin/sh
tftpboot- boot image via network using TFTP protocol
timexfer- time memory transfer
true - do nothing, successfully
update - update - update your u-boot.bin / uImage / ramdiskg.img by USB storage device.
upgrade - Utility to upgrade uboot or nethd image
usb - USB sub-system
usbboot - boot from USB device
usbtest - usbtest - test USB host controller of ORION 1.4
version - print monitor, compiler and linker version
xrsa_verify- Verify rsa signed Image using s/w hashing
CNCl800L>
中の環境変数を確認します。
env print
AUTORUN=1
AVSYNC=1
EDID=1
ENABLE_CEC=1
FACT_IMG=400000
FIRST_BOOT=1
IMG=2400000
IMG_SIZE=2000000
POWER_MGMT=1
RAM=4000000
WORK_IMG=2400000
baudrate=115200
bootargs=console=ttyS0,115200 quiet
bootcmd=dcache on;run ledon; run show_logo;boots
bootdelay=0
country=JP
dsm_lang=17
ethaddr=00:1a:cc:00:00:01
hwkey=23f34b04-e874-4e4f-a0ce-e6485a73f23a
last_filename=DSM232A1_FW1.01.00JP_20130318.img
ledon=gpio write 2 1
show_logo=nand read 4000000 200000 0x1C2000; logo 5 2 4000000 1280 720 0 0
stderr=serial
stdin=serial
stdout=serial
verify=no
wifiaddr=C8:D3:A3:A9:37:B3
wifimode=ap
Environment size: 635/8188 bytes
LEDをONにできそうですね。やってみましょう。
CNCl800L> run ledon
Write ok!
CNCl800L> run ledoff
## Error: "ledoff" not defined
環境変数を操作できます。
CNCl800L> env set bootdelay 10
CNCl800L> env
env - environment handling commands
Usage:
env default -f - reset default environment
env edit name - edit environment variable
env export [-t | -b | -c] addr [size] - export environment
env import [-d] [-t | -b | -c] addr [size] - import environment
env print [name ...] - print environment
env run var [...] - run commands in an environment variable
env save - save environment
env set [-f] name [arg ...]
CNCl800L> env print bootdelay
bootdelay=10
このあと、
CNCl800L> env save
Saving Environment to SPI Flash...
Sector Erase from 0xc000 to 0xe000 ... ok!
Page Write from 0xd256e3c to 0xc000 ... ok!
とすると保存できます。
さて、U-bootシェルから本来の起動に進むには boots とします。これは署名チェックを行ってセキュアにブートすることができます。
CNCl800L> boots
Data (writethrough) Cache is ON
Write ok!
NAND read: device 0 offset 0x200000, size 0x1c2000
1843200 bytes read: OK
mode = 5, picture_color_mode = 2
1GFXLINEPITCHSIZE = 2560, screen_h = 720
2GFXLINEPITCHSIZE = 2560, screen_h = 720
tvmode = 5
GFXLINEPITCHSIZE = 2560,screen_w 1280, screen_h 720,picture_color_mode 2
pic_w = 1280,pic_h = 720,dst_x = 0,dst_y = 0
ColorImg->LinePitch 0xa00,ColorImg->StartAddress 0xc000000,ColorImg->PixelHeight 720,ColorImg->PixelWidth 1280
ColorImg->ColorFormat 2
layer_output.gfx_output[0] = 0
Reg->df_gfx_control_reg.bits.iGfxEna = 1
Display configurate complete!
argc=[2].
argv[0]=[hdmi.bin].
argv[1]=[5].
main=[020576f8].
in main:printf=[0205781c].
in main:_start=[e92d01f0].
mode=[5]
NAND read: device 0 offset 0x1c0000, size 0x20000
131072 bytes read: OK
NAND read: device 0 offset 0x180000, size 0x20000
131072 bytes read: OK
NAND read: device 0 offset 0x7c80000, size 0x1000
4096 bytes read: OK
Processing Application image.
NAND read: device 0 offset 0x2400000, size 0x17a0000
24772608 bytes read: OK
length 24641536: 376 whole chunks with 0 remainder
done!
Verifying Image RSA signature... OK.
Field Img Authentication passed
Check for Blob image...
Processing Blob image.
NAND read: device 0 offset 0x7c81000, size 0x20000
131072 bytes read: OK
Verifying Image RSA signature... OK.
AppImg (Blob) authenticated and copied to RAM addr : 0xefff000
... OK to boot
## Booting kernel from Legacy Image at 08080000 ...
Image Name: 240_SDK_gcluster_!
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 24532848 Bytes = 23.4 MiB
Load Address: 08080040
Entry Point: 08080040
XIP Kernel Image ... OK
OK
Starting kernel ...
Uncompressing Linux................................................................................................................................................................... done, booting the kernel.
mmc0: Version ID 0x5342230a.
mount: mounting tmpfs on /dev/shm failed: No such file or directory
ath6kl: temporary war to avoid sdio crc error
SI_CecInit
SI_CpiInit
SI_CpiInit: Writing CEC_OP_ABORT_31 register
SI_CpiInit: Setting Logical Address
SI_CecInit: looping through ports (5)
SI_CecInit: CEC Enabled
Returned from SI_CecInit
Checking for secure chip and enabling HDCP
Creating the main HDMI thread
HDMI init!
TVCenter : tvout = 406dd474
TVCenter : HDMI not plug
HDMISetVideo: timingvideomode = 15, PictureAspectRatio = 1
CECLIB::Physical Address:: 65535