• linux logo的格式【转】


    本文转载自:http://blog.csdn.net/xiayu98020214/article/details/7394100

    ============================================
    作者:yuanlulu
    http://blog.csdn.NET/yuanlulu


    版权没有,但是转载请保留此段声明
    ============================================


    1.Linux如何显示logo。
    首先,内核镜像无法存储图片格式的文件,只能将图片转化为数组,然后将数组编译进内核。
    内核启动的时候将数组中的数据传给frambuffer,从而显示出来。
    内核的logo图片放在driver/video/logo/下面,目前支持pbm/pgm/ppm格式的图片,图片的格式可以参考:
    http://hi.baidu.com/small__child/blog/item/53ac957d1ac7d9350dd7da7c.html

    编译内核的时候,内核会首先调用内核目录下的scripts/pnmtologo将driver/video/logo/目录下的图片生成包含图片数据数组的C语言代码,scripts/pnmtologo的代码是scripts/pnmtologo.c.
    pnmtologo生成的c语言代码在driver/video/logo/下面,会被编译进内核。


    2.logo数组的格式
    在driver/video/logo/下面有一个名为logo_dec_clut224.c的文件,它由logo_dec_clut224.ppm转化而来,内容大致如下
     
    static unsigned char logo_dec_clut224_clut[] __initdata = {
     0x00, 0x00, 0x00, 0x06, 0x06, 0x06, 0x0a, 0x0a, 0x0a, 0x0e, 0x0e, 0x0e,
     0x16, 0x16, 0x16, 0x1a, 0x1a, 0x1a, 0x1e, 0x1e, 0x1e, 0x22, 0x22, 0x22,。。。。。。。。。。
    };
    static unsigned char logo_dec_clut224_data[] __initdata = {
     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,
     0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20, 0x20,.......................
    };

    const struct linux_logo logo_dec_clut224 __initconst = {
     .type  = LINUX_LOGO_CLUT224,
     .width  = 80,
     .height  = 80,
     .clutsize = 183,
     .clut  = logo_dec_clut224_clut,
     .data  = logo_dec_clut224_data
    };

    其中logo_dec_clut224_clut是调色板数组,每三个成员(RGB)代表一种颜色。比如下标为0、1、2这个三个成员代表一种颜色。
    这个数组的大小是3的整数倍,具体大小由图片决定,数组大小除以3也就是图片包含的颜色总数。图片使用的颜色总数不能大于224.
    logo_dec_clut224_data数组的成员是指向调色板数组的索引,但是它的值比实际值大32(=0x20).
    比如第一个成员的内容为0x20(用十进制表示是32),所以它代表图片的第一个像素的颜色是调色
    板数组中0、1、2这个三个成员代表一种颜色.
    索引值index与RGB的换算关系如下(clut表示调色板数组):
    R = clut[(index-32)*3]
    G = clut[(index-32)*3 + 1]
    B = clut[(index-32)*3 + 2]
    由于索引值由一个字节表示,因此最多表示256钟颜色。由于实际值又统一加了32(0x20),
    所以只能表示224钟颜色了。所以logo图片的颜色种类数不能超过224钟。暂时还没看内核保
    留32以下的索引怎么用的,望看到相关的代码的兄弟能告诉我一声。

    3.内核如何生成C语言代
    码内核调用内核目录下的scripts/pnmtologo将driver/video/logo/目录下的图片生成包含图片
    数据数组的C语言代码,scripts/pnmtologo的代码是scripts/pnmtologo.c.
    这个文件的内容比较长,简单说一下。它读取driver/video/logo/下的图片
    并在driver/video/logo/下创建同名(后缀不同)的C语言文件。
    把图片的数据转化为内核接受的格式存储在数组中。这些C语言文件会被编译进内核。
    内核生成 logo_dec_clut224.c的命令选项在driver/video/logo/.logo_dec_clut224.c.cmd(注意开头是一个点)中,内容如下:
    cmd_drivers/video/logo/logo_dec_clut224.c := scripts/pnmtologo -t clut224 -n logo_dec_clut224 -o drivers/video/logo/logo_dec_clut224.c drivers/video/logo/logo_dec_clut224.ppm
    这是一行,没有换行符。

  • 相关阅读:
    敏捷之一:以终为始
    Rails non browser app高级篇-capistrano/daemon部署
    ios 5下设置屏幕方向为landscape
    Android敏捷开发实践(连载)
    Rails+Mongodb的一个重要技巧:如何得到last N Records?
    在macos x上 编译jzmq 3.x
    计划缓冲区
    转载程序员的十层楼
    特权账户是什么?
    如何管理公司的共享iPad?
  • 原文地址:https://www.cnblogs.com/zzb-Dream-90Time/p/7405969.html
Copyright © 2020-2023  润新知