beagleboard-xM ( Rev.C ) でAndroid 2.3.4 ( GingerBread ) を動かせた
どもーらーめんこぞーですー(´ω`)ノ
beagleboard-xMを昨年だったか一昨年だったかに購入して放置プレイをキメていました。
なんでかっていうと、付属のÅngström(オングストローム, Linuxのディストリビューションのひとつらしいです)が入ったmicroSDカード以外で一切ブートできなかったのでorz
敗因はおそらく下記三項目っぽいです。
1. Texas Instrumentsさん(以下TI)のAndroid2.2(Froyo)のPre-Builtイメージを使ってた
2. 手持ちのmicroSDカードの相性が悪かった
3. HDMI->DVI変換ケーブルを刺して使えるモニタではなかった
1.は、beagleboard-xMのリビジョンによってイケるのとイケないのがあると聞きました。Rev.AとRev.BはTIさんのPre-Built版でイケるそうですが、Rev.Cはu-boot.binとuImageを修正版に入れ替えないといけないらしいです(参考:BeagleBoard-xMにGingerbreadをのせる)
2.はbeagleboard触ってる方々の記事を見ているとたまにうまく起動しないmicroSDカードがあったりなんだりらしいですね(´ω`)ものによって遅いだけだったり起動しなかったりがあるそうで
3.は完全にヤラれました。今まで古いディスプレイ(BenQ, 2007年購入)の方のDVI端子にbeagleboardの映像出力をつないでいて、起動時の様子をシリアルコンソールで確認しつつandroidのロゴが出るのを待っていました。下記のようなシリアルのログでずっと「起動できなくて固まってるだけ」と思ってました。実際には「実は映像出てるけど、古いディスプレイでHDMI->DVI変換ケーブル使ったら映像が出ない」だけでした。新しいディスプレイのDVIにつなぐと一発で表示されましたorz(参考:組み込みAndroid#5)
Texas Instruments X-Loader 1.51 (Jul 11 2011 - 21:11:32) Unsupported Chip! Beagle xM Rev C Starting X-loader on MMC Reading boot sector 213256 Bytes Read from MMC Starting OS Bootloader from MMC... Starting OS Bootloader... U-Boot 2010.06 (Jul 08 2011 - 04:37:45) OMAP34xx/35xx-GP ES2.1, CPU-OPP2 L3-165MHz OMAP3 Beagle board + LPDDR/NAND I2C: ready DRAM: 384 MiB NAND: HW ECC [Kernel/FS layout] selected 0 MiB *** Warning - bad CRC or NAND, using default environment In: serial Out: serial Err: serial Beagle xM Rev A/C Die ID #0d2600029ff80000015f26ad0f00800c Hit any key to stop autoboot: 0 mmc1 is available reading boot.scr 460 bytes read Running bootscript from mmc ... ## Executing script at 82000000 reading uImage 2745172 bytes read ***** Kernel: /dev/mmcblk0p1/uImage ***** ***** RootFS: /dev/mmcblk0p2 ***** ## Booting kernel from Legacy Image at 82000000 ... Image Name: Linux-2.6.37-g06ebbba Image Type: ARM Linux Kernel Image (uncompressed) Data Size: 2745108 Bytes = 2.6 MiB Load Address: 80008000 Entry Point: 80008000 Verifying Checksum ... OK Loading Kernel Image ... OK OK Starting kernel ... Uncompressing Linux... done, booting the kernel. Linux version 2.6.37-g06ebbba (a0131746@swubn01) (gcc version 4.4.3 (GCC) ) #1 1 CPU: ARMv7 Processor [413fc082] revision 2 (ARMv7), cr=10c53c7f CPU: VIPT nonaliasing data cache, VIPT aliasing instruction cache Machine: OMAP3 Beagle Board Reserving 8388608 bytes SDRAM for VRAM Memory policy: ECC disabled, Data cache writeback OMAP3630 ES1.2 (l2cache iva sgx neon isp 192mhz_clk ) SRAM: Mapped pa 0x40200000 to va 0xfe400000 size: 0x10000 Built 1 zonelists in Zone order, mobility grouping on. Total pages: 62976 Kernel command line: console=ttyO2,115200n8 androidboot.console=ttyO2 mem=256M M PID hash table entries: 1024 (order: 0, 4096 bytes) Dentry cache hash table entries: 32768 (order: 5, 131072 bytes) Inode-cache hash table entries: 16384 (order: 4, 65536 bytes) Memory: 248MB = 248MB total Memory: 245300k/245300k available, 16844k reserved, 0K highmem Virtual kernel memory layout: vector : 0xffff0000 - 0xffff1000 ( 4 kB) fixmap : 0xfff00000 - 0xfffe0000 ( 896 kB) DMA : 0xffc00000 - 0xffe00000 ( 2 MB) vmalloc : 0xd0800000 - 0xf8000000 ( 632 MB) lowmem : 0xc0000000 - 0xd0000000 ( 256 MB) modules : 0xbf000000 - 0xc0000000 ( 16 MB) .init : 0xc0008000 - 0xc003b000 ( 204 kB) .text : 0xc003b000 - 0xc052f000 (5072 kB) .data : 0xc0530000 - 0xc0574940 ( 275 kB) NR_IRQS:409 Clocking rate (Crystal/Core/MPU): 26.0/400/600 MHz Reprogramming SDRC clock to 400000000 Hz dpll3_m2_clk rate change failed: -22 IRQ: Found an INTC at 0xfa200000 (revision 4.0) with 96 interrupts Total of 96 interrupts on 1 active controller GPMC revision 5.0 Trying to install interrupt handler for IRQ402 Trying to install interrupt handler for IRQ403 Trying to install interrupt handler for IRQ404 Trying to install interrupt handler for IRQ405 Trying to install interrupt handler for IRQ406 Trying to install interrupt handler for IRQ407 Trying to install interrupt handler for IRQ408 Trying to install type control for IRQ409 Trying to set irq flags for IRQ409 OMAP clockevent source: GPTIMER1 at 32768 Hz Console: colour dummy device 80x30 Calibrating delay loop... 597.64 BogoMIPS (lpj=2334720) pid_max: default: 32768 minimum: 301 Security Framework initialized Mount-cache hash table entries: 512 CPU: Testing write buffer coherency: ok regulator: core version 0.5 regulator: dummy: NET: Registered protocol family 16 OMAP GPIO hardware version 2.5 OMAP GPIO hardware version 2.5 OMAP GPIO hardware version 2.5 OMAP GPIO hardware version 2.5 OMAP GPIO hardware version 2.5 OMAP GPIO hardware version 2.5 omap_mux_init: Add partition: #1: core, flags: 0 OMAP3 Beagle Rev: xM C Found NAND on CS0 Registering NAND on CS0 Unable to get DVI reset GPIO hw-breakpoint: debug architecture 0x4 unsupported. OMAP DMA hardware revision 5.0 bio: create slab <bio-0> at 0 SCSI subsystem initialized usbcore: registered new interface driver usbfs usbcore: registered new interface driver hub usbcore: registered new device driver usb omap_i2c omap_i2c.1: bus 1 rev4.0 at 2600 kHz twl4030: PIH (irq 7) chaining IRQs 368..375 twl4030: power (irq 373) chaining IRQs 376..383 twl4030: gpio (irq 368) chaining IRQs 384..401 regulator: VUSB1V5: 1500 mV normal standby regulator: VUSB1V8: 1800 mV normal standby regulator: VUSB3V1: 3100 mV normal standby twl4030_usb twl4030_usb: Initialized TWL4030 USB module regulator: VMMC1: 1850 <--> 3150 mV at 3000 mV normal standby regulator: VDAC: 1800 mV normal standby regulator: VDVI: 1800 mV normal standby regulator: VSIM: 1800 <--> 3000 mV at 1800 mV normal standby regulator: VAUX3: 1800 mV normal standby regulator: VAUX4: 1800 mV normal standby omap_device: omap_i2c.2: new worst case activate latency 0: 30517 omap_i2c omap_i2c.2: bus 2 rev4.0 at 400 kHz omap_i2c omap_i2c.3: bus 3 rev4.0 at 100 kHz Advanced Linux Sound Architecture Driver Version 1.0.23. Switching to clocksource 32k_counter musb-hdrc: version 6.0, otg (peripheral+host), debug=0 musb-hdrc musb-hdrc.0: dma type: dma-inventra musb-hdrc musb-hdrc.0: USB OTG mode controller at fa0ab000 using DMA, IRQ 92 NET: Registered protocol family 2 IP route cache hash table entries: 2048 (order: 1, 8192 bytes) TCP established hash table entries: 8192 (order: 4, 65536 bytes) TCP bind hash table entries: 8192 (order: 3, 32768 bytes) TCP: Hash tables configured (established 8192 bind 8192) TCP reno registered UDP hash table entries: 256 (order: 0, 4096 bytes) UDP-Lite hash table entries: 256 (order: 0, 4096 bytes) NET: Registered protocol family 1 NetWinder Floating Point Emulator V0.97 (double precision) omap-iommu omap-iommu.0: isp registered AM37x/DM37x Linux PSP version 04.02.00.07 (OMAP3BEAGLE) ashmem: initialized VFS: Disk quotas dquot_6.5.2 Dquot-cache hash table entries: 1024 (order 0, 4096 bytes) JFFS2 version 2.2. (NAND) (SUMMARY) �© 2001-2006 Red Hat, Inc. msgmni has been set to 479 io scheduler noop registered io scheduler deadline registered io scheduler cfq registered (default) OMAP DSS rev 2.0 OMAP DISPC rev 3.0 OMAP VENC rev 2 OMAP DSI rev 1.0 Serial: 8250/16550 driver, 4 ports, IRQ sharing enabled omap_uart.0: ttyO0 at MMIO 0x4806a000 (irq = 72) is a OMAP UART0 omap_uart.1: ttyO1 at MMIO 0x4806c000 (irq = 73) is a OMAP UART1 omap_uart.2: ttyO2 at MMIO 0x49020000 (irq = 74) is a OMAP UART2 console [ttyO2] enabled omap_uart.3: ttyO3 at MMIO 0x49042000 (irq = 80) is a OMAP UART3 brd: module loaded loop: module loaded mtdoops: mtd device (mtddev=name/number) must be supplied omap2-nand driver initializing No NAND device found. No NAND device found. OneNAND driver initializing usbcore: registered new interface driver asix usbcore: registered new interface driver cdc_ether usbcore: registered new interface driver smsc95xx usbcore: registered new interface driver net1080 usbcore: registered new interface driver cdc_subset usbcore: registered new interface driver zaurus ehci_hcd: USB 2.0 'Enhanced' Host Controller (EHCI) Driver ehci-omap.0 supply hsusb0 not found, using dummy regulator ehci-omap.0 supply hsusb1 not found, using dummy regulator ehci-omap ehci-omap.0: OMAP-EHCI Host Controller ehci-omap ehci-omap.0: new USB bus registered, assigned bus number 1 ehci-omap ehci-omap.0: irq 77, io mem 0x48064800 ehci-omap ehci-omap.0: USB 2.0 started, EHCI 1.00 usb usb1: New USB device found, idVendor=1d6b, idProduct=0002 usb usb1: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb1: Product: OMAP-EHCI Host Controller usb usb1: Manufacturer: Linux 2.6.37-g06ebbba ehci_hcd usb usb1: SerialNumber: ehci-omap.0 hub 1-0:1.0: USB hub found hub 1-0:1.0: 3 ports detected Initializing USB Mass Storage driver... usbcore: registered new interface driver usb-storage USB Mass Storage support registered. android init android_probe pdata: c053ff2c android_bind android_usb gadget: android_usb ready musb-hdrc musb-hdrc.0: MUSB HDRC host driver musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 2 usb usb2: New USB device found, idVendor=1d6b, idProduct=0002 usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1 usb usb2: Product: MUSB HDRC host driver usb usb2: Manufacturer: Linux 2.6.37-g06ebbba musb-hcd usb usb2: SerialNumber: musb-hdrc.0 hub 2-0:1.0: USB hub found hub 2-0:1.0: 1 port detected f_adb init android_register_function adb adb_bind_config f_mass_storage init android_register_function usb_mass_storage mice: PS/2 mouse device common for all mice input: gpio-keys as /devices/platform/gpio-keys/input/input0 input: twl4030_pwrbutton as /devices/platform/omap/omap_i2c.1/i2c-1/1-0049/twl41 omap_device: omap_i2c.1: new worst case deactivate latency 0: 30517 using rtc device, twl_rtc, for alarms twl_rtc twl_rtc: rtc core: registered twl_rtc as rtc0 i2c /dev entries driver Linux media interface: v0.10 Linux video capture interface: v2.00 omap3isp supply VDD_CSIPHY1 not found, using dummy regulator omap3isp supply VDD_CSIPHY2 not found, using dummy regulator omap3isp omap3isp: Revision 15.0 found omap-iommu omap-iommu.0: isp: version 1.1 mt9v113 2-003c: chip id mismatch read 0x0, expecting 0x2280 isp_register_subdev_group: Unable to register subdev mt9v113 OMAP Watchdog Timer Rev 0x31: initial timeout 60 sec twl4030_wdt twl4030_wdt: Failed to register misc device twl4030_wdt: probe of twl4030_wdt failed with error -16 device-mapper: uevent: version 1.0.3 device-mapper: ioctl: 4.18.0-ioctl (2010-06-29) initialised: dm-devel@redhat.com usbcore: registered new interface driver usbhid usbhid: USB HID core driver logger: created 64K log 'log_main' logger: created 256K log 'log_events' logger: created 64K log 'log_radio' logger: created 64K log 'log_system' usbcore: registered new interface driver snd-usb-audio OMAP3 Beagle/Devkit8000 SoC init usb 1-2: new high speed USB device using ehci-omap and address 2 asoc: twl4030-hifi <-> omap-mcbsp-dai.1 mapping ok ALSA device list: #0: omap3beagle oprofile: hardware counters not available oprofile: using timer interrupt. TCP cubic registered Initializing XFRM netlink socket NET: Registered protocol family 17 NET: Registered protocol family 15 Registering the dns_resolver key type VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3 ThumbEE CPU extension supported. Power Management for TI OMAP3. smartreflex smartreflex.0: omap_sr_probe: SmartReflex driver initialized smartreflex smartreflex.1: omap_sr_probe: SmartReflex driver initialized SmartReflex Class3 initialized clock: disabling unused clocks to save power platform mpu.0: omap_voltage_scale: Already at the requestedrate 600000000 usb 1-2: New USB device found, idVendor=0424, idProduct=9514 usb 1-2: New USB device strings: Mfr=0, Product=0, SerialNumber=0 hub 1-2:1.0: USB hub found hub 1-2:1.0: 5 ports detected regulator_init_complete: incomplete constraints, leaving VDAC on twl_rtc twl_rtc: setting system clock to 2000-01-01 00:02:53 UTC (946684973) omap_vout omap_vout: Buffer Size = 3686400 omap_vout omap_vout: : registered and initialized video device 15 omap_vout omap_vout: Buffer Size = 3686400 omap_vout omap_vout: : registered and initialized video device 16 Waiting 1sec before mounting root device... mmc0: host does not support reading read-only switch. assuming write-enable. mmc0: new high speed SDHC card at address e624 mmcblk0: mmc0:e624 SU08G 7.40 GiB mmcblk0: p1 p2 p3 usb 1-2.1: new high speed USB device using ehci-omap and address 3 usb 1-2.1: New USB device found, idVendor=0424, idProduct=ec00 usb 1-2.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0 smsc95xx v1.0.4 smsc95xx 1-2.1:1.0: usb0: register 'smsc95xx' at usb-ehci-omap.0-2.1, smsc95xx d usb 1-2.2: new full speed USB device using ehci-omap and address 4 usb 1-2.2: New USB device found, idVendor=04b8, idProduct=a519 usb 1-2.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 1-2.2: Product: USB Hub Keyboard usb 1-2.2: Manufacturer: Chicony hub 1-2.2:1.0: USB hub found hub 1-2.2:1.0: 3 ports detected usb 1-2.3: new low speed USB device using ehci-omap and address 5 usb 1-2.3: New USB device found, idVendor=0458, idProduct=0007 usb 1-2.3: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 1-2.3: Product: Optical Mouse usb 1-2.3: Manufacturer: KYE input: KYE Optical Mouse as /devices/platform/ehci-omap.0/usb1/1-2/1-2.3/1-22 generic-usb 0003:0458:0007.0001: input: USB HID v1.10 Mouse [ KYE Optical Mou0 usb 1-2.2.1: new full speed USB device using ehci-omap and address 6 EXT3-fs: barriers not enabled usb 1-2.2.1: New USB device found, idVendor=04b8, idProduct=0310 usb 1-2.2.1: New USB device strings: Mfr=1, Product=2, SerialNumber=0 usb 1-2.2.1: Product: USB Hub Keyboard usb 1-2.2.1: Manufacturer: Chicony input: Chicony USB Hub Keyboard as /devices/platform/ehci-omap.0/usb1/1-2/1-2.3 generic-usb 0003:04B8:0310.0002: input: USB HID v1.10 Keyboard [Chicony USB Hub0 input: Chicony USB Hub Keyboard as /devices/platform/ehci-omap.0/usb1/1-2/1-2.4 generic-usb 0003:04B8:0310.0003: input: USB HID v1.10 Device [Chicony USB Hub K1 kjournald starting. Commit interval 5 seconds EXT3-fs (mmcblk0p2): using internal journal EXT3-fs (mmcblk0p2): recovery complete EXT3-fs (mmcblk0p2): mounted filesystem with ordered data mode VFS: Mounted root (ext3 filesystem) on device 179:2. Freeing init memory: 204K init (1): /proc/1/oom_adj is deprecated, please use /proc/1/oom_score_adj inste. init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery' enabling adb adb_open # warning: `zygote' uses 32-bit capabilities (legacy support in use)
でもって成功したやり方を示します。(参考:Android 2.3.4を起動してみる)
Android2.3.4のPre-Builtイメージならbeagleboard-xMのRev.Cでも特に変更なく使用可能とのことで、とりあえずTIさんのここからPre-Builtイメージを拾ってきます。
適当なフォルダに解凍して、イメージファイル群のフォルダに移動します。
tar xzvf beagleboard-xm.tar.gz
cd ./beagleboard-xm
ターミナルの言語を英語仕様に変更します。
こちらの環境では「LANGUAGE=C」までやらないとあとで「日本語環境から直ってねぇじゃねぇかバーロー」って怒られました(´ω`)
[20120706追記: ×LANGAGE=C ○LANGUAGE=C 書きまつがいですた(>ω<)]
LANG=C
LANGUAGE=C
でもってbeagleboard-xMで起動するためのmicroSDカードをカードリーダか何かでPCに刺しておいて、そのデバイス名を確認しておきます。(ここではmicroSDのデバイス名が /dev/sdf だったとします。あとmicroSDカードはフォーマットされますので事前にファイル等保存していましたらどこかにバックアップを取っておくことをおすすめします)
sudo ./mkmmc-android.sh /dev/sdf
うまいことブート用のファイル群が配置されれば下記のようなログが出てきます。
2GBのmicroSDでやった場合なので、ソレ以上の容量のものを使うとCYLINDESあたりの数字は若干変わってくると思いますが、最後らへんのメッセージは変わらないのでDoneしたらおkです。
Assuming Default Locations for Prebuilt Images
All data on /dev/sdf now will be destroyed! Continue? [y/n]
y
[Unmounting all existing partitions on the device ]
umount: /dev/sdf: not mounted
[Partitioning /dev/sdf...]
Disk /dev/sdf doesn't contain a valid partition table
DISK SIZE - 1973420032 bytes
CYLINDERS - 239
[Making filesystems...]
[Copying files...]
[Copying START_HERE floder to boot partition]
[Copying all clips to data partition]
[Done]
できたブート用microSDカードをbeagleboard-xMのmicroSDカードスロットに挿して電源を供給すると、初回は5分〜10分くらいかかりますが、その後はものの1分〜3分くらいで起動します。
ついでにEthernetの有効化まで記します。(参考:Android 2.3.4を起動してみる)
Windowsの場合はハイパーターミナルやTeraTerm、Linuxならminicom等でbeagleboard-xMのシリアルコンソールに接続します。(115200bps, データビット8bit、スタート/ストップビット1bit、パリティなし、フロー制御なし)
下記コマンドを打つとDHCP有効でEthernetポートを有効化するらしいです。(usb0てUSB扱いなんですかね(´ω`)?)
netcfg usb0 dhcp
下記コマンドでIPアドレスもらえてるかどうか確認できるそうです。
netcfg
次に、デフォルトゲートウェイを設定します。まずデフォルトゲートウェイのIPアドレスを確認するため、下記コマンドをッターン
getprop net.usb0.dns1
でもってソレで表示されたIPアドレスを下記コマンドでッターン
setprop net.dns1 さっき表示されたIPアドレス
これでEthernetを通じてネットにイケます。
固定IPの際は下記コマンドのようです。(参考:Gingerbread (Android 2.3.4) on BeagleBoard-xM Rev.C)
ifconfig usb0 指定したいIPアドレス netmask 指定したいサブネットマスク
route add default gw デフォルトゲートウェイのIPアドレス dev usb0
具体例として下記のように設定することができるようです。
beagleboard-xM台とブロードバンドルータ(スイッチングハブ機能付き)1台が接続されてる構成のイメージです。
ifconfig usb0 192.168.1.10 netmask 255.255.255.0
route add default gw 192.168.1.1 dev usb0
DHCPでの例ですが、Google検索できてます(*´ω`*)
とりあえずAndroidが動くようになったのでこっからドライバやらなんやら増やしてグフフフフウ(^p^)
ではまたーヾ(*´ω`*)ノシ