Chinaunix首页 | 论坛 | 博客
  • 博客访问: 723920
  • 博文数量: 104
  • 博客积分: 4320
  • 博客等级: 上校
  • 技术积分: 1948
  • 用 户 组: 普通用户
  • 注册时间: 2010-05-30 14:42
文章分类

全部博文(104)

文章存档

2012年(4)

2011年(65)

2010年(35)

分类: LINUX

2011-03-10 18:27:54

Linux内核负责管理/调度所有的系统资源和设备,并为应用程序提供服务。要想让播放机支持更多的设备,比如USB无线网卡,必需从内核入手。 Linux支持动态加载模块,这些模块其实也是内核的一部分,只不过是被模块化罢了。模块化的好处之一是可以在需要时才加载模块,不需要时可以卸载,释放 其占用的内存。这对内存紧张的嵌入式系统无疑是有帮助的。

我重新编译内核有以下几个目的:
1) 打开官方内核中某些没有打开的功能,如NFS服务器。
2) 尝试支持更多外部设备,如编译第三方驱动程序。
3) 内核瘦身,比如关闭某些不需要的功能,或者将其编译成模块。

内核源码仍使用华硕公布的源码,其中名为linux-2.6.12.274877.tgz的文件即是内核源码。用tar zxf linux-2.6.12.274877.tgz解开此文件,得到linux-2.6.12目录。看一下版本号
1 $ grep UTS_RELEASE linux-2.6.12/include/linux/version.h
2 #define UTS_RELEASE "2.6.12.6-VENUS"与在播放机上用'uname -r'看到的一样,因此我们能确信这就是播放机所用内核的源码,虽然来源不是海信,但是我认为海信不会在内核上做什么改动,最多不过调整一些配置参数。

粗略研究了一下内核源码,发现Realtek在原始的2.6.12.6内核基础上做了不少修改,下面列出其中一部分:

文件系统方面增加了
fuse - Filesystem in Userspace
ptp - Picture Transfer Protocol,用于数码相机
vcd - CDROM文件系统
squashfs - 压缩的只读文件系统
yaffs - 针对NAND闪存优化的文件系统
大量的MIPS平台更新,其中包括对Realtek Venus系统(就是播放机所用系统)的支持
增加了Realtek无线网卡支持,包括RTL8185,RTL8187,RTL8190,RTL8192,RTL8191SU等芯片组的支持。
增加了一些专门针对Realtek Venus的优化
linux- 2.6.12目录下有两个配置文件样本:config.develop.avhdd.mars.old 和 config.rescue.usb.flash.mars.old。根据字面意思推测第一个文件是常规模式的内核配置,第二个是急救模式的内核配置。急 救模式只保留了急救固件升级所需功能,因此编译出的内核比常规模式的小很多。在MP800H上,急救内核与Bootloader放在同一个flash分区 内,正常的固件升级不会更新这一部分。关于通过串口激活急救模式进行固件升级的方法,请看蓝媒论坛dragon版主的大作《MP800H串口刷机指南》。
我 以config.develop.avhdd.mars.old为基准对内核进行配置(执行make menuconfig),打开了NFS Server Support(编译成模块,并且只打开NFSv3支持),其余部分保持不变,最后得到的.config文件增加了如下几项:
1 CONFIG_NFSD=m
2 CONFIG_NFSD_V3=y
3 CONFIG_NFSD_TCP=y
4 CONFIG_EXPORTFS=m然后执行make进行编译(注意:编译内核要用/usr/bin下的工具链,即mipsel-sdelinux- v6.03.01-1,在PATH中/usr/bin应该在/usr/local/bin的前面)。编译完成后会生成名为vmlinux.bin的文件, 用lzma把它压缩后改名为vmlinux.develop.avhdd.mars.bin.lzma,这个文件即可用于制作固件。另外还需要把编译好的 模块安装到某个目录以便于打包,比如要安装到/home/user/dist/modules则执行如下命令:
1 make INSTALL_MOD_PATH=/home/user/dist/modules modules_install至此,我们已经准备好了新的内核和模块。在用自己编译的模块替换官方固件模块时要注意两点:
1. 如果配置内核是打开了DEBUG,编译出的模块会很大,在制作固件前最好把调试信息去掉。下面的命令可以很容易的完成这个任务:
1 $ cd /home/user/dist/modules
2 $ find . -name '*.ko' -exec mipsel-linux-strip --strip-unneeded '{}' \;2. 有一个模块ufsd.ko是没有源码的,这个模块提供NTFS读写的支持。如果你想使用NTFS,则要从官方固件中拷贝这个文件。
阅读(1828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~