制作initlog.rle文件

一、initlog.rle文件制作:

在Android设备启动过程中,出现的第一个界面,原始的Android是显示静态的“Android”,通过代码分析platform/system/core/init/init.c
函数int main(int argc, char **argv)
{
......
if(load_565rle_image(INIT_IMAGE_FILE) ) {
fd = open("/dev/tty0", O_WRONLY);
if (fd >= 0) {
const char *msg;
msg = "/n"
"/n"
"/n"
"/n"
"/n"
"/n"
"/n" // console is 40 cols x 30 lines
"/n"
"/n"
"/n"
"/n"
"/n"
"/n"
"/n"
" A n d r o i d";
write(fd, msg, strlen(msg));
close(fd);
}
}
......
}

其中的INIT_IMAGE_FILE在init.h中定义#define INIT_IMAGE_FILE "/initlogo.rle"
通过分析可知,如果不存在initlog.rle文件,系统开机后显示“Android”

下面就简单介绍一下initlog.rle文件的制作步骤:

1、首先需要一个适合自己屏幕的png文件,可以自己制作或者网上下载,例如名称为log.png
2、使用ImageMagick自带的convert命令,进行raw格式转换
命令 $ convert -depth 8 log.png rgb:log.raw
将获得一个叫做log.raw的文件
3、来到目录platform/build/tools/rgb2565,编译android自带的rgb2565工具(如果没编译过),使用:$ gcc -O2 -Wall -Wno-unused-parameter -o rgb2565 to565.c
4、将log.raw文件拷贝到rgb2565可执行程序目录下,即platform/build/tools/rgb2565
5、对raw文件进行格式转换:$ ./rgb2565 -rle < splash.raw > initlogo.rle生成initlog.rle文件


二、修改开机第一个界面:
1、将initlog.rle文件拷贝到platform/out/.../root/目录(与init.rc同目录)
2、如果你的系统不是只读型system.img,那么修改/platform/system/core/init/logo.c文件,函数load_565rle_image(char *fn)中注释掉unlink(fn);
注:查看代码可发现,在system/core/init/init.c [load_565rle_image] --> logo.c中 ,显示完毕initlogo.rle之后作了 unlink 操作。该操作对于android 默认的只读型system.img 是没问题, 但对于自定义的yaffs 或者 ubi形式的可读写型的system.img时就有问题了。会造成将initlogo.rle删除,下次启动时读取不到该文件。可以通过注释掉logo.c的load_565rle_image()中的unlink(fn)语句来规避该问题。
3、重新编译系统生成image文件。
至此大功告成!

更多相关文章

  1. Android 利用 xml 文件实现 ImageView 的加载转圈动画
  2. 【转】Android xml资源文件中@、@android:type、@*、?、@+含义和
  3. 传智播客—Android(二)数据存储和访问 之文件
  4. Android夸进程通信机制五:使用文件共享进行进程间通信
  5. 初涉Android之文件保存
  6. Android Studio Gradle 添加.so 支持文件

随机推荐

  1. http://dl-ssl.google.com/android上不去
  2. Android(安卓)Intent 序列化和反序列化
  3. Android(安卓)用户反馈界面的实现
  4. (Android)画个钟看看
  5. Debug native code using addr2line on A
  6. GridView层属性
  7. android:Spinner 设置收起以及展开的字体
  8. TextView --- 内容设置成上下滑动 和 代
  9. 查询通讯录拨号发短信
  10. android之webview使用-处理404等错误