编译移植android 2.3到tiny210 .

原创作品,转载请注明原作者及地址!

by 飞鸿惊雪



这两天玩android,做个小结吧。


避免麻烦,直接从nfs启动,下面是我常用的几个参数。
1 从nfs启动android (tiny210自带的android根文件系统,使用自己稍加修改编译好的tiny210自带kernel,自己编译的uboot启动)。使用下面的bootargs:
  1. console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/linuxrc androidboot.console=s3c2410_serial0  
console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/linuxrc androidboot.console=s3c2410_serial0

2 从nfs启动qtopia linux (tiny210自带qtopia根文件系统,使用自己稍加修改编译好的tiny210自带kernel,自己编译的uboot启动)。使用下面的bootargs:
  1. console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/linuxrc  
console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off init=/linuxrc

3 从nfs启动openwrt,使用生成好的uImage,uboot能够启动。使用下面的bootargs:
  1. console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off   
console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.0.100:/tftpboot/nfs ip=192.168.0.101:192.168.0.100:192.168.0.1:255.255.255.0:www.richardnee.com:eth0:off 

使用第1个是用来测试启动android。


使用自己稍加修改编译好的tiny210自带kernel,uboot可以成功启动tiny210自带的android系统。

下面内核保持不变,启动自己编译的android-2.3.1(目前这个源代码还是友善自带的,自己还没开始动手移植),出现如下情况:

  1. [ 3.642451] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1  
  2. [ 4.646504] IP-Config: Complete:  
  3. [ 4.646535] device=eth0, addr=192.168.0.101, mask=255.255.255.0, gw=192.168.0.1,  
  4. [ 4.646615] host=www, domain=, nis-domain=richardnee.com,  
  5. [ 4.646665] bootserver=192.168.0.100, rootserver=192.168.0.100, rootpath=  
  6. [ 4.648396] DBUG_PORT must not use AFC!  
  7. [ 4.652311] Freeing init memory: 1436K  
  8. 1Wire touchscreen OK  
  9. /init: line 103: can't open /r/dev/console: no such file  
  10. [ 4.841750] Kernel panic - not syncing: Attempted to kill init!  
  11. [ 4.841812] Backtrace:   
  12. [ 4.841864] [<c0173efc>] (dump_backtrace+0x0/0x110) from [<c05c2be0>] (dump_stack+0x18/0x1c)  
  13. [ 4.841940] r6:dfc34000 r5:c07dc2a0 r4:c07daafc r3:00000000  
  14. [ 4.842008] [<c05c2bc8>] (dump_stack+0x0/0x1c) from [<c05c2c58>] (panic+0x74/0xf0)  
[ 3.642451] eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
[ 4.646504] IP-Config: Complete:
[ 4.646535] device=eth0, addr=192.168.0.101, mask=255.255.255.0, gw=192.168.0.1,
[ 4.646615] host=www, domain=, nis-domain=richardnee.com,
[ 4.646665] bootserver=192.168.0.100, rootserver=192.168.0.100, rootpath=
[ 4.648396] DBUG_PORT must not use AFC!
[ 4.652311] Freeing init memory: 1436K
1Wire touchscreen OK
/init: line 103: can't open /r/dev/console: no such file
[ 4.841750] Kernel panic - not syncing: Attempted to kill init!
[ 4.841812] Backtrace: 
[ 4.841864] [<c0173efc>] (dump_backtrace+0x0/0x110) from [<c05c2be0>] (dump_stack+0x18/0x1c)
[ 4.841940] r6:dfc34000 r5:c07dc2a0 r4:c07daafc r3:00000000
[ 4.842008] [<c05c2bc8>] (dump_stack+0x0/0x1c) from [<c05c2c58>] (panic+0x74/0xf0)

因为是最高权限生成rootfs_dir的,因此也要使用最高权限才能cp,比如rootfs_dir/dev/下的设备文件,

上面的错误就是使用一般权限导致/dev/console没有拷贝过去!
  1. sudo ./genrootfs.sh  
  2. sudo cp rootfs_dir/ /tftpboot/nfs -fpRv  
sudo ./genrootfs.sh
sudo cp rootfs_dir/ /tftpboot/nfs -fpRv

继续出错:
  1. [ 139.032041] request_suspend_state: wakeup (0->0) at 138479524004 (2011-08-13 20:12:20.456813585 UTC)  
  2. [ 139.034670] init: untracked pid 144 exited  
  3. [ 139.035349] init: untracked pid 145 exited  
[ 139.032041] request_suspend_state: wakeup (0->0) at 138479524004 (2011-08-13 20:12:20.456813585 UTC)
[ 139.034670] init: untracked pid 144 exited
[ 139.035349] init: untracked pid 145 exited

网上很多人也出现了同样的错误。归纳起来主要三个原因:
1 system/lib/hw/下缺少gralloc.default.so
           把out/target/product/OK6410/obj/SHARED_LIBRARIES/gralloc.default_intermediates/LINKED下把这个文件放到文件系统的/system/lib/hw下就可以启动了

参看:http://blog.csdn.net/zjg555543/article/details/7787905


2 如果是挂载nfs,检查nfs权限
       a 关闭防火墙
       b 可以在/etc/exports 中配置nfs服务,增加rw,no_root_squash,可以解决此问题

参看:http://blog.csdn.net/zjg555543/article/details/7787905


3 还出现该问题,说明init程序所在的分区权限不够。 参看:http://my.oschina.net/u/246816/blog/48892

  1. mount rootfs rootfs / ro remount  
  2. 改成  
  3. mount rootfs rootfs / rw remount  
mount rootfs rootfs / ro remount
改成
mount rootfs rootfs / rw remount

其他还有比如opengl等驱动不正确等问题导致的(http://blog.chinaunix.net/uid-7922708-id-3048378.html)。


一开始我也苦苦找寻原因,可是上面三者都不是我的原因。因此来招笨的,直接把友善自带的android/system/代替自己编译的,ok,一起成功启动。

然后我就对比了友善tiny210自带android和我编译的有啥区别:
除了data和system,其他目录、文件,包括/下的linuxrc,init,init.*.rc,uevent.*.rc都完全相同!!
而上面的测试可以知道,正是是因为system中的内容不同,导致了上述的错误!!
好了,再开始对比system下的内容,不同的文件有:
  1. ############ android编译生成的 ##########   
  2. system/framework  
  3. system/xbin  
  4. system/app  
  5.   
  6. system/lib/libhardware_legacy.so  
  7. system/lib/libmock_ril.so  
  8. system/lib/libwebcore.so  
  9.   
  10. system/etc/security/otacerts.zip    (android-2.3.1自带)  
  11. +system/etc/ts.detected  (tslib校验时生成的)  
  12.   
  13. ########### 开发板BSP ############   
  14. system/lib/modules/2.6.35.7-FriendlyARM/ 没有不同  
  15. +system/lib/hw/gps.mini6410.so   只多出了gps.mini6410.so  
  16. system/lib/hw/gps.mini210.so  
############ android编译生成的 ##########
system/framework
system/xbin
system/app

system/lib/libhardware_legacy.so
system/lib/libmock_ril.so
system/lib/libwebcore.so

system/etc/security/otacerts.zip	(android-2.3.1自带)
+system/etc/ts.detected	 (tslib校验时生成的)

########### 开发板BSP ############
system/lib/modules/2.6.35.7-FriendlyARM/ 没有不同
+system/lib/hw/gps.mini6410.so	 只多出了gps.mini6410.so
system/lib/hw/gps.mini210.so

然后在只把tiny210自带android的system/framwork/下的framwork*和core*.jar直接cp就可以启动我自己编译的了!!
最后发现:
  1. -rw------- 1 richardnee richardnee 2.8M 2012-10-26 04:07 framework.jar  
  2. -rw-r--r-- 1 richardnee richardnee 4.4M 2012-10-26 04:02 framework-res.apk  
  3. -rw------- 1 richardnee richardnee 1.8M 2012-10-26 04:04 core.jar  
  4. -rw-r--r-- 1 richardnee richardnee 9.9K 2012-10-26 04:05 core-junit.jar  
-rw------- 1 richardnee richardnee 2.8M 2012-10-26 04:07 framework.jar
-rw-r--r-- 1 richardnee richardnee 4.4M 2012-10-26 04:02 framework-res.apk
-rw------- 1 richardnee richardnee 1.8M 2012-10-26 04:04 core.jar
-rw-r--r-- 1 richardnee richardnee 9.9K 2012-10-26 04:05 core-junit.jar

修改他们的权限为644,o(∩∩)o...哈哈,终于可以运行了!!

原来是这个原因!!实际上就是刚刚提到的第三个原因:权限不够!!






原创作品,转载请注明原作者及地址!

by 飞鸿惊雪


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值