[[bc10-router]] #contents *u-boot 更新 [#k08900ba] 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 機器向けにはまず git://git.denx.de/u-boot-arm にこうした最新の機能が入り~ 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 ~ **更新手順 [#f4c89736] 更新は以下のようにして行います。 ます u-boot-arm リポジトリからソースコードを取得します。 $ git clone http://git.denx.de/?p=u-boot/u-boot-arm.git 更新は以下のようにして行います。~ *** u-boot-arm リポジトリからの取得 [#m053cfc5] u-boot-arm リポジトリからソースコードを取得します。~ $ git clone git://git.denx.de/u-boot-arm.git $ cd u-boot-arm *** u-boot リポジトリからの取得 [#ya5181bb] 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 [#m7b3c61b] 更新された 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 のコマンド [#c13f9166] 更新された 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 のデフォルト環境変数 [#wf939043] この 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 [#za0c0f97] 標準的な起動をする場合には以下のような 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 [#k407f892] この u-boot は linaro が行った OMAP EHCI 対応が取り込まれており、 USB-Ethernet アダプターを使った tftpboot ができます。~ USB および USB-Ethernet アダプターを使った tftpboot については u-boot-arm/doc/README.usb に詳しく記載されています。~ #include(bc10-router/tftpbootable USB-Ether,notitle) tftpboot の詳細手順については [[bc10-router/tftpboot]] をご覧ください。 * 更新履歴 [#a6c8e491] 2013/02/04 初稿公開 ~ 2013/05/22 u-boot 更新と更新手順の追記および修正 ~