您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 其它文档 > 嵌入式Linux系统移植-精选文档
6/2/2020操作系统实验1操作系统实验五:嵌入式Linux系统移植Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验2内容预览•移植的基本概念•硬件平台对移植的影响•移植环境搭建•Linux操作系统移植•Linux内核结构•Linux内核向S3C2410移植•配置和编译内核Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验3移植的基本概念•使某个平台的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。•软件的移植分三种:–从一个硬件平台移植到另一个硬件平台–从一个操作系统移植到另一个操作系统–从一种软件库环境移植到另一个软件库环境•软件进行移植的容易程度即可移植性Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验4硬件平台对移植的影响•Linux硬件平台•硬件平台对移植的影响–处理器字长–字节顺序–时间Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验5Linux硬件平台•在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如–alpha,arm,i386,mips,ppc•每个体系结构可以有若干变种variant,或不同配置的硬件machine,统称sub-architecture。以arm体系结构举例:–variants包括arm7tdmi,arm926ejs,strongarm,xscale–machine包括edb7312,smdk2410,omap-h2Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验6处理器字长•处理器字长,定义为处理器一次能处理的数据位数。•字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断•处理器字长会影响int,long等C类型的长度•C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:–u8,s8,u16,s16,u32,s32,u64,s64Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验7字节顺序•字节顺序byteorder是指一个字中字节排列的顺序•不同硬件可能采用不同byteorder–x86little-endian–ppcbig-endian•Linux内核将硬件的byteorder放在asm/byteorder.h里面定义,__BIG_ENDIAN或__LITTLE_ENDIAN•在include/linux/byteorder/里面有几个头文件,定义了–u23__cpu_to_be32(u32);/*convertcpu'sbyteordertobigendian*/–u32__cpu_to_le32(u32);/*convertcpu'sbyteordertolittleendian*/–u32__be32_to_cpu(u32);/*convertbig-endiantocpu'sbyteorder*/–u32__le32_to_cpus(u32);/*convertlittle-endiantocpu'sbyteorder*/Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验8字节顺序include/linux/byteorder/bigend.hEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验9字节顺序include/linux/byteorder/swab.hEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验10时间•软件中的与时间相关的代码也会影响移植•采用平台无关的时间表达方法可以提高代码可移植性•Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的–HZ/*onesecond*/–(2*HZ)/*twoseconds*/–(HZ/2)/*halfasecond*/–(HZ/100)/*10ms*/–(2*HZ/100)/*20ms*/Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验11移植环境的搭建•获取内核源码•构建交叉编译环境Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验12获取内核源码•移植内核之前,获取内核源码自然是第一步一个常用的FTP地址:操作系统实验13构建交叉编译环境•搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。•Gcc的版本有很多种,其中低于3.3.2版本的只能编译Linux2.4版本的内核,而3.3.2既能支持Linux2.4版本的内核,也能支持Linux2.6版本的内核.•我们采用arm-linux-gcc3.4.1Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验14构建交叉编译环境•下载交叉编译工具包ftp.arm.linux.org.uk/pub/armlinux/toolchain/•解压缩文件•exportPATH=$PATH:/usr/local/arm/3.4.1/bin•然后,我们可以使用命令“echo$PATH”来查看添加后的情况•要验证添加是否成功,在终端中输入“arm-linux-gcc-v”,查看编译器的版本号Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验15Linux操作系统移植•概述•Linux内核的平台相关代码•已有代码向Linux内核移植•Linux内核移植Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验16概述•内核移植–archimplementation–driversportingEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验17Linux内核的平台相关代码•Linux内核对多平台有很好的支持•内核的对外部接口是统一的,并且与平台无关•内核的大多数代码也是与平台无关的•主要的体系结构相关代码存在于–arch/architecture–include/asm-architecture•比如arm体系的平台相关代码主要是–arch/arm–include/asm-armEvaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验18已有代码向Linux内核移植将已有代码向内核中移植有一些限制:•内核中没有标准C库支持•内核中没有象用户程序那样的内存保护•内核中不便使用浮点操作•内核的堆栈是固定大小的,并且比较有限•在内核中需要编程者考虑并发带来的竞争与冒险,以及同步问题Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验19Linux内核移植•Linux内核代码可以分为平台相关部分和平台无关部分•Linux内核绝大部分代码是平台无关的,可以被各种平台所共享–调度算法–存储器管理–I/O子系统–网络协议栈•依赖于特定硬件的代码在Linux中采用条件编译的方式区分–ARCH=x86即打开x86特有的代码–ARCH=arm即打开arm特有的代码Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验20Linux内核的arch目录•进入arch目录,每个体系结构代码都有一个子目录•进入arm目录,在arm体系结构下我们可以看到很多sub-arch的子目录Evaluationonly.CreatedwithAspose.Slidesfor.NET3.5ClientProfile5.2.0.0.Copyright2019-2019AsposePtyLtd.6/2/2020操作系统实验21实现sub-arch•在sub-arch子目录下,以mach-s3c2410为例•一个硬件平台支持需要实现以下几个硬件相关的文件–mach-s3c2410.c,irq.c,clock.c,dma.c,gpio.c,pm.c,sleep.c,time.cEvaluationonly.Create
本文标题:嵌入式Linux系统移植-精选文档
链接地址:https://www.777doc.com/doc-5688673 .html