当前位置: 首页 > 工具软件 > PandaBoard > 使用案例 >

pandaboard 安装_pandaboard---文件系统的建立(4)

卢阳成
2023-12-01

1.利用http://www.omappedia.org/wiki/PandaBoard_L27.12.1-P2_Release_Notes#Tool_Chain_for_building_Kernel_and_Drivers

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

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

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:

在此系统下编译出的文件系统,和 http://www.omappedia.org/wiki/PandaBoard_L27.12.1-P2_Release_Notes#Tool_Chain_for_building_Kernel_and_Drivers提供的文件系统现象一样

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

可以直接进入桌面系统。

/// Fedora15:

在此linux下编译完成后,需要将 http://www.omappedia.org/wiki/PandaBoard_L27.12.1-P2_Release_Notes#Tool_Chain_for_building_Kernel_and_Drivers提供的文件系统中一下几个库文件

进行覆盖,否则,将看不到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软件包均生成,但是似乎还是需要将http://www.omappedia.org/wiki/PandaBoard_L27.12.1-P2_Release_Notes#Tool_Chain_for_building_Kernel_and_Drivers提供的文件系统的/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和文件系统,通通手动从源代码编译走了一边,该碰到的问题基本都已经碰到了,文件系统的编译真是费时间啊!

 类似资料: