嵌入式Linux系统移植.pptx
2025/4/20操作系统实验1操作系统实验五:嵌入式Linux系统移植
内容预览2025/4/20操作系统实验2移植的基本概念硬件平台对移植的影响移植环境搭建Linux操作系统移植Linux内核结构Linux内核向S3C2410移植配置和编译内核
移植的基本概念2025/4/20操作系统实验3使某个平台的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。软件的移植分三种:从一个硬件平台移植到另一个硬件平台从一个操作系统移植到另一个操作系统从一种软件库环境移植到另一个软件库环境软件进行移植的容易程度即可移植性
硬件平台对移植的影响2025/4/20操作系统实验4Linux硬件平台硬件平台对移植的影响处理器字长字节顺序时间
Linux硬件平台2025/4/20操作系统实验5在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如alpha,arm,i386,mips,ppc每个体系结构可以有若干变种variant,或不同配置的硬件machine,统称sub-architecture。以arm体系结构举例:variants包括arm7tdmi,arm926ejs,strongarm,xscalemachine包括edb7312,smdk2410,omap-h2
处理器字长2025/4/20操作系统实验6处理器字长,定义为处理器一次能处理的数据位数。处理器字长会影响int,long等C类型的长度字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:u8,s8,u16,s16,u32,s32,u64,s64
字节顺序2025/4/20操作系统实验7字节顺序byteorder是指一个字中字节排列的顺序不同硬件可能采用不同byteorderx86little-endianppcbig-endianLinux内核将硬件的byteorder放在asm/byteorder.h里面定义,__BIG_ENDIAN或__LITTLE_ENDIAN在include/linux/byteorder/里面有几个头文件,定义了u23__cpu_to_be32(u32);/*convertcpusbyteordertobigendian*/u32__cpu_to_le32(u32);/*convertcpusbyteordertolittleendian*/u32__be32_to_cpu(u32);/*convertbig-endiantocpusbyteorder*/u32__le32_to_cpus(u32);/*convertlittle-endiantocpusbyteorder*/
include/linux/byteorder/bigend.h字节顺序2025/4/20操作系统实验8
字节顺序2025/4/20操作系统实验9include/linux/byteorder/swab.h
时间2025/4/20操作系统实验10软件中的与时间相关的代码也会影响移植采用平台无关的时间表达方法可以提高代码可移植性Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的HZ/*onesecond*/(2*HZ)/*twoseconds*/(HZ/2)/*halfasecond*/(HZ/100)/*10ms*/(2*HZ/100)/*20ms*/
移植环境的搭建2025/4/20操作系统实验11获取内核源码01构建交叉编译环境02
获取内核源码2025/4/20操作系统实验1201.移植内核之前,获取内核源码自然是第一步02.一个常用的FTP地址:
构建交叉编译环境2025/4/20操作系统实验13搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。01Gcc的版本有很多种,其中低于版本的只能编译Linux2.4版本的内核,而既能支持Linux2.4版本的内核,也能支持Linux2.6版本的内核.我们采用02
构建交叉编译环境2025/4/20操作系统实验14解压缩文件然后,我们可以使用命令“echo$PATH”来查看添加后的情况要验证添加是否成功,在终端中输入“arm-linux-gcc-v”,查看编译器的版本号下