首页 文章 精选 留言 我的

精选列表

搜索[三大系统],共10000篇文章
优秀的个人博客,低调大师

Android系统的开机画面显示过程分析(4)

函数fb_show_logo_line也是实现在文件kernel/goldfish/drivers/video/fbmem.c中,如下所示: staticintfb_show_logo_line(structfb_info*info,introtate, conststructlinux_logo*logo,inty, unsignedintn) { u32*palette=NULL,*saved_pseudo_palette=NULL; unsignedchar*logo_new=NULL,*logo_rotate=NULL; structfb_imageimage; /*Returniftheframebufferisnotmappedorsuspended*/ if(logo==NULL||info->state!=FBINFO_STATE_RUNNING|| info->flags&FBINFO_MODULE) return0; image.depth=8; image.data=logo->data; if(fb_logo.needs_cmapreset) fb_set_logocmap(info,logo); if(fb_logo.needs_truepalette|| fb_logo.needs_directpalette){ palette=kmalloc(256*4,GFP_KERNEL); if(palette==NULL) return0; if(fb_logo.needs_truepalette) fb_set_logo_truepalette(info,logo,palette); else fb_set_logo_directpalette(info,logo,palette); saved_pseudo_palette=info->pseudo_palette; info->pseudo_palette=palette; } if(fb_logo.depth<=4){ logo_new=kmalloc(logo->width*logo->height,GFP_KERNEL); if(logo_new==NULL){ kfree(palette); if(saved_pseudo_palette) info->pseudo_palette=saved_pseudo_palette; return0; } image.data=logo_new; fb_set_logo(info,logo,logo_new,fb_logo.depth); } image.dx=0; image.dy=y; image.width=logo->width; image.height=logo->height; if(rotate){ logo_rotate=kmalloc(logo->width* logo->height,GFP_KERNEL); if(logo_rotate) fb_rotate_logo(info,logo_rotate,&image,rotate); } fb_do_show_logo(info,&image,rotate,n); kfree(palette); if(saved_pseudo_palette!=NULL) info->pseudo_palette=saved_pseudo_palette; kfree(logo_new); kfree(logo_rotate); returnlogo->height; } 参数logo指向了前面所准备的第一个开机画面的内容。这个函数首先根据参数logo的内容来构造一个fb_image结构体image,用来描述最终要显示的第一个开机画面。最后就调用函数fb_do_show_logo来真正执行渲染第一个开机画面的操作。函数fbcon_switch实现在文件kernel/goldfish/drivers/video/console/fbcon.c中,显示第一个开机画面的过程如下所示: staticvoidfb_do_show_logo(structfb_info*info,structfb_image*image, introtate,unsignedintnum) { unsignedintx; if(rotate==FB_ROTATE_UR){ for(x=0; x<num&&image->dx+image->width<=info->var.xres; x++){ info->fbops->fb_imageblit(info,image); image->dx+=image->width+8; } }elseif(rotate==FB_ROTATE_UD){ for(x=0;x<num&&image->dx>=0;x++){ info->fbops->fb_imageblit(info,image); image->dx-=image->width+8; } }elseif(rotate==FB_ROTATE_CW){ for(x=0; x<num&&image->dy+image->height<=info->var.yres; x++){ info->fbops->fb_imageblit(info,image); image->dy+=image->height+8; } }elseif(rotate==FB_ROTATE_CCW){ for(x=0;x<num&&image->dy>=0;x++){ info->fbops->fb_imageblit(info,image); image->dy-=image->height+8; } } } 参数rotate用来描述屏幕的当前旋转方向。屏幕旋转方向不同,第一个开机画面的渲染方式也有所不同。例如,当屏幕上下颠倒时(FB_ROTATE_UD),第一个开机画面的左右顺序就刚好调换过来,这时候就需要从右到左来渲染。其它三个方向FB_ROTATE_UR、FB_ROTATE_CW和FB_ROTATE_CCW分别表示没有旋转、顺时针旋转90度和逆时针旋转90度。 参数info用来描述要渲染的帧缓冲区硬件设备,它的成员变量fbops指向了一系列回调函数,用来操作帧缓冲区硬件设备,其中,回调函数fb_imageblit就是用来在指定的帧缓冲区硬件设备渲染指定的图像的。 至此,第一个开机画面的显示过程就分析完成了。 本文转自 Luoshengyang 51CTO博客,原文链接:http://blog.51cto.com/shyluo/967032,如需转载请自行联系原作者

优秀的个人博客,低调大师

在Linux系统新增加一块硬盘

今天公司测试Linux服务器硬盘不够用了,主要是mysql数据文件太大了,买了个500G的硬盘回来,这里记录下新加硬盘的方法 PS 测试服务器的主板太差劲了,没有多余的电源接口,只能把光驱的电源拿出来,才能让硬盘使用。 把硬盘装好后,我们用 fdisk -l 查看下: 图中可以看出 /dev/sdb 是500G,新加的硬盘。 接下来我用命令 fdisk sdb 进行分区,输入 p 查看新硬盘分区,如图: 可以用m命令来看fdisk命令的内部命令;n命令创建一个新分区;d命令删除一个存在的分区;p命令显示分区列表;t命令修改分区的类型ID号;l命令显示分区ID号的列表;a命令指定启动分区;w命令是将对分区表的修改存盘让它发生作用。 我们这里是创建新分区,所以输入 n 然后 e 是扩展分区,p 是主分区,我们输入 p 接下来的块数什么的,都输入 1 ,最后选择大小,Last cylinder or +size or +sizeM or +sizeK (1-60801, default 60801): +500GB //我们输入这个意思是分区大小为500G 最后输入 w 保存,如图: 然后在/dev/目录下就可以看到 sdb1 存在了。 分区完了之后,我们需要进行格式化,使用 mkfs -t ext3 /dev/sdb1 命令进行对sdb1格式化。如图: 上图格式化,我还在进行中,大约进行了一半。 格式化完了之后,我们就可以进行挂载分区了,我们先创建一个目录叫 data 然后把 /dev/sdb1 挂载到 /data 目录下,命令如下 mkdir /data mount /dev/sdb1 /data 最后使用 df -h 命令进行查看,修改 /etc/fstab 来进行自动加载。如图: 保存后,重启服务器,一切OK。

资源下载

更多资源
Spring

Spring

Spring框架(Spring Framework)是由Rod Johnson于2002年提出的开源Java企业级应用框架,旨在通过使用JavaBean替代传统EJB实现方式降低企业级编程开发的复杂性。该框架基于简单性、可测试性和松耦合性设计理念,提供核心容器、应用上下文、数据访问集成等模块,支持整合Hibernate、Struts等第三方框架,其适用范围不仅限于服务器端开发,绝大多数Java应用均可从中受益。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

Sublime Text

Sublime Text

Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册