引言
ARM9 S3C2410微处理器与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控制台,还需在/rootfs/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开发板上。小型系统的制作与移植是进行嵌入式开发的基础,必须熟练掌握。
参考文献:
1、 孙纪坤、张小全,‘嵌入式linux系统开发技术详解——基于ARM’,人民邮电出版社,2006.
2、 陈赜,‘ARM9嵌入式技术及Linux高级实践教程’,北京航空航天大学出版社,2005
3、 中国liunx公社论坛上帖子,‘Linux2.6.10以后版本对S3C2410的支持’.
4、 mizi公司网站上有关vivi的介绍,http://www.mizi.com/developer/s3c2410x/Linuette_chap_5_en.html
5、 有关udev的介绍:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.htm
关键字:引导 编译 映射 代码
引用地址:基于2.6.19内核的小型Linux系统制作与移植
ARM9 S3C2410微处理器与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控制台,还需在/rootfs/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开发板上。小型系统的制作与移植是进行嵌入式开发的基础,必须熟练掌握。
参考文献:
1、 孙纪坤、张小全,‘嵌入式linux系统开发技术详解——基于ARM’,人民邮电出版社,2006.
2、 陈赜,‘ARM9嵌入式技术及Linux高级实践教程’,北京航空航天大学出版社,2005
3、 中国liunx公社论坛上帖子,‘Linux2.6.10以后版本对S3C2410的支持’.
4、 mizi公司网站上有关vivi的介绍,http://www.mizi.com/developer/s3c2410x/Linuette_chap_5_en.html
5、 有关udev的介绍:http://www.kernel.org/pub/linux/utils/kernel/hotplug/udev.htm
上一篇:8位机嵌入式TCP通信速度的研究
下一篇:嵌入式实时操作系统设计探讨
推荐阅读最新更新时间:2024-05-13 18:38
详细介绍构建ARM Linux的交叉编译工具链
学习目标: ● 了解交叉编译工具链 ● 理解分步构建交叉编译工具链的方法 ● 学会使用Crosstool工具构建交叉编译工具链 2.1 交叉编译工具链介绍 读者可能会有疑问,为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程式,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程式,编译得到的程式在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。这种方法在异平台移植和嵌入式研发时非常有用。相对和交叉编译,平常做的编译叫本地编译,也就是在当前平台编译,编译得到的程式也是在本地执行。用来编译这种跨
[单片机]
STM8 CPU寄存器映射
CPU寄存器在STM8的地址空间映射如表2所示。只有CPU的调试模块才可以使用这些寄存器的 地址对其操作,在CPU核内执行的指令只能通过直接使用寄存器名才可以读写这些寄存器。 (表2:STM8 CPU寄存器映射)
[单片机]
IAR FOR STM8 同一个工程芯片选择003F3可以编译003K3提示空间不足
同一个工程文件,选择103F3可以编译通过,但是选择103K3便提示空间不足 百思不得其解,查阅大量资料无果。最后在IAR工程里面找到了配置文件 打开003f3的配置文件和003K3配置文件进行对比,其余都一样,唯独程序空间003K3是从地址0X9000开始,少了1K,不知道为何要这样设置,明明两个芯片空间大小和结构一模一样。 将003K3的配置文件地址改成0x8000开始,重新编译,一切正常。 编译通过,程序空间总共占用5419b。 问题:这样操作后将程序下载到电路板上不知道会不会出错,有待验证。个人猜测应该没问题,是IAR的错误。
[单片机]
程序编译生成的Hex、Bin、axf和elf格式
一、Bin Bin文件是最纯粹的二进制机器代码,按照程序执行顺序存放。编译器把高级语言翻译成汇编,再把汇编代码翻译成二进制机器代码保存成bin文件,因此Bin是没有经过处理或附加信息程序原本的大小。Bin文件内部没有地址标记,因此下载程序的时候要指定bin的烧写地址,虽然大部分的单片机是从0地址开始执行程序,可也有些单片机不是,比如LPC1857。 二、Hex Hex要比Bin高级一点,它增加了烧写地址、校验等信息。HEX文件由“记录(RECORD)”组成,每一行代表一个记录。每条记录都由一个冒号“:”打头,其格式如下: :BBAAAATTHHHH...HHHHCC BB:本记录中包含数据的字节
[单片机]
可在线更新应用程序代码的DSP自举模块
针对现有DSP自举模块普遍存在程序代码更新不便的缺陷,提出了一种可便捷高效地在线更新用户应用程序代码的DSP自举模块。该模块由基于LabVIEW的图形用户界面(GUI)软件与C8051F340单片机构成。GUI软件完成DSP应用程序代码的格式转换,并通过驱动USB将转换完成的程序代码传送给C8051F340。C8051F340通过其片上USB外设接收DSP程序代码并存储于片上FLASH中,同时借助标准串行总线控制DSP完成应用程序代码的自举操作。该模块采用在线方式,可一键实现DSP应用程序代码的更新升级与自举操作。 TMS320VC54x系列DSP作为一种低功耗高速处理器在消费电子、通信等领域应用广泛 。通常为实现DSP程序代码
[嵌入式]
51单片机 HCSR04超声波测距仪 基础代码
_ :超声波测距仪模块: _ :51单片机,11.0592MHz晶振,将采集数据发送到串口的基础例子: _ :代码: 1 /***********************************************************************************************************/ 2 //HC-SR04 超声波测距模块 DEMO 程序 3 //晶振:11。0592 4 //接线:模块TRIG接 P1.2 ECH0 接P1.1 5 //串口波特率9600 6 /*****************************************
[单片机]
44B0启动代码INIT.S分析
;**********OPTIONS******************************* ;_RAM_STARTADDRESS EQU 0xc000000 _ISR_STARTADDRESS EQU 0xc7fff00 ;GCS6:64M DRAM/SDRAM 中断起始地址,这个地址就直接 ;_ISR_STARTADDRESS EQU 0xc1fff00 ;GCS6:16M DRAM ;BUSWIDTH; 16,32 GBLA BUSWIDTH 定义一个全局变量,数据型变量,变量名为BUSWIDTH BUSWIDTH SETA 16 把这个全局变量BUSWIDTH赋值为16位的宽度总
[单片机]
Portland Group发布新版高性能计算编译器及开发工具
中国,2012年4月20日 ——意法半导体全资子公司Portland Group®发布支持 Linux、OS X和Windows三大操作系统的2012版PGI®高性能并行编译器及开发工具系列产品正式上市。PGI 2012是首个支持OpenACC指令式编程模型的通用版编译器,可用于具有NVIDIA CUDA功能的图形处理器(GPU)编程。PGI 2012还是市场上首个整合PGI CUDA C/C++ 编译器全部功能的编译器,可用于英特尔(Intel)和超微(AMD)的多核x64 CPU编程。此外,PGI 2012版开发工具还针对多核x64处理器的高性能计算机系统进行了多项性能和功能升级。 Portland Group总监Doug
[嵌入式]
- 热门资源推荐
- 热门放大器推荐
- ICCV2023论文汇总:First Person (Egocentric) Vision 第一人称视觉(自我中心视觉)
- ICCV2023论文汇总:Faces and Gestures(人脸和手势识别)
- ICCV2023论文汇总:Embodied Vision: Active Agents, Simulation(具身视觉:主动代理、模拟)
- ICCV2023论文汇总:Efficient and Scalable Vision(高效和可扩展视觉)
- 控制系统计算机辅助设计 — MATLAB语言与应用
- 东芝1200V SIC SBD “TRSxxx120Hx系列” 助力工业电源设备高效
- 晶体振荡器设计与温度补偿
- ADS信号完整性仿真与实战