问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

怎么修改android 启动过程中的第二个开机画面

发布网友 发布时间:2022-05-19 23:04

我来回答

1个回答

热心网友 时间:2023-10-19 20:40

第一个开机画面是在内核启动的过程中出现的,它是一个静态的画面。第二个开机画面是在init进程启动的过程中出现的,它也是一个静态的画面。第三个开机画面是在系统服务启动的过程中出现的,它是一个动态的画面。无论是哪一个画面,它们都是在一个称为帧缓冲区(frame buffer,简称fb)的硬件设备上进行渲染的。接下来,我们就分别分析这三个画面是如何在fb上显示的。
1. 第一个开机画面的显示过程
Android系统的第一个开机画面其实是Linux内核的启动画面。在默认情况下,这个画面是不会出现的,除非我们在编译内核的时候,启用以下两个编译选项:
CONFIG_FRAMEBUFFER_CONSOLE
CONFIG_LOGO
第一个编译选项表示内核支持帧缓冲区控制台,它对应的配置菜单项为:Device Drivers ---> Graphics support ---> Console display driver support ---> Framebuffer Console support。第二个编译选项表示内核在启动的过程中,需要显示LOGO,它对应的配置菜单项为:Device Drivers ---> Graphics support ---> Bootup logo。配置Android内核编译选项可以参考在Ubuntu上下载、编译和安装Android最新内核源代码(Linux Kernel)一文。
帧缓冲区硬件设备在内核中有一个对应的驱动程序模块fbmem,它实现在文件kernel/goldfish/drivers/video/fbmem.c中,它的初始化函数如下所示:

/**
* fbmem_init - init frame buffer subsystem
*
* Initialize the frame buffer subsystem.
*
* NOTE: This function is _only_ to be called by drivers/char/mem.c.
*
*/

static int __init
fbmem_init(void)
{
proc_create("fb", 0, NULL, &fb_proc_fops);

if (register_chrdev(FB_MAJOR,"fb",&fb_fops))
printk("unable to get major %d for fb devs\n", FB_MAJOR);

fb_class = class_create(THIS_MODULE, "graphics");
if (IS_ERR(fb_class)) {
printk(KERN_WARNING "Unable to create fb class; errno = %ld\n", PTR_ERR(fb_class));
fb_class = NULL;
}
return 0;
}
这个函数首先调用函数proc_create在/proc目录下创建了一个fb文件,接着又调用函数register_chrdev来注册了一个名称为fb的字符设备,最后调用函数class_create在/sys/class目录下创建了一个graphics目录,用来描述内核的图形系统。

模块fbmem除了会执行上述初始化工作之外,还会导出一个函数register_framebuffer:

EXPORT_SYMBOL(register_framebuffer);
这个函数在内核的启动过程会被调用,以便用来执行注册帧缓冲区硬件设备的操作,它的实现如下所示:

/**
* register_framebuffer - registers a frame buffer device
* @fb_info: frame buffer info structure
*
* Registers a frame buffer device @fb_info.
*
* Returns negative errno on error, or zero for success.
*
*/

int
register_framebuffer(struct fb_info *fb_info)
{
int i;
struct fb_event event;
......

if (num_registered_fb == FB_MAX)
return -ENXIO;

......

num_registered_fb++;
for (i = 0 ; i < FB_MAX; i++)
if (!registered_fb[i])
break;
fb_info->node = i;
mutex_init(&fb_info->lock);
fb_info->dev = device_create(fb_class, fb_info->device,
MKDEV(FB_MAJOR, i), NULL, "fb%d", i);
if (IS_ERR(fb_info->dev)) {
/* Not fatal */
printk(KERN_WARNING "Unable to create device for framebuffer %d; errno = %ld\n", i, PTR_ERR(fb_info->dev));
fb_info->dev = NULL;
} else
fb_init_device(fb_info);

......

registered_fb[i] = fb_info;

event.info = fb_info;
fb_notifier_call_chain(FB_EVENT_FB_REGISTERED, &event);
return 0;
}
由于系统中可能会存在多个帧缓冲区硬件设备,因此,fbmem模块使用一个数组registered_fb保存所有已经注册了的帧缓冲区硬件设备,其中,每一个帧缓冲区硬件都是使用一个结构体fb_info来描述的。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
密室逃脱8迷失乐园攻略大全 密室逃脱8迷失游乐园通关攻略 密室逃脱8逃出红色豪宅第7关怎么过_第7关卡通关图文攻略 密室逃脱8卖火柴的小女孩旋转六边形介绍_密室逃脱8卖火柴的小女孩旋转六... 跨国行李托运 房屋复式是什么意思? 什么叫复式房子 请问 为了减掉身上的赘肉 除了锻炼以外 在饮食上要注意什么 请详细点... 淘宝买家购物满500元后使用信用卡的时候就不能支付 笔记本电脑如何保护 水韵江苏旅游年卡和苏州休闲年卡哪个划算 武汉数谷的主导产业是什么? 一年之计,莫如数谷;十年之计,莫如树木;百年之计,莫如树人的成语是什么 如何取消Android启动页面的显示 androidstudioAVD一直显示启动页面怎么办 用英语怎么说追某人 中文写信地址的“某人 转 某人”用英文怎么表达? 请问日版苹果6PLUS有锁卡贴机。128G。前值摄像头坏掉了。成色蛮新的。 现在值多少钱。 向某人喊用英语怎么翻译 闲鱼上深圳区域苹果6手机16g,4g全网,300多元,64g650元,这是仿的手机? 5年微贷app是不是骗人的,下款之前要交什么风险备用金又是什么回事? 走向 用英语怎么说 动词 苹果6卡贴机能卖多少钱 苹果6卡特机多少钱? 怎样用英语表达 送人到某处 和 去某处接某人 走向的英文? 他们伸出双手走向对方的英文翻译? 3种走向他的英文翻译? 走向某人,英文 天天酷跑乐跑兑换活动的下一次是什么 天天酷跑乐跑新春兑换什么好 Android Studio启动界面怎么是这样的?新建项目出错怎么解决? 数罟不入洿池,鱼鳖不可胜食也 什么意思 android studio启动页面中的这图片中的各个选项是什么意思,不同的选择有什么差别,求告知。 哪里可以下载到免费的手机铃声? 贵阳的大中国数谷是传销吗? 如何免费下载好听的手机铃声 为什么说最毒女人心? 巩乃斯的马 (节选)结合文中具体的语句谈谈两匹光背马给你的印象 UI设计是做什么的?月薪多少?? “蒎”字准确的读音和意思? 微信一直显示正在登录,怎么办,我型号是HTC-a310e,安卓的 男的说他是实干蒎是什么意思? 畈蒎是什么意思 蒎字代表什么生肖? 蒎,阿蒎,蒎蒎。这个字不错,还有什么字可以的?叫起来也很亲切 为什么微信显示正在登录 隼.颂蒎善 是什么意思 姿蒎是什么? 海尔白马王子冰箱冷蒎室显示F 1是什么情况? 什么是媚术?