arm9S3C2410微处理器与Linux的结合越来越严密,逐步在嵌入式范畴得到广范的运用。现在,在便携式消费类电子产品、无线设备、轿车、网络、存储产品等都能够看到S3C2410与Linux相结合的身影。
S3C2410微处理器是一款由Samsung公司为手持终端规划的低价格、低功耗、高功用,依据arm920T核的微处理器。它带有内存办理单元 (MMU),选用0.18mm工艺和AMBA新式总线结构,主频可达203MHz。一起,它支撑Thumb 16位紧缩指令集,然后能以较小的存储空间取得32位的体系功用。
在很多嵌入式操作体系中,Linux现在开展最快、运用最为广泛[1]。功用优秀、源码敞开的Linux具有体积小、内核可削减、网络功用完善、可移 植性强等许多长处,十分适宜作为嵌入式操作体系。一个最根本的Linux操作体系应该包含:引导程序、内核与根文件体系三部分。
与Linux2.4内核比较,2.6内核吸收了最新的技能,在功用、可测量性、器材支撑和可用性方面有了大幅度进步;支撑更多的体系结构、处理器、总线、接口和设备;规范化了内部接口;简化了扩展或增加新设备的进程等。
本文侧重介绍怎么制造一个依据linux-2.6.19内核的小型Linux操作体系,并将它移植到S3C2410敞开板上。内容包含穿插编译环境的树立,引导程序、2.6.19内核、根文件体系的修正、装备、编译、移植等。
体系的制造移植
树立穿插编译环境
要移植、开发小型Linux体系,首要要在装置了RedHat9或更高版别Linux操作体系的主机上装备穿插开发环境。穿插开发是指在开发主机上装置开发东西,修正、编译方针板的引导程序、内核和文件体系,使其能在方针板上运转。
针对本次开发,需求装置arm-linux-gcc-3.4.1以及armv4l-tools东西链。在装置结束后,牢记要将两者的途径别离增加到体系途径$PATH中。
引导程序
关于计算机体系来说,从开机上电到操作体系发动需求一个引导程序。嵌入式linux体系相同离不开引导程序,这个引导程序叫做 Bootloader[1]。经过这段小程序,能够初始化硬件设备、树立内存空间的映射表,然后树立恰当的体系硬件环境,为终究调用操作体系内核做好准 备。
vivi[4]是韩国MIZI公司为其arm9系列产品而研制的Bootloader,小而灵活,这儿选用它作为小型Linux体系的Bootloader。
首要要修正vivi源代码中的Flash分区信息,新的分区信息如表1所示。
依据表1,在vivi源码arch/s3c2410/smdk.c文件中作出相应的修正。
然后在装备菜单中导入smdk2410的默许装备,编译成功将在vivi源代码目录下生成所需的Bootloader文件,文件名为vivi。
接着,便可把vivi下载到方针板Flash的相应方位。
内核
·修正内核
首要,修正内核源码linux-2.6.19下的Makefile文件,指定方针代码类型与编译器:SUBARCH :=arm;CROSS_COMPILE:=/usr/local/arm/3.4.1/bin/arm-linux-。
然后,在linux-2.6.19/arch/arm/mach-s3c2410/common-smdk.c中依据表1修正内核中的Flash分区 信息。这儿提示读者,2.6.16(含)曾经内核的源码中没有Flash分区信息,所以需求增加新的分区信息;而在2.6.17(含)今后内核的源码中已 含Flash分区信息,需求的仅仅修正分区信息。
内核Flash分区信息有必要与vivi的Flash分区信息相一致。由于,vivi的Flash分区中的地址是内核及文件体系下载到Nand flash的真实地址;而内核在发动时读的却是内核Flash分区设定的地址;所以,若两者不同,则很可能导致不能正常发动内核或读取文件体系。
终究,修正linux-2.6.19/drivers/mtd/nand/s3c2410.c,制止Nand flash过失检测:chip->eccmode = NAND_ECC_NONE;。
·内核的装备编译
在装备菜单中导入内核对smdk2410的默许装备,再在此根底上挑选所需的功用。如Nand Flash及MTD设备的支撑,Cramfs文件体系的支撑等。
装备结束,在终端输入编译指令“make”进行编译。若内核源码编译成功,将在linux-2.6.19/arch/arm/boot/下生成内核映像文件zImage。
终究,在vivi指令提示形式下运用下载指令,将内核映像zImage加载到开发板Flash中的恰当地址。
根文件体系
Linux体系中的文件和设备是经过文件体系来安排的。文件体系的存在使得数据和设备能够被有用而透明地存取拜访。一个linux的最简根文件体系应该包含支撑linux体系正常运转的根本内容,包含体系运用的软件和库,以及一切用来为用户供给根本支撑的架构和指令。
在根文件目录rootfs下树立bin、dev、etc、lib、proc、sbin、root、tmp等一系列必备的目录,把所需的装备文件、动态 函数库放到相应的目录。选用BusyBox是缩小根文件体系的好办法。BusyBox以很小的体积集成了最常用的linux指令和运用程序,大大简化了制 作linux根文件体系的进程。
有一点有必要指出的是,在2.6.12(含)之前的内核通常是用devfs来办理坐落/dev下的一切块设备和字符设备;但在2.6.13(含)之后的 内核已不支撑devfs,而转用udev来办理/dev下的设备,详见[5]。所以,针对2.6.19内核,要使体系发动后进入BusyBox控制台,还 需在/root
fs/dev下增加控制台设备文件:“[root@localhost dev]# mknod -m 600 console c 5 1”。
现在,linux现已能够支撑几十种文件体系格局,如常用的Cramfs、Jfss2、Yaffs等。Cramfs 是一种只读的闪存文件体系,能够维护体系的根本设置不被更改。根文件体系就运用Cramfs格局。
运用Cramfs制造东西mkcramfs把根文件目录制造成映像文件:rootfs.cramfs。
根文件体系制造完结,在vivi指令形式下把rootfs.cramfs下载到Flash的适宜方位。
至此,一个依据2.6.19内核的小型Linux体系便成功地制造结束,并移植到S3C2410开发板上了。
板子加电后便可看到体系的发动信息,终究进入BusyBox控制台。
结语
依据2.6内核的Linux凭仗其杰出的嵌入式特性与功用优越的arm9 S3C2410相结合,在嵌入式范畴有着宽广的运用六合。文章介绍了怎么制造一个依据Linux2.6.19内核的小型Linux体系,并将其移植到 S3C2410开发板上。小型体系的制造与移植是进行嵌入式开发的根底,有必要熟练掌握。