嵌入式Linux系统移植.ppt

上传人:s****8 文档编号:68129465 上传时间:2022-12-27 格式:PPT 页数:58 大小:1.04MB
返回 下载 相关 举报
嵌入式Linux系统移植.ppt_第1页
第1页 / 共58页
嵌入式Linux系统移植.ppt_第2页
第2页 / 共58页
点击查看更多>>
资源描述

《嵌入式Linux系统移植.ppt》由会员分享,可在线阅读,更多相关《嵌入式Linux系统移植.ppt(58页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、2022/12/26操作系统实验操作系统实验1操作系统操作系统实验五:嵌入式实验五:嵌入式Linux系统移植系统移植2022/12/26操作系统实验操作系统实验2内容预览内容预览移植的基本概念硬件平台对移植的影响移植环境搭建Linux操作系统移植Linux内核结构Linux内核向S3C2410移植配置和编译内核2022/12/26操作系统实验操作系统实验3移植的基本概念移植的基本概念使某个平台的代码运行在其他平台上的过程就叫做移植。Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。软件的移植分三种:从一个硬件平台移植到另一个硬件平台从一个操作系统移植到另一个操作系统

2、从一种软件库环境移植到另一个软件库环境软件进行移植的容易程度即可移植性2022/12/26操作系统实验操作系统实验4硬件平台对移植的影响硬件平台对移植的影响Linux硬件平台硬件平台对移植的影响处理器字长字节顺序时间2022/12/26操作系统实验操作系统实验5Linux硬件平台硬件平台在Linux内核里,每一个处理器指令集对应一个独立的体系结构architecture,比如alpha,arm,i386,mips,ppc每个体系结构可以有若干变种variant,或不同配置的硬件machine,统称sub-architecture。以arm体系结构举例:variants包括arm7tdmi,ar

3、m926ejs,strongarm,xscalemachine包括edb7312,smdk2410,omap-h22022/12/26操作系统实验操作系统实验6处理器字长处理器字长处理器字长,定义为处理器一次能处理的数据位数。字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断处理器字长会影响int,long等C类型的长度C代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:u8,s8,u16,s16,u32,s32,u64,s642022/12/26操作系统实验操作系统实验7字节顺序字节顺序字节顺序byteorder是指一个字中字节排列的顺序不同硬件可能采用不同byt

4、eorderx86little-endianppcbig-endianLinux内核将硬件的byteorder放在里面定义,_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

5、_le32_to_cpus(u32);/*convertlittle-endiantocpusbyteorder*/2022/12/26操作系统实验操作系统实验8字节顺序字节顺序include/linux/byteorder/bigend.h2022/12/26操作系统实验操作系统实验9字节顺序字节顺序include/linux/byteorder/swab.h2022/12/26操作系统实验操作系统实验10时间时间软件中的与时间相关的代码也会影响移植采用平台无关的时间表达方法可以提高代码可移植性Linux内核里面采用HZ来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的HZ/*o

6、nesecond*/(2*HZ)/*twoseconds*/(HZ/2)/*halfasecond*/(HZ/100)/*10ms*/(2*HZ/100)/*20ms*/2022/12/26操作系统实验操作系统实验11移植环境的搭建移植环境的搭建获取内核源码构建交叉编译环境2022/12/26操作系统实验操作系统实验12获取内核源码获取内核源码移植内核之前,获取内核源码自然是第一步一个常用的FTP地址:ftp:/ftp.kernel.org/pub/linux/kernel/2022/12/26操作系统实验操作系统实验13构建交叉编译环境构建交叉编译环境搭建交叉编译环境是嵌入式开发的第一步,也

7、是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。Gcc的版本有很多种,其中低于3.3.2版本的只能编译Linux2.4版本的内核,而3.3.2既能支持Linux2.4版本的内核,也能支持Linux2.6版本的内核.我们采用arm-linux-gcc3.4.12022/12/26操作系统实验操作系统实验14构建交叉编译环境构建交叉编译环境下载交叉编译工具包http:/ftp.arm.linux.org.uk/pub/armlinux/toolchain/解压

8、缩文件exportPATH=$PATH:/usr/local/arm/3.4.1/bin然后,我们可以使用命令“echo$PATH”来查看添加后的情况要验证添加是否成功,在终端中输入“arm-linux-gcc-v”,查看编译器的版本号2022/12/26操作系统实验操作系统实验15Linux操作系统移植操作系统移植概述Linux内核的平台相关代码已有代码向Linux内核移植Linux内核移植2022/12/26操作系统实验操作系统实验16概述概述内核移植archimplementationdriversporting2022/12/26操作系统实验操作系统实验17Linux内核的平台相关代码

9、内核的平台相关代码Linux内核对多平台有很好的支持内核的对外部接口是统一的,并且与平台无关内核的大多数代码也是与平台无关的主要的体系结构相关代码存在于arch/architectureinclude/asm-architecture比如arm体系的平台相关代码主要是arch/arminclude/asm-arm2022/12/26操作系统实验操作系统实验18已有代码向已有代码向Linux内核移植内核移植将已有代码向内核中移植有一些限制:内核中没有标准C库支持内核中没有象用户程序那样的内存保护内核中不便使用浮点操作内核的堆栈是固定大小的,并且比较有限在内核中需要编程者考虑并发带来的竞争与冒险,

10、以及同步问题2022/12/26操作系统实验操作系统实验19Linux内核移植内核移植Linux内核代码可以分为平台相关部分和平台无关部分Linux内核绝大部分代码是平台无关的,可以被各种平台所共享调度算法存储器管理I/O子系统网络协议栈依赖于特定硬件的代码在Linux中采用条件编译的方式区分ARCH=x86即打开x86特有的代码ARCH=arm即打开arm特有的代码2022/12/26操作系统实验操作系统实验20Linux内核的内核的arch目录目录进入arch目录,每个体系结构代码都有一个子目录进入arm目录,在arm体系结构下我们可以看到很多sub-arch的子目录2022/12/26操

11、作系统实验操作系统实验21实现实现sub-arch在sub-arch子目录下,以mach-s3c2410为例一个硬件平台支持需要实现以下几个硬件相关的文件mach-s3c2410.c,irq.c,clock.c,dma.c,gpio.c,pm.c,sleep.c,time.c2022/12/26操作系统实验操作系统实验22Linux内核结构内核结构linux内核主要由5个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。一般在Linux系统中的/usr/src/linux-*.*.*目录下就是内核源代码。Linux内核非常庞大,包括驱动程序在内有数百兆之多2022/12/26

12、操作系统实验操作系统实验23Linux内核代码分布图内核代码分布图charvideoext2nfsi386armipv4802diversfsarchnetinitkernelmmipcinclude2022/12/26操作系统实验操作系统实验24Linux文件系统文件系统图:图:Linux 文件系统组件的体系结构文件系统组件的体系结构2022/12/26操作系统实验操作系统实验25arch目录目录Linux系统能支持如此多的平台的部分原因是因为内核把源程序代码清晰地划分为体系结构无关部分和体系结构相关部分。arch目录包含了体系结构相关部分的内核代码,其中每一种都代表一种硬件平台,如对于X8

13、6平台就是i386,还有alpha,arm等。移植的重点就是arch目录下的文件。对于任何平台,都必须包含以下几个子目录:boot:包含启动内核所使用的部分或全部平台特有代码kernel:存放支持体系结构特有的(如信号处理和SMP)特征的实现lib:存放高速的体系结构特有的(如strlen和memcpy)通用函数的实现mm:存放体系结构特有的内存管理程序的实现math-emu:模拟FPU的代码。对于arm处理器来说,此目录用mach-xxx代替2022/12/26操作系统实验操作系统实验26其他目录其他目录drivers系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也

14、有对应的子目录,如声卡的驱动对应于drivers/sound。占整个内核发行版本代码的一半以上,非常庞大。有些驱动程序是和硬件平台无关而有些是相关的。fsLinux支持的文件系统代码。不同的文件系统有不同的子目录对应,如ext2文件系统对应的就是ext2子目录。一般来说,文件系统与硬件平台无关。include这个目录包括了编译核心所需要的大多数头文件。不同的平台需要的头文件会有所不同,对于每种支持的体系结构分别有一个子目录,如asm-arm。init此目录包含核心启动代码,有main.c和version.c两个文件,这是研究内核如何工作的好的起点。ipc此目录包含了核心的进程间通讯代码。202

15、2/12/26操作系统实验操作系统实验27其他目录其他目录mm此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于arch/*/mm目录下,如对应于X86的就是arch/i386/mm/fault.c。modules此目录包含已建好可动态加载的模块。kernel主要核心代码。同时与处理器结构相关代码都放在arch/*/kernel目录下。net核心的网络部分代码。里面的每个子目录对应于网络的一个方面。lib此目录包含了核心的库代码。与处理器结构相关库代码被放在arch/*/lib/目录下,包含与平台无关的通用函数。scripts此目录包含用于配置核心的脚本文件,在配置内核时

16、用到。documentation此目录是一些文档,非常详细,起参考作用。2022/12/26操作系统实验操作系统实验28Linux内核向内核向S3C2410移植移植S3C2410简介移植内容:移植Bootloader移植Linux内核移植根文件系统2022/12/26操作系统实验操作系统实验29S3C2410简介简介S3C2410简介S3C2410X是韩国三星公司推出的16/32位RISC微控制器,其CPU采用的是ARM920T内核,加上丰富的片内外设,为手持设备和其它应用,提供了低价格、低功耗、高性能微控制器的解决方案。主要特性系统结构2022/12/26操作系统实验操作系统实验30主要特性

17、主要特性具有16KB指令Cache、16KB数据Cache和存储器管理单元MMU。将外部地址空间8组,每组128MB,总容量达1GB;支持从Nandflash存储器启动。55个中断源,可以设定1个为快速中断,有24个外部中断,并且触发方式可以设定。4通道的DMA,并且有外部请求引脚。3个通道的UART,带有16字节的TX/RXFIFO,支持IrDA1.0功能。2022/12/26操作系统实验操作系统实验31主要特性主要特性有2个USB主机总线的端口,或1个USB设备总线的端口。有4个具有PWM功能的16位定时器和1个16位内部定时器。8通道的10位A/D转换器,最高速率可达500kB/s;提供

18、有触摸屏接口。具有117个通用I/O口和24通道的外部中断源。兼容MMC的SD卡接口。具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作。2022/12/26操作系统实验操作系统实验32主要特性主要特性看门狗定时器。有LCD控制器,支持4K色的STN和256K色的TFT,配置有DMA通道。具有PLL功能的时钟发生器,时钟频率高达203MHz。双电源系统:1.8/2.0V内核供电,3.3V存储器和I/O供电。没有内置的网络控制器,如果需要网络功能,一般使用CS8900和DM90002022/12/26操作系统实验操作系统实验332022/12/26操作系统实验操作系统实验3

19、4BootloaderBootloader的概念Bootloader的结构和启动过程2022/12/26操作系统实验操作系统实验35BootloaderBootloader的概念的概念系统上电后,需要一段程序来进行初始化:关闭WATCHDOG、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等。如果它能够将操作系统内核复制到内存中运行,无论从本地(比如Flash)还是从远端(比如通过网络),就成这段程序为Bootloader.简单的说,Boot咯啊der就是这么一小段程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核。在开发时,通畅需要使用各种命令操作B

20、ootloader,一般通过串口来连接和开发板,可以再串口上输入各种命令、观察运行结果等。2022/12/26操作系统实验操作系统实验36BootloaderBootloader的结构的结构嵌入式Linux系统从软件的角度通常可以分为以下四个层次:引导加载程序包括固化在固件的Boot代码(BIOS)和BootloaderLinux内核文件系统包括根文件系统。里面包含了Linux系统能够运行所必需的应用程序、库等,比如可以给用户提供操作Linux的控制界面的shell程序、动态链接的程序运行时需要的glibc库等用户应用程序特定于用户的应用程序也存储在文件系统中。有时在用户应用程序和内核层之间可

21、能还会包括一个嵌入式图形用户界面。常用的嵌入式GUI有:Qtopia和MiniGUI等2022/12/26操作系统实验操作系统实验37BootloaderBootloader的两个阶段的两个阶段从固态存储设备上启动的Bootloader大多都是两阶段的启动过程。第一阶段使用汇编来实现,它完成一些依赖于CPU体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用C语言来实现。Bootloader第一阶段的功能硬件设备初始化(关闭WATCHDOG,关中断,设置CPU的速度和时钟频率等)为加载Bootloader的第二阶段代码准备RAM空间复制Bootloader的第二阶段代码到RAM空间中设置

22、好栈跳转到第二阶段的C入口点Bootloader第二阶段的功能初始化本阶段要使用到的硬件设备检测系统内存映射将内核映像和根文件系统应用从Flash上读到RAM空间中为内核设置启动参数调用内核2022/12/26操作系统实验操作系统实验38配置和编译内核配置和编译内核1、解压内核tarxvfjlinux-2.6.34.1.tar.bz2C/opt/kernel2022/12/26操作系统实验操作系统实验39Makefile与与KconfigLinux的Makefile分析Linux内核源码中含有很多个Makefile文件,这些Makefile文件又要包含其他一些文件(比如配置信息、通用规则等。)

23、这些文件构成了Linux的Makefile体系,可以分为如下五类:名称名称描述描述顶层Makefile它是所有makefile文件的核心,从总体上控制着内核的编译、连接.config配置文件,在配置内核时生成。根据.config可以确定在编译内核时需要使用哪些文件arch/$(ARCH)/Makefile对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像Scripts/Makefile.*Makefile共用的通用规则、脚本等KbuildMakefiles各级子目录下的makefile,他们相对简单,被上一层makefile调

24、用来编译当前目录下的文件2022/12/26操作系统实验操作系统实验40Makefile与与Kconfig我们主要来关注Makefile是如何决定编译哪些文件的Linux内核的编译过程从顶层Makefile文件开始,然后递归地进入各级子目录调用他们的makefile,分为三个步骤:顶层Makefile决定内核根目录下哪些子目录将被编进内核Arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件、哪些目录将被编译进内核各级子目录下的Makefile决定所在目录下哪些文件将被编译进内核,哪些文件将被编译成模块(即驱动程序),进入哪些子目录继续调用他们的Makefile。

25、2022/12/26操作系统实验操作系统实验41Makefile与与Kconfig在顶层Makefile中可以看到如下内容:2022/12/26操作系统实验操作系统实验42Makefile与与Kconfig对于arch/$(ARCH)/Makefile,以arm为例,在arch/arm/Makefile中可以看到如下内容:2022/12/26操作系统实验操作系统实验43Makefile与与KconfigLinux内核中的.config文件默认是隐藏的,可以输入指令“ls-a”看到2022/12/26操作系统实验操作系统实验44Makefile与与Kconfig.config配置文件中定义了一系

26、列的变量,Makefile将结合他们来决定哪些文件被编译进内核、哪些文件被编译成模块、涉及哪些子目录顶层makefile和arch/$(ARCH)/makefile决定根目录下哪些子目录、arch/$(ARCH)目录下哪些文件和目录将被编译进内核最后,各级子目录下的makefile决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块,进入子目录哪些子目录继续调用他们的Makefile2022/12/26操作系统实验操作系统实验45Makefile与与Kconfig内核源码每个子目录中都有一个Makefile与Kconfig。Makefile的作用已经讲述过了,而Kconfig用户配置内核,

27、它就是各种配置界面的源文件。内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.configArch/arm/mach-s3c2410/Kconfig2022/12/26操作系统实验操作系统实验46配置和编译内核配置和编译内核3、在系统中添加对ARM的支持进入内核源码,修改“Makefile”文件,在189行“ARCH?=(SUBARCH)”和194行“CROSS_COMPILE?=“,将其修改为”ARCH=arm”和“CROSS_COMPILE=arm-linux-”,然后保存2022/12/26操作系统实验操作系统实验47配置和编译内核配置和编译内核

28、4、配置内核一般运行makemenuconfig配置内核,内核的配置选项有很多,用户可以使用我们提供的预配置文件s3c2410,也可以自行配置,选择相应的配置时,有三种选择(按空格键进行选择),它们分别代表的含义如下:*将该功能编译进内核不将该功能编译进内核M将该功能编译成可以在需要时动态插入到内核中的模块2022/12/26操作系统实验操作系统实验48配置和编译内核配置和编译内核2022/12/26操作系统实验操作系统实验49S3C2410X所用到的内核选项配置所用到的内核选项配置内核配置主菜单:Codematurityleveloptions-代码成熟等级Loadablemodulesup

29、port-对模块的支持SystemType-系统类型Generalsetup-普通的属性设置Parallelportsupport-并口支持MemoryTechnologyDevices(MTD)-MTD设备PlugandPlayconfiguration-即插即用配置Blockdevices-块设备Multi-devicesupport(RAIDandLVM)-多设备驱动支持Networkingoptions-网络选项Networkdevicesupport-网络设备支持AmateurRadiosupport-业余无线广播IrDA(infrared)support-红外支持ATA/IDE/M

30、FM/RLLsupport-ATA/IDE设备支持SCSIsupport-SCSI支持2022/12/26操作系统实验操作系统实验50S3C2410X所用到的内核选项配置所用到的内核选项配置IEEE1394(FireWire)support(EXPERIMENTAL)-1394支持I2Odevicesupport-I2O设备支持ISDNsubsystem-ISDN子系统Inputcoresupport-输入输出设备Characterdevices-字符设备Multimediadevices-多媒体设备Filesystems-文件系统Consoledrivers-控制台Sound-声音Multi

31、mediaCapabilitiesPortdrivers-多媒体兼容设备USBsupport-USB设备Bluetoothsupport-蓝牙支持Kernelhacking-内核调试-LoadanAlternateConfigurationFile-保存当前配置SaveConfigurationtoanAlternateFile-载入预配置2022/12/26操作系统实验操作系统实验51S3C2410X所用到的内核选项配置所用到的内核选项配置Codematurityleveloptions-代码成熟等级配置选:*Promptfordevelopmentand/orincompletecode/

32、driversPromptforobsoletecode/drivers说明:如果要试验现在仍处于实验阶段的功能,比如IPv6等,就必须把该项选择为Y了;否则可以把它选择为N。在Linux的世界里,每天都有许多人为它开发支持的driver和加强它的核心。但是有些driver还没进入稳定的阶段。但其作者很欢迎其他人去测试这些driver并提出一些bugs。这个问题是说,有一些drive还在做测试中,问您是否要选择这些driver或支持的程序。Loadablemodulesupport-对模块的支持配置选项:*EnableloadablemodulesupportSetversioninforma

33、tiononallmodulesymbols*Kernelmoduleloader2022/12/26操作系统实验操作系统实验52配置和编译内核配置和编译内核5、利用默认配置做自己的配置单在目录arch/arm/configs下有所有的系统针对各种平台的默认配置单,其中包括名为“s3c2410_defconfig”的配置单,该配置文件里面选择了几乎所有的和S3C24XX系列CPU相关的配置选项,我们可以在这个配置单的基础上进行配置。当然,如果有兴趣、时间以及经历的话,完全可以自行配置,具体配置方法,建议摸索,不要害怕出错或失败。在配置菜单中选择选项“LoadanAlternateConfigu

34、rationFile”,然后调用刚刚提到的那个配置文件,确认之后,返回到配置界面2022/12/26操作系统实验操作系统实验53配置和编译内核配置和编译内核2022/12/26操作系统实验操作系统实验54配置和编译内核配置和编译内核2022/12/26操作系统实验操作系统实验55配置和编译内核配置和编译内核6、保存配置单然后,选择选项:“SaveanAlternateConfigurationFile”,将其保存为”.config”文件,因为编译系统时会调用该文件2022/12/26操作系统实验操作系统实验56配置和编译内核配置和编译内核7、编译镜像然后输入”makezImage”,就可以进行编译了,编译完毕后,会在内核源码的“arch/arm/boot”目录下面生成名为“zImage”的镜像,然后可以将其烧写到开发板中(前提是已经烧写了Bootloader)。2022/12/26操作系统实验操作系统实验57配置和编译内核配置和编译内核8、后续工作前面所做的工作仅仅只是皮毛,移植一个Linux内核远比这复杂移植Bootloader、移植内核、移植驱动、移植根文件系统、移植图形开发界面等等。2022/12/26操作系统实验操作系统实验58作业作业1.学完操作系统的感想2.对于Unix/linux操作系统的应用前景的看法截止日期:2011年1月1日18点

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁