当前位置:首页 > 单片机 > 单片机
[导读]1引言目前 , 在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用 , 建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点。S3C2410是SAMSUNG公司基于ARM920T处理器内核开发的一款16/

1引言

目前 , 在嵌入式系统里基于ARM核的嵌入式处理器已经成为市场主流。随着ARM技术的广泛应用 , 建立面向ARM构架的嵌入式操作系统也就成为当前研究的热点。S3C2410是SAMSUNG公司基于ARM920T处理器内核开发的一款16/32位嵌入式处理器,运行频率高达200多M,具有MMU和高速缓存等丰富片上资源,是目前基于ARM920T内核的出货量最大的一款芯片。目前嵌入式操作系统也较多,如 Tor2nado 的VxWork、微软的 Windows CE等等。大量开发人员选择的却都是Linux,这是因为它源代码开放,可以轻松修改移植到自己的目标平台系统里使用。并且事实证明,效果令人满意。两者的结合必将在嵌入式系统的世界里打出一片天地。

2 Linux操作系统的移植

2.1移植的含义

要使得标准Linux能在ARM嵌入式处理器上运作,势必要经过移植 (porting) 的过程。所谓移植,就是让一套软件可以在一套选定硬件平台上正常运作,也就是要将平台相依 (platform dependent) 的部分做适当的修改。内核源码arch子目录包括了所有和平台体系结构相关的核心代码,它的每一个子目录都代表所支持的一种体系结构,arm就是关于我们所选处理器体系结构的子目录。我们的移植工作主要集中于此目录下。
2.2移植的具体实现

如果我们已经搭建起完整的交叉编译平台,移植工作便可开始了(以当前使用最广的linux-2.4为例,放于/usr/src/ linux-2.4.18之下)。

/ Makefile文件

一个工程往往包含很多的文件,按照一定的规则放在多个目录中。Makefile文件用来指定编译规则,例如哪些需要编译,哪些要先编译。在此处要做的是:

指定目标平台ARCH := $(shell uname -m | sed -e s/i.86/i386/ -e s/sun4u/sparc64/ -e s/arm.*/arm/ -e s/sa110/arm/)

设置为ARCH :=arm

指定交叉编译器CROSS_COMPILE =

设置为CROSS_COMPILE =arm-linux-

/arch/arm/Makefile

启动代码的产生要通过此一文件,由于2.4内核还没有对S3C2410的支持,自行加入如下代码

ifeq ((CONFIG_ARCH_ S3C2410),y)

TEXTADDR = xxx

MACHINE = s3c2410

Endif

TEXTADDR是内核的虚拟起始地址[6],也是内核最终运行地址,通常设为PAGE_OFFSET +0x8000,须根据实际情况相结合[2]。

/arch/arm/config.in

config.in是配置文件,决定了我们在配置菜单中看到的内容。自行加入$CONFIG_ARCH_S3C2410子选项[5]。

if [ "$CONFIG_ARCH_S3C2410" = "y" ]; then

comment'Archimedes/A5000 Implementations'

dep_bool 'SMDK (MERI TECH BOARD) '

CONFIG _S3C2410_SMDK//

$CONFIG_ARCH_S3C2410

//其他

fi

在if [ "$CONFIG_FOOTBRIDGE_HOST" = "y" -o

……

"$CONFIG_ARCH_SA1100" = "y" ]; then

define_bool CONFIG_ISA y

else

define_bool CONFIG_ISA n

fi

中依样加入"$CONFIG_ARCH_s3c2410" = "y"-o。

/arch/arm/boot/Makefile

ZTEXTADDR 是解压前image.rom的位置,ZRELADDR是内核解压并最终执行的位置。ZRELADDR与TEXTADDR之间符合如下映射关系:__virt_to_phys(TEXTADDR) == ZRELADDR[6]。

ifeq ((CONFIG_ARCH_s3c2410),y)

ZTEXTADDR = xxx

ZRELADDR = xxx

Endif

/arch/arm/boot/compressed/Makefile

依样加入 ifeq ("$(CONFIG_ARCH_S3C2410),y)

OBJS +=head-s3c2410.o

endif

/arch/arm/boot/compressed/head-s3c2410.s

此处需要自行加入内核解压前处理器初始化文件head-s3c2410.s,示例代码:

.section ".start", "ax"

__S3C2410_start:

bic r2, pc, #0x1f @清除pc相关位,放于r2

add r3, r2, #0x4000

1: ldr r0, [r2], #32

teq r2, r3

bne 1b

mcr p15, 0, r0, c7, c10, 4 @ 写回 Write Buffer

mcr p15, 0, r0, c7, c7, 0 @ 刷新 I & D caches


#if 0

@ 禁用MMU ,caches

……

#endif

mov r0, #0x00200000

1: subs r0, r0, #1

bne 1b

/arch/arm/kernel/ Makefile

依样将$(CONFIG_ARCH_2400) $(CONFIG_ARCH_2410) 加入

no-irq-arch :=$(CONFIG_ARCH_INTEGRATOR) $(CONFIG_ARCH_CLPS711X)

……

$(CONFIG_ARCH_AT91RM9200

并添加 obj-$(CONFIG_MIZI) += ecard.o

obj-$(CONFIG_ARCH_APM) +=apm2.o

/arch/arm/kernel/entry-armv.S

此文件主要定义CPU初始化时中断处理部分[6],可参考处理器使用手册,按处理器使用要求设置。

/arch/arm/kernel/debug-armv.S

此文件用于最基本的串口调试功能[6],包括调试串口的地址初始化、发送、等待、忙状态定义等。使用此文件可以在启动过程中打印出相关信息。

/arch/arm/kernel/setup.c

在此文件中要根据使用的板子设置几个变量[5]。nr_banks指定了内存块的数量,bank指定了每块内存块的范围,PAGE_OFFSET是内存起始地址,MEM_SIZE是内存的大小。PAGE_OFFSET,MEM_SIZE要在/include/asm-arm/arch-s3c2410中定义。

/arch/arm/mm/mm-armv.c

此文件用于与硬件相关的内存管理,如初始化内存页表内存映射等。

将init_maps->bufferable = 0;改为 init_maps->bufferable = 1;

/arch/arm/mach-s3c2410

建立相应目录并按照处理器使用要求编写irq.c,mm.c,time.c,arch.c,Makefile,分别实现中断控制器的初始化,地址的虚实映射关系,时钟中断和实时时钟处理以及有关Ramdisk使用参数等的设置。

/include/asm-arm/arch-s3c2410

此目录下定义用到的头文件。

至此移植工作基本完成,再进行如下编译过程,即可得到我们需要的映像文件[4]。

make dep; make clean; make zImage

3完整系统的构成

要想让linux真正跑起来,还需要根文件系统的支持,常用的方法是Ramdisk。Ramdisk 是通过将计算机的内存(RAM)模拟作设备来创建和挂装文件系统的一种驱动器机制。一般应包括以下目录内容: /dev(设备文件目录); /proc (proc 文件系统目录);/etc(系统配置文件的目录); /sbin(系统程序的目录);/bin(基本应用程序目录);/lib(共享函数库的目录);/mnt (装载其他磁盘节点的目录);/usr(附加应用程序的目录)[3]。

除此之外一个完整的嵌入式系统还要有引导代码,如vivi,u_boot等。Bootloader也需要移植与编译,在此并不详述。以上三块内容都准备好,对FLASH做好区间的划分[1]以后,便可以用 FLASH 烧写工具依次将Bootloader,内核以及根文件系统烧写到 FLASH里。然后就可以启动系统了。

系统从0 地址处开始执行Bootloader。Bootloader做完相关硬件初始化工作之后从 FLASH里把压缩的内核映象复制到SDRAM内并且把根文件系统所在地址参数传递给内核[1]。内核复制到SDRAM之后进行内核解压启动。内核启动过程中根据 Bootloader传递过来的地址参数去寻找根文件系统 , 将其加载到嵌入式系统上。这样,整个Linux被引导启动起来 , 进入正常工作状态。

4结束语

本文作者创新点:现在采用较为普遍的2.4版本的Linux并没有包含进对S3C2410的支持,给基于此的嵌入式系统的开发带来不便。本文在了解了移植过程中普遍存在的问题和作者经验教训积累的基础上,详尽分析了如何将Linux2.4移植到ARM平台的嵌入式系统上的主要技术,使得该系统可以很好的支持目标平台,并且移植后的Linux 很好的保留了原有的工作稳定的特点。在移植过程中强调其原理与可操作性,对加深对于Linux内核的理解和开发嵌入式系统是十分重要的,对于开发其他嵌入式系统具有参考意义。

参考文献 ( References)

[1]刘晶晶,基于ARM-Linux嵌入式系统引导程序的设计[J],微计算机信息,2006,2-2:123-125

[2]李明,ARM Linux 的移植过程及分析,电子设计应用[J],2003,7:55-57

[3]徐虹等,操作系统实验指导[M],北京:清华大学出版社,2002,5

[4]张杰,曹卫华,吴敏,施卫强,基于S3C2410的Linux移植[J],微机发展, 2005(15),6:142-144

[5]孙天泽,袁文菊,张海峰,嵌入式设计及Linux驱动开发指南[M],北京:电子工业出版社,2005,9

[6]Wookey and Tak-Shing,Porting the Linux Kernel to a New ARM Platform,SOLUTIONS JOURNAL,2002,4:52-57


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

上海2023年2月16日 /美通社/ -- 近日,诺华中国宣布与中国红十字基金会正式启动"中国地中海贫血救助项目"广西地区专项援助,将在当地定向资助困难家庭地中海贫血患儿,同时通过相关医生培...

关键字: BSP 控制 移植 大众

北京2022年12月7日 /美通社/ -- 2022年12月3日,由高博医学(血液病)广东研究中心南方春富(儿童)血液病研究院、南方医科大学南方医院共同主办的高博医学论坛·华南造血干细胞移植论坛通过线下线上...

关键字: 移植 HD PID 血细胞

捐款近4000万 上海2022年12月7日 /美通社/ -- 2022年12月7日下午,中芯国际"芯肝宝贝计划"十年纪念暨2022年度捐赠仪式在上海仁济医院举行。十年来,该项目捐赠善款总额近4000...

关键字: 中芯国际 移植

北京2022年11月14日 /美通社/ -- 2022年10月,高博医学(血液病)北京研究中心北京高博博仁医院造血干细胞移植科迎来了五周岁"生日"。在吴彤主任带领下,移植科于2017年从无到有,历经五...

关键字: 移植 OS MT CD

上海2022年11月6日 /美通社/ -- 在第五届中国国际进口博览会期间,武田制药携5款创新产品亮相武田罕见遗传与血液疾病领域专场发布会。用于移植后抗巨细胞病毒(CMV)感染或疾病治疗[1]的马立巴韦[2]迎来&quo...

关键字: 移植 BSP CD FDA

亘喜生物科技集团宣布正在中国开展的、旨在全面评估GC007g治疗复发/难治性急性B淋巴细胞白血病效果的1/2期注册性临床试验顺利进入2期研究阶段,首例入组患者已给药。GC007g是亘喜生物旗下的一款靶向CD19的供者来源...

关键字: 移植 CD

北京2022年9月9日 /美通社/ -- 诺诚健华(香港联交所代码:09969)今天宣布,tafasitamab (Minjuvi®)联合来那度胺治疗不适合自体干细胞移植 (ASCT) 条件的复发/难治弥漫性大B...

关键字: VI NJU BSP 移植

苏州2022年8月19日 /美通社/ -- 近日,华中科技大学同济医学院附属协和医院心外科董念国教授团队运用与心擎医疗联合研发的短中期体外全磁悬浮心室辅助装置MoyoAssist®,成功救治三例危重的终...

关键字: 磁悬浮 移植 IC 静脉

上海2022年8月17日 /美通社/ -- 2022年8月16日,聚焦于基因和细胞治疗的上海邦耀生物科技有限公司(以下简称"邦耀生物")宣布,其...

关键字: CD 移植 BSP ISP

苏州2022年6月28日 /美通社/ -- 2022年6月23日,首都医科大学附属北京安贞医院(以下简称安贞医院)与苏州心擎医疗技术有限公司(以下简称心擎)在北京、苏州两地线上连线,隆重召开体外心室辅助系统临床...

关键字: BSP 磁悬浮 创始人 移植
关闭
关闭