资源描述:
《嵌入式linux系统移植》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、2021/7/2操作系统实验1操作系统实验五:嵌入式Linux系统移植2021/7/2操作系统实验2内容预览移植的基本概念硬件平台对移植的影响移植环境搭建Linux操作系统移植Linux内核结构Linux内核向S3C2410移植配置和编译内核2021/7/2操作系统实验3移植的基本概念使某个平台的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。软件的移植分三种:从一个硬件平台移植到另一个硬件平台从一个操作系统移植到另一个操作系统从一种软件库环境移植到另一个软件库环境软件进行移
2、植的容易程度即可移植性2021/7/2操作系统实验4硬件平台对移植的影响Linux硬件平台硬件平台对移植的影响处理器字长字节顺序时间2021/7/2操作系统实验5Linux硬件平台在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如alpha,arm,i386,mips,ppc每个体系结构可以有若干变种variant,或不同配置的硬件machine,统称sub-architecture。以arm体系结构举例:variants包括arm7tdmi,arm926ejs,strongarm,xscalemach
3、ine包括edb7312,smdk2410,omap-h22021/7/2操作系统实验6处理器字长处理器字长,定义为处理器一次能处理的数据位数。字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断处理器字长会影响int,long等C类型的长度C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:u8,s8,u16,s16,u32,s32,u64,s642021/7/2操作系统实验7字节顺序字节顺序byteorder是指一个字中字节排列的顺序不同硬件可能采用不同byteorderx86little-endianppcbi
4、g-endianLinux内核将硬件的byteorder放在里面定义,__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-end
5、iantocpu'sbyteorder*/u32__le32_to_cpus(u32);/*convertlittle-endiantocpu'sbyteorder*/2021/7/2操作系统实验8字节顺序include/linux/byteorder/bigend.h2021/7/2操作系统实验9字节顺序include/linux/byteorder/swab.h2021/7/2操作系统实验10时间软件中的与时间相关的代码也会影响移植采用平台无关的时间表达方法可以提高代码可移植性Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以
6、下对时间的描述是平台无关的HZ/*onesecond*/(2*HZ)/*twoseconds*/(HZ/2)/*halfasecond*/(HZ/100)/*10ms*/(2*HZ/100)/*20ms*/2021/7/2操作系统实验11移植环境的搭建获取内核源码构建交叉编译环境2021/7/2操作系统实验12获取内核源码移植内核之前,获取内核源码自然是第一步一个常用的FTP地址:ftp://ftp.kernel.org/pub/linux/kernel/2021/7/2操作系统实验13构建交叉编译环境搭建交叉编译环境是嵌入式开发的第一步,也
7、是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。Gcc的版本有很多种,其中低于3.3.2版本的只能编译Linux2.4版本的内核,而3.3.2既能支持Linux2.4版本的内核,也能支持Linux2.6版本的内核.我们采用arm-linux-gcc3.4.12021/7/2操作系统实验14构建交叉编译环境下载交叉编译工具包http://ftp.arm.linux.org.uk/pub/armlinux/t
8、oolchain/解压缩文件exportPATH=$PATH:/usr/local/arm/3.4.1/bin然后,我们可以使用命令“echo$PATH”来查看添加