linux启动图片与内核分离

转载 2012年03月26日 10:45:42

首先说一下环境: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启动图片与内核分离

首先说一下环境:2.6.33-rc4, arm9运行, 640*480 基本思想就是将静态的ppm文件从内核中删除, 将生产的数组放到内存里, 步骤如下 1. 解压内核后, 修改 drivers/...
  • ma100
  • ma100
  • 2011年12月27日 15:56
  • 1421

修改Linux内核开机启动图片方法

如果要让系统启动过程中,除了能看到bootlogo小企鹅,还希望能看到自己的bootlogo,只需图片转换工具和部分源码的修改即可实现 1. 图片转换 安装windows 版本(gimp-2.6.9-...
  • hanbo622
  • hanbo622
  • 2014年06月27日 15:24
  • 5396

机制和策略分离

一直觉得自己写的代码比较混乱,思路比较不清晰,后来发现我经常把实现机制和逻辑写在一起,由于逻辑或者策略变化总比机制要快,所以很难再拓展。“表驱动”(大概是:把已经定义好的功能(机制)放进表中,实际策略...
  • litao31415
  • litao31415
  • 2014年12月01日 11:28
  • 890

修改linux内核的启动logo和禁用启动光标

linux内核下使用的图片文件类型是pnm和PPm格式的,所以在开始介绍修改linux内核启动LOGO之前, 1,先需要介绍一下怎么样设计自己开始logo的ppm图片,首先选择一张png格式的图片 ...
  • hunanchenxingyu
  • hunanchenxingyu
  • 2014年11月11日 00:07
  • 1231

修改linux内核的开机图片(小企鹅)

两种方法: 一、最简单的方法:把你的图片替换掉小企鹅图片重新变异即可。 把制作好的ppm文件(博客里有制作方法)拷贝到kernel源码的driver/video/logo中,重命名为logo_li...
  • linpuliang
  • linpuliang
  • 2014年08月01日 20:51
  • 1675

在Linux中使用线程与线程的合并与分离

在Linux中使用线程 分类: Linux2013-10-11 22:56 1582人阅读 评论(0) 收藏 举报 Linux多线程编程C++ 目录(?)[+] ...
  • xiaocao9903
  • xiaocao9903
  • 2014年10月09日 15:32
  • 557

为什么嵌入式LINUX内核和根文件系统分开存放

http://wxqxq520.blog.sohu.com/164207588.html  Flash 的分区可以根据需要划分,uClinux 中支持Flash 存储器的块设备驱动负责定义上...
  • rheostat
  • rheostat
  • 2012年07月10日 23:59
  • 3221

Linux下驱动:分层、分离机制学习笔记

一、分离分层的概念         即把硬件相关和相对稳定的东西给抽出来,并向上提供统一的接口,每一层专注于自己的事情。比如输入子系统。 二、bus-dev-drv模型...
  • fengel_cs
  • fengel_cs
  • 2016年01月08日 18:14
  • 858

Linux内核和传统Unix内核的比较

  所有的Unix内核都同宗同源,并且提供相同的API,现代的Unix内核存在许多设计上的相似之处。Unix内核几乎毫无例外的都是一个不可分割的静态可执行块(文件)。也就是说,它们必须以完整、单独的可...
  • armman
  • armman
  • 2007年04月13日 17:11
  • 999

Linux内核与文件系统分析

1、Linux内核源代码目录结构 arch:包含和硬件体系结构相关的代码,每种平台占一个相应的目录,如i386、arm、powerpc、mips等。block:块设备驱动程序I/O调度。crypt...
  • tuwenqi2013
  • tuwenqi2013
  • 2016年08月18日 15:45
  • 1801
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:linux启动图片与内核分离
举报原因:
原因补充:

(最多只允许输入30个字)