更改嵌入式Linux中开机画面----左上角小企鹅图标
一直想给嵌入式仪表加个开机LOGO,但是没有找到更换的方法。最近在网上收集了一些文章,整理一下一共自己参考。目前也还没有试过这种方法究竟是否可以。但察看Kernel源代码可以知道,Linux-2.6的内核和以前的内核版本在LOGO处理上是不一样的。Linux2.6的版本与之相关的是/drivers/video/logo/目录下的文件,/include/linux/linux_logo.h中仅仅定义了一些基本参数,而在2.6之前的内核版本中,linux_logo.h文件还包含了图片数据。 在此将我的logo方案更新一下
优龙ST2410开发板-启动图标制做
1.方案分析
ARM-Linux启动时会先在LCD左上角显示一个ARMLINUX的小企鹅图案,也就是我们所说的bootlogo。
首先分析一下Logo的显示代码:
不难发现Logo显示是在加载显示驱动fb后由kernel/drivers/video/fbcon.c中的fbcon_show_logo函数来完成的。
fbcon_show_logo函数中有很多兼容性代码,不是都会用到的!我们用的是SHARP(夏普)的TFT真彩屏.
再仔细看一下,这里用到的显示数据均来自kernel/include/linux/linux_logo.h。这里同样也有一些兼容性的数据,其中对我们有用的是:
linux_logo_red[] —— 调色板中的红色分量
linux_logo_green[] —— 调色板中的绿色分量
linux_logo_blue[] —— 调色板中的蓝色分量
linux_logo[] —— Logo图案的点阵
以上数据都是不需要你修改的 在fbcon_show_logo里只做了256色的显示,所以要先设置一个RGB调色板。这里的调色板是从0x20色开始编的,所以实际好象只有最多224色的显示。linux_logo.h里默认是做了一个214级的灰度调色板,如果想要更多色彩的话可以自已修改(注意调色板的颜色不能超过224种)
再看linux_logo[], 这是Logo图案的点阵。因为是256色的图,所以每点为一个Byte。Logo图案是80*80大小,所以这里总共有6400 Byte。一共是800行,每行8 Byte即8 Point,每10行数据对应Logo图案中一行。可以先自己试试放一些简单图形进去显示看看。(同样注意颜色要从0x20开始,0-0x1f的32种颜色是不确定的)。
以上分析是针对系统原版内核256色80x80的启动图标的说明。而我们要通过修改或替代原内核文件,来实现我们制做公司的的启动图标,要求如下:
1.开发板起动以后以全屏显示即240x320模式显示
2.图像以224色彩显示
2.方案设计
当然你不会只想显示一些简单图形,而是希望能把自已做的图片放上去。建议使用PhotoShop8.0这里提供三个方法加工图片:
1)先搞一个256色调色板,前面32个颜色空着,把后面224种颜色设一下吧。注意要尽量把颜色选全一些,要能覆盖到整个颜色区域上。这样就有一个通用的调色板,可适用所有图片,但颜色的真实性稍差。然后把自己的图片打开,先将颜色设置到RGB空间里,然后裁剪/缩放到240x320象数的尺寸,再将颜色优化到先前定义好的调色板里,图片就加工好了。
2)不用通用调色板,打开自己的图片,先将颜色设置到RGB空间,裁剪/缩放到240x320象素的尺寸,然后指定优化为224色图象。这样图片就加工好了,但其调色板就是专用的,不适合用到其他图片里。
3)GIMP+FBLOGO GIMP为LINUX下一个绘图程序,我们使用它打开图片后在菜单栏先择: 图片->模式->索引颜色,然后通过工具选项将图片大小调整到240x320象数大小,保存为.png格式。在使FBLOGO工具将其转换成linux_logo.h文件。
使用前两种方法加工图片,还需要把数据放到我们的linux_logo.h里。调色板可以直接保存为文件,然后可以通过自制的小程序读出来就可以了。图片的点阵比较难取,当然也可以自己做个程序去取屏幕上的点,不过比较困难。而后一种方法使用fblogo工具将用GIMP转换的图片文件自动生成linux_logo.h文件。
3.最终实施方案
通过以上内容分析,我们确定使用第三种方法GIMP加fblogo工具的方案进行实施,以下我们制做的流程及其方法:
软件环境:linux虚拟机、fblogo工具、linux下的图像编辑工具GIMP
硬件环境:X86PC机一台、优龙ST2410开发板一个、交叉网线一条。
1.调试并编译开发板所相对应的内核包,调试通过后保留.config配制文件,准备编译bootlogo时使用。
2.在linux上解压fblogo_0.52.tgz包,并进行软件安装,生成fblogo二进制可执行文件。
3.进入linux的kde图形界面,在终端下使用gimp命令运行gimp工具。
4.打开公司的logo.jpg图像文件,依次选择 图像->模式->索引颜色、并将其图片大小调至240x320象素,最后将文件保存为logo.png格式。
5.将上述文件保存到fblogo工具所在文件夹,首先在命令行下执行convert –colors 223 logo.png logo.png 将文件保存为224色素(目前fblogo工具仅支持到224色),接着再使用fblogo logo.png linux_logo.h 生成linux_logo.h内核启动代码中的图像缓冲区文件格式。
6.将linux_logo.h文件拷贝到kernel的include/linux目录即可。
7.重新编译linux系统内核,将生成的zImage内核镜像拷贝到windows下,准备对目标板进行烧写。
8.用串口将目标板与PC主机相连,接通电源,使用bnw工具进入目标板的bios程序并将生成的zImage内核镜像拷烧写到板子上,重起目标板,你会发现目标板上已经出现了美丽的logo图片。如果没有,请核对以上的步骤,并重新测试直到成功为止。
4 方案总结
4.1 方案实施过程中的关键问题
1.确保内核能够正常运行,编译时对开发板各硬件的驱动支持及其相关的配制,启动后能够自动加载文件系统。
2.安装fblogo工具,fblogo工具的编译需要使用到第三方的库文件libpng.so库以及zliba.a库的支持,编译成功后,在命令行试运行fblogo 如果安装成功将出现其使用的帮助信息。
3.fblogo工具对图片的要求是仅支持PNG格式的224色图片。
4.最后针对不同的开发板的LCD显示屏应使用与其相适应的图片大小,否则可能使系统无法正常工作。
4.2 方案实施后的遗留问题
由于使用到了logo的制做工具fblogo 所以图片在色彩上最大仅能支持到224色图片,在bootlogo启动文件linux_logo.h中有图像的色彩域点阵代码(即图片的16位进制的代码),如有需要可以自行修改,但其难度可想而知,建议可以将图片保存为TIF之类的非压缩格式,然后自已编写小程序将其从图象文件中的固定位置取点阵数据。
5 2.6内核启动Logo
在配置内核的时候选中了启动Logo的支持。
使用下面的方法可以将企鹅的Logo换成自己喜欢的任意图片。
首先准备一幅自己喜欢的图片,然后将背景涂成黑色。然后将该图片保存成png格式,例如linuxlogo.png。在Linux下使用下面的命令:
# pngtopnm linuxlogo.png > linuxlogo.pnm
# pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm
# pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm
然后用生成的linuxlogo224.ppm替换/usr/src/linux-2.6.8.1/drivers/video/logo/logo_linux_clut224.ppm(最好先做好备份),然后删除同一目录下的logo_linux_clut224.c文件,重新编译内核,启动之后就可以在屏幕左上方看到自己的Logo了。
转载自:http://deshunfan.blog.163.com/blog/static/3424410120112242858541/
更改嵌入式Linux中开机画面----左上角小企鹅图标的更多相关文章
- 嵌入式linux中使用 DHCP功能描述
嵌入式linux中使用 DHCP功能描述 busybox中udhcpc的默认script脚本地址为#define DEFAULT_SCRIPT CONFIG_UDHCPC_DEFAULT_SCRI ...
- 嵌入式Linux中摄像头使用简要整理【转】
转自:http://www.cnblogs.com/emouse/archive/2013/03/03/2941938.html 本文涉及软硬件平台: 开发板:飞凌OK6410 系统:Ubuntu 1 ...
- 如何在LINUX中开机、登陆、退出、定时、定期自动运行程序
1.开机启动时自动运行程序 Linux加载后, 它将初始化硬件和设备驱动, 然后运行第一个进程init.init根据配置文件继续引导过程,启动其它进程.通常情况下,修改放置在 /etc/rc或 /et ...
- 超实用,Linux中查看文本的小技巧
日常开发中,我们经常需要在服务器上进行各种文本,日志的查看操作,本文主要对常用的文本,日志查看技巧进行了一番总结和归纳,方便大家收藏起来后续查看使用: tail命令查看日志信息 实时监控日志: tai ...
- linux中脚本的一些小知识的积累
对于变量的问题: 对变量赋值,a="hello world",现在打印变量a的内容:echo $a. 对于${}的使用:如$aall,我们想要$a,这是,就可以${a}all了. ...
- 嵌入式linux系统中,lsusb出现unable to initialize libusb: -99 解决办法 【转】
转自:http://cpbest.blog.163.com/blog/static/41241519201111575726966/ libusb是linux系统中,提供给用户空间访问usb设备的AP ...
- 4种用于构建嵌入式linux系统的工具_转
转自:4种用于构建嵌入式linux系统的工具 Linux 被部署到比 Linus Torvalds 在他的宿舍里开发时所预期的更广泛的设备.令人震惊的支持了各种芯片,使得Linux 可以应用于大大小小 ...
- 嵌入式Linux的OTA更新,基础知识和实现
嵌入式Linux的OTA更新,第1部分-基础知识和实现 OTA updates for Embedded Linux, Fundamentals and implementation 更新的需要 一 ...
- 制作嵌入式linux文件系统(ramdisk,cramfs,squashfs)
转:http://blog.csdn.net/zyb19831212/article/details/1887930 一.什么是文件系统 (Filesystem): A directory struc ...
随机推荐
- 一款基于jquery漂亮的按钮
之前为大家分享了好多css3实现的按钮.今天给大家分享一款基于jquery漂亮的按钮.这款按钮背景下用了一张图片.当鼠标经过的时候背景用半透明div遮住.一起看下效果图: 在线预览 源码下载 实现 ...
- 个推-推送hello world
最近项目中的一个百度推送真是把我搞的有点头大,真的是很垃圾,到达率又低,还特么遇上停止维护了... 所以项目决定转用别的推送平台,现在改用个推,官方文档写的很好,除了刚下载下来,折腾了一阵子,不过很快 ...
- .net安装部署“Error 1001 在初始化安装时发生异常” 的解决方法
状况描述:打包安装后,如果删除安装目录中的某个文件,这时从桌面快捷方式启动软件系统会自动运行修复程序,此时因为路径问题会报出“错误 1001 在初始化安装时发生异常xxx”的异常.(前提是你的安装部署 ...
- linux 中常用的一些头文件
#include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...
- spring4.1.6配置quartz2.2.1(maven) <转>
Spring3.0不支持Quartz2.0,因为org.quartz.CronTrigger在2.0从class变成了一个interface造成IncompatibleClassChangeError ...
- Android Activity动画属性简介
Android Activity动画属性简介 在Android当中 设置activity的动画 需要复写 android:windowAnimationStyle这个属性 我们自定义一个动画样式来继承 ...
- 常用sqoop操作
1. 关系型数据库到hive sqoop import --connect jdbc:mysql://localhost:3306/datahouse --username datahs --pass ...
- 2012关闭ECN
Windows Server 2012 关闭TCP ECN (2014-03-20 18:22:42) 转载▼ 标签: it 分类: windows
- sparkr基本操作1
由于装的sparkr是1.4版本的,老版本的很多函数已经不再适用了. 在2台服务器的组成的集群中测试了一版数据,熟悉下这个api的基本操作. libpath <- .libPaths() li ...
- 如果你不知道这11款常见的Web应用程序框架 就说明你out了
本文推荐了11款常见的Web应用程序框架,并列出了相关的学习资料和下载文档.如果对这些项目还不熟悉,就赶紧学起来吧~ Rails Rails是Ruby on Rails的简称,是一款开源的Web应用框 ...