嵌入式Linux系统在S3C2410上的移植实现_第1页
嵌入式Linux系统在S3C2410上的移植实现_第2页
嵌入式Linux系统在S3C2410上的移植实现_第3页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、嵌入式Linux系统在S3C241 0上的移植 实现1 Linux 内核和实验系统简介嵌入式操作系统作为大多数嵌入式应用系统的软件平台, 它 管理着系统的资源,为应用 软件提供各种必要的服务。在嵌入 式应用系统中使用嵌入式操作系统,已是大势所趋。目前 嵌入 式操作系统的种类繁多, 但 Linux 以其源代码开放和可移植性强 等特点, 被广泛使用。 本文将介绍如何将内核版本为 2.4.18 的 Linux移植到基于ARM920T的S3C2410处理器上。1.1 Linux 操作系统内核Linux 操作系统主要由内核、 shell 、文件结构组成,其中 内核是灵魂, 负责整个系统的 内存管理、 进

2、程调度和文件管理。 Linux内核与大部分UNIX内核一样是单内核体系结构的,能够根据需要定制内核映像的尺寸, 具有很大灵活性, 不需要重新编 译内核和引导就能检验 新的内核组件,这个特性对于嵌入式而 言是非常有好处的,方便用户构筑自己的个人内核。 Linux 内 核有五个主要的子系统组成:进程调度、内存管理、虚拟文件系 统、网络接口和进 程间通信。本文将对内核版本为 2.4.18 的 Linux 进行移植,其内核代 码分布如图 1 所示。(1) /arch 目录包含了目前 Linux 支持的硬件结构如 i386 、alpha 、arm 等的内核代码;(2) /drives目录包含了内核中所有

3、的设备驱动程序;(3) /fs 目录包含了所有的文件系统的代码;(4) /include目录包含了建立内核代码所需要的大部分库文件,这个模块利用其它模块重建 内核;(5) /init 目录包含了内核的初始化代码, 内核从此处运行;(6) /ipc 目录包含了进程间通信代码;(7) /kernel 子目录包含了主内核代码;(8) /mm目录包含所有独立于 CPU体系结构的内存管理代码;(9) /net 目录包含了和网络相关的代码, 如 ipv4 、ipv6 等。 一般在每个目录下都有一个 .depend 文件和一个 Makefile文件,这两个文件都是编译时使用 的辅助文件。1.2 S3C241

4、0 处理器S3C2410是SAMSUN公司基于ARM920处理器内核开发的一款16/32位嵌入式处理器,运行 频率高达200多MHz具有MMU 和高速缓存等丰富片上资源, 可以广泛用于 PDA、internet 设备 和手持式设备。其片上集成的功能主要包括以下几个方面:(1) 1.8V ARM 内核, 3.3V 存储器, 3.3V 外部 I/O, 具有 16kB指令缓存/16kB数据缓存和MMU的微处理器;(2) 外部存储控制器(SDRAM控制和片选逻辑);(3) LCD控制器(支持上到4k色的STN和 256k色的TFT), I通道LCD专用DMA(4) 具有外部请求引脚的 4 通道 DMA

5、;(5) 3 通道 UART, 2 通道 SPI;(6) 1通道IIC总线控制器,1通道US总线控制器;(7) 1.0 版本的SD主机接口和兼容的2-11版本的Multi-Media 卡协议;(8) 2 端口 USB 主机,1 端口 USB 设备(USB1.1);(9) 4通道PWM定时器,1通道内部定时器;(10) 看门狗电路;(11) 117 个通用 I/O 口, 24通道外部中断源;(12) 电源控制 :常规、缓慢、空闲和断电模式;(13) 8通道10位ADC和触摸屏接口;(14) 具有日历功能的实时时钟 RTC;(15) 具有锁相环的片上时钟发生器。2 将 Linux 移植到 S3C2

6、4102.1 移植思路首先要为 Linux 设计一个 BootLoader ,通过 BootLoader 来 初始化硬件,引导 Linux 运行。 Bootloader 设计可以在 ads 中 实现。然后,针对硬件环境和设计的 BootLoader 修改 Linux 内 核。接下来,在 Linux 操作系统下建立交叉编译环境。最后,配 置、编译、连接 Linu x ,下 载编译得到的映像文件到 Flash , 通过 BootLoader 来启动嵌入式操作系统 Linux 。2.2 Boot Loader 的设计引导加载程序通常称为 Boot Loader ,就是在操作系统内核 运行之前运行的一

7、段小程序 。通过这段小程序,初始化硬件设 备、建立内存空间的映射图, 从而建立适当的系统软硬件 环境, 为调用操作系统内核做好准备。本系统 Boot Loader 的第一阶段主要完成基本的硬件初始化,用汇编语言实现:关闭 w atchdog,屏蔽所有中断;设 置处理器时钟和工作频率,CPU工作频率为200 M Hz;初始化 外部寄存器;初始化堆栈指针SP;拷贝Boot Loader的第二阶段到RAM空间 中,使用一个 跳转语句跳转到第二阶段的 main 入口函数。在完成以上操作后就为 main 函数的运行建立起 了 一个基本的环境。第二阶段用C语言完成:通用I/O 口的设置;完成内存 映射初始

8、化和内存管理单元初 始化: men_map_init();mmunit();这两个函数在/arch/s3c2410/mmu.c 中;初 始化 mtd 设备: mtd_dev_init(); 这个函数在 /drivers/mtd/maps/s3c2410_flash.c 中;拷贝 flash 中的 kernel映像和根文件系统映像到 RAM空间中;跳转到内核的 第一条指令 处。跳转时需要满足下列条件:R0为0; R1为机器类型ID;禁止中断(IRQ和FIQ); C PU设置 为SVC模式(SVC 是供操作系统使用的一种保护模式);关闭MMU关闭数据Cache。至此 Boot Loader 的任务

9、结束。2.3 Linux 内核的修改假定内核代码放在 /usr/src/Linux-2.4.18 目录下( 1) 打开根目录下的 Makefile 文件 此文件用来指定编译 规则,例如哪些需要编译,哪些 需要先编译。指定目标平台: Arch=arm; 指定交叉编译器:添加 CROSS_COMPILE=arm-linux。-(2) 打开 /arch/arm 目录下的 Makefile 文件 启动代码的 产生需要通过此文件,由于2.4内 核还没有对S3C2410的支持, 在此添加如下代码:ifeq(CONFIG_ARCH_S3C2410),y)TEXTADDR=0xC0008000MACHINE=

10、s3c2410EndifTEXTADD是内核的最终运行地址,该位置一般在RAM区起始地址偏移0x8000处(RAM起始地址 到偏移0x8000之间的32KB 空间中存放一些全局数据结构如启动参数、内存页表等信息)。(3) 打开 /arch/arm/boot 目录下的 Makefile 文件ZTEXTADD是解压前image.rom的位置,ZRELADDR!内核解压 并最终执行的位置。ZRELADD与 TEXTADD之间符合如下映射关 系:_v irt_to_phys(TEXTADDR)=ZRELADDR.ifeq(CONFIG_ARCH_s3c2410),y)ZTEXTADDR=0XC0008

11、000ZRELADDR=0X30008000endif(4) 打开 /arch/arm/boot/compressed目录下的 Makefile文件,添加 ifeq( “$(CONFIG_A RCH_S3C2410),y)OBJS+=head-s3c2410.oendif(5) 打开/arch/arm/co nfig.in 此文件是配置文件,决定了在配置菜单中看到的内容。添加$CONFIG_ARCH_S3C24子选项If “$ CONFIG_ARCH_S3C24”10= “y” ;thenComment Archimedes/A5000 Implementations Dep_bool SMD

12、K (MERI TECH BOARD)CONFIG_S3C2410_SMDK/$CONFIG_ARCH_S3C2410/ 其他fi在 if “$CONFIG_FOOTBRIDGE_H”OS=T“y” -o“$CONFIG_ARCH_SA1”10=0“y” ;then define_bool CONFIG_ISA y elsedefine_bool CONFIG_ISA nfi中依样添加“ $CONFIG_ARCH_s3c24”10=“y”。(6) 打开 /arch/arm/boot/compressed/head-s3c2410.s 此 处需要添加内核解压前处 理器初始化文件 head-s3c

13、2410.s ,示 例代码如下:.section # “.start ”,“ax”_S3C2410_start:bic r2,pc,#0x1f 清除 pc 相关位,放于 r2add r3,r2,#0x4000l:ldr r0,r2,#32teq r2,r3bne 1bmcr p15,0,r0,c7,c10,4 写回 Write Buffermcr p15,0,r0,c7,c7,0 刷新 I&D caches#if 0禁用 MMU,caches#endifmov r0,#0x00200000l:subs r0,r0,#1bne 1b依次将 $(CONFIG_ARCH_241加)入(7) 打开 /

14、arch/arm/kernel/Makefile no-irq-arch:=$(CONFIG_ARCH_INTEGRATOR)$(CONFIG_ARCH_CLPS711X)$(CONFIG_ARCH_AT91RM9200并添加 obj-$(CONFIG_MIZI)+=ecard.o obj-$(CONFIG_ARCH_APM)+=apm2.o(8) 打开 /arch/arm/kernel/e ntry-arm v.s此文件主要定义CPU初始化时中断处理部分,可参考处理器使用手册,按处理器使用要求配置。(9) 打开 /arch/arm/kernel/debug-arm v.s 此文件用于 最基本

15、的串口调试功能,包括 调试串口的地址初始化、发送、 等待、忙状态定义等。使用此文件可以在启动过程中打印出 相 关信息。(10) 打开/arch/arm/kernel/setup.c此文件中要根据使 用的板子设置几个变量。 nr_b a nks 指定了内存块的数量, bank 指定了每块内存块的范围,PAGE_OFFSE是内存起始地址, MEM_SIZ是内存的大小,PAGE_OFFSE和MEM_SIZ要在 /include/asm-arm/arch-s3c 2410 中定义。(11) 打开/arch/arm/mm/mm-arm v.c此文件用于与硬件 相关的内存管理,如初始化内 存页表内存映射等

16、。将 init_maps-bufferable=0; 改为 init_maps-bufferable=1 。(12) 打开 /arch/arm/mach-s3c2410 建立相应目录并按照 处理器使用要求编写 irq.c 、mm.c 、time.c 、arch.c 、Makefile , 分别实现中断控制器的初始化,地址的虚实映射关系,时钟 中 断和实时时钟处理以及有关 Ramdisk 使用参数等的设置。(13) 打开 /include/asm-arm/arch-s3c2410此目录下定义用到的头文件。2.4 编译 Linux 内核在完成上述工作后, 再进行如下编译, 即可得到我们需要的 映像

17、文件。(1) make clean :该命令清除以前构造内核时生成的所有 目标文件、模块和临时文件。(2) make dep:该命令搜索Linux输出与源代码之间的依 赖关系,并以此生成依赖文件。( 3) make menuconfig :该命令是用来调用菜单式配制内 核界面。(4) make zlmage :该命令用来编译内核,生成压缩的Linux 内核目标代码 zImage 文件。( 5) make modules :该命令编译模块驱动程序2.5文件系统的生成一一创建 JFFS2文件系统文件系统是 Linux 系统必备的一个部分,本系统使用mkfs.jffs2 工具来创建 JFFS2 文件系 统。首先建立上述的 /bin 、 /sbin 等目录,然后拷贝命令工具到 /bin 文件夹, 拷贝系统控制 程序到 /sbin 目录下,拷贝应用程序运行时所需要的库到 /lib 文 件夹,库文件可以从 pc 机上 的交叉编译根据安装目录下拷贝, 如 libc-2.2.2.so、 libcrypt-2.2.2.so、libm-2.2

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论