基于ARM2410 嵌入式Linux内核的编译与移植

时间:2022-05-30 10:24:34

摘要:本文主要介绍了嵌入式Linux内核以及在ARM平台下的编译与移植过程。

关键字:Linux 内核;移植;编译

中图分类号:TP311 文献标识码:A文章编号:1009-3044(2008)15-20000-00

Compile And Transplant The Embedded Linux Kernel Based on ARM2410

ZOU Qiu

(Computer Dept., Nanbo Polytechnic, Dongguan 523083, China)

Abstract:This paper mainly introduces the Embedded linux kernel’s Compilation and transplantation at the platform of ARM.

Key words:Linux kernel;transplant;compile

1 Linux内核简介

Linux内核,是Linux操作系统的核心。它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

嵌入式linux内核指的是针对具体的嵌入式设备硬件平台,裁减掉一些不必要的功能后,针对该具体的硬件平台编译产生的一个Linux内核。嵌入式Linux通常都需要裁减,主要目的是节省系统资源,提高系统运行效率。同时嵌入式Linux作为一种嵌入式操作系统有其得天独厚的优势,主要表现在:

首先,Linux是开放源代码的,所有的内核源程序都可以在 /usr/src/linux下找到,大部分应用软件也都是遵循GPL而设计,遍布全球的众多Linux爱好者又是Linux开发者的强大技术支持;

其次,Linux的内核小、效率高,内核的更新速度很快;

再次,Linux是免费的操作系统,在价格上极具竞争力。

2 Linux内核移植准备

所谓Linux移植就是把Linux操作系统针对具体的目标平台做必要改写之后,安装到该目标平台使其正确的运行起来。这个概念目前在嵌入式开发领域讲的比较多。其基本内容是:获取某一版本的Linux内核源码,根据我们的具体目标平台对这源码进行必要的改写(主要是修改体系结构相关部分),然后添加一些外设的驱动,打造一款适合于我们目标平台(可以是嵌入式便携设备也可以是其它体系结构的PC机)的新操作系统,对该系统进行针对我们目标平台的交叉编译,生成一个内核映象文件,最后通过一些手段把该映象文件烧写(安装)到我们目标平台中。而通常对Linux源码的改写工作难度较大,它要求你不仅对Linux内核结构要非常熟悉,还要求你对目标平台的硬件结构要非常熟悉。所以这部分工作一般由目标平台提供商来完成。我们所要做的就是从其网站上下载相关版本Linux内核的补丁(Patch),把它打到我们的Linux内核上,再进行交叉编译就可以。

其基本过程如下(以Linux2.6.24为例):

到ftp://.uk/pub/linux/linux-2.6/上下载Linux2.6.24内核及其关于ARM平台的补丁(如:Patch-2.6.24.gz)。给Linux2.6.24打补丁:使用命令zcat ../patch-2.6.24.gz | patch Cp1(前面../表示补丁文件放在内核文件上一层目录),

然后准备交叉编译环境:交叉编译环境工具链一般包括binutils(含AS汇编器,LD链接器等),arm-gcc,glibc等。

接下来修改内核目录下的makefile文件,主要是以下几行:

注释掉ARCH:=$(shell uname Cm | sed Ce s/i.86/i386/-e s/sun4u/sparc64/ -e s/arm. \ */arm/ - e s/sa110/arm/)这一行。

将ARCH := 改为 ARCH := arm

将CROSS_COMPILE:=改为 CROSS_COMPILE := 交叉编译工具中arm-linux所在目录/arm-linux-(如:CROSS_COMPILE := /usr/local/arm/2.95.3/bin/arm-linux-)此后就可以进行编译。

3 关于交叉编译环境

交叉编译环境的建立最重要的就是要有一个交叉编译器。所谓的交叉编译就是:利用运行在某机器上的编译器编译某个源程序生成在另一台机器上运行的目标代码的过程。这里我们主要用到的编译器是arm-linux-gcc,它是gcc的arm改版。无论编译器的功能有多么强大,但它的实质都是一样的,都是把某种以数字和符号为内容的高级编程语言转换成机器语言指令的集合。具体安装和配置工作我们一般不需要自己动手了,只要直接从网上下载相关工具包安装即可。

4 Linux内核裁减

Linux内核移植过程中最重要的一步就是内核裁减。由于目标板硬件平台的不同以及内核版本的不同,所以涉及的内容往往也有很大不同。下面我们以已改造好的ARM-linux,针对ARM2410平台来看看内核的裁减主要涉及的地方。

4.1 Linux内核裁减的配置菜单命令

Linux内核裁减的配置菜单命令有好几个版本,运行:

(1)make config:基于文本的最为传统的配置界面,进入命令行,可以一行一行的配置,这不好使用,并且很烦琐。

(2)make menuconfig:基于文本菜单的配置界面,是字符终端下常用的方式。

(3)make xconfig:基于图形窗口模式的配置界面,Xwindow下推荐使用。

这三个命令中,make xconfig的界面最为友好,如果机器可以使用Xwindow,那么就推荐你使用这个命令,如果不能使用Xwindow,那么就可以使用make menuconfig。界面虽然比上面一个差点,总比make config的要好多了。所有内核配置菜单都是通过Config.in经由不同脚本解释器产生.config,在内核配置完成后就就会在当前目录下产生一个.config的配置文件,当然我们也可以直接修改此文件来配置内核。

选择相应的配置时,有三种选择,它们分别代表的含义如下:

* -----将该功能编译进内核

空-----不将该功能编译进内核

M-----将该功能编译成可以在需要时动态插入到内核中的模块

4.2 Linux内核裁减的配置选项

在内核移植的过程中,最烦杂的事情就是配置内核选项了,但实际配置时大部分选项可以使用其缺省值,只有小部分需要根据用户不同的需要选择。选择的原则是将与内核其它部分关系较远且不经常使用的部分功能代码编译成为可加载模块,有利于减小内核的长度,减小内核消耗的内存,简化该功能相应的环境改变时对内核的影响;不需要的功能就不要选;与内核关心紧密而且经常使用的部分功能代码直接编译到内核中。

针对ARM2410平台要配置的内核选项主要有:

(1) 配置MTD,要使用Cramfs和YAFFS文件系统,首先需要配置MTD.

在Memory Technology Devices (MTD) --->选项中选中如下选项:

Memory Technology Device (MTD) support MTD支持

[*]MTD partitioning support MTD分区支持

Direct char device access to MTD devices 字符设备的支持

Caching block device access to MTD devices 块设备支持

NAND Flash Device Drivers---> 对NAND Flash的支持

SMC Device Support

Simple Block Device for Nand Flash(BON FS)

SMC device on S3C2410 SMDK

[*] Use MTD From SMC

(2)配置文件系统

Kernel automounter version 4 support (also supports v3)文件系统自动挂载支持

DOS FAT fs supportt fs support 对DOS/FAT文件系统的支持

VFAT (Windows-95) fs support 对FAT32文件系统的支持

Yaffs filesystem on NAND 对YAFFS文件系统的支持

Compressed ROM file system support 对Cramfs文件系统的支持

[*] Virtual memory file system support (former shm fs)对temfs文件系统的支持

Simple RAM-based file system support 对RAM文件系统的支持

[*] /proc file system support 对/proc和/dev设备文件系统的支持

[*] /dev file system support (EXPERIMENTAL) /dev设备文件系统支持

[*] Automatically mount at boot 启动时自动挂载的支持

[*] /dev/pts file system for Unix98 PTYs

Network File Systems---> 对NFS网络文件系统的支持

NFS file system support

[*]Provide NFS v3 client support

(3)配置系统类型,主要是CPU类型

(S3C2410-based)ARM system type 设置ARM的系统类型为ARM2410

[M] S3C2410 USB function support 对USB功能的支持

[*] ARM920T CPU idle 设置处理器的类型

[*] ARM920T I-Cache on

5 内核的编译

在完成内核的裁减之后,内核的编译就是一个非常简单的过程。你只要执行以下几条命令就行:

(1) make clean

这条命令是在正式编译你的内核之前先把环境给清理干净。有时你也可以用make realclean或make mrproper来彻底清除相关依赖,保证没有不正确的.o文件存在。

(2)make dep

这条命令是编译相关依赖文件。

(3)make zImage

这条命令就是最终的编译命令。有时你可以直接用make(2.6.X版本上用)或make bzImage(给PC机编译大内核时用)

完成后,就会编译出一个压缩内核映像文件,压缩内核映像所在路径为:arch/arm/boot/zImage

(4) make install

这条命令可以把相关文件拷贝到默认的目录,当然在给嵌入式设备编译时这步可以不要,因为具体的内核安装还需要你手工进行。

(5)make modules

这条命令是编译在配置时选择为模块的,即选项前为[M]的。如果你的内核配置选项中有选择编译为模块的,就需要此命令。

(6)make modules_install

这条命令将make modules 生成的模块文件复制到相应的目录。在给嵌入式设备编译时这步也可以不需要。

6 结束语

最后我们就可以将上面第三步产生的压缩内核映像文件烧写到嵌入式系统中去,最终完成嵌入式系统内核的移植。

参考文献:

[1] 孙纪坤,张小全. 嵌入式LINUX系统开发技术祥解―基于ARM. 北京:人民邮电出版社 2006.

[2] 魏洪兴,胡亮,曲学楼. 嵌入式系统设计与实例开发实验教材―基于ARM9微处理器与Linux操作系统. 北京:清华大学出版社,2005.

[3] 于明,范书瑞,曾祥烨. ARM9嵌入式系统设计与开发教程. 北京:电子工业出版社 2006.

收稿日期:2008-03-05

作者简介:邹球,男,湖南人,在读研究生,主要研究方向:网络,嵌入式系统。

上一篇:论网格技术在教育领域中的应用与分析 下一篇:基于短时能量的语音信号端点检测