发布时间:2014-09-05 16:38:27作者:知识屋
首先说一下环境: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一键安装web环境全攻略 在linux系统中怎么一键安装web环境方法
Linux网络基本网络配置方法介绍 如何配置Linux系统的网络方法
Linux下DNS服务器搭建详解 Linux下搭建DNS服务器和配置文件
对Linux进行详细的性能监控的方法 Linux 系统性能监控命令详解
linux系统root密码忘了怎么办 linux忘记root密码后找回密码的方法
Linux基本命令有哪些 Linux系统常用操作命令有哪些
Linux必学的网络操作命令 linux网络操作相关命令汇总
linux系统从入侵到提权的详细过程 linux入侵提权服务器方法技巧
linux系统怎么用命令切换用户登录 Linux切换用户的命令是什么
在linux中添加普通新用户登录 如何在Linux中添加一个新的用户
2012-07-10
CentOS 6.3安装(详细图解教程)
Linux怎么查看网卡驱动?Linux下查看网卡的驱动程序
centos修改主机名命令
Ubuntu或UbuntuKyKin14.04Unity桌面风格与Gnome桌面风格的切换
FEDORA 17中设置TIGERVNC远程访问
StartOS 5.0相关介绍,新型的Linux系统!
解决vSphere Client登录linux版vCenter失败
LINUX最新提权 Exploits Linux Kernel <= 2.6.37
nginx在网站中的7层转发功能