标签: ARM Linux Kernel 移植 抵岸科技
Linux kernel简介
Linux内核是linux系统的心脏,它实现了操作系统五大主要功能模块:进程管理、内存管理、文件系统、设备控制和网络。Linux内核的功能模块如图1所示。
图 1
进程管理模块可以说是linux内核的心脏模块,它负责创建和终止进程,并且处理它们和外部的联系(输入和输出)。对整个系统功能来讲,不同进程之间的通信(通过信号、管道、进程间通信原语)是基本的,这也是由内核来处理的。另外,调度器应该是整个操作系统中最关键的全程,是进程管理中的一部分。更广义地说,内核的进程管理活动实现了在一个CPU上多个进程的抽象概念。内在管理模块的作用是确保所有进程安全地共享计算机主内在区,此外,内在管理模块还支持虚拟内在管理方式,使得linux支持进程使用比实际内在空间更多的内在容量,并可以利用文件系统把示用的内在数据块交换到外部存储设备中去,等需要时再交换回来,这样大大提高了内在使用效率,节省了内在空间。文件系统模块用于支持对外部设备的驱动和存储,虚假文件系统通过向所有的外部存储设备提供一个通用的文件系统接口,隐藏了各种硬件设备的不同细节。网络模块提供对多种网络通信标准的访问,并支持许多网络硬件设备。
开发环境
操作系统:Ubuntu 10.4(linux kernel-v2.6.31)
移植Linux内核版本:2.6.30
交叉编译工具:arm-linux-gcc 4.3.2
下载linux-2.6.30源代码及补丁
linux-2.6.30源代码的下载地址:
http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.31.1.tar.bz2
yaffs文件系统补丁的下载地址:
http://www.aleph1.co.uk/cgi-bin/viewcvs.cgi/cvs-root.tar.gz?parent=1&view=tar
ATMEL芯片补丁2.6.30-at91.patch.gz的下载地址:
http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz
ATMEL芯片补丁2.6.30-at91-exp.4.tar.gz的下载地址:
ftp://www.linux4sam.org/pub/linux/2.6.30.at91.4/2.6.30.at91.4-exp.patch.gz
解压Kernel并打补丁
> 解压linux-2.6.30
在提示符后输入:
/opt# tar jxf linux-2.6.30.tar.bz2
解压linux代码包到当前目录。如图2所示:
图 2
> 安装2.6.30-at91.patch.gz补丁
/opt# cd linux-2.6.30
/opt/linux-2.6.30# wget http://maxim.org.za/AT91RM9200/2.6/2.6.30-at91.patch.gz
/opt/linux-2.6.30# zcat 2.6.30-at91.patch.gz | patch -p1
若出现如下提示:
gzip: 2.6.30-at91.patch.gz: not in gzip format
The program 'patch' is currently not installed. You can install it by typing:
apt-get install patch
说明patch没有安装,输入以下命令,安装patch:
/opt/linux-2.6.30# sudo apt-get install patch
> 解压安装yaffs2补丁
将yaffs2文件系统补丁复制到linux-2.6.3/目录下,解压并安装补丁。
/opt/linux-2.6.30# tar zxvf yaffs2.tar.gz
/opt/linux-2.6.30# cd cvs/yaffs2/
/opt/linux-2.6.30/cvs/yaffs2# ./patch-ker.sh c ../../
完成之后,将在linux-2.6.30/fs文件夹下看到yaffs2的文件夹,如图3所示:
图 3
配置kernel
> 前期准备
清除冗余文件,在提示符后输入:
/opt/linux-2.6.30# make mrproper
修改Makefile,找到ARCH,CROSS_COMPILE变量并修改,如图4红框所示
图 4
> 根据目标板配置kernel
为了节省时间,我们以at91sam9g20ek_defconfig为蓝本进行修改。
/opt/linux-2.6.30# cp arch/arm/configs/at91sam9g20ek_defconfig .config
/opt/linux-2.6.30# make menuconfig
以下选项需得注意:
Kernel Features --->
[*] Use the ARM EABI to compile the kernel
因为要支持yaffs2文件系统,所以必须选择“yaffs2文件系统支持”配置
File systems --->
[ * ] Miscellaneous filesystems --->
<*> YAFFS2 file system support
-*- 512 byte / page devices
[ ] Use older-style on-NAND data format with pageStatus byte
[ ] Lets Yaffs do its own ECC
-*- 2048 byte (or larger) / page devices
[ * ] Autoselect yaffs2 format
[ ] Disable YAFFS from doing ECC on tags by default
[ ] Disable lazy loading
[ ] Turn off wide tnodes
[ ] Force chunk erase check
[ * ] Cache short names in RAM
[ ] Empty lost and found on boot
[ ] Disable yaffs2 block refreshing
[ ] Disable yaffs2 background processing
> 编译kernel
配置完后,退出配置菜单,保存刚才的配置。编译kernel并生成uImage:
/opt/linux-2.6.30# make uImage
如图5所示:
图 5
经过漫长的等待后,终于看到如图6所示的提示信息了:
图 6
这时你可以在/opt/linux-2.6.30/arch/arm/boot/目录中发现我们所需要的uImage。
文件历史记录
版本 编制 日期 更改内容
-----------------------------------------------------------------------------------
V1.0 抵岸科技 2010-7-4 首发