Linux2.6.20在K9iAT91RM9200开发板上的移植过程
5(g)内核操作Linux2.6内核驱动移植参考

内核操作Linux2.6内核驱动移植参考随着Linux2.6的发布,由于2.6内核做了教的改动,各个设备的驱动程序在不同程度上要进行改写。
为了方便各位Linux爱好者我把自己整理的这分文档share出来。
该文当列举了2.6内核同以前版本的绝大多数变化,可惜的是由于时间和精力有限没有详细列出各个函数的用法。
特别声明:该文档中的内容来自,该网也上也有各个函数的较为详细的说明可供各位参考。
1、使用新的入口必须包含<linux/init.h>module_init(your_init_func);module_exit(your_exit_func);老版本:int init_module(void);void cleanup_module(voi);2.4中两种都可以用,对如后面的入口函数不必要显示包含任何头文件。
2、GPLMODULE_LICENSE("Dual BSD/GPL");老版本:MODULE_LICENSE("GPL");3、模块参数必须显式包含<linux/moduleparam.h>module_param(name, type, perm);module_param_named(name, value, type, perm);参数定义module_param_string(name, string, len, perm);module_param_array(name, type, num, perm);老版本:MODULE_PARM(variable,type);MODULE_PARM_DESC(variable,type);4、模块别名MODULE_ALIAS("alias-name");这是新增的,在老版本中需在/etc/modules.conf配置,现在在代码中就可以实现。
5、模块计数int try_module_get(&module);module_put();老版本:MOD_INC_USE_COUNT 和MOD_DEC_USE_COUNT6、符号导出只有显示的导出符号才能被其他模块使用,默认不导出所有的符号,不必使用EXPORT_NO_SYMBOLS老板本:默认导出所有的符号,除非使用EXPORT_NO_SYMBOLS7、内核版本检查需要在多个文件中包含<linux/module.h>时,不必定义__NO_VERSION__老版本:在多个文件中包含<linux/module.h>时,除在主文件外的其他文件中必须定义__NO_VERSION__,防止版本重复定义。
linux的移植

linux的移植、内核、文件系统的生成与下载一、实验目的1.了解内核编译过程2.了解linux移植的基本过程,掌握内核和文件系统的下载方法。
3.掌握嵌入式主机运行环境的配置。
二、实验内容1. 学习内核编译的过程2. 学习linux移植的基本过程2. 学习内核和文件系统的生成与下载方法三、实验设备1. PentiumII以上的PC机、EL-ARM860实验箱四、linux的移植说明1.内核编译1)内核的结构本实验系统运行的linux版本是针对linux-2.6.28进行移植的,其组成结构如下图所示:图linux-2.6.28的目录结构图Linux内核非常庞大,包括驱动程序在内有上百兆。
如下图示其主要结构目录:/arch子目录包含了所有与硬件体系结构相关的内核移植代码。
其中每一个目录都代表一种硬件平台,对于每种平台都应该包括:boot: 包括启动内核所使用的部分或全部平台的相关代码。
kernel:包括支持体系结构特有的特征代码lib:包括存放体系结构特有的通用函数的实现代码mm:包括存放体系结构特有的内存管理程序的实现mach-xxx:包括存放该处理器的移植代码/Documentation子目录包含有关内核的通用解释和注释。
/drivers子目录包含内核中所有的设备驱动程序,每个不同的驱动占用一个子目录,如char、block、net、mtd、i2c等。
/fs 子目录包含了所支持的文件系统的代码,如EXT、FAT、NTFS、JFFS2等。
/include 子目录包含了建立内核代码时所需的大部分库文件的头文件,该模块利用其他模块重建内核。
同时,它也包括不同平台需要的库文件,被放置在include/linux 子目录下。
/init子目录包含了内核的初始化代码,内核从此目录下开始工作。
/ipc 子目录包含了内核的进程间通讯的代码。
/kernel 子目录是内核的最核心部分,包含了进程调度、定时器等,而和平台相关的一部分代码放在arch/*/kernel目录下。
嵌入式Linux2.6内核启动步骤)

Linux内核构成(国嵌)Linux/arch/arm/boot/compressed/head.s1.解压缩2.初始化3.启动应用程序1 arch/arm/boot/compressed/Makefile arch/arm/boot/compressed/vmlinux.lds2. arch/arm/kernel/vmlinux.ldsLinux内核启动流程(国嵌)arch/arm/boot/compressed/start.S(head.s—负责解压缩)Start:.type start,#function.rept 8mov r0, r0.endrb 1f.word 0x016f2818 @ Magic numbers to help the loader.word start @ absolute load/run zImage address.word _edata @ zImage end address1: mov r7, r1 @ save architecture IDmov r8, r2 @ save atags pointer这也标志着u-boot将系统完全的交给了OS,bootloader生命终止。
之后代码在133行会读取cpsr并判断是否处理器处于supervisor模式——从u-boot进入kernel,系统已经处于SVC32模式;而利用angel进入则处于user模式,还需要额外两条指令。
之后是再次确认中断关闭,并完成cpsr写入mrs r2, cpsr @ get current modetst r2, #3 @ not user?bne not_angelmov r0, #0x17 @ angel_SWIreason_EnterSVCswi 0x123456 @ angel_SWI_ARMnot_angel:mrs r2, cpsr @ turn off interrupts toorr r2, r2, #0xc0 @ prevent angel from runningmsr cpsr_c, r2然后在LC0地址处将分段信息导入r0-r6、ip、sp等寄存器,并检查代码是否运行在与链接时相同的目标地址,以决定是否进行处理。
ARM+Linux的移植过程及分析

200 万3.方7电 数子据设计应用www.eaw.com.cn
下的库覆盖掉,需要非常留意。 5)编译和安装:make;make
install。安装成功后,glibc库将安装 在/usrflocal/arm.1inux目录下。
ARM Linux的内核配置与编译 内核配置选项
在安装完内核源码和所需的开 发工具之后,需要对内核进行配 置,主要包括:
繁久。式,j拳。簏
一清华大学智能技术与系统国家重点实验室李明
ARM Linux的移植过程及分析
摘 耍 本文结合实例说明了移植ARM Linux到特定硬件平台上的实现过程,并对ARM Linux的启动
代码做了分析。
舞隧壤蠢 蝴 关
ARMLinux;移植;RAMdisk;交叉编译
引言 面向ARM微处理器构架的嵌 入式操作系统的使用量将在今后五 年持续增长,在各种嵌入式操作系 统中,Linux是获得支持最多的第三 大力量。 目前,ARM Linux支持包括
4)编译和安装:make、make
是这里的路径需要用全路径名,而
不能使用相对路径。 6)编译源码:
ma ke
LANGUAGE=“c”。这里因为还没
有一个ARM可用的glibc,所以只
能编译c语言的交叉编译工具。如
install。注意安装时可能需要root权 果在编译好glibc之后,就可以回
限,在prefix目录下当前用户有写 权限,安装成功后,binutils工具将 安装在/usr/local/arm—linux目录下。
交叉编译环境的建立
移植前需要在宿主机上建立 ARM的交叉编译环境,主要用到的 开发工具包括三个部分:binutils、 gcc、glibc。其中,binutils是二进制 文件的处理工具;gcc是编译工具; glibc是链接和运行库。所有需要用 到的工具既可以下载源码自行编 译,也可以直接下载已经编译好的 二进制工具。本文介绍的安装方法 就是基于SkyEye开发环境下的安 装包文件。
Linux系统移植

Linux系统移植Linux系统移植序该文档的目的是总结我们在工作中的一些经历,并把它们分享给喜欢ARM和Linux的朋友, 如有错误之处,请大家多多指点. 同样, 我们也希望更多人能把自己的工作经历和体会参加该文档,让大家共同进步. 该文档是一份交流性文档, 只供个人学习与交流,不允许公司和企业用于商业行为.第一局部前言1硬件环境1.1主机硬件环境开发机:Pentium-4 CPU内存: 512MB硬盘: 60GB1.2目标板硬件环境CPU: S3C2410SDRAM: HY57V561620Nand flash: K9F1208U0B〔64MB〕以太网芯片:CS8900A 〔10M/100MB〕1.3工具介绍仿真器:Dragon-ICE电缆:串口线,并口线2软件环境2.1主机软件环境2.1.1 Windows操作系统ADS编译工具:ADS1.2仿真器软件: Dragon-ICE daemon程序2.1.2 Linux操作系统GNU穿插编译工具:2.95.3:作用:编译u-boot3.3.2, 3.4.4:作用:编译内核和应用程序其它工作:tree工具:作用:查看文件目录树下载:从ftp:///linux/tree/下载编译2.1.3目标板最后运行的环境启动程序:u-boot-1.1.4内核:linux-2.6.14.1应用程序:1. busybox-1.1.32. TinyLogin-1.43. T d-2.252.2 Linux下工作用户及环境2.2.1穿插工具的安装工具链的编译过程请参考第三局部.1. 下载穿插工具2.95.3 下载地址:ftp:///pub/armlinux/toolchain/cross2.95.3.tar.bz23.3.4 下载地址:2. 编译穿插工具[rootlocalhost ~]mkdir /usr/local/arm[rootlocalhost ~]cd /usr/local/arm把cross-2.95.2.tar.bz2, cross-3.4.4.tar.gz 拷贝到/usr/local/arm目录中。
最详细的linux-2.6.28移植过程

(7) (8)
LCD 支持 USB 输入设备支持
(9)
声卡设备支持
chip->ecc.mode =
其中有一些需要修改源码的地方会在下面说明。 9. 保存配置并退出 xconfig,生成 zImage 文件 #make zImage 复制代码 OK,将生成的 zImage 文件烧到开发板上就可以了。
(1). 启动 |---Boot options| |---Default kernel command string: [root=/dev/mtdblock3 rootfstype=cramfs init=/linuxrc console=ttySAC0,115200 devfs=mount mem=64] 分析: /dev/mtdblock3 : 表示 MTD 分区的第 3 个分区存储根文件系统 rootfstype=cramfs : 分区是 cramfs 类型,这项不加应该关系不大 init=/linuxrc : 启动的首个脚本即根目录下的 linuxrc console=ttySAC0,115200 : 使用串口 1 作为串口调试,波特率设置为 115200; 现在已经摒弃了以前使用 ttyS0 的写法 devfs=mount : 在/sbin/init 运行之前能自动挂载/dev 为 devfs 文件系统 mem=64 : 存储器大小为 64M
= 15,
.lower_margin
= 3,
.vsync_len
= 5,
};
6
中国最大 IC 行业招聘网
static struct s3c2410fb_mach_info smdk2410_fb_info __initdata = {
.displays
嵌入式Linux系统软件移植流程
嵌入式Linux系统软件移植流程本文主要讨论Embedded Linux的系统软件移植流程,假设映象文件已经编译、链接完成。
关于映象文件及driver等的创建在其他文档中详细描述。
1.映象文件本文以X-Hyper255B开发板为例,映象文件为:x-boot255:bootloaderzImage:kernelrootfs.img:文件系统2.烧写bootloader首先需要通过JTAG把bootloader烧入目标板的FLASH中,如果PC机是Linux系统则执行以下命令:Jflash-XHYPER255 x-boot255也可以使用Windows系统的烧写程序来烧写Jflash.exe x-boot2553.bootp和fttp配置要使用bootloader通过以太网下载文件,需要在PC机(Linux系统)上建立bootp和fttp 配置。
3.1.建立bootp•在PC机上安装/XHYPER255/RPM中的bootp包rpm –i bootp-2.4.3-7.i386.rpm•在PC机上创建bootp文件/etc/xinetd.d/bootp,其内容如下:service bootps{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/bootpd}•创建bootptab文件/etc/bootptab,其内容如下:test:\ht=1:\ha=0x123456789A00:\ip=192.168.1.50:\sm=255.255.255.0其中,test:标号ht:硬件类型(1=以太网)ha:开发板上网卡芯片的MAC地址ip:开发板上网卡芯片的IP地址sm:子网掩码•重新启动PC的xinetd/etc/rc.d/init.d/xinetd restart3.2.建立tftp•在PC机上安装/XHYPER255/RPM中的tftp包rpm -i tftp-server-0.17-9.i386.rpm•在PC机上创建tftp文件/etc/xinetd.d/tftp,其内容如下:service tftp{disable = nosocket_type = dgramprotocol = udpwait = yesuser = rootserver = /usr/sbin/in.tftpdserver_args = -s /tftpboot}server_args指出了PC机存放下载文件的目录,只有该目录下的文件才能被下载到开发板上。
移植步骤
在Linux系统下运行下,了解qmake的使用1 cd /opt/new2 source x86_qt4.sh(选择Linux下的QT 版本)3 cd /root/mySnake/ (源文件目录)4 make clean;qmake;make(rm *.pro;qmake -project;qmake;make)(编译链接生成可执行文件)5 qvfb &6 ./mySnake -qws(运行可执行文件)生成ARM版本的可执行文件1、cd /root/mySnake/2、将所有打开图片的名称都加上一个路径/root/mySnake/3、cd /opt/new4、source arm_qt4.sh5、cd /root/mySnake/6、make clean;qmake;make已经生成适合于ARM开发板运行的可执行文件7、将可执行文件、所有的图片单独拿出来,放在同一个文件夹下面8、打包压缩该文件夹(cd /root tar –zcvf mySnake.tar.gz mySnake)移植1、开发板和电脑通过串口线连接2、打开超级终端,创建连接3、把前面的压缩包发送到开发板上(cd/root 右键发送)4、解压缩tar -zxvf mySnake.tar.gz5、cd mySnake/6、chmod 777 mySnake7、改配置文件vi /etc/init.d/rcS /bin/qt4 & 退出用:q8、vi /bin/qt4 加入按i进入编辑模式,可以修改该文件。
修改完这个文件,按ESC,后:wqLD_LIBRARY_PATH=/usr/local/Trolltech /QtEmbedded-4.7.0-arm/libexport LD_LIBRARY_PATH/root/mySnake/mySnake -qws & 9、reboot。
linux-2.6.11.1内核移植全纪录
{ name:"kernel", size:0x1d0000, offset:0x30000, }, { name:"rootfs", size:0x1600000, offset:0x200000, }, { name:"yaffsfs", size:0x2800000, offset:0x1800000, }, }; struct s3c2410_nand_set nandset={ nr_partitions:4, partitions:partition_info, }; struct s3c2410_platform_nand gyhPlatform={ tacls:0, twrph0:30, twrph1:0, sets:&nandset, nr_sets:1, }; 在s3c_device_nand结构中添加dev属性: .dev = { .platform_data = & gyhPlatform } 在arch/arm/mach-s3c2410/mach-smdk2410.c中的smdk2410_devices[]结构 体中添加&s3c_device_nand使内核在启动的时候初始化nand flash信息。
(3)修改Kconfig以允许配置 修改drivers/net/arm/目录下的Kconfig文件,在最后添加如下内容: Config ARM_CS8900 tristate "CS8900 support" depends on NET_ETHERNET && ARM && ARCH_SMDK2410 help Support for CS8900A chipset based Ethernet cards. If you have a network (Ethernet) card of this type, say Y and read the Ethernet-HOWTO, available from as well as . To compile this driver as a module, choose M here and read . The module will be called cs8900.o. (4)修改Makefile加入编译 修改drivers/net/arm/目录下的Makefile文件,在最后添加如下内容: obj-$(CONFIG_ARM_CS8900) += cs8900.o (5)在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中,找到 smdk2410_iodesc[]结构数组,添加如下如下内容: {vSMDK2410_ETH_IO, pSMDK2410_ETH_IO, SZ_1M, MT_DEVICE} 应先添加头文件#include <asm/arch-s3c2410/smdk2410.h> 在include/asm-arm/arch-s3c2410/目录下创建smdk2410.h文件,其内容 为: #ifndef _INCLUDE_SMDK2410_H_ #define _INCLUDE_SMDK2410_H_ #include <linux/config.h> #define pSMDK2410_ETH_IO 0x19000000 #define vSMDK2410_ETH_IO 0xE0000000 #define SMDK2410_ETH_IRQ IRQ_EINT9 #endif // _INCLUDE_SMDK2410_H_ (6)make menuconfig选择CS8900A项,编译下载,CS8900可以工作 了。 6、LCD移植 (1)拷贝驱动源代码 cp s3c2410fb.h drivers/video/ cp s3c2410fb.c drivers/video/ (2)修改drivers/video目录下的Kconfig文件,在最后添加如下内容:
ARM开发教程之ARM Linux系统移植步骤
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之LINUX简介 LINUX简介 LINUX
在众多嵌入式操作系统中,Linux目前发展最快、应用最为 广泛[1]。性能优良、源码开放的Linux具有体积小、内核可 裁减、网络功能完善、可移 植性强等诸多优点,非常适合 作为嵌入式操作系统。一个最基本的Linux操作系统应该包 括:引导程序、内核与根文件系统三部分。 与Linux2.4内核相比,2.6内核吸收了最新的技术,在 性能、可测量性、器件支持和可用性方面有了大幅度提高; 支持更多的体系结构、处理器、总线、接口和设备;标准 化了内部接口;简化了扩展或添加新设备的步骤等。 本文着重介绍如何制作一个基于linux-2.6.19内核的小 型Linux操作系统,并将它移植到S3C2410开放板上。内容 包括交叉编译环境的建立,引导程序、2.6.19内核、根文 件系统的修改、配置、编译、移植等。
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
org内核吸收了最新的技术在?千锋3g嵌入式移动互联网技术研发中心arm开发教程之系统的制作移植建立交叉编译环境?要移植开发小型linux系统首先要在安装了redhat9或更高版本linux操作系统的主机上配置交叉开发环境
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
千锋3G嵌入式移动互联网技术研发中心 千锋3G嵌入式移动互联网技术研发中心 3G
ARM开发教程之根文件系统 根文件系统
Linux系统中的文件和设备是通过文件系统来组织的。 文件系统的存在使得数据和设备可以被有效而透明地 存取访问。一个linux的最简根文件系统应该包括支持 linux系统正常运行的基本内容,包括系统使用的软件 和库,以及所有用来为用户提供基本支持的架构和指 令。 在根文件目录rootfs下建立bin、dev、etc、lib、 proc、sbin、root、tmp等一系列必备的目录,把所需 的配置文件、动态 函数库放到相应的目录。采用 BusyBox是缩小根文件系统的好办法。BusyBox以很小 的体积集成了最常用的linux命令和应用程序,大大简 化了制 作linux根文件系统的过程。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
嵌入式课程论文Linux2.6.20在K9iAT91RM9200开发板上的移植过程姓名:梅娟专业:控制理论与控制工程指导教师:谭超
二○一四年五月Linux2.6.20在K9iAT91RM9200开发板上的移植过程摘要:嵌入式操作系统的开发与研究已成为当前的一个热点,Linux由于其独有的优势而成为很多厂家开发嵌入式应用的系统,而ARM作为一种高性能、低成本的嵌入式RISC微处理器,已成为应用最广泛的嵌入式处理器。本文介绍了ARM处理器和Linux操作系统的特点,并结合系统核心是32位ARM920T处理器K9iAT91RM9200开发板对整个开发过程,包括硬件结构、开发环境及开发工具进行了分析,特别是对交叉编译环境和Linux内核编译与移植进行了重点分析。关键词:嵌入式系统;ARM;Linux
Thetransplantprocessoflinux2.6.20onthedevelopment
boardofK9iAT91RM9200
Abstract:Researchanddevelopmentontheembeddedsystemhasbecomeacurrenthotspot,andowingtoLinuxadvantageasakindofOSindesigningtheembeddedapplication,itbecomesaselectionbyafewofcompanies.AsahighcapabilityandlowcostRISCmictoprocessor,ARMhasalreadybecomethemostcomprehensiveembeddedprocessor.ThispaperintroducestheARMprocessorandtheLinuxOS.CombiningwiththeK9thatadesignationpanelwiththe32bitAT91RM9200processor,thecompleteprocessisanalysedincludinghardwarearchitecture,developmentenvironmentandtools.Inparticular,thecrossingcompliedenvironmentandthetransplantationofLinuxareemphaticallyanalysed.Keywords:embeddedsystem;ARM;Linux
0前言
目前,在嵌入式系统里,基于ARM微核的嵌入式处理器已经成为市场主流,随着ARM技术的广泛应用,建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点问题。目前已经涌现出了较多的嵌入式操作系统,如VxWork、WindowsCE、PalmOS、Linxu等等[1]。在众多的嵌入式操作系统里,许多开发人员选择的却是Linux,这是因为它公开源代码并且是免费的,可以让任何人将其修改移植到自己的目标平台里使用。ARMLinux支持包括ARM710、ARM720T、ARM920T、StrongARM等系列的ARM处理器,这些ARM处理器都带有内存
管理单元(MMU),而对于不带有内存管理单元的CPU,一般采用CLinuxµ作为其操作系统[2]。本文选用的是微处理器K9iAT91RM9200是基于32位ARM920T处理器,基于此,构造一个Linux嵌入式操作系统,将它嵌入到基于32位ARM内核的系统中,在此基础上开发各种应用程序。
1硬件ARM处理器是一种16/32位的高性能、低成本、低功耗的嵌入式RISC微处理器,由ARM公司设计,然后授权给各半导体厂商,它为一个完整系统的开发提供全面的技术支持,世界上几乎所有的主要半导体厂商都生产基于ARM体系结构的通用芯片,或在其专用的芯片中嵌入ARM相关技术,目前已经占领了75%以上的32位RISC嵌入式产品市场。ARM的微处理器核适用于各种领域,正迅速成为便携式通信设备、手持计算、多媒体数字消费和嵌入式方案,解决市场中RISC批量生产的标准。ARM处理器在国内也非常普及,所以本文选用ARM微处理器。ARM处理器有一系列内核结构,以使用于不同领域。而本文采用32位AT91RM9200处理器K9i开发板,AT91RM9200包括一个高速片上SRAM工作区及一个低等待时间的外部总线接口(EBI),以完成应用所要求的片外存储器和内部存储器映射外设设置的无缝连接。EBI有同步DRAM、BurstFlash及静态存储器的控制器,并设计了专用电路以方便与SmartMedia、CompactFlash及NANAFlash连接。高级中断控制器(AIC)通过多向量,中断源优先级划分及缩短中断处理传输时间来提高ARM920T处理器的中断处理性能。外设数据控制器(PDC)向所有的串行外设提供DMA通道,使其与片内或片外存储器传输数据时不用经过处理器,这就减少了传输连续数据流时处理器的开销,包括双指针的PDC控制器,极大地简化了AT91RM9200的缓冲器链接。并行I/O(PIO)控制器作为通用数据的I/O复用外设输入/输出口线,以最大程度上适应器件的配置,每条口线上包含有一个输入变化中断、开漏能力及可编程的上拉电阻。AT91RM9200集成了许多标准接口,包括USB2.0全速主机和设备端口及多数外设和在网络层广泛使用的10/100Base-T以太网媒体访问控制器(MAC),此外,它还提供一系列符合工业标准的外设,可在音频、电信、Flash卡红外线及智能卡中使用。为完善性能,AT91RM9200集成了包括JTAG-ICE、专用UART调试通道(DBGU)及嵌入式的实时追踪的一系列的调试功能,这些使得开发、调试所有的应用特别是受实时性限制的应用成为可能。
2Linux操作系统内核通常,操作系统由内核和一些系统服务程序(命令解释、库文件、链接和编译程序等)组成,内核是操作系统的灵魂,它为用户进程提供一个虚拟机借口,用户进程可以并行运行、公开地占用系统资源而互不干扰。Linux操作系统一般由内核、shell、文件结构和实用工具4个主要部分组成。Linux操作系统内核采用单块结构,可以动态地加载和卸载模块[3]。系统利用内核模块的可动态装载和卸载功能,可以方便的在内核中添加新的组件或卸载不再需要的内核组件。内核模块的动态装载性使得内核映像的尺寸保持在最小,并且具有最大的灵活性、同时便于检验新的内核代码,而不需要重新编译内核且重新引导,从而用户可以根据自己系统的需要构筑自己的似有内核,其源码的公开更为改造其内核提供了可能,尤其为重建有特殊要求的操作系统提供了可能[4]。
3基于Linux的开发环境及开发工具为了实现基于Linux的应用开发,必须建立一个完备的Linux开发环境。嵌入式系统通常是一个资源受限制的系统,因此,直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的,目前。一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。需要交叉开发环境的支持是嵌入式应用软件的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式。3.1交叉编译和链接在完成嵌入式软件的编码之后,需要进行编译和链接以生成可执行代码,由于开发过程大多是使用Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片是ARM9的微处理器,嵌入式系统没有足够的内存或存储资源来编译可执行代码,这就要求在建立好的交叉开发环境中进行交叉编译和链接。交叉编译器和交叉链接器是能够在宿主机上运行,并且能够生成在目标机上直接运行的二进制代码的编译器和链接器。例如在基于ARM体系结构的gcc交叉开发环境中,arm-linux-gcc是交叉编译器,arm-linux-ld是交叉链接器。嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能的小,因此实际运用时一般使用经过特殊处理的函数库。对于嵌入式Linux系统来讲,功能越来越强、体积越来越大的C语言函数库glibc和数学函数库libm已经很难满足实际的需要,因此需要它们的精化版本uClibc、uClibm和newlib等[5]。目前,嵌入式的集成开发环境都支持交叉编译和交叉链接,如WindRiverTornado和GNU工具链等,编写好的嵌入式软件经过交叉编译和交叉连接后通常会生成两种类型的可执行文件:用于调试的可执行文件和用于固化的可执行文件。3.2交叉编译环境GNU工具以源代码的方式发行,不同的体系结构,GNU提供相应的开发软件包。可到网上下载交叉编译器工具链:arm-linux-gcc-3.4.1.tar.bz2,作为root用户登录到linux下,进入/usr/local/local目录,执行以下命令:tarjxvfarm-linux-gcc-3.4.1.tar.bz2-C/修改PATH变量,增加/usr/local/arm/3.4.1/bin,如exportPATH=$PATH:/usr/loca/arm/3.4.1/bin,重新登录Redhat系统(不必重启机器,开始->logout即可),使以上设置生效,在命令行输入arm-linux-gcc–v,会出现如图1信息,这说明交叉编译环境已经成功安装。这样Linux就可以有了基于ARM体系结构的编译器、链接器、调试器以及实用程序。
图1编译信息