Mer系统兼容Android系统(二)

在专心研究论文的同时,突然转向工程的确不适应。不过言归正传,今天主要在OMAP平台上解决了昨天编译的内核崩溃问题。

上篇文章中编译出了OMAP平台上开启各种LXC技术所需要的Android内核uImage,使用该内核来启动Mer系统。SD卡已经写入了Mer系统镜像,上午因为没有SD卡读卡器基本没做啥工作,下午从同学处借了一读卡器,开始测试了。

测试步骤如下:

1.    将uImage直接代替SD卡中boot分区中原始的内核,启动系统内核崩溃。出错信息如下:

[    2.204559] __alloc_from_pool: coherent poolnot initialised!

[    2.210662] [<c001b0c4>](unwind_backtrace+0x0/0xf8) from [<c001c5c8>] (__dma_alloc+0x3cc/0x3e4)

另外有一处omap_hwmod弹出警告,也出现了堆栈信息,不崩溃的话,先忽略。

在GOOGLE上查阅出错的相关信息,如下网址给出解决办法

http://ubuntu.5.n6.nabble.com/PATCH-0-2-P-omap4-Remove-the-CMA-td4335100.html

文中大意是OMAP中CMA的问题:

The contiguos memory allocator (CMA) was part of latest TILT but it's not part 
of mainline, nor it's a dependency for any of our drivers and it couldbe a 
source of problems in case it's not properly initialized atboot time 
(lp920511): remove it from our tree. 

没有过多研究,大意是如果没用到OMAP Camera(其驱动需要CMA),可以恢复CMA。文中给出解决办法,一种是打PACTH,嫌麻烦。第二种取巧的办法是在内核启动参数中加入mem=456M@0x80000000mem=512M@0xA0000000,这个貌似是划分内存,有人猜测CMA可能会在某段内存中生成,而使之不崩溃,BALABALA。

2.   测试下载的Android镜像是否正常,偷懒下载了WINDOWS下的镜像写入工具,直接将SD卡写成了Android镜像。注意到SD卡划成了6个分区,其中分区1为boot分区,分区2为 system分区,分区3为data分区,分区4无,分区5为cache分区,分区6为SD卡挂载分区。检查发现可以正常启动android系统,换了自己编译的内核也能启动,具体细节没有研究了。意识到是boot分区导致内核崩溃的区别,主要研究一下omap的boot系统。

3.    仔细查看了android镜像的boot分区,果然从boot.txt中发现内核启动参数变了,setenv bootargs "console=ttyO2,115200n8 rootwait ro earlyprintkfixrtc nocompcache vram=48M omapfb.vram=0:24M,1:24M mem=456M@0x80000000mem=512M@0xA0000000 init=/init androidboot.console=ttyO2。验证了步骤1中的内存划分参数应该是有效的,同时仔细研究发现实际上android的ROOTFS打进了uInitrd中,也就是ramdisk中(难怪之前发现在分区中找不到android的INIT可执行文件,只好复习了initramdisk,initramfs之类的东西,还下载了个文档,本来想拆开uInitrd看看里面的内容,无奈除了file uInitrd可以查看下文档属性外,用网上提供的cpio,mount loop的方法都没打开此文件,留待以后需要使用LXC的时候整合Android的根文件系统时再去研究好了。)所以OMAP的启动Android时加载uImage和uInitrd,并通过启动参数引导去找rootfs中的init进程,这和以前在mips上通过NFS挂载根文件系统是一样的。

4.    确认了启动android正常后,将SD卡写回Mer镜像。写入镜像的方法:

bzcat xxx.raw.bz2 | ddb s=4096 of=/dev/mmcblk0p

5.    修改OMAP的启动参数,参考嵌入式上开发的经验,启动的时候暂停进入uboot,printenv仔细查看环境参数,通过setenv修改bootargs参数加入mem=456M@0x80000000mem=512M@0xA0000000。不幸的是重启后发现参数未起作用,又回到原来的参数值。

6.    仔细查看启动参数发现,boot的时候会优先去读boot.scr中的脚本。直接vi boot.scr是不行的,修改后系统认为是bad data。查阅发现unbutu下有工具flash-kernel生成.scr文件,OPENSUSE下没下载到。不过另外有生成的方法。将需要启动的命令参数写进boot.script,然后执行命令

mkimage -A arm -O linux -Tscript -C none -a 0 -e 0 -n MiniBoard -d boot.script boot.scr

其中 –n 后是名字,这样生成了boot.scr拷入boot分区,重启系统,OK。内核崩溃问题解决。

7.    虽然启动了Mer系统,但是发现好像X11没有成功启动,这是后续的工作了。后续需要解决的问题有:

l  测试是否成功启动Mer系统

l  组装Android系统ROOTFS。

l  装入LXC相关工具,检查并启动ANDROID.


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值