您好:
系统使用的是安卓,基于 http://processors.wiki.ti.com/index.php/TI-Android-JB-4.2.2-DevKit-4.1.1_DeveloperGuide ,完成了安卓系统。uboot 使用的是 2014。10。现在想让产品上电之后,显示公司的 logo,直至安卓系统起来。不知道哪一种方案比较可行,方案一 : UBOOT 起来之后显示 logo,直至安卓系统;方案二 : UBOOT 显示 一张 logo,内核起来显示一张 logo,安卓起来在现实一张 logo。
但是,方案一 存在以下问题 : UBOOT 显示 logo已经实现,但是启动内核的时候,又将屏幕给刷新了,屏幕变白了。尝试过,在 内核的 driver/video/logo 添加自己的启动logo : logo_linux_clut224.ppm(自己制作),但是内核启动的时候,并没有显示logo
方案二 :如何使得 UBOOT 的现实的图片可以一直保持,直至安卓起来。
Jian Zhou:
你可以参考下这个文档:http://processors.wiki.ti.com/index.php/Customizing_the_SDK_Splash_Screen
自定义一个启动logo.
Cason wang:
回复 Jian Zhou:
您好, 这篇文章提到了
The "psplash" user space application is called at boot time, showing the TI logo splash screen.
请问怎么才能让psplash在启动的时候调用? 有没有文档?
我的平台是 beagle bone black am335x
谢谢
Cason wang:
回复 Cason wang:
能不能帮忙解决一下?
user4725089:
回复 Jian Zhou:
安卓的 logo 开机制作出来了,将 UBOOT 显示logo + 内核通过 logo_linux_clut244 显示 logo + initlogo.rle 显示 + bootanimation 进行显示。但是在 initlogo.rle 和 bootanimation 过度的时候,存在大概一秒的黑屏。求支援。
Cason wang:
回复 user4725089:
求 介绍这个是怎么做到的
内核通过 logo_linux_clut244 显示 logo + initlogo.rle 显示 + bootanimation 进行显示
user4725089:
回复 Cason wang:
内核显示 logo,网上有很多的资料啊,参考这个就可以。 http://blog.csdn.net/sdvch/article/details/44304241。显示 内核 logo 的时候,我自己是讲 LCD 的初始化函数 : module_init ,改为 : postcore_initcall。 将 LCD 初始化的的时间在内核的前面完成初始化,不然又可能会导致 LCD 过晚完成初始化,从而导致 显示 logo 时间。
显示 initlogo.rle 的话,需要将 init.c 中的 :
main
queue_builtin_action(console_init_action, "console_init"); // 将显示函数,放入队列,等待执行
console_init_action // 显示函数
load_565rle_image(INIT_IMAGE_FILE) // 实际显示
的 unlink(fn); 进行注释,不然,你的 initlogo.rle 每次都会被删除(因为我的文件系统上hi UBI)。
booamination 的话,没有需要什么要注意的,直接替换文件就可以。
user4725089:
回复 Jian Zhou:
咨询下:
initlogo.rle —-> 黑屏—-> bootanimation ,这个黑屏的部分,我查了快一周了,就是定位不到,求技术支持。
user4725089:
回复 Jian Zhou:
别沉啊,帖子。
谁弄了安卓的,怎么解决开机显示logo—->黑屏—–>开机动画。这个黑屏,大家伙开发产品的时候,应该都是要解决的啊
user4725089:
回复 Jian Zhou:
没有人回答啊,我贴出问题的定位,希望抛砖引玉。
分析了 init.rc 发现有:
```
import /init.usb.rcimport /init.${ro.hardware}.rcimport /init.trace.rc
```
而××ro.hardware×× 来自于/proc/cpninfo ,所有加载的是根目录下的 init.am335xevm.rc。我们分析 init.am335xevm.rc 文件,发现整个文件和显示有关的就只有 :
“`
service pvr /system/bin/sgx/rc.pvr start class core oneshot
“`
我们需要对**/system/bin/sgx/rc.pvr** 进行分析,
“`case "$1" in"start") load_pvr ;;stop) if ! unload_pvr; then echo "Couldn't unload modules" >&2; fi ;;reload|restart) if unload_pvr; then load_pvr else echo "Couldn't unload modules" >&2; fi ;;*) echo "$0: unknown argument $1." >&2; ;;esac“`
**rc.pvr** 内容是比较的简单,通过传入的传入的值为 **start** 的时候,就执行 **load_pvr**,所以就是“`load_pvr(){
insmod /system/bin/sgx/pvrsrvkm.ko insmod /system/bin/sgx/omaplfb.ko chmod 0666 /dev/pvrsrvkm sleep 20 /system/bin/pvrsrvctl –start –no-module echo "Loaded PowerVR consumer services." return 0;}“`可见,其实就是加载了两个驱动,而且执行 **/system/bin/pvrsrvctl** 了这个命令。从启动的的延迟效果来看可以看出来,启动的黑屏是在**/system/bin/pvrsrvctl –start –no-module** 发生的。
和 SGX 相关的路径是位于 : /TI_Android_JB_4.2.2_DevKit_4.1.1/hardware/ti/sgx,应该是要去分析,是谁产生了 **pvrsrvctl** 这个命令。
暂时分析到这里,后续的代码,看的晕乎乎,非常困难。