Chinaunix首页 | 论坛 | 博客
  • 博客访问: 431886
  • 博文数量: 69
  • 博客积分: 957
  • 博客等级: 准尉
  • 技术积分: 1161
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-26 14:54
文章分类

全部博文(69)

文章存档

2013年(15)

2012年(12)

2011年(42)

分类: LINUX

2011-11-28 13:29:04

1.利用

提供的文件系统,再加上自己编译内核,运行总是会出现如下问题:

经过一小会,串口打印提示

omapdss HDMI: hot plug event 0
omapdss HDMI: error sending hot plug event 0 (-2)
omapdss HDMI: pwrchanged => (0,S) = 0
omapdss HDMI: Disable HDMI_PHY_48MHz clock, hdmi_power = 0
omapdss HDMI: Release L3 constraint

紧接着系统重启或者显示蓝屏无信号输出。


2.后在fedora10、fedora15、ubuntu10.04、ubuntu11.10下分别编译了文件系统,出现的问题在

pandaboard--文件系统的建立1、2、3中分别描述过了,现在将部分调试过程分享一下。


注:关于问题:can't find a register in class 'GENERAL_REGS' while reloading 'asm'发生在

/external/bluetooth/bluez/sbc/sbc_primitives_neon.c(330)函数sbc_calc_scalefactors_j_neon中,

几个权威的解释都是说gcc需要升级或者需要升级linux系统进行重新编译,经过我在一下四个系统中的多次尝试,发觉此问题依旧解决不了,最后的做法只好是暂时注释掉此函数中的代码。


///////////////////Fedora10:

在此系统下编译出的文件系统,和 提供的文件系统现象一样

,出现一分钟后重启。但最终确定,Fedora10是唯一一个不需要借助其它文件系统的库文件,

可以直接进入桌面系统。


/////////////////// Fedora15:

在此linux下编译完成后,需要将 提供的文件系统中一下几个库文件

进行覆盖,否则,将看不到android图标,也进入不到桌面系统,当然了,文件系统挂载还是可以成功的,

并且不会出现系统重启的现象。

/system/vendor/lib/egl/libEGL_POWER_SGX540_120.so.1.1.17.4403

/system/vendor/lib/hw/gralloc.omap4.so.1.1.17.4403

/system/vendor/lib/libglslcompile.so.1.1.17.4403

/system/vendor/lib/libIMGegl.so.1.1.17.4403

/system/vendor/lib/libsrv_init.so.1.1.17.4403



/////////////////// ubunt10.04:

在次系统下,文件系统编译完成后,很奇怪的是/system/apps目录下基本所有的apk软件包都没有生成,制作生成的linux文件系统倒是可以挂载成功。

可以通过手动的方法实现apk软件包的编译,操作步骤如下:

编译模块:
修改了android的相关源代码后,在源代码的目录下,执行: . build/envsetup.sh
然后,进入到修改的源代码所属包的目录下,执行:mm
在源代码的目录下,执行: make snod 
最后,在系统目录下,执行:emulator ,就可以在模拟器上看到修改后的结果。
android中的一个应用程序可以单独编译,编译后要重新生成system.img
在源码目录下执行
$ . build/envsetup.sh (.后面有空格)
就多出一些命令:
- croot: Changes directory to the top of the tree.
- m: Makes from the top of the tree.
- mm: Builds all of the modules in the current directory.
- mmm: Builds all of the modules in the supplied directories.
- cgrep: Greps on all local C/C++ files.
- jgrep: Greps on all local Java files.
- resgrep: Greps on all local res/*.xml files.
- godir: Go to the directory containing a file.
可以加—help查看用法
我们可以使用mmm来编译指定目录的模块,如编译联系人:
$ mmm packages/apps/Contacts/
编完之后生成两个文件:
out/target/product/generic/data/app/ContactsTests.apk
out/target/product/generic/system/app/Contacts.apk
可以使用
$ make snod
重新生成system.img,再运行模拟器
最后,在系统目录下,执行:emulator ,就可以在模拟器上看到修改后的结果。

/////////////////// ubuntu11.10:

在此系统下,文件系统编译完后,/system/apps目录下所有apk软件包均生成,但是似乎还是需要将提供的文件系统的/system/vendor/lib目录进行覆盖,方可出现android图标,进入桌面系统。

经以上多个系统编译制作文件系统挂载后,凡进入桌面系统的,都出现了如下问题:

串口打印提示

omapdss HDMI: hot plug event 0
omapdss HDMI: error sending hot plug event 0 (-2)
omapdss HDMI: pwrchanged => (0,S) = 0
omapdss HDMI: Disable HDMI_PHY_48MHz clock, hdmi_power = 0
omapdss HDMI: Release L3 constraint

紧接着,显示器不显示。既然编译解决不了问题,只好在源码中搜索问题关键字看看:

在内核源码和文件系统源代码中分别搜索,结果出现在内核源码中。



搜索1: error sending hot plug event

搜索结果:\android-2.6.35\drivers\video\omap2\dss\hdmi.c(617): DSSWARN("error sending hot plug event %d (%d)"

尝试调试:在set_hdmi_hot_plug_status函数中,直接手动将onoff参数强制设置为1,即onoff = 1。

调试结果:

串口打印提示

omapdss HDMI: hot plug event 0
omapdss HDMI: request_suspend_state ...........
omapdss HDMI: pwrchanged => (0,S) = 0
omapdss HDMI: Disable HDMI_PHY_48MHz clock, hdmi_power = 0
omapdss HDMI: Release L3 constraint

屏幕退出,显示蓝屏无信号。


搜索2:request_suspend_state

搜索结果:kernel\power\earlysuspend.c(143): void request_suspend_state(suspend_state_t new_state)
kernel\power\earlysuspend.c(155): pr_info("request_suspend_state: %s (%d->%d) at %lld "
kernel\power\main.c(205): request_suspend_state(state);
kernel\power\power.h(257): void request_suspend_state(suspend_state_t state);

尝试调试:将main.c中state_store函数中的

#ifdef CONFIG_EARLYSUSPEND
if (state == PM_SUSPEND_ON || valid_state(state)) {
      error = 0;
      request_suspend_state(state);
}
#else
      error = enter_state(state);
#endif

修改为
#ifdef CONFIG_EARLYSUSPEND
if (state == PM_SUSPEND_ON || valid_state(state)) {
      error = 0;
//    request_suspend_state(state);
}
#else

      error = 0;
//    error = enter_state(state);
#endif

调试结果:文件系统挂载正常,不再出现桌面消失现象。

分析main.c中此段代码,发觉有CONFIG_EARLYSUSPEND可以在makemenuconfig中加以设置或者手动在 .config文件中直接设置为# CONFIG_EARLYSUSPEND is not set即可,同时将前面两个调试修改的源代码恢复为原来的代码,编译,发觉桌面系统显示正常,不再出现suspend的情况。

总结:看来应该是桌面系统进入了挂机(suspend)状态,从而引起了不正常退出。

后续可继续进行的调试:将内核编译中,makemenuconfig中的Power management option中的选项,进行删减调整,看看是否还有其它现象。或者直接在 .config文件中进行修改,看起来各个 CONFIG_  参数比较明显。


OK.....................

到此,pandaboard板子从x-loader、uboot、kernel和文件系统,通通手动从源代码编译走了一边,该碰到的问题基本都已经碰到了,文件系统的编译真是费时间啊!

阅读(2311) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~