嵌入式Linux系统移植.ppt
《嵌入式Linux系统移植.ppt》由会员分享,可在线阅读,更多相关《嵌入式Linux系统移植.ppt(58页珍藏版)》请在三一办公上搜索。
1、2023/9/9,操作系统实验,1,操作系统,实验五:嵌入式Linux系统移植,2023/9/9,操作系统实验,2,内容预览,移植的基本概念硬件平台对移植的影响移植环境搭建Linux操作系统移植Linux内核结构Linux内核向S3C2410移植配置和编译内核,2023/9/9,操作系统实验,3,移植的基本概念,使某个平台的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。软件的移植分三种:从一个硬件平台移植到另一个硬件平台从一个操作系统移植到另一个操作系统从一种软件库环境移植到另一个软件库环境软件进行移植的容易程度即可移植性,
2、2023/9/9,操作系统实验,4,硬件平台对移植的影响,Linux硬件平台硬件平台对移植的影响处理器字长字节顺序时间,2023/9/9,操作系统实验,5,Linux硬件平台,在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如alpha,arm,i386,mips,ppc每个体系结构可以有若干变种variant,或不同配置的硬件machine,统称sub-architecture。以arm体系结构举例:variants 包括arm7tdmi,arm926ejs,strongarm,xscalemachine 包括edb7312,smdk2410,omap
3、-h2,2023/9/9,操作系统实验,6,处理器字长,处理器字长,定义为处理器一次能处理的数据位数。字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断处理器字长会影响int,long等C类型的长度C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:u8,s8,u16,s16,u32,s32,u64,s64,2023/9/9,操作系统实验,7,字节顺序,字节顺序byte order是指一个字中字节排列的顺序不同硬件可能采用不同byte orderx86 little-endianppc big-endianLinux内核将硬件的byte order放在 里面定义,_
4、BIG_ENDIAN或_LITTLE_ENDIAN在include/linux/byteorder/里面有几个头文件,定义了u23 _cpu_to_be32(u32);/*convert cpus byte order to big endian*/u32 _cpu_to_le32(u32);/*convert cpus byte order to little endian*/u32 _be32_to_cpu(u32);/*convert big-endian to cpus byte order*/u32 _le32_to_cpus(u32);/*convert little-endian
5、 to cpus byte order*/,2023/9/9,操作系统实验,8,字节顺序,include/linux/byteorder/bigend.h,2023/9/9,操作系统实验,9,字节顺序,include/linux/byteorder/swab.h,2023/9/9,操作系统实验,10,时间,软件中的与时间相关的代码也会影响移植采用平台无关的时间表达方法可以提高代码可移植性Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的HZ/*one second*/(2*HZ)/*two seconds*/(HZ/2)/*half a second*/(
6、HZ/100)/*10 ms*/(2*HZ/100)/*20 ms*/,2023/9/9,操作系统实验,11,移植环境的搭建,获取内核源码构建交叉编译环境,2023/9/9,操作系统实验,12,获取内核源码,移植内核之前,获取内核源码自然是第一步一个常用的FTP地址:,2023/9/9,操作系统实验,13,构建交叉编译环境,搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。,Gcc的版本有很多种,其中低于版本的只能编译
7、Linux2.4版本的内核,而既能支持Linux2.4版本的内核,也能支持Linux2.6版本的内核.我们采用,2023/9/9,操作系统实验,14,构建交叉编译环境,下载交叉编译工具包 解压缩文件然后,我们可以使用命令“echo$PATH”来查看添加后的情况要验证添加是否成功,在终端中输入“arm-linux-gcc-v”,查看编译器的版本号,2023/9/9,操作系统实验,15,Linux操作系统移植,概述Linux内核的平台相关代码已有代码向Linux内核移植Linux内核移植,2023/9/9,操作系统实验,16,概述,内核移植arch implementationdrivers po
8、rting,2023/9/9,操作系统实验,17,Linux内核的平台相关代码,Linux内核对多平台有很好的支持内核的对外部接口是统一的,并且与平台无关内核的大多数代码也是与平台无关的主要的体系结构相关代码存在于arch/architectureinclude/asm-architecture比如arm体系的平台相关代码主要是arch/arminclude/asm-arm,2023/9/9,操作系统实验,18,已有代码向Linux内核移植,将已有代码向内核中移植有一些限制:内核中没有标准C库支持内核中没有象用户程序那样的内存保护内核中不便使用浮点操作内核的堆栈是固定大小的,并且比较有限在内核
9、中需要编程者考虑并发带来的竞争与冒险,以及同步问题,2023/9/9,操作系统实验,19,Linux内核移植,Linux内核代码可以分为平台相关部分和平台无关部分Linux内核绝大部分代码是平台无关的,可以被各种平台所共享调度算法存储器管理I/O子系统网络协议栈依赖于特定硬件的代码在Linux中采用条件编译的方式区分ARCH=x86 即打开x86特有的代码ARCH=arm 即打开arm特有的代码,2023/9/9,操作系统实验,20,Linux内核的arch目录,进入arch目录,每个体系结构代码都有一个子目录进入arm目录,在arm体系结构下我们可以看到很多sub-arch的子目录,2023
10、/9/9,操作系统实验,21,实现sub-arch,在sub-arch子目录下,以mach-s3c2410为例一个硬件平台支持需要实现以下几个硬件相关的文件mach-s3c2410.c,irq.c,clock.c,dma.c,gpio.c,pm.c,sleep.c,time.c,2023/9/9,操作系统实验,22,Linux内核结构,linux内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。一般在Linux系统中的/usr/src/linux-*.*.*目录下就是内核源代码。Linux内核非常庞大,包括驱动程序在内有数百兆之多,2023/9/9,操作系统实验
11、,23,Linux内核代码分布图,2023/9/9,操作系统实验,24,Linux文件系统,图:Linux 文件系统组件的体系结构,2023/9/9,操作系统实验,25,arch目录,Linux系统能支持如此多的平台的部分原因是因为内核把源程序代码清晰地划分为体系结构无关部分和体系结构相关部分。arch目录包含了体系结构相关部分的内核代码,其中每一种都代表一种硬件平台,如对于X86平台就是i386,还有alpha,arm等。移植的重点就是arch目录下的文件。对于任何平台,都必须包含以下几个子目录:boot:包含启动内核所使用的部分或全部平台特有代码kernel:存放支持体系结构特有的(如信号
12、处理和SMP)特征的实现lib:存放高速的体系结构特有的(如strlen和memcpy)通用函数的实现mm:存放体系结构特有的内存管理程序的实现math-emu:模拟FPU的代码。对于arm处理器来说,此目录用mach-xxx代替,2023/9/9,操作系统实验,26,其他目录,drivers 系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于drivers/sound。占整个内核发行版本代码的一半以上,非常庞大。有些驱动程序是和硬件平台无关而有些是相关的。fs Linux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2
13、文件系统对应的就是ext2子目录。一般来说,文件系统与硬件平台无关。include 这个目录包括了编译核心所需要的大多数头文件。不同的平台需要的头文件会有所不同,对于每种支持的体系结构分别有一个子目录,如asm-arm。init 此目录包含核心启动代码,有main.c和version.c两个文件,这是研究内核如何工作的好的起点。ipc 此目录包含了核心的进程间通讯代码。,2023/9/9,操作系统实验,27,其他目录,mm 此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c。module
14、s 此目录包含已建好可动态加载的模块。kernel 主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。net 核心的网络部分代码。里面的每个子目录对应于网络的一个方面。lib 此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下,包含与平台无关的通用函数。scripts此目录包含用于配置核心的脚本文件,在配置内核时用到。documentation 此目录是一些文档,非常详细,起参考作用。,2023/9/9,操作系统实验,28,Linux内核向S3C2410移植,S3C2410简介移植内容:移植Bootloader移植Linux内核移植根
15、文件系统,2023/9/9,操作系统实验,29,S3C2410简介,S3C2410简介 S3C2410X是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T内核,加上丰富的片内外设,为手持设备和其它应用,提供了低价格、低功耗、高性能微控制器的解决方案。主要特性系统结构,2023/9/9,操作系统实验,30,主要特性,具有16KB指令Cache、16KB数据Cache和存储器管理单元MMU。将外部地址空间8组,每组128MB,总容量达1GB;支持从Nand flash存储器启动。55个中断源,可以设定1个为快速中断,有24个外部中断,并且触发方式可以设定。4通道的DM
16、A,并且有外部请求引脚。3个通道的UART,带有16字节的TX/RX FIFO,支持IrDA1.0功能。,2023/9/9,操作系统实验,31,主要特性,有2个USB主机总线的端口,或1个USB设备总线的端口。有4个具有PWM功能的16位定时器和1个16位内部定时器。8通道的10位A/D转换器,最高速率可达500kB/s;提供有触摸屏接口。具有117个通用I/O口和24通道的外部中断源。兼容MMC的SD卡接口。具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作。,2023/9/9,操作系统实验,32,主要特性,看门狗定时器。有LCD控制器,支持4K色的STN和256K色的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 Linux 系统 移植
链接地址:https://www.31ppt.com/p-5970480.html