broncho a1 hack指南-移植Android-2.0

<!-- END HEADER --> <!-- LEFTBAR -->

转载时请注明出处和作者联系方式
文章出处:http://www.limodev.cn/blog
作者联系方式:李先静 <xianjimli at hotmail dot com>

很多朋友买Broncho A1就是冲着它的开放性来的,A1不但开放基本内核源代码,提供开发用的数据线,而且开放以前开发的Broncho Linux Platform手机平台。无论是对Just for fun的玩家,还是想学习嵌入式Linux开发的程序员,Broncho A1都是最好的选择之一。我们将写一系列的文章,为新手提供一个hack指南。也希望有兴趣的朋友加入文档的编写和修订工作中来。

3.移植Android 2.0

警告:移植Android 2.0的工作量很大,如果没有很多空闲时间和深入研究的决心,请不要轻易去尝试(呵,我可没有时间来帮你解决所有问题)。

3.1 下载和编译Android-2.0

下载源代码请参考android官方网站上的指南:http://source.android.com/download。
这里我们假设eclair的源代码已经下载到/work/android/android-eclair目录里了。

cd /work/android/android-eclair
make -j2

正常情况下应该可以顺利编译过去。

3.2 制作yaffs2文件系统

编译完成后,生成的文件系统out/target/product/generic/system.img不能直接使用,要用broncho提供的 mkyaffs2image(可到官方网站下载:http://www.broncho.cn/download/hacktools /mkyaffs2image)重新生成image,这个版本与原始版本不同之外在于,它在yaffs2文件系统的OOB里写了一些用于硬件ECC的数 据。可按下列方式生成:

[android-eclair]# mkyaffs2image out/target/product/generic/system system.bin

把生成的文件系统映像system.bin拷贝到tftp服务的根目录里:
[android-eclair]#cp system.bin /var/lib/tftpboot/
[android-eclair]#chmod 644 /var/lib/tftpboot/system.bin

3.2 编译内核

注:在本文发表之际,broncho还没有公布内核代码,开发人员正在从linux 2.6.28移植到linux 2.6.29,基本功能完成后就会公布。从商业角度考虑,这个公布的内核代码只提供基本的驱动程序,至于电源的管理等特性还需要hacker们自己的去完 善和优化。如果感兴趣的朋友比较多,可以考虑想成立一个开源项目,大家一起来玩。

下面以linux-2.6.28的编译为例。

在arch/arm/configs/目录下,有很多编译配置文件,其中arch/arm/configs/android_an0001_pxa300_defconfig是开发用的内核,里面支持usbnet。

[android-eclair]# cd linux-2.6.28

先配置内核,如果你还需要定制其它特性,可以用make ARCH=arm menuconfig来定制。
[linux-2.6.28]# make ARCH=arm android_an0001_pxa300_defconfig

拷贝initrd过来(也就是out/target/product/generic/root目录,前面编译eclair时生成的),后面编译内核时会根据它来生成initrd。
[linux-2.6.28]# cp /work/android/android-eclair/out/target/product/generic/root . -rf

编译
[linux-2.6.28]# make ARCH=arm CROSS_COMPILE=/work/android/android-eclair/prebuilt/linux-x86/toolchain/arm-eabi-4.4.0/bin/arm-eabi-

编译完成后,会生成arch/arm/boot/zImage, 把它拷贝到tftp服务的根目录下:
[linux-2.6.28]# cp arch/arm/boot/zImage /var/lib/tftpboot/kernel.bin
[linux-2.6.28]# chmod 644 /var/lib/tftpboot/kernel.bin

3.3 下载内核

确保tftp服务启动,firewall关闭。关于PC端的配置请参考《broncho a1 hack指南-准备环境》。

取下A1的电池,用开发数据数连接电脑和手机,用minicom打开串口,安装好电池,A1自动开机。

当串口输出下列信息时,按下空格键,blob进入交互模式:

Autoboot (1 seconds) in progress, press key SPACE to stop .Type “help” to get a list of commands

在交互模式下输入:dwrite kernel.bin
blob> dwrite kernel.bin

串口会输出:
Set id: 0×7d3
***** Plug-in USB cable & config usbdnet now ******
exit check_usb_connection:1

然后在PC端配置USBNET:
[root@localhost ~]# ifconfig usb0 1.1.1.1

此时手机端开始下载,串口会输出:
TFTPing kernel.bin####################* OK.
received 0×1459 blocks (0×28ae10 bytes)
download kernel.bin to nandflash partition kernel, address 0×9a0000 size 0×400000 …… OK

注意:如果下载时中断了,通常是因为dhclient重新配置了USBNET的IP地址,所以要禁止dhclient为USBNET动态配置IP。同事上次教我一个简单的办法,就是为usb0写一个网络配置脚本。

3.4 下载文件系统

在交互模式下输入:dwrite system.bin
blob> dwrite system.bin

如果前面刚刚下载过内核,不需要在PC端重新配置usbnet了,否则要在PC端执行:
[root@localhost ~]# ifconfig usb0 1.1.1.1

然后开始下载,串口会输出:
Vendor ID : 0×8086
Product ID : 0×7d3
TFTPing system.bin############################################################################################

这个过程比较长,可能要好几分钟,你可以先休息一下或者做点别的。

下载完成后reboot,串口会打印内核的调试信息:
Starting kernel at 0×80800000…

Uncompressing Linux……………………………………………………………………………………………………………
Linux version 2.6.28 (lixianjing@localhost.localdomain) (gcc version 4.1.1) #4 Wed Oct 7 16:42:59 CST 2009
CPU: XScale-V3 based processor [69056881] revision 1 (ARMv5TE), cr=0000397f
CPU: VIVT data cache, VIVT instruction cache
Machine: Marvell Form Factor Development Platform (aka Littleton)
Memory policy: ECC disabled, Data cache writeback
RO Mode clock: 60.00MHz (inactive)
Run Mode clock: 312.00MHz (*24)
Turbo Mode clock: 624.00MHz (*2, active)
HSIO bus clock: 208.00MHz
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 32512
Kernel command line: init=/linuxrc root=/dev/ram0 console=ttyS2,115200 mem=128M android uart_dma
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80×30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)

后面?系统启不来?运行有问题?那就对了,Android是一个通用平台,当然不可能直接拿过来用,你要针对不同的硬件去实现适配层,工作量相当 大,否则MOTO、HTC和BORQS(即 OPhone实现者)就不用养几百号开发人员了。即使你是天才,也不可能一个人完成这个任务。如果你真的感兴趣,可以选择某一方面去尝试,比如 WIFI,BT和GSM模组等。后面我们会介绍一些调试方法,有助于加快hack的速度。

前面我们已经告诉你玩火时要小心了,如果你不是真是的hacker,现在又后悔了,怎么呢?在后面的文章中,我们会告诉你怎么把A1恢复到原来的样子。

附:这是我在Fedora 12上为usb0写的配置文件:

/etc/sysconfig/network-scripts/ifcfg-usb0

DEVICE=usb0
BOOTPROTO=none
ONBOOT=no
TYPE=Ethernet
NETMASK=255.255.255.0
BROADCAST=1.1.1.255
IPADDR=1.1.1.1
GATEWAY=192.168.1.1
USERCTL=no
IPV6INIT=no
PREFIX=24
NAME=”System usb0″
UUID=689ce77b-bfa1-c10b-19a2-eb3a89251128
NM_CONTROLLED=no

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值