文档章节

为手机定制ROM

短短的歼击机
 短短的歼击机
发布于 2016/02/12 14:02
字数 1546
阅读 283
收藏 15

一、修改化定制Android4.0系统

Android系统启动时,先加载Linux内核,在Linuxframebuffer驱动里可以定制开机界面,Linux内核启动成功后,挂载根文件系统,启动Android系统,这个时候设备屏幕上开始出现滚动的Android动画,等全部的Android服务启动完毕之后,开始启动AndroidHOME界面,也就是桌面。

而在这个过程中,我们可以将开机界面和Android动画全部定制为自己需要的效果。

在整个开机过程中,屏幕上会出现三次内容:

Ø  Linux启动时画面,通常是个黄嘴的小企鹅

Ø  Android系统本地启动阶段画面,是ANDROID文字字样

Ø  Android系统显示系统启动阶段动画,是滚动的ANDROID动画

我们下面将三个过程中的屏幕内容都进行个性化设置。

 

1. 定制手机开机界面

根据前面文章介绍,我们要在Linuxframebuffer驱动里修改一些代码,让屏幕上出现我们自己的一个开机图片,如下图所示效果。

 

 

Linux系统中,LCD显示设备的驱动都是基于framebuffer的,framebuffer我们可以看成是Android的显存,只要我们向该显存里写入数据,这些数据就可以显示在LCD上。

根据不同的LCD所支持的颜色可以分为:16位色,24位色,32位色。

学过初中物理都知道,色彩由三元色:红(R),绿(G),蓝(B)组成。

Ø  16位色:一个像素点由16bit表示,占两个字节,RGB组成分为:565555二种

Ø  24位色:一个像素点由24bit表示,占三个字节,RGB每个颜色由8位组成。

Ø  32位色:一个像素点由32bit表示,占四个字节,除了RGB每个颜色8位外,还有8位的Alpha的透明度,共组成32位。

很明显,位数越高,可显示的色彩越丰富,相同像素的LCD占用的显存越大,现在手机和平板基本上都使用32位色的LCD

Android模拟器里使用16565格式显示驱动。

 

既然如此,那么出现在framebuffer里的应该是16位的具体颜色值,我们从怎么知道一个图片的RGB的值呢?

还好,我们使用一款叫Image2Lcd的软件,可以将一个指定的bmp位图格式图片转换成指定的RGB格式数据的数组中。

如下图所示:



 

选择好图片,设置好宽度和高度及颜色位数,保存成一个头文件mylogo.h,打开里面内容如下:

[cpp]  view plain  copy
  1. const unsigned char gImage_log[261120] = { 0X00,0X10,0XF0,0X00,0X88,0X00,0X01,0X1B,  
  2. 0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,0X00,  
  3. ..................................  
  4. };  


那么我们可以直接将这个头文件拷贝到内核目录中,包含到驱动里,然后直接通过gImage_log数组名访问图片内容。
Ø  修改fb驱动文件:
drivers/video/samsung/s3cfb.c
在里面添加一个绘制Logo图片函数draw_logo,如下所示:

[cpp]  view plain  copy
  1. #include "mylogo.h"  
  2. static int draw_logo(struct fb_info *fb)    
  3.  {  
  4.      int height = (fb->var).yres;  
  5.      int width = (fb->var).xres;  
  6.      printk("---------> h = %d, w = %d\n", height, width);  
  7.      memcpy(fb->screen_base, gImage_log, height*width*2);  
  8.      return 0;  
  9.  }    

Ø  s3cfb_probe函数里调用我们刚才添加的draw_logo函数:

[cpp]  view plain  copy
  1. static int s3cfb_probe(struct platform_device *pdev)  
  2. {............................  
  3. draw_logo(fbdev->fb[pdata->default_win]);  
  4. ............................  
  5. }  

重新编译下载内核,就可以看到效果了!

2.定制Android启动字样

Linux启动完毕之后,开始挂载根文件系统ramdisk.img,通过命令行指定Linux运行Linux系统里的第一个用户进程init

 init程序由system/core/init/目录下的源码编译而成,其入口文件为:init.cconsole_init_action函数就是用来打开console终端,然后在屏幕上打印“A N DR O I D”字样的,如果想修改这个值,则直接将其内容修改了,重新编译init程序,然后重新生成system.img即可,不过,一般是将其内容注释掉。

[cpp]  view plain  copy
  1. static int console_init_action(int nargs, char **args)    
  2. {    
  3.            …    
  4.      fd = open(console_name, O_RDWR);    
  5.      if (fd>= 0)    
  6.        have_console = 1;    
  7.        close(fd);    
  8.      
  9.      if( load_565rle_image(INIT_IMAGE_FILE) ) {    
  10.        fd = open("/dev/tty0", O_WRONLY);    
  11.         if (fd>= 0) {    
  12.              const char *msg;    
  13.                  msg = "\n"    
  14.              "\n"    
  15.              "\n"    
  16.              "\n"    
  17.              "\n"    
  18.              "\n"    
  19.              "\n"  // console is 40 cols x 30 lines    
  20.              "\n"    
  21.              "\n"    
  22.              "\n"    
  23.              "\n"    
  24.             "\n"    
  25.             "\n"    
  26.             "\n"    
  27.           "             A N D R O I D ";    
  28.              write(fd, msg, strlen(msg));    
  29.              close(fd);    
  30.         }    
  31.     }    
  32.      return 0;    
  33.  }    


3. 定制Android动画
Android系统过程中会滚动Android字样的一个动画,我们可以根据自己的需要,定制这个开机动画,如下图所示:
           



Android的开机动画是由Linux本地程序bootanimation控制实现的,其代码在:frameworks/base/cmds/bootanimation/,通过分析源码可知,修改Android开机动画有两种方式:
Ø  替换frameworks/base/core/res/assets/images/目录下的两个图片文件:android-logo-mask.png和android-logo-shine.png,android-logo-mask.png是镂空蒙板png图片,android-logo-shine.png是镂空蒙板后面的闪光png图片
Ø  在/data/local/或/system/media/目录创建bootanimation.zip文件
 
bootanimation.zip文件打包前的结构为:
[cpp] view plaincopy
1. desc.txt             动画属性描述文件  
2. part0/                          第一阶段动画图片的目录(动画是由一帧帧图片组成的)  
3. part1/                          第二阶段动画图片的目录  
bootanimation.zip文件是直接由这几个文件打包的,打包的格式是ZIP,并且要指定用压缩打包方式(就是在打包时的压缩方式选择为存储)。
 
 
desc.txt文件的格式为:

1. 480 250 15  
2. p 1 0 part0  
3. p 0 10 part1  
其中各个参数的意义为:

注:
标识符:p 是必须的。
循环次数:指该目录中图片循环显示的次数,0表示本阶段无限循环。
每秒显示帧数:就是每秒显示的图片数量,决定每张图片显示的时间。
阶段切换间隔时间:指的是该阶段结束后间隔多长时间显示下一阶段的图片,其单位是每张图片显示的时间。
对应图片目录:就是该阶段动画的系列图片,以图片文件目录的顺序显示动画,而且图片的格式必须要为PNG。

[cpp]  view plain  copy
  1. <pre name="code" class="cpp"></pre>  
  2. <pre></pre>  
  3. <pre></pre>  
  4. <pre></pre>  
  5. <pre></pre>  
  6. <pre></pre>  
  7. <pre></pre>  
  8. <pre></pre>  
  9. <pre></pre>  
  10. <pre></pre>  
  11.      

© 著作权归作者所有

短短的歼击机

短短的歼击机

粉丝 82
博文 268
码字总数 269797
作品 0
武汉
高级程序员
私信 提问
加载中

评论(1)

天命剑主
天命剑主
这混搭的界面,不忍直视
已经 2017 年了,Android 手机还需要 root 吗?

Android 是目前世界上最流行的操作系统,而且基于该系统的设备在全球范围内处于统治级地位。不过,对于很多安卓手机用户来说,root 这个词对他们十分陌生,甚至成为过去式。不过,早在 2014...

王练
2017/08/17
5.8K
39
盛大开始手机 Android ROM 开发,名为“乐众”

盛大年内计划推出的盛大手机将内置自行开发的ROM,今日该名为“乐众”的ROM公开下载。该系统深度集成了云中书城、麦库等盛大产品,并与MIUI一样每周五更新。 @乐众ROM: 乐众ROM今天发布公测...

红薯
2012/02/10
4.3K
22
关于安卓rom的机型适配和移植的一些常识问题请教

对安卓系统一直很感兴趣,也做了一点应用开发,对rom的定制越来越感兴趣,但是也还停留在刷刷机的程度上 很多定制的rom存在机型适配的问题,包括大名鼎鼎的cm,也不见得能覆盖所有机型 我理解...

wwwjjj
2013/06/17
8.3K
3
Android适配全面总结(三)

第一篇文章讲了 屏幕适配 上一篇文章讲了 版本适配 这一篇文章讲一下 ROM适配。 Android是开源的,不同的手机厂商都有自己定制的系统,所以这就给开发者带来了ROM适配难题。在一些群里面经常...

阿韦爱Android
2017/11/16
0
0
腾讯定制Android系统“tita”上线不久被关闭

腾讯近日将推出基于Android操作系统的定制版ROM,内部已经将该系统定名为tita。 据腾讯内部人士介绍说,tita来自于音译踢踏,象徵着轻快、简洁。“tita是基于Android 4.0内核开发的,具备快速...

红薯
2012/04/10
4.4K
30

没有更多内容

加载失败,请刷新页面

加载更多

作为一个(IT)程序员!聊天没有话题?试试这十二种技巧

首先呢?我是一名程序员,经常性和同事没话题。 因为每天都会有自己的任务要做,程序员对于其他行业来说;是相对来说比较忙的。你会经常看到程序员在发呆、调试密密麻麻代码、红色报错发呆;...

小英子wep
53分钟前
10
0
【SpringBoot】产生背景及简介

一、SpringBoot介绍 Spring Boot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化新 Spring 应用的初始搭建以及开发过程,该框架使用了特定的方式来进行配置,从而使开发人员不再需要...

zw965
今天
4
0
简述并发编程分为三个核心问题:分工、同步、互斥。

总的来说,并发编程可以总结为三个核心问题:分工、同步、互斥。 所谓分工指的是如何高效地拆解任务并分配给线程,而同步指的是线程之间如何协作,互斥则是保证同一时刻只允许一个线程访问共...

dust8080
今天
6
0
OSChina 周四乱弹 —— 当你简历注水但还是找到了工作

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @花间小酌 :#今日歌曲推荐# 分享成龙的单曲《男儿当自强》。 《男儿当自强》- 成龙 手机党少年们想听歌,请使劲儿戳(这里) @hxg2016 :刚在...

小小编辑
今天
3.2K
22
靠写代码赚钱的一些门路

作者 @mezod 译者 @josephchang10 如今,通过自己的代码去赚钱变得越来越简单,不过对很多人来说依然还是很难,因为他们不知道有哪些门路。 今天给大家分享一个精彩的 GitHub 库,这个库整理...

高级农民工
昨天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部