http://blog.csdn.net/dong_zhihong/article/details/8651119

嵌入式Linux kernel LOGO的更换方法

标签: LINUX
2013-03-08 15:51  2747人阅读  评论(0)  收藏  举报
  分类:
linux驱动(6)   linux——ARM(38) 

【从制作logo到LCD显示或者VGA显示logo】
1、制作logo的方法:
 首先选择一个自己喜欢的图片,然后通过GIMP软件将该图片保存为.png格式,
 变换方式这个就不说了(very easy),比如保存为linuxlogo.png.
然后将该图片传入到装有Linux PC比如(ubuntu),按照以下顺序你就可以制作一个你喜欢logo
前提你必须安装以下的工具(pngtopnm,pnmquant,pnmtoplainpnm)

$ pngtopnm linuxlogo.png > linuxlogo.pnm 
$ pnmquant 224 linuxlogo.pnm > linuxlogo224.pnm 
$ pnmtoplainpnm linuxlogo224.pnm > linuxlogo224.ppm

或者

$bmptoppm pic.bmp > temp1.ppm //生成ppm
  $ppmquant 224 temp1.ppm > temp2.ppm  //转换成224颜色
  $pnmnoraw temp2.ppm > logo.ppm   //转换成ascii格式

这样您制作的logo就已经成功了,将linuxlogo224.ppm 
拷贝到/drivers/video/logo文件夹中的根据你的平台具体使用的哪个logo进行命名,
由与我用的是RedHat linux,所以我取的名字为logo_linux_clut224.ppm,友情提醒将原有的logo保存。
这样你的logo就完全制作好了,但是有这一点还是不够的,你必须在内核中选择logo,接下来我们来看如何配置内核

2、配置logo选项
 在内核路径下执行make menuconfig

开发板上开启logo显示的选项

Device Drivers --->Character devices ---》Bootup logo

 a、选择虚拟控制台为控制台显示驱动做准备
   Device Drivers --->Character devices ---> Virtual terminal
   [*]   Support for console on virtual terminal
 b、选择虚拟控制台显示驱动
   Device Drivers --->Graphics support --->下有这个选项Console display driver support --->
   根据你的硬件选择由Framebuffer还是VGA
      [*] Framebuffer Console support或者
      [*] VGA text console
 c、Device Drivers --->Graphics support --->
   <*> Support for frame buffer devices  
     <*> MXC Framebuffer support下选择是VGA还是TVOUT
            [*] tvout CH7024 on MX27 //TVOUT
            [*]support VGA daughter //VGA
  当然以上的配置选项,因平台而异会有些小的差别。
  做好以上两个步骤,你就可以重新编译内核,将其烧到开发板,接VGA或者TVOUT显示。
  这样你可以看到你自己制作的logo,你可以发现在logo的左上角有一个闪动的光标,接下来我们说说如何将这个光标去除。

3、如何将开机logo中的光标去除
 在内核的当前目录进入到drivers/video/console/fbcon.c文件
 将static void fb_flashcursor(void *private)制成空函数如下

386 static void fb_flashcursor(void *private)
    387 {
    388 #if 0 //modify by yejj for clear cursor of lcdc

389 struct fb_info *info = private;
    390 struct fbcon_ops *ops = info->fbcon_par;
    391 struct display *p;
    392 struct vc_data *vc = NULL;
    393 int c;
    394 int mode;
    395 
    396 acquire_console_sem();
    397 if (ops && ops->currcon != -1)
    398 vc = vc_cons[ops->currcon].d;
    399 
    400 if (!vc || !CON_IS_VISIBLE(vc) ||
    401 registered_fb[con2fb_map[vc->vc_num]] != info ||
    402 vc->vc_deccm != 1) {
    403 release_console_sem();
    404 return;
    405 }
    406 
    407 p = &fb_display[vc->vc_num];
    408 c = scr_readw((u16 *) vc->vc_pos);
    409 mode = (!ops->cursor_flash || ops->cursor_state.enable) ?
    410 CM_ERASE : CM_DRAW;
    411 ops->cursor(vc, info, mode, softback_lines, get_color(vc, info, c, 1),
    412 get_color(vc, info, c, 0));
    413 release_console_sem();
    414 #endif
    415 }

同样的方法将函数static void fbcon_cursor(struct vc_data *vc, int mode)用空函数替换如下

1304 static void fbcon_cursor(struct vc_data *vc, int mode)
   1305 { 
   1306 #if 0 //modify by yejj for clear cursor of lcdc

1307 struct fb_info *info

另一种禁止光标的方法:

drivers/video/console/Makefile

#obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o softcursor.o
obj-$(CONFIG_FRAMEBUFFER_CONSOLE) += fbcon.o bitblit.o font.o
编译遇到一个soft_cursor没有定义的问题问题,注释代码:
drivers/video/console/bitblit.c
//ABING
//      if (err)
//              soft_cursor(info, &cursor);

【注意】:    
Linux Logo制作工具 : LogoMaker.tgz 4.7MB 
http://www.arm9.com.cn/downloads.htm
LogoMakers可以让你十分方便地制作linux logo文件,它基于Fedora 9平台开发并使用。其使用方法十分简单,打开一个图形文件(Jpeg, bmp或者png格式),然后点转换按钮就可以了;它会固定输出文件名:logo_linux_clut224.ppm,该文件一般位于内核源代码目录kernel-src/drivers/video/logo中,替换之后再重新编译一下内核就可以看到你所喜爱的linux logo了。 
    注意:LogoMaker程序实际调用了netpbm工具组,因此要确保你的PC Linux系统安装了此工具,方可转换成功。

ubuntu下转换PPM:

sudo get-apt install netpbm

bmp图片使用bmptoppm.jpg,png,gif都有相应的topnm工具。

$bmptoppm pic.bmp > temp1.ppm //生成ppm
   $ppmquant 224 temp1.ppm > temp2.ppm  //转换成224颜色
   $pnmnoraw temp2.ppm > logo.ppm   //转换成ascii格式
logo.ppm就是需要的图像了。

一直想给嵌入式仪表加个开机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.tar.gz包,并进行软件安装,生成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了。

0

嵌入式Linux kernel LOGO的更换方法相关推荐

  1. 嵌入式linux+io+优化,嵌入式Linux系统内存优化使用方法研究

    [摘要] 嵌入式系统功能的提高,占用了较大内存空间,继而时常出现运行无响应.基于用户方面看,由于系统内存问题影响运行,针对系统内存与进程应用状态研究,可以调整系统数值与执行文件elf分析,进行系统优化 ...

  2. linux mint 安装内核,使用Ukuu在Ubuntu/Linux Mint上安装Linux Kernel 5.0的方法

    Linux Kernel 5.0已发布,具有大量新功能和错误修复,本文介绍使用Ukuu在Ubuntu 18.04/Linux Mint系统上安装Linux Kernel 5.0的方法.默认情况下,Ub ...

  3. linux嵌入式在线升级,嵌入式linux Kernel 在线升级参考资料

    author:DriverMonkey phone:13410905075 qq:196568501 mail:bookworepeng@hotmail.com 承接:嵌入式外包项目(13410905 ...

  4. 嵌入式linux 无线网卡,一种基于嵌入式Linux的无线网卡的制作方法

    本实用新型涉及无线网卡技术领域,具体为一种基于嵌入式Linux的无线网卡. 背景技术: 随着移动通信和便携通信的发展,无线局域网WLAN应用而生,日渐普及,嵌入式系统的无线局域网接入可以实现对嵌入式系 ...

  5. Linux kernel安全漏洞修复方法(CNNVD-202203-522、CVE-2022-0847)

    漏洞详情: Linux kernel是美国Linux基金会发布的开源操作系统Linux所使用的内核.Linux kernel存在安全漏洞,攻击者可利用漏洞覆盖重写任意可读文件中的数据,从而将普通权限的 ...

  6. zynq嵌入式linux显示logo,如何定制嵌入式linux 启动logo(小企鹅)

    我的嵌入式ARM-Linux是基于2.4.2内核,支持framebuffer,所以我想用工具软件 fblogo(0.5.2版本)将启动小企鹅logo改为自己的logo.png.现在遇到以下几个问 题, ...

  7. 迅为4412开发板驱动-linux 开机 logo 的修改方法

    文档主要介绍 4412 开发板的内核启动 LOGO,请注意如果要修改的屏幕分辨率小于480x640,请参考另外的独立文档"iTOP-4412-内核-4.3 寸屏幕-logo 修改_V1.0& ...

  8. 采用busybox的嵌入式Linux根文件系统的的制作方法

    在嵌入式Linux操作系统越中文件系统作为操作系统的重要组成部分,用于控制对数据文件及设备的存取,提供对文件和目录的分层组织形式,数据缓冲以及对文件存取权限的控制.根文件系统一直是Linux系统不可或 ...

  9. 嵌入式linux启动画面,修改嵌入式linux启动画面(一)

    linux的开机动画默认为一只80x80的小企鹅,在driver/video/logo下面.但是在实际的开发应用中,我们常常需要做的是更改系统默认的开机启动画面,更换企业的特有logo图片. 说明下, ...

最新文章

  1. [读书笔记]C#学习笔记七: C#4.0中微小改动-可选参数,泛型的可变性
  2. Metasploit远程调用Nessus出错
  3. 实现不同vlan间PC不可互访,而不同vlan的PC均可访问服务器的特殊效果,(华为)...
  4. 探讨对理想团队模式构建的设想及软件流程的理解
  5. Netty-1-一个简单的服务器实例
  6. 安卓开发笔记(十):升级ListView为RecylerView的使用
  7. 邹欣对话图灵奖得主Jeffrey Ullman:数据库不会进入周期性的坏循环|《新程序员》...
  8. javaweb基础(36)_jdbc进行批处理
  9. 树莓派csi摄像头和usb摄像头_树莓派usb摄像头用fswebcam 设置
  10. 使用Java分割大文件
  11. [C++] 麻将胡牌算法
  12. Android相机预览,指定区域显示预览框,在区域内出现人脸进行人脸识别,并抓拍人脸照片存在本地,CameraX,虹软人脸识别
  13. 暴雪这次可真不要脸。。。
  14. oracle 查询去年同期,问个算去年同期值的sql,该怎么处理
  15. python json库安装_python-安装simplejson后没有名为“ json”的模块
  16. (最全面的)各类RAID详解
  17. 输出调节2.0——内模控制器概念及性质
  18. windows server2012 安全配置方案—NTFS分区、防毒软件、备份盘的安全
  19. jflash烧录教程_手把手教你用一元pos机打造高速25系列flash烧录器(路由党福利)...
  20. Java JDBC事务与JTA分布式事务

热门文章

  1. iOS 微信右上角下拉菜单效果之CMPopTipView,各种角度各种位置
  2. 《光明传说》主城建筑图文详解の光之塔
  3. Python人脸识别项目-人脸识别-进行人脸识别
  4. 统计基础学习4--概率
  5. pthread_create函数
  6. java有个策略龙蛋的什么游戏_龙蛋 - Minecraft Wiki
  7. Pandas+Pyecharts | 北京近五年历史天气数据可视化
  8. 卷积神经网络中卷积核的参数为什么是四个
  9. vue项目使用jwt token验证登录 报错token无效验证失败 【已解决】
  10. html实现经典赛车小游戏