首页 > 范文大全 > 正文

基于SEP4020的嵌入式Linux移植

开篇:润墨网以专业的文秘视角,为您筛选了一篇基于SEP4020的嵌入式Linux移植范文,如需获取更多写作素材,在线客服老师一对一协助。欢迎您的阅读与分享!

摘要:描述了将Linux 移植到基于sep4020处理器的目标板上的方法和过程,包括交叉编译环境的建立,开发工具使用,内核的裁剪、编译以及文件系统的移植。

关键词:嵌入式linux移植

中图法分类号:TP316文献标识码:B 文章编号:1009-3044(2008)15-20ppp-0c

An Embedded Linux Porting Based on SEP4020 Processor

YUE Yue-bing1,QIAN Li-li2,LIU Hao3

(1.IC College of Southeast University, Nanjing 210096,China;2.Research Institute of Southeast University in Suzhou,Suzhou 215123,China;3. ASIC Center,Southeast University,Nanjing 210096,China)

Abstract:The paper described the method and process of porting Linux to the target board based on SEP4020 processor,including the construction of cross compile environment,the usage of developed tools,the reduction and compilation of Linux kernel and the porting of file systems.

Key words:embedded;Linux;porting

嵌入式系统 (Embedded System) 是以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。它包括嵌入式微处理器和嵌入式操作系统两大主要方面,将嵌入式操作系统移植到特定的微处理器平台上,并构建出稳定的开发系统,是嵌入式系统应用的必要前提,也是进行嵌入式产品开发的基础。

Linux是一种性能优良、源码公开且被广泛应用的免费操作系统,在嵌入式领域得到了越来越多的应用。Linux 具有多任务、多用户、高效、稳定的特性,同时内核小巧灵活,而且代码完全开放,用户可以根据实际需求对Linux 内核进行修改、裁剪。这些特性使得它很适合于嵌入式系统的应用。

1 目标硬件平台介绍:

SEP4020由东南大学国家专用集成电路系统工程技术研究中心设计,使用0.18um标准CMOS工艺设计,内嵌ARM720 T内核(32位RISC内核,带8KB指令数据Cache)

芯片集成了各种功能包括:提供SDRAM控制器;针对低成本移动终端的需求,提供灵活的外部总线宽度配置,支持NANDFLASH启动;提供了10M/100M自适应以太网MAC;支持RMII接口;支持MMC/SD卡;支持USB接口,I2S音频接口;有LCD控制器,支持TFT彩屏和STN黑白、灰度屏;RTC支持日历功能/WatchDog,支持后备电源;10通道TIMER,支持捕获、外部时钟驱动和MATCH OUT;4通道PWM,支持高速GPIO;4通道UART,均支持红外;2通道SSI,支持SPI和Microwire协议;2通道SmartCard接口,兼容ISO7816协议;支持最多91个GPIO,18个外部中断;支持外部DMA传输。丰富的外设接口,方便终端产品的数据传输与功能扩展;片上DPLL,支持IDLE、SLOW、NORMAL、SLEEP多种功耗模式,可有效的降低系统功耗。

2 交叉编译环境的建立

首先需要建立交叉编译开发环境,在开发主机上安装桌面Linux 操作系统,或者在虚拟机上安装Linux 操作系统 ,然后在Linux系统下安装交叉编译工具 :binutils, gcc 和glibc ,其中 binutils 是做二进制处理的工具 , gcc是编译用的工具,glibc是链接和运行库。将cross_2.95.3 tar.bz2 在/usr/local/arm 路径下进行解压 ,并在/etc/profile 文件中修改路径 PATH = $ PATH: /usr/local/arm/2.95.3/bin 。

然后就可以在该平台上编译内核和需要运行在目标板上的代码,编译完成后由连接器生成与目标系统存储器地址相关的可执行映像,再将可执行映像烧录到目标板上来运行,就完成了移植工作。

3 Linux 移植过程

3.1 Linux内核定制:

本文采用的是成熟的2.4.18版本的内核:Linux-2.4.18.tar.bz2 及相关的补丁patch-2.4.18.bz2 。

Linux的内核配置系统由Makefile脚本文件,config.in配置脚本文件和配置工具组成。在Linux-2.4.18目录下执行make menuconfig ,界面型配置工具按照配置脚本config.in的内容显示可用的配置选项。在配置完成后,保存退出,配置信息被保存在配置文件.config中,原有的.config文件被更名为.config.old。Makefile根据.config中的配置信息,构造出需要编译的源文件列表,然后分别进行编译;并根据Makefile中指定的链接器脚本,把目标代码链接在一起,最后形成Linux的Kernel Image。

修改源码下的Makefile文件,指定目标代码类型和编译器:

由于SEP4020采用的是基于ARM720T 内核的处理器,支持MMU,因此在makefile中的体系结构选择ARCH : = arm 。

编译器Compiler的选择:CROSS_COMPILE = /usr/local/arm/2.95.3/bin/arm-linux-

在shell 命令下使用 $make menuconfig 对内核进行逐项配置,其中大部分选项可以使用其缺省值,还有些选项比如处理器类型,板级支持,对RAM的支持,设备驱动的支持以及对文件系统的支持等根据实际的需要进行选择,尽量去掉不必要的功能。

由于我们要使用网络功能,所以需要对内核模块网络功能进行配置,配置“Networking support”选项,选择Packet Socket选项, TCP/IP networking选项,使内核支持TCP/IP协议。multicasting、advanced router、kernel level autoconfigration这3个选项不需要加入内核。完成相关网络协议配置后,需要进行网络设备的配置,选择Ethernet(10 or 100Mbit),other ISA card,NE2000/NE1000 support的配置。

Linux 内核配置界面,如下图所示:

3.2 内核的编译:

配置完成后,使用指令 $ make dep ,$ make zImage对内核进行编译,我们采用压缩方式编译内核 ,生成的压缩内核映像文件zImage 位于arch/arm/boot 目录下 ,这种方式编译生成的内核映像文件很小,比较适合嵌入式系统使用,将该内核映像文件烧写到Flash 中 ,启动时由引导程序将内核从Flash中加载到RAM中解压后运行。

但只有这个内核还无法与系统进行交互,嵌入式Linux 在启动时需要一个根文件系统。因为Linux系统中的文件和设备是通过文件系统来组织的,文件系统使数据和设备可以被透明、有效的存取访问。一个简单的文件系统应该包括系统使用的软件和库,以及为用户提供基本支持的架构和指令。一般包括以下几个目录:/bin 、/sbin、/etc、/boot、/dev、/lib、/mnt、/proc、/usr。把配置文件、动态函数库等放在相应的目录下。

3.3 使用Busy Box制作Ramdisk

Busybox是一个集成了一百多个最常用linux命令和工具的软件,而且还集成了一个http服务器和一个telnet服务器,而所有这一切功能却只要1M左右的大小,Busybox把常用的工具和命令压缩在一个可执行文件里。

配置Busybox:

Busybox的配置程序和linux内核菜单配置方式一样。可根据自己的需要选择功能选项:

$make menuconfig

Busybox Settings >

General Configuration >

[*] Support for devfs

Build Options >

[*] Build BusyBox as a static binary (no shared libs)这个选项是要选择的,这样才能把busybox编译成静态链接的可执行文件,运行时才能独立于其他函数库。否则需要其他库文件才能运行,在单一linux内核下不能正常工作。

Installation Options

Don't use /usr 这个选项也一定要选,否则make install 后busybox将安装在原系统的/usr下,这将覆盖掉系统原有的命令。其他选项都是一些linux基本命令选项,需要哪些命令就编译进去,一般使用默认的就可以了。配置好后,保存退出。使用指令 #make ,#make install编译busybox 。

最后将bootloader , zImage和initrd一起烧录到flash中,上电后boot loader加载内核并初始化ram disk,内核把initrd转化成正常的ram disk 并释放initrd使用的内存,initrd作为root被挂载,赋予读写权限。然后/linuxrc被执行,linuxrc挂载真正的根文件系统,可以看到系统的启动信息打印,至此一个基于2.4.18内核的Linux系统就成功移植到SEP4020上了。

4 ARM-Linux中的中断机制实现

中断处理是嵌入式系统中的一项重要技术,通过中断,使得处理器和外设并行工作,提高了系统的执行效率。Linux将中断服务程序分为“Top Half”和“Bottom Half”两部分。Top half对时间要求严格,在中断请求发生后要立即完成,此时CPU关中断, Bottom Half是根据Top Half需要来调度执行的,对时间要求不严格,在CPU开中断下执行。Linux2.4内核在bottom half机制的基础上引入“软中断请求”(softirq)机制以适应SMP系统的需求。

对应具体软件实现,在start_kernel()中,定义两个中断初始化函数:trap_init()和IRQ_init(),分别用于实现第一级和第二级中断向量的初始化。Trap_init()通过调用entry-armv.S中的(__trap_init)函数段,在系统的0x00地址处放置ARM的异常向量表,然后在0x200处建立各个异常(如irq、fiq、data、undefined等)的分类处理。IRQ_init()在具体设备初始化时会将其中断处理程序通过request_irq()向系统注册,调用setup_arm_irq()挂入中断请求队列,参数irq是中断请求号,对应于中断控制器为每个中断源配置的中断号。中断发生时,根据中断请求调用相应的中断处理函数,中断处理结束时通过free_irq来释放中断。

结束语:本文讨论了将Linux操作系统移植到目标系统SEP4020上的过程中的一些关键技术并讨论了ARM-Linux的中断机制。移植后的Linux保留了原有的工作稳定的特点。而Linux突出的嵌入式特性与性能优越的SEP4020相结合,使其在嵌入式领域有着广阔的应用天地,可以进而开发其它各种应用程序。

参考文献:

[1]许信顺,贾智平.嵌入式Linux 应用编程[M].机械工业出版社,2007.1.

[2]陈铁军,仇洪冰.基于S3C2410的嵌入式Linux的移植方法[J].桂林电子工业学院学报,2006年8月,第26卷,第4期,259-263.

[3]李程远,刘文峰,李善平.ARM在EP7312上的移植[J].计算机工程与设计,2003年7月,第24卷,第7期,73-76.

[4]梁千帆,陈建华,孔凡军.基于2.6.19内核的小型Linux系统制作与移植[J].电子产品世界,2007/08,106-107.

收稿日期:2008-4-16

作者简介:岳跃冰(1981-),女,河南开封市人,硕士研究生,研究方向:嵌入式系统。