移植标准Linux到S3C2410

发布者:WhisperingSoul最新更新时间:2012-05-17 来源: 微计算机信息 关键字:嵌入式系统  Linux  S3C2410  处理器 手机看文章 扫描二维码
随时随地手机看文章

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

[page]

#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

关键字:嵌入式系统  Linux  S3C2410  处理器 引用地址:移植标准Linux到S3C2410

上一篇:一种应用于ARM7的CMOS图像采集系统
下一篇:基于Freescale Kinetis的农田灌溉控制板卡的设计

推荐阅读最新更新时间:2024-03-16 12:59

系统分析S3C2410的中断处理
S3C2410 中断 在介绍2410的中断处理之前,我们不得不先看看先把ARM的异常向量表(ExcepTIon Vectors),下面对异常向量表(ExcepTIon Vectors),做一个简单的介绍: ARM的异常向量表一般存放在0x00000000处,ARM920T能处理有7个异常,他们分别是:Reset,Undefined instrucTIon,Software Interrupt,Abort (prefetch),Abort (data),IRQ,FIQ 下面是系统源码片段: _start: b Handle_Reset b HandleUndef b HandleSWI b HandlePrefetchAbort
[单片机]
【嵌入式】arm-linux-gcc/ld/objcopy/objdump参数概述
arm-linux-gcc   -o 只激活预处理,编译,和汇编,也就是他只把程序做成obj文件   -Wall 指定产生全部的警告信息   -O2 编译器对程序提供的编译优化选项,在编译的时候使用该选项,可以使生成的执行文件的执行效率提高   -c 表示只要求编译器进行编译,而不要进行链接,生成以源文件的文件名命名但把其后缀由 .c 或 .cc 变成 .o 的目标文件   -S 只激活预处理和编译,就是指把文件编译成为汇编代码 arm-linux-ld   直接指定代码段,数据段,BSS段的起始地址 -Ttest startaddr -Tdata startaddr -Tbss startaddr
[单片机]
Linux向目标系统AT91RM9200的移植方法与应用优势分析
1.引言 目前,在嵌入式系统里基于ARM微核的嵌入式处理器以其功耗低,功能强大的优点已经成为市场的主流。与此同时,在网络上发展起来的Linux操作系统,以其功能强大,开放源代码,支持硬件种类众多的特点,越来越受到人们的青睐。然而如何把Linux操作系统移植到ARM平台上却成了一个重点,也是一个难点问题。 嵌入式Linux系统包括引导程序(Bootloader),内核(kernel)和根文件系统三个部分,其开发流程如图1所示:嵌入式Linux 移植到特定的硬件平台上,一般需要以下五个步骤: (1)前期准备包括从网站上下载嵌入式Linux的源码包, 搭建交叉编译开发环境,配置主机的开发环境等 (2)配置Bootloader,并将
[单片机]
<font color='red'>Linux</font>向目标系统AT91RM9200的移植方法与应用优势分析
用多相DC-DC转换器驱动高性能ASIC和微处理器
   多相DC-DC转换器引出   当今的高性能ASIC和微处理器己广泛应用工控、通信航天等各个领域。但由于它的功率消耗较高,有时高达150W甚至超过,对于1V至1.5V的电源电压,这些器件所需的电流很容易超出100A。从而引起设备体积与重量大以及应用上一系列麻烦。为此,如何解决这些器件供电方案,是设计人员面临的新问题。   而采用多相DC-DC转换器供电不乏为是一种新型高效供电技术,为什么呢?这是因为可以应用可裁减电源控制器芯片,来设计出多相DC-DC转换器,而控制器芯片上基于PLL(锁相环电路)的时钟发生器使多个器件(高性能ASIC和微处理器)能够同步工作,其裁减架构又可允许几个控制器并联且同步工作。据此就对多相DC-DC
[电源管理]
基于ARM和DSP架构的多处理器高速通讯协议设计
  目前,建立在宽带网络的多媒体应用日渐增多,高性能的DSP也不断推陈出新,由于DSP具备非常灵活的编程运算能力,针对不同的编码标准,采用不同的编码软件,加上合适的芯片价位,在视频会议终端、视频监控服务器、IP数字机顶盒等产品中已被普遍采用。   虽然DSP具备众多的优点, 但却不适合作系统控制,因为DSP通常没有强大的操作系统,没有完备的网络协议栈和可靠的文件系统,DSP架构在作控制指令时无法并行处理,分支判断和高速缓存没命中(cache miss)都会使运行效率极大降低。而这些正好是嵌入式RISC处理器的强项,比如ARM和MIPS系列,所以现在很多国际知名的半导体公司如PHILIPS和TI都推出了整合了RISC处理器和DSP的S
[单片机]
基于ARM和DSP架构的多<font color='red'>处理器</font>高速通讯协议设计
配置arm linux Qt开发环境
配置arm linux Qt开发环境的过程相对比较复杂,所以有必要把步骤记录一下。 版本:Ubuntu10.04 LTS / Qt SDK 4.7.3 / arm-linux-gcc 4.4.3 一、安装arm-linux-gcc编译器 1.下载arm-linux-gcc-4.4.3, http://ishare.iask.sina.com.cn/f/13836544.html 2.解压后复制到/usr/local/toolschain目录,其他目录也可以,本文以此路径为例 3.使用 sudo gedit /etc/enviroment 修改PATH,添加/usr/local/toolschain/4.4.3/bin:。注意
[单片机]
基于3c2410的linux2.6.22移植(5)
三、 网卡和LCD驱动的移植1. 网卡驱动移植: 这块板使用的是DM9000的网卡芯片,驱动的源代码在内核源代码的目录中可以找到: $root@host:/home/arm/# cd kernel/linux-2.6.22 $root@host:/home/arm/kernel/linux-2.6.22# cd drivers/net $root@host:/home/arm/kernel/linux-2.6.22/drivers/net# ls dm* dm9000.c dm9000.h 修改dm9000.c: $root@host:/home/arm/kernel/linux-2.6.22
[单片机]
基于ARM微处理器的机载语音告警系统设计
飞机语音告警系统是新型飞机必备的一种机载设备,其作用是将飞机当前的工作状态、危险状况或者通过数据链获取的作战任务命令,实时以语音方式告知飞行员。 在飞机飞行过程中飞行员一般是通过安装在座舱里的操作台、仪表和告警信号灯来了解飞机各个系统的工作状态。由于飞行员在飞行时为完成相应的飞行任务,注意 力高度集中在飞行高度、速度和雷达参数等数据信息上,对飞机故障信息的注意力要相对弱一些,这样就会出现飞行员不能及时地对故障采取措施,从而导致严重的 飞行事故。同时,目前大多数新研制或改装的飞机都有数据链系统,许多作战任务命令不再单纯依靠地面指挥人员或长机的语音传达,可通过数据链或根据战场态势 产生,并及时告知飞行员,因此,针对某新型飞机的研制要
[单片机]
基于ARM微<font color='red'>处理器</font>的机载语音告警系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved