Linux体系结构及嵌入式Linux的移植方法_魏平_嵌入式linux移植简介

其他范文 时间:2020-02-28 17:42:14 收藏本文下载本文
【www.daodoc.com - 其他范文】

Linux体系结构及嵌入式Linux的移植方法_魏平由刀豆文库小编整理,希望给你工作、学习、生活带来方便,猜你可能喜欢“嵌入式linux移植简介”。

HINE-END mm.c中建立地址的虚实映射关系,irq.c实现中断控制器的初始化,time.c和Linux/include/asm-arm/ arch-s1s65k/time.h实现时钟中断和实时时钟处理.Arch.c下的s1s65k-fixup函数可以对一些参数进行修

改,例如命令行字符串、内存起始地址、ramdisk映象的起始地址和结束地址等.上述代码修改完成后可以开始设置中断,中断处理中有2部分比较重要,一是中断控制器,二是时钟

中断.init-IRQ()函数初始化中断,Linux/arch/arm/mach-s1s65k/irq.c和Linux/arch/arm/kernel/entry-armv.S 中都包含与硬件体系统结构相关的中断处理函数.大多数系统都使用中断控制器处理中断,而中断控制器

与CPU的一根中断输入引腿相连,所以必须修改与中断控制器相关的代码,使之与内核的中断处理函数 相一致.Linux/include/asm-arm/arch-s1s65k/time.h中包含了与平台相关的时钟代码,ARM Linux内核需要100 Hz的定时中断.通过设置s1s65k芯片的时钟寄存器可以获得100Hz的中断.在时钟中断服务进程中,会调

用do-timer()函数,该函数对比较器进行写操作从而清除中断标志.中断设置正确后,内核移植已经完成大半工作,接着就要挂载根文件系统.如果在“make menuconfig”中

选择了CONFIG-BLK-DEV-RAM和CONFIG-BLK-DEV-INITRD,在Bootloader或s1s65k-fixup中正确指定 ramdisk的起始地址、大小以及ROOT-DEV,则内核启动时会以ramdisk作为根文件系统.根文件系统挂载

成功后,内核将打开控制台,尝试执行init进程,运行sh,如果串口驱动已好,则会在控制台上出现提示符

“#”.至此,内核移植完成.3 移植经验介绍

◇ 移植内核之前在Linux/arch/arm/kernel/debug-armv.S中实现printascii,Linux/kernel/printk.c中加入

/*Emit the output into the temporary buffer*/

va-start(args,fmt);

printed-len=vsnprintf(printk-buf,sizeof(printk-buf),fmt,args);

va-end(args);

printascii(printk-buf);这样在控制台起来之前就可以通过printk打印出信息.◇ 在程序中尽可能多的使用printk()打印语句,这样有助于调试.◇ 移植过程尽可能采用对比的方法,以一个最接近的代码为蓝本,参照其他类似代码进行修改.◇ 内核配置

如果想实现远程内核调试,可以在主机上运行GDB,内核实现stub,通过串口与开发板上的内核进行 交互.要想使用此功能,需在make menuconfig时将CONFIG-REMOTE-DEBUG设置为Y.在Linux/arch/arm/ kernel中编写gdb-stub.c,在串口驱动中实现putDebugChar(char ch)和getDebugChar()函数,在Linux/arch/ arm/kernel/trap.c的trap-init()中加入

#ifdef CONFIG-REMOTE-DEBUG

printk(”Setting debug traps-please connect the remote debugger.n”);

set-debug-traps();

breakpoint();

#endif 这样才能捕捉到断点及出错信息,并把信息传递给调试器.另外,只有产生断点,才能与主机上的调试器进 行通讯.◇ STUB远程调试要求

①Stub程序驻留在内核中,在系统完全启动之前启动stub.②Stub通过指定的Debug通讯协议(如GDB远程调试协议)与主机的Debug程序交互.③Stub接管目标机的udef exception handler.④Stub接管对目标机通讯口(串口、并口或网口)的控制.⑤实时调试要求目标机支持单步、断点等调试机制.129增刊魏 平等:Linux体系结构及嵌入式Linux的移植方法

编代码Linux/arch/arm/mm/proc-arm720.S包含针对CPU的操作,例如Icache,Dcache,TLB,CPU设置

等,S1S65000的CPU为ARM720,Linux代码中已有针对ARM720的代码,所以在S1S65000平台下这部分代 码基本不作修改.汇编代码Linux/arch/arm/kernel/head-armv.S是内核代码的入口,连接时它位于内核代码最前面,内核

从这儿执行,查找proceor和architecture类型、建立内核的初始化堆栈、建立临时页表,清除BSS段,然后

TLB和caches被刷新,最后进入start-kernel.mov r0,#F-BIT I-BIT MODE-SVC

@make sure svc mode

msr cpsr-c,r0@and all irqs disabled

bl--lookup-proceor-type

teq r10,#0@invalid proceor?

moveq r0,#'p' @yes,error'p'

beq--error

bl--lookup-architecture-type

teq r7,#0@invalid architecture?

moveq r0,#'a' @yes,error'a'

beq--error

bl--create-page-tables

adr lr,--ret@return addre

add pc,r10,#12@initialise proceor

@(return control reg)上述代码修改完成后,内核已经可以执行,进入start-kernel.asmlinkage void--init start-kernel(void)

{

char*command-line;

unsigned long mempages;

extern char saved-command-line[];

lock-kernel();

printk(Linux-banner);

setup-arch(&command-line);

printk(”Kernel command line:%s n”,saved-command-line);

parse-options(command-line);

trap-init();

init-IRQ();

sched-init();

} Linux/arch/arm/kernel/setup.c下的函数set-arch(char* *cmdline-p),setup-arch是特定板子相关的设

置函数,命令行字符串和内存起始地址作为参数传递到这个函数,ramdisk映象的起始地址和结束地址也在此

更新.Linux/arch/arm下对每一支持的开发平台有一子目录,S1S65000平台为mach-s1s65k子目录,存放与平台

相关的.c文件,同样在Linux/include/asm-arm下有arch-s1s65k子目录,存放与平台相关的.h文件.mach-s1s65k子目录一般包含arch.c,mm.c,irq.c,time.c,cpu.c等,arch.c中包含结构MACHINE-START,设置RAM 的物理地址、IO空间物理地址、IO虚拟地址、注册IO map和IRQ初始化函数等.代码如下: MACHINE-START(s1s65k,”S1S65000”)

MAINTAINER(”Phenix Wei”)

BOOT-MEM(0x30000000,0xfff00000,0xfa000000)

FIXUP(fixup-s1s65k)

MAPIO(s1s65k-map-io)

INITIRQ(s1s65k-init-irq)128东南大学学报(自然科学版)第34卷

负责实现各种标准的链路层、网络层和传输层协议;而设备驱动程序负责对网络硬件进行具体操作.5)进程间通信(Inter-Proce Communication)支持进程间各种通信机制.其通信手段主要有:信号、文

件锁、管道、等待队列、信号量、消息队列、共享内存、套接字.2 基于ARM平台的Linux的移植方法 图1 S1S65000硬件结构图

Linux内核与具体的目标平台相关,不同的目标平台 移植步骤基本一致,但移植的难度会有所差异,在此以

EPSON最新推出的S1S65000平台为例,介绍一下Linux内 核移植的一般过程[6].2.1 目标硬件平台的介绍

S1S65000是EPSON公司最新推出的一款基于

ARM720Tcore的网络处理器,包含Icache,Dcache,MMU, Bus Control,Interrupt Controller等.硬件结构见图1.硬件平台的RAM分布情况、ROM分布情况以及I/O 分布情况对操作系统的移植非常重要,因此在Linux移植 表1 EPSON S1S65000开发板的memory分布 类型起始地址结束地址大小

FLASH 0x00000000 0x003fffff 4M SRAM 0x20000000 0x201fffff 2M SDRAM 0x30000000 0x30ffffff 16M I/O 0xfffd0000 0xffffffff 之前应当明确知道系统memory的分布情况(见表1),然后 决定系统memory的使用.FLASHmemory是一种不挥发存储记忆体,在嵌入式系 统中常常用作存储需要永久保存的代码和数据,在本系统 中FLASH又分为如下区间: 0x00000000~0x0000ffff区间存放bootloader的二进制

代码,由于我们使用的是NOR型flash,所以这里的代码可以直接被CPU执行.0x00010000~0x000fffff区间存放Linux kernel的二进制代码.0x00100000~0x003fffff区间存放ramdisk在rom的映像,在此做一下说明:由于FLASHmemory比较小

且本系统是作网络应用,因此没有采用基于FLASH的文件系统,而是采用ramdisk作为系统的文件系统.SDRAMmemory是一种挥发存储记忆体,不能永久保存数据,在嵌入式系统中用作代码运行载体,本系

统的SDRAM是16M,由于CPU里有MMU模块,因此还需要将物理地址映射到虚拟地址,提供给Linux系

统.地址0x30300000是ramdisk的物理启始地址,地址0xc0300000是ramdisk的虚拟启始地址.地址

0x30300000处只是临时存放压缩过的ramdisk的地方,ramdisk的大小由ramdisk里有多少内容决定.表2 Linux内核空间的地址映射表 物理起始地址虚拟起始地址大小注释

0x30f00000 0xfc000000 0x00100000 Camera buffer 0xfff00000 0xfa000000 0x00100000 IO space 0x00000000 0xfb000000 0x00400000 Flash space 此外,系统中还有一些地址用作特殊用途,比如IO 空间、Flash空间等.由于Linux内核在访问他们的时候使 用的虚拟地址,因此我们还要把它们映射到虚拟地址空 间去,具体见表2.2.2 Linux具体移植过程

修改如下文件是Linux移植的主要步骤,修改完如下文件Linux的内核就已经基本完成了.表3为移

植过程中增加或修改的文件列表.表3 移植过程中增加或修改的文件列表

目录

文件列表

Linux Makefile,config Linux/arch/arm/Makefile,config.in Linux/arch/arm/mach-s1s65k irq.c,arch.c,mm.c,time.c,Makefile Linux/arch/arm/mm/mm-s1s65k.c Linux/include/asm-arm/arch-s1s65k irqs.h,memory.h,hardware.h,io.h,vmalloc.h,dma.h,time.h,timex.h,system.h,serial.h Linux/arch/arm/kernel/head-armv.S,debug-armv.S,entry-armv.S Linux/arch/arm/kernel Traps.c(stub),gdb-stub.c,irq.c Linux/arc/arm/tools Mach-types Linux/arch/arm/mm proc-arm720.S 127增刊魏 平等:Linux体系结构及嵌入式Linux的移植方法 Linux体系结构及嵌入式Linux的移植方法 魏 平 夏良正 王 岩

(东南大学自动控制系,南京210096)摘要:嵌入式系统是以应用为中心,以计算机技术为基础,软硬件均可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统.而Linux作为一种优秀的免费操作系统,近

几年在嵌入式领域异军突起,成为了最有潜力的嵌入式操作系统.本文通过Linux体系结构的分

析,以及一个移植Linux的具体范例,具体介绍了嵌入式Linux的移植方法.关键词:嵌入式系统;操作系统;网络照相机;模块;内存盘

中图分类号:TP302.1文献标识码:A

文章编号:1001-0505(2004)增刊-0126-05 Architecture of Linux and method of porting embedded Linux Wei Ping Xia Liangzheng Wang Yan(Department of Automatic Control Engineering,Southeast University,Nanjing 210096,China)Abstract:Embedded system is an application-centered,computer technology based,software and hardware customizable special computer system which is suitable to application system for strict need of function, reliability,cost,volume and power consumption.As an excellent free OS(operation system),recently Linux becomes the most potential OS of embedded system.This paper analyzes the architecture of Linux operation system in detail,and uses a concrete example to introduce the method of porting Linux operation system to embedded platform.Key words:embedded system;operation system;network camera;module;ramdisk 收稿日期:2004-06-09.作者简介:魏 平(1978—),男,硕士生;夏良正(联系人),男,教授,博士生导师,xialz@seu.edu.cn.嵌入式操作系统不同于一般意义的计算机操作系统,它有占用空间小、执行效率高、方便进行个性化定

制和软件要求固化存储等特点.Linux操作系统是一种性能优良、源码公开且被广泛应用的的免费操作系统, 由于其体积小、可裁减、运行速度高等优点,因此可以作为研究嵌入式操作系统和非实时操作系统的典

范[1,2].本文通过Linux体系结构的分析,以及一个移植Linux的具体范例,介绍了嵌入式Linux的移植方法.1 Linux的体系结构

Linux的内核主要由5个子系统组成[3~5].1)进程调度(Proce Scheduler)负责控制进程对CPU的使用.CPU是计算机系统中最核心的资源, 调度程序负责在可运行进程中公平地选择,使其中之一成为运行进程,从而充分利用CPU的资源.同时, 它也负责保证内核及时对硬件进行操作.2)内存管理(Memory Manager)标准Linux的内存管理支持虚拟内存,进程的代码、数据和堆栈的总

量可以超过实际内存的大小.而Linux大致可以根据平台有无存储管理单元(MMU)分为2个类别:一类是

和标准Linux一样运行在有硬件存储管理器(MMU)的处理器上,另外一类通常针对无硬件存储管理器

(MMU)的CPU进行裁剪和移植,它所具有的一些特点下面将陆续介绍.3)虚拟文件系统(Virtual File System)隐藏了不同硬件的具体细节,为所有设备提供提供统一的接

口.虚拟文件系统可再分为逻辑文件系统和设备驱动程序2部分.逻辑文件系统指Linux支持的文件系统, 如ext2,jffs和nfs等.设备驱动程序是具体操作硬件控制器的代码.4)网络接口(Network Interface)负责支持标准的网络通信协议和各种网络硬件设备.其中网络通信协

◇ STUB远程调试原理

使用GDB(HOST)调试目标扳(TARGET)上的程序时,HOST需

要通过UART或ETHERNET口与TARGET进行通讯,并传输命令;TARGET根据接收的包,解析命令,执行相应的动作,然后上传相 应的包[6,7].调试流程如图2所示.主机先运行GDB,设置好串口,目标机上电,启动stub,接管异 常和串口控制,产生断点,与主机进行通讯,实现远程调试.4 结 语

随着数字信息技术和网络技术的高速发展,建立在此基础上的嵌入式技术已经越来越和人们的生活

紧密相关.随着国内外嵌入式产品(如个人数字处理PDA、机顶盒STB等)的进一步开发和推广,这就使关

于嵌入式Linux移植方面的研究已经迫在眉睫.本文针对目前关于嵌入式Linux移植方面存在的问题,在简要概括了Linux操作系统的体系结构和相

关知识的基础上,结合EPSON最新推出的S1S65000平台详细介绍了嵌入式Linux的移植过程,重点指出

了移植过程中普遍存在的问题和需要注意的部分以及作者长期以来积累的经验教训,这对于国内嵌入式

Linux应用的拓展具有重要的意义.参考文献(References)[1]唐朝云,孙 丹,盛焕烨.基于Linux的嵌入式数字监控系统的设计与实现[J].计算机工程,2003,29(10):152154.Tang Chaoyun,Sun Dan,Sheng Huanye.The design and implement of embedded digital monitor system based on Linux[J].Computer Engineering,2003,29(10):152 154.(in Chinese)[2]Andrew S.Tanenbaum.Modern Operating System.北京:机械工业出版社,2002.[3]邹思轶.嵌入式Linux设计与应用[M].北京:清华大学出版社,2002.[4]李善平,刘文蜂.Linux内核2.4版源代码分析大全[M].北京:机械工业出版社,2002.[5]毛德操,胡希明.Linux内核源代码情景分析[M].杭州:浙江大学出版社,2001.[6]吴明晖.基于ARM的嵌入式系统开发与应用[M].北京:人民邮电出版社,2004.[7]Bovet Daniel P,Cesati Marco.Understanding the Linux Kernel.2nd Ed[M].O'Reilly,2002.130东南大学学报(自然科学版)第34卷

下载Linux体系结构及嵌入式Linux的移植方法_魏平word格式文档
下载Linux体系结构及嵌入式Linux的移植方法_魏平.doc
将本文档下载到自己电脑,方便修改和收藏。
点此处下载文档

文档为doc格式

    热门文章
      整站推荐
        点击下载本文