linux启动图片与内核分离

首先说一下环境:2.6.33-rc4, arm9运行, 640*480

 

基本思想就是将静态的ppm文件从内核中删除, 将生产的数组放到内存里, 步骤如下

 

1. 解压内核后, 修改drivers/video/logo/Makefile

 

将obj-$ 打头的只保留obj-$(CONFIG_LOGO) += logo.o 

 

这样做的目的是去掉生成xxx_logo_xxx.c的过程, 因为我们不需要了

 

 

 

 

2.linux显示图片是224色的,如果我们不去掉自动生成, 可以看到, 他会生成下面的结构体

 

const struct linux_logo logo_linux_clut224 = {

 

.type = LINUX_LOGO_CLUT224,

 

.width = 640,

 

.height = 480,

 

.clutsize = 217, //实际使用到的颜色数, 最多224

 

.clut = logo_linux_clut224_clut, //大小是clutsize*3, 作为调色板, 每个颜色存储rgb三个值

 

.data = logo_linux_clut224_data //640*480, 每个数值代表调色板中的索引

 

};

 

224色用到了调色板, 原理和256色bmp格式类似, 只是这里是224色

 

在drivers/video/logo/logo.c中, 增加定义

 

volatile static unsigned char* remapped_area;

 

static unsigned char clut[224*3]; //1~224色

 

static unsigned char data[640*480]; //大小固定

 

const struct linux_logo logo_buf = {

 

.type = 3,//LINUX_LOGO_CLUT224,

 

.width = 640,

 

.height = 480,

 

.clutsize = 224,

 

.clut = clut,

 

.data = data

 

};

 

 

修改函数

 

const struct linux_logo * __init_refok fb_find_logo(int depth)

 

{

 

struct linux_logo *logo = NULL;

 

if (nologo)

 

return NULL;

 

logo = &logo_buf;

 

remapped_area = (volatile unsigned char*) ioremap (0xc1700000,640*480+224*3+4); //我的uImage从0xc0700000, 这里向后移动16m, 足够内核用的

 

memcpy ( logo->data, remapped_area, 640*480 );

 

memcpy ( &logo->clutsize, remapped_area+640*480, 4 );

 

memcpy ( logo->clut, remapped_area+640*480+4, logo->clutsize * 3 );

 

iounmap ( remapped_area );

 

return logo;

 

}

 

 

 

 

3. 编译内核

 

 

 

 

 

4. 准备图片数据,

 

首先在windows用gimp做一个224色的ppm(asicc方式)图片(和以前类似), 放到linux的任意文件夹下, 如/tmp/1.ppm

 

在Linux内核下有个script/pnmtolog,

 

运行./你的内核源码/scripts/pnmtologo -t clut224 -n logo_linux_clut224 -o /tmp/1.c /tmp/1.ppm

 

生成的1.c和之前编译内核生成的xxx_logo.c一样, 把logo_linux_clut224_data数组(640*480字节), 总颜色数(4字节)和logo_linux_clut224_clut数组(颜色数*3)

 

写入一个文件里logo.dat

 

 

 

5. 将图片和内核烧进flash的不同地方

 

 

 

6. 修改启动参数 先读图片到0xc1700000, 再读内核到0xc0700000 即可(内存地址可以更换)  

 

摘自 ma100的专栏


linux启动图片与内核分离
阅读更多
个人分类: 设备驱动 linux
上一篇Linux对电平触发与沿触发中断的区别
下一篇linux logo的格式
想对作者说点什么? 我来说一句

linux内核及其内核源码分析

2011年08月06日 12.9MB 下载

Linux 内核 (好)

2009年09月24日 5.07MB 下载

Linux源代码内核

2010年02月19日 357KB 下载

linux 内核 内存泄露检测

2011年09月11日 18KB 下载

Linux内核与编程.pdf

2010年06月20日 7.73MB 下载

没有更多推荐了,返回首页

关闭
关闭