bc10-router

u-boot 更新

bc10-router で使用している arago-project の beagleborad 向けイメージでは
u-boot の version は u-boot-2012.04.01 になります。
これは、

PREFERRED_PROVIDER_virtual/bootloader = "u-boot"
UBOOT_MACHINE = "omap3_beagle_config"

から {HOME}/oe/arago/recipes/u-boot/u-boot_2012.04.01.bb がビルドの際に使用されるためです。
このファイルで include している {HOME}/oe/arago/recipes/u-boot/u-boot_2012.04.01.inc の中で指定されているように
u-boot 本家の mainline リポジトリ git://git.denx.de/u-boot.git から master branch を取得し、
beagleboard 向けに以下のような patch を当てた上で

  • 0001-omap3_beagle-add-usbethaddr-setting-to-enable-networ.patch
  • 0001-OMAP3-Beagle-Set-BOOTDELAY-to-3.patch
  • 0002-am335x-am3517evm-beagleboard-am37x-Add-CONFIG_CMD_AS.patch
  • 0003-beagleboard-Load-uImage-from-VFAT-by-default.patch
  • 0004-beagleboard-Load-uImage-to-the-default-kernel-linux-.patch
  • 0001-omap3_evm-Added-function-calls-to-set-volts-speed-on.patch
  • 0002-omap3evm-Make-the-board-start-at-800MHz.patch
  • 0003-beagleboard-Make-xM-rev-C-go-to-800MHz.patch

omap3_beagle_config したものが bitbake でビルドされます。

上記の patch によって mainline の u-boot では以前は出来なかった
USB-Ethernet アダプターを使った tftpboot も可能になっていますが、
ARM 機器向けにはまず http://git.denx.de/?p=u-boot/u-boot-arm.git にこうした最新の機能が入り
現在こちらが mainline と見做されているようです。

そこで、kernel 3.7 から ARM アーキテクチャーも対応した DeviceTree など
今後 kernel の更新に伴って必要となる u-bootの新機能を取り込めるよう、
u-boot-arm へ更新することにします。

注: u-boot-armのリポジトリはブランチが master と next しかなく、
Tagも4年前から更新がないため最新以外の特定の状態を取得しづらい構成になっています。
特定の状態での作業を行う場合、本稿ではu-bootのTagを使用して特定の状態を
取得する手順についても記載します。

http://git.denx.de/u-boot.git/?p=u-boot.git;a=tags

更新手順

更新は以下のようにして行います。

u-boot-arm リポジトリからの取得

u-boot-arm リポジトリからソースコードを取得します。

$ git clone git://git.denx.de/u-boot-arm.git
$ cd u-boot-arm

u-boot リポジトリからの取得

u-bootリポジトリから2012.10を取得します。

$ git clone git://git.denx.de/u-boot.git
$ cd u-boot
$ git checkout refs/tags/v2012.10

ソースコードを取得した後、
ti-sdk-beagleboard-05.05.01.00 の Cross Toolchain へ PATH を通してから
beagleboard 向けの config を実行します。

$ export PATH={HOME}/ti-sdk-beagleboard-05.05.01.00/linux-devkit/bin:$PATH
$ make CROSS_COMPILE=arm-arago-linux-gnueabi- mrproper
$ make CROSS_COMPILE=arm-arago-linux-gnueabi- omap3_beagle_config

これで beagleboard 向けビルドの設定ができたのでビルドします。

$ make CROSS_COMPILE=arm-arago-linux-gnueabi-

生成されたファイルのうちの、u-boot.img を使用します。
これを起動用SDカードの FAT パーティションにコピーしたら更新は完了です。

version

更新された u-boot の version は u-boot のコマンドラインインタフェースで
以下のようにして確認できます。

# version

U-Boot 2012.10-12320-g39826f0 (Oct 22 2012 - 17:03:16)
arm-angstrom-linux-gnueabi-gcc (GCC) 4.5.4 20120305 (prerelease)
GNU ld (GNU Binutils) 2.20.1.20100303

u-boot のコマンド

更新された u-boot で使用可能なコマンドは以下です。
tftpboot や OMAP3 の nand からの起動に対応しています。

# help
?       - alias for 'help'
askenv  - get environment variables from stdin
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
chpart  - change active partition
cmp     - memory compare
coninfo - print console devices and information
cp      - memory copy
crc32   - checksum calculation
dcache  - enable or disable data cache
dhcp    - boot image via network using DHCP/TFTP protocol
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 /)
false   - do nothing, unsuccessfully
fatinfo - print information about filesystem
fatload - load binary file from a dos filesystem
fatls   - list files in a directory (default /)
fdt     - flattened device tree utility commands
fsinfo  - print information about filesystems
fsload  - load binary file from a filesystem image
go      - start application at address 'addr'
gpio    - input/set/clear/toggle gpio pins
help    - print command description/usage
i2c     - I2C sub-system
icache  - enable or disable instruction cache
imxtract- extract a part of a multi-image
itest   - return true/false on integer compare
led     - led   - [0|1|green|all] [on|off|toggle]

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)
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
mtdparts- define flash/nand partitions
mtest   - simple RAM read/write test
mw      - memory write (fill)
nand    - NAND sub-system
nandecc - switch OMAP3 NAND ECC calculation algorithm
nboot   - boot from NAND device
nfs     - boot image via network using NFS protocol
nm      - memory modify (constant address)
ping    - send ICMP ECHO_REQUEST to network host
printenv- print environment variables
reset   - Perform RESET of the CPU
run     - run commands in an environment variable
saveenv - save environment variables to persistent storage
setenv  - set environment variables
setexpr - set environment variable as the result of eval expression
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
true    - do nothing, successfully
usb     - USB sub-system
usbboot - boot from USB device
version - print monitor, compiler and linker version

u-boot のデフォルト環境変数

この u-boot では以下の環境変数が予め設定されています。
uEnv.txt に設定することでこれらの環境変数を上書きして設定することができます。

# printenv
baudrate=115200
beaglerev=Cx
bootcmd=if mmc rescan ${mmcdev}; 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 loaduimage; then run mmcboot;fi;fi;run nandboot;
bootdelay=3
bootenv=uEnv.txt
bootfile=uImage.beagle
buddy=none
camera=none
console=ttyO2,115200n8
defaultdisplay=dvi
dieid#=4ada00040000000004037b700d01401a
dvimode=640x480MR-16@60
importbootenv=echo Importing environment from mmc ...; env import -t $loadaddr $filesize
loadaddr=0x80200000
loadbootenv=fatload mmc ${mmcdev} ${loadaddr} ${bootenv}
loadramdisk=fatload mmc ${mmcdev} ${rdaddr} ramdisk.gz
loaduimage=ext2load mmc ${mmcdev}:2 ${loadaddr} /boot/uImage
loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} uImage
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}
mmcdev=0
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 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}
ramroot=/dev/ram0 rw ramdisk_size=65536 initrd=0x81000000,64M
ramrootfstype=ext2
rdaddr=0x81000000
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;
vram=12M

Environment size: 2283/131068 bytes

uEnv.txt

標準的な起動をする場合には以下のような uEnv.txt を用意すれば bc10 を起動することができます。

mmcroot=/dev/mmcblk0p2 rw
uenvcmd=run loaduimagefat; run mmcboot

Suspend/Resume の debug のため no_console_suspend を kernel に option として渡したい場合は
以下のような uEnv.txt を使用します。

console=ttyO2,115200n8
mpurate=auto
buddy=none
vram=12M
dvimode=640x480MR-16@60
defaultdisplay=dvi
loadaddr=0x80200000
mmcroot=/dev/mmcblk0p2 rw
mmcrootfstype=ext3 rootwait
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} no_console_suspend
mmcboot=echo Booting from mmc (uEnv.txt configuration) ...; run mmcargs; bootm ${loadaddr}
loaduimagefat=fatload mmc ${mmcdev} ${loadaddr} uImage
uenvcmd=run loaduimagefat; run mmcboot

tftpboot

この u-boot は linaro が行った OMAP EHCI 対応が取り込まれており、 USB-Ethernet アダプターを使った tftpboot ができます。
USB および USB-Ethernet アダプターを使った tftpboot については

u-boot-arm/doc/README.usb

に詳しく記載されています。

tftpboot 対応 u-boot で tftpboot 可能な USB-Ethernet アダプタは
u-boot-arm/drivers/usb/eth/asix.c に書かれている以下の VendorID:ProductID のものです。

static const struct asix_dongle const asix_dongles[] = {
        { 0x05ac, 0x1402, FLAG_TYPE_AX88772 },  /* Apple USB Ethernet Adapter */
        { 0x07d1, 0x3c05, FLAG_TYPE_AX88772 },  /* D-Link DUB-E100 H/W Ver B1 */
        /* Cables-to-Go USB Ethernet Adapter */
        { 0x0b95, 0x772a, FLAG_TYPE_AX88772 },
        { 0x0b95, 0x7720, FLAG_TYPE_AX88772 },  /* Trendnet TU2-ET100 V3.0R */
        { 0x0b95, 0x1720, FLAG_TYPE_AX88172 },  /* SMC */
        { 0x0db0, 0xa877, FLAG_TYPE_AX88772 },  /* MSI - ASIX 88772a */
        { 0x13b1, 0x0018, FLAG_TYPE_AX88172 },  /* Linksys 200M v2.1 */
        { 0x1557, 0x7720, FLAG_TYPE_AX88772 },  /* 0Q0 cable ethernet */
        /* DLink DUB-E100 H/W Ver B1 Alternate */
        { 0x2001, 0x3c05, FLAG_TYPE_AX88772 },
        /* ASIX 88772B */
        { 0x0b95, 0x772b, FLAG_TYPE_AX88772B | FLAG_EEPROM_MAC },
        { 0x0000, 0x0000, FLAG_NONE }   /* END - Do not remove */
};

国内で 2013年1月現在入手が容易なものとしては Buffalo LUA3-U2-ATX が使用できます。
lsusb で確認すると

Bus 001 Device 004: ID 0b95:7720 ASIX Electronics Corp. AX88772

と表示されます。

tftpboot の詳細手順については bc10-router/tftpboot をご覧ください。

更新履歴

2013/02/04 初稿公開
2013/05/22 u-boot 更新と更新手順の追記および修正


BC::labsへの質問は、bc9-dev @ googlegroups.com までお願い致します。
トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   最終更新のRSS
Last-modified: 2013-05-22 (水) 18:00:56 (3992d)