主题 : 移植Android2.1(附获取freerunner 2.1 源码的方法) 复制链接 | 浏览器收藏 | 打印
级别: 新手上路
UID: 7025
精华: 0
发帖: 29
金钱: 255 两
威望: 114 点
贡献值: 0 点
综合积分: 58 分
注册时间: 2009-06-29
最后登录: 2012-05-03
楼主  发表于: 2010-04-09 22:08

 移植Android2.1(附获取freerunner 2.1 源码的方法)

管理提醒: 本帖被 kasim 执行置顶操作(2010-07-09)
一、获取freerunner2.1源码
目前freerunner的主线已经2.2(froyo)版本,当我们下载源码是指定branch为eclair时,发现已经编译不过了。究其原因是google官方已经将eclair部分代码移到eclair分支,而freerunner的eclair部分的代码依然留在master分支,导致两部分代码不一致而编译不过。好在git是一个强大的版本库管理软件,我们还是有办法拿到一个完整的freerunner2.1源码的。具体方法如下:
1)初始化版本库,使用默认的master分支
      repo init -u git://gitorious.org/android-on-freerunner/freerunner_platform_manifest.git
2)修改.repo/manifest.xml文件,将default的revision改为eclair,将freerunner部分项目的revision改为master。具体见附件
3)同步源码 ,执行repo sync,所需时间视网络环境而定
4)同步完源码后,还不能直接编译,因为目前freerunner的master分支目前已经是2.2的代码,我们需要利用git的回溯功能来时光倒流一下。步骤如下:
      1.将附件的goback.py拷贝到源码的根目录下
      2.执行 ./goback.py "2010-04-11 00:00"
5)经过以上的步骤后,我们已经可以得到一个完整的Android2.1源码了,但这时候的源码还没有解决mp3播放的问题,我们还需要将opencore的源码checkout到较新的版本
      进入 external/opencore,然后执行git checkout  ea1f1c41
6)编译源码
  manifest.xml.zip (3 K) 下载次数:453    goback.py.zip (1 K) 下载次数:369

二、移植Android2.1到mini2440
最近有点时间,尝试了移植Android on Freerunner开源项目所提供的Android2.1,还是使用之前的2.6.27内核,在上面做了一点少少的修改。
到目前为止,触摸屏已经校正,网络正常,声卡驱动用原来的OSS驱动,拨号有声音,但不能播放音乐,估计是libmediaplayer库的问题。
截图:


  
下面简单介绍一下移植的过程:
一、文件系统:
1.下载源文件:
建立源文件目录 mkdir ~/android_src
初始化repo  cd ~/android_src & repo init -u git://gitorious.org/android-on-freerunner/freerunner_platform_manifest.git (主线是2.1版本)
同步源文件 repo sync
整个过程会比较慢,可以同时开几个窗口来分别同步一些较大的project,例如 repo sync kernel,repo sync prebuilt,repo external/opencore,这样会快很多。
2.编译文件系统:
make
大概需要3─4个小时,这个跟机器的性能有关。
3.修改文件系统以适应Mini2440。
1)添加tslib触摸屏校正工具已经tslib所依赖的libc库和c++库,android系统本身使用的是Bionic c库。
2)添加buzybox,/myDev文件夹,/system/etc/shine文件夹
3)创建linuxrc启动脚本,/system/etc/myInit.rc初始化脚本,/system/etc/net.conf网络配置文件。
4)修改init.rc,去掉除mount tmpfs tmpfs /sqlite_stmt_journals size=4m之外所有的mount命令,并添加以下语句:
symlink /dev/snd/dsp /dev/eac 创建声卡的软连接
service console /bin/busybox sh //让系统使用buzybox的shell控制台
    console
service myInit /bin/busybox sh /system/etc/shine/myInit.rc //运行myInit.rc脚本,进行网络初始化等
    oneshot
5)将无线网卡的库文件复制的/system/etc/firmware下

二、内核
在原来2.6.27内核的基础下,做了以下的改动:
1.添加kasim大侠所提供的power supply class驱动,但是不能将该设备添加到smdk2440_devices[] __initdata下,否则不能用linuxrc启动脚本来启动系统。
2.配置内核是要选上Power management options中的Wake lock,Wake lock stats和Userspace wake locks,否则触摸屏会没有反应。
3.使SD卡能够被系统识别,必须要选上General setup-->Create deprecated sysfs files,并修改/system/etc/vold.conf文件,将media_path设置为/devices/platform/s3c2440-sdi/mmc_host/mmc0/
4.修改LCD驱动(drivers/video/s3c2410fb.c)以支持双重缓冲,android的显示系统需要双缓冲的支持。
5.修正触摸屏驱动中坐标方向错误的问题。

三、精简系统
64M内存对与Android系统来说实在是太少了,加载所有系统程序后,再打开其他程序会变得很慢。
为此可以删掉一些暂时用不到的系统软件如Phone,AlarmClock等(位于/system/app下),甚至可以只保留以下六个较为重要的系统程序:
LatinIME.apk,Launcher.apk,PackageInstaller.apk,Settings.apk,SettingsProvider.apk,UserDictionaryProvider.apk
然后再安装自己的软件,经过精简后,系统运行的效率会有很大的提高,个人感觉要比1.5版本系统更为流畅。



四、其他问题
系统休眠后不能唤醒,目前的解决办法是将系统设置成保持唤醒状态:
设置-->应用程序-->开发-->保持唤醒状态



在精简后的系统上安装最新的Android版QQ,运行很流畅,Android版QQ的UI也做得非常漂亮的说,下面是运行截图:



希望这些内容对大家用所帮助,也欢迎大家一起来分享自己的移植经验以及成果!

附件:
根文件系统:下载
内核镜像:下载
内核源码:下载

ps:
安装文件系统之前先把/system/etc/shine/pointercal删掉,否则触摸屏可能会不准。如果想重新校正触摸屏,也可以先删掉pointercal文件再重启系统。
为了能正确配置网络,还需要创建ifconfig和route的软连接,具体如下:
rm /system/bin/ifconfig
rm /system/bin/route
cd /bin
ln -s busybox ifconfig
ln -s busybox route
[ 此帖被shinelk在2010-11-15 11:43重新编辑 ]
级别: 新手上路
UID: 17407
精华: 0
发帖: 1
金钱: 5 两
威望: 1 点
贡献值: 0 点
综合积分: 2 分
注册时间: 2010-03-28
最后登录: 2010-06-16
1楼  发表于: 2010-06-05 15:59
描述:emulator
图片:
下载编完所有的android2.1源码后,为什么模拟器运行起来没有具体内容啊?
[root@localhost images]# emulator -avd cupcake -sysdir /root/android_src/out/target/product/generic/ -system /root/android_src/out/target/product/generic/system.img -data /root/android_src/out/target/product/generic/userdata.img -ramdisk /root/android_src/out/target/product/generic/ramdisk.img -kernel /root/android_src/prebuilt/android-arm/kernel/kernel-qemu




还有按了menu键也这样,是不是加载那些镜像文件有问题?或者编译的镜像文件有问题呢?我再次启动加上-show-kernel参数,输出启动信息如下:

Uncompressing Linux.......................................................................................... done, booting the kernel.
Initializing cgroup subsys cpu
Linux version 2.6.29-00261-g0097074 (digit@digit.mtv.corp.google.com) (gcc version 4.4.0 (GCC) ) #14 Tue Feb 2 15:49:02 PST 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00093177
CPU: VIVT data cache, VIVT instruction cache
Machine: Goldfish
Memory policy: ECC disabled, Data cache writeback
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 24384
Kernel command line: qemu=1 console=ttyS0 android.checkjni=1 android.qemud=ttyS1 android.ndns=3
Unknown boot option `android.checkjni=1': ignoring
Unknown boot option `android.qemud=ttyS1': ignoring
Unknown boot option `android.ndns=3': ignoring
PID hash table entries: 512 (order: 9, 2048 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
Memory: 96MB = 96MB total
Memory: 93844KB available (2540K code, 679K data, 104K init)
Calibrating delay loop... 181.04 BogoMIPS (lpj=905216)
Mount-cache hash table entries: 512
Initializing cgroup subsys debug
Initializing cgroup subsys cpuacct
Initializing cgroup subsys freezer
CPU: Testing write buffer coherency: ok
net_namespace: 520 bytes
NET: Registered protocol family 16
bio: create slab <bio-0> at 0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 4096 (order: 3, 32768 bytes)
TCP bind hash table entries: 4096 (order: 2, 16384 bytes)
TCP: Hash tables configured (established 4096 bind 4096)
TCP reno registered
NET: Registered protocol family 1
checking if image is initramfs... it is
Freeing initrd memory: 156K
goldfish_new_pdev goldfish_interrupt_controller at ff000000 irq -1
goldfish_new_pdev goldfish_device_bus at ff001000 irq 1
goldfish_new_pdev goldfish_timer at ff003000 irq 3
goldfish_new_pdev goldfish_rtc at ff010000 irq 10
goldfish_new_pdev goldfish_tty at ff002000 irq 4
goldfish_new_pdev goldfish_tty at ff011000 irq 11
goldfish_new_pdev smc91x at ff012000 irq 12
goldfish_new_pdev goldfish_fb at ff013000 irq 13
goldfish_new_pdev goldfish_audio at ff004000 irq 14
goldfish_new_pdev goldfish_mmc at ff005000 irq 15
goldfish_new_pdev goldfish_memlog at ff006000 irq -1
goldfish_new_pdev goldfish-battery at ff014000 irq 16
goldfish_new_pdev goldfish_events at ff015000 irq 17
goldfish_new_pdev goldfish_nand at ff016000 irq -1
goldfish_new_pdev goldfish-switch at ff017000 irq 18
goldfish_new_pdev goldfish-switch at ff018000 irq 19
goldfish_pdev_worker registered goldfish_interrupt_controller
goldfish_pdev_worker registered goldfish_device_bus
goldfish_pdev_worker registered goldfish_timer
goldfish_pdev_worker registered goldfish_rtc
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered goldfish_tty
goldfish_pdev_worker registered smc91x
goldfish_pdev_worker registered goldfish_fb
goldfish_audio_probe
goldfish_pdev_worker registered goldfish_audio
goldfish_pdev_worker registered goldfish_mmc
goldfish_pdev_worker registered goldfish_memlog
goldfish_pdev_worker registered goldfish-battery
goldfish_pdev_worker registered goldfish_events
goldfish_pdev_worker registered goldfish_nand
goldfish_pdev_worker registered goldfish-switch
goldfish_pdev_worker registered goldfish-switch
ashmem: initialized
Installing knfsd (copyright (C) 1996 okir@monad.swb.de).
yaffs Feb  2 2010 15:48:32 Installing.
msgmni has been set to 183
alg: No test for stdrng (krng)
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
allocating frame buffer 320 * 480, got ffa10000
Console: switching to colour frame buffer device 40x30
console [ttyS0] enabled
loop: module loaded
nbd: registered device at major 43
smc91x.c: v1.1, sep 22 2004 by Nicolas Pitre <nico@cam.org>
eth0 (smc91x): not using net_device_ops yet
eth0: SMC91C11xFD (rev 1) at c684c000 IRQ 12 [nowait]
eth0: Ethernet addr: 52:54:00:12:34:56
goldfish nand dev0: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev1: size 4000000, page 2048, extra 64, erase 131072
goldfish nand dev2: size 4000000, page 2048, extra 64, erase 131072
mice: PS/2 mouse device common for all mice
*** events probe ***
events_probe() addr=0xc6854000 irq=17
events_probe() keymap=qwerty2
input: qwerty2 as /devices/virtual/input/input0
goldfish_rtc goldfish_rtc: rtc core: registered goldfish_rtc as rtc0
logger: created 64K log 'log_main'
logger: created 256K log 'log_events'
logger: created 64K log 'log_radio'
IPv4 over IPv4 tunneling driver
GRE over IPv4 tunneling driver
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
802.1Q VLAN Support v1.8 Ben Greear <greearb@candelatech.com>
All bugs added by David S. Miller <davem@redhat.com>
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 0
goldfish_rtc goldfish_rtc: setting system clock to 2010-06-03 17:17:39 UTC (1275585459)
Freeing init memory: 104K
mmc0: new SD card at address e118
mmcblk0: mmc0:e118 SU02G 200 MiB
mmcblk0:
init: cannot open '/initlogo.rle'
yaffs: dev is 32505856 name is "mtdblock0"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.0, "mtdblock0"
yaffs tragedy: Bad object type, 1854998237 != 4, for object 122539569 at chunk 13567 during scan
yaffs tragedy: Bad object type, 1722134475 != 8, for object 161941314 at chunk 13566 during scan
yaffs: dev is 32505857 name is "mtdblock1"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.1, "mtdblock1"
yaffs_read_super: isCheckpointed 0
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
yaffs_read_super: isCheckpointed 0
init: cannot find '/system/bin/sh', disabling 'console'
init: cannot find '/system/bin/servicemanager', disabling 'servicemanager'
init: cannot find '/system/bin/vold', disabling 'vold'
init: cannot find '/system/bin/debuggerd', disabling 'debuggerd'
init: cannot find '/system/bin/rild', disabling 'ril-daemon'
init: cannot find '/system/bin/app_process', disabling 'zygote'
init: cannot find '/system/bin/mediaserver', disabling 'media'
init: cannot find '/system/bin/playmp3', disabling 'bootsound'
init: cannot find '/system/bin/dbus-daemon', disabling 'dbus'
init: cannot find '/system/bin/installd', disabling 'installd'
init: cannot find '/system/etc/install-recovery.sh', disabling 'flash_recovery'
init: cannot find '/system/bin/keystore', disabling 'keystore'
init: cannot find '/system/etc/init.goldfish.sh', disabling 'goldfish-setup'
init: cannot find '/system/bin/qemud', disabling 'qemud'
init: cannot find '/system/bin/logcat', disabling 'goldfish-logcat'