zoukankan      html  css  js  c++  java
  • broncho a1 hack指南-移植Android2.0

    转载时请注明出处和作者联系方式
    文章出处: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

  • 相关阅读:
    蛋疼的时候写三消游戏(十一) 圆形时钟
    C# 中的volatile关键字 (我今天才知道)
    第十四周助教总结
    第十周助教总结
    第十二周助教总结
    C语言I博客作业04
    C语言I博客作业05
    C语言I博客作业02
    第十一周助教总结
    第十三周助教总结
  • 原文地址:https://www.cnblogs.com/zhangyunlin/p/6167429.html
Copyright © 2011-2022 走看看