嵌入式Linux系统移植

上传人:tia****nde 文档编号:247424264 上传时间:2024-10-18 格式:PPT 页数:58 大小:894.50KB
返回 下载 相关 举报
嵌入式Linux系统移植_第1页
第1页 / 共58页
嵌入式Linux系统移植_第2页
第2页 / 共58页
嵌入式Linux系统移植_第3页
第3页 / 共58页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,操作系统实验,*,2024/10/18,操作系统实验,1,操作系统,实验五:嵌入式,Linux,系统移植,2024/10/18,操作系统实验,2,内容预览,移植的基本概念,硬件平台对移植的影响,移植环境搭建,Linux,操作系统移植,Linux,内核结构,Linux,内核向,S3C2410,移植,配置和编译内核,2024/10/18,操作系统实验,3,移植的基本概念,使某个平台的代码运行在其他平台上的过程就叫做移植。,Linux,系统通过移植可以运行在,ARM,,,PowerPC,,,M68K,等多种平台上。,软件的移植分三种,:,从一个硬件平台移植到另一个硬件平台,从一个操作系统移植到另一个操作系统,从一种软件库环境移植到另一个软件库环境,软件进行移植的容易程度即可移植性,2024/10/18,操作系统实验,4,硬件平台对移植的影响,Linux,硬件平台,硬件平台对移植的影响,处理器字长,字节顺序,时间,2024/10/18,操作系统实验,5,Linux,硬件平台,在,Linux,内核里,每一个处理器指令集对应一个独立的体系结构,architecture,,比如,alpha, arm, i386, mips, ppc,每个体系结构可以有若干变种,variant,,或不同配置的硬件,machine,,统称,sub-architecture,。以,arm,体系结构举例:,variants,包括,arm7tdmi, arm926ejs, strongarm,xscale,machine,包括,edb7312, smdk2410, omap-h2,2024/10/18,操作系统实验,6,处理器字长,处理器字长,定义为处理器一次能处理的数据位数。,字长等于处理器内部数据通路的宽度,一般可以通过通用寄存器的宽度来判断,处理器字长会影响,int, long,等,C,类型的长度,C,代码当中需要使用确定大小的数据类型,可以使用显式长度的类型:,u8, s8, u16, s16, u32, s32, u64, s64,2024/10/18,操作系统实验,7,字节顺序,字节顺序,byte order,是指一个字中字节排列的顺序,不同硬件可能采用不同,byte order,x86 little-endian,ppc big-endian,Linux,内核将硬件的,byte order,放在,里面定义,,_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 to cpus byte order */,2024/10/18,操作系统实验,8,字节顺序,include/linux/byteorder/bigend.h,2024/10/18,操作系统实验,9,字节顺序,include/linux/byteorder/swab.h,2024/10/18,操作系统实验,10,时间,软件中的与时间相关的代码也会影响移植,采用平台无关的时间表达方法可以提高代码可移植性,Linux,内核里面采用,HZ,来表示每秒钟有多少个内部时钟滴答,以下对时间的描述是平台无关的,HZ /* one second */,(2*HZ) /* two seconds */,(HZ/2) /* half a second */,(HZ/100) /* 10 ms */,(2*HZ/100) /* 20 ms */,2024/10/18,操作系统实验,11,移植环境的搭建,获取内核源码,构建交叉编译环境,2024/10/18,操作系统实验,12,获取内核源码,移植内核之前,获取内核源码自然是第一步,一,个常用的,FTP,地址:,2024/10/18,操作系统实验,13,构建交叉编译环境,搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的,bug,,都会导致最后的代码无法正常运行。,Gcc,的版本有很多种,其中低于,版本的只能编译,Linux2.4,版本的内核,而,既能支持,Linux2.4,版本的内核,也能支持,Linux2.6,版本的内核,.,我们采用,2024/10/18,操作系统实验,14,构建交叉编译环境,下载交叉编译工具包,解压缩文件,然后,我们可以使用命令“,echo $PATH,”来查看添加后的情况,要验证添加是否成功,在终端中输入“,arm-linux-gcc -v,”,查看编译器的版本号,2024/10/18,操作系统实验,15,Linux,操作系统移植,概述,Linux,内核的平台相关代码,已有代码向,Linux,内核移植,Linux,内核移植,2024/10/18,操作系统实验,16,概述,内核移植,arch implementation,drivers porting,2024/10/18,操作系统实验,17,Linux,内核的平台相关代码,Linux,内核对多平台有很好的支持,内核的对外部接口是统一的,并且与平台无关,内核的大多数代码也是与平台无关的,主要的体系结构相关代码存在于,arch/architecture,include/asm-architecture,比如,arm,体系的平台相关代码主要是,arch/arm,include/asm-arm,2024/10/18,操作系统实验,18,已有代码向,Linux,内核移植,将已有代码向内核中移植有一些限制:,内核中没有标准,C,库支持,内核中没有象用户程序那样的内存保护,内核中不便使用浮点操作,内核的堆栈是固定大小的,并且比较有限,在内核中需要编程者考虑并发带来的竞争与冒险,以及同步问题,2024/10/18,操作系统实验,19,Linux,内核移植,Linux,内核代码可以分为平台相关部分和平台无关部分,Linux,内核绝大部分代码是平台无关的,可以被各种平台所共享,调度算法,存储器管理,I/O,子系统,网络协议栈,依赖于特定硬件的代码在,Linux,中采用条件编译的方式区分,ARCH = x86,即打开,x86,特有的代码,ARCH = arm,即打开,arm,特有的代码,2024/10/18,操作系统实验,20,Linux,内核的,arch,目录,进入,arch,目录,每个体系结构代码都有一个子目录,进入,arm,目录,在,arm,体系结构下我们可以看到很多,sub-arch,的子目录,2024/10/18,操作系统实验,21,实现,sub-arch,在,sub-arch,子目录下,以,mach-s3c2410,为例,一个硬件平台支持需要实现以下几个硬件相关的文件,mach-s3c2410.c, irq.c, clock.c, dma.c, gpio.c, pm.c,sleep.c, time.c,2024/10/18,操作系统实验,22,Linux,内核结构,linux,内核主要由,5,个子系统组成:进程调度、内存管理、虚拟文件系统、网络接口和进程间通信。,一般在,Linux,系统中的,/usr/src/linux-*.*.*,目录下就是内核源代码。,Linux,内核非常庞大,包括驱动程序在内有数百兆之多,2024/10/18,操作系统实验,23,Linux,内核代码分布图,char,video,ext2,nfs,i386,arm,ipv4,802,divers,fs,arch,net,init,kernel,mm,ipc,include,2024/10/18,操作系统实验,24,Linux,文件系统,图:,Linux,文件系统组件的体系结构,2024/10/18,操作系统实验,25,arch,目录,Linux,系统能支持如此多的平台的部分原因是因为内核把源程序代码清晰地划分为体系结构无关部分和体系结构相关部分。,arch,目录包含了体系结构相关部分的内核代码,其中每一种都代表一种硬件平台,如对于,X86,平台就是,i386,,还有,alpha,,,arm,等。移植的重点就是,arch,目录下的文件。,对于任何平台,都必须包含以下几个子目录:,boot,:包含启动内核所使用的部分或全部平台特有代码,kernel,:存放支持体系结构特有的,(,如信号处理和,SMP),特征的实现,lib,:存放高速的体系结构特有的,(,如,strlen,和,memcpy),通用函数的实现,mm,:存放体系结构特有的内存管理程序的实现,math-emu,:模拟,FPU,的代码。对于,arm,处理器来说,此目录用,mach-xxx,代替,2024/10/18,操作系统实验,26,其他目录,drivers,系统中所有的设备驱动都位于此目录中。它又进一步划分成几类设备驱动,每一种也有对应的子目录,如声卡的驱动对应于,drivers/sound,。占整个内核发行版本代码的一半以上,非常庞大。有些驱动程序是和硬件平台无关而有些是相关的。,fs Linux,支持的文件系统代码。不同的文件系统有不同的子目录对应,如,ext2,文件系统对应的就是,ext2,子目录。一般来说,文件系统与硬件平台无关。,include,这个目录包括了编译核心所需要的大多数头文件。不同的平台需要的头文件会有所不同,对于每种支持的体系结构分别有一个子目录,如,asm-arm,。,init,此目录包含核心启动代码,有,main.c,和,version.c,两个文件,这是研究内核如何工作的好的起点。,ipc,此目录包含了核心的进程间通讯代码。,2024/10/18,操作系统实验,27,其他目录,mm,此目录包含了所有的内存管理代码。与具体硬件体系结构相关的内存管理代码位于,arch/*/mm,目录下,如对应于,X86,的就是,arch/i386/mm/fault.c,。,modules,此目录包含已建好可动态加载的模块。,kernel,主要核心代码。同时与处理器结构相关代码都放在,arch/*/kernel,目录下。,net,核心的网络部分代码。里面的每个子目录对应于网络的一个方面。,lib,此目录包含了核心的库代码。与处理器结构相关库代码被放在,arch/*/lib/,目录下,包含与平台无关的通用函数。,scripts,此目录包含用于配置核心的脚本文件,在配置内核时用到。,documentation,此目录是一些文档,非常详细,起参考作用。,2024/10/18,操作系统实验,28,Linux,内核向,S3C2410,移植,S3C2410,简介,移植内容:,移植,Bootloader,移植,Linux,内核,移植根文件系统,2024/10/18,操作系统实验,29,S3C2410,简介,S3C2410,简介,S3C2410X,是韩国三星公司推出的,16/32,位,RISC,微控制器,其,CPU,采用的是,ARM920T,内核,加上丰富的片内外设,为手持设备和其它应用,提供了低价格、低功耗、高性能微控制器的解决方案。,主要特性,系统结构,2024/10/18,操作系统实验,30,主要特性,具有,16KB,指令,Cache,、,16KB,数据,Cache,和存储器管理单元,MMU,。,将外部地址空间,8,组,每组,128MB,,总容量达,1GB,;支持从,Nand flash,存储器启动。,55,个中断源,可以设定,1,个为快速中断,有,24,个外部中断,并且触发方式可以设定。,4,通道的,DMA,,并且有外部请求引脚。,3,个通道的,UART,,带有,16,字节的,TX/RX FIFO,,支持,IrDA1.0,功能。,2024/10/18,操作系统实验,31,主要特性,有,2,个,USB,主机总线的端口,或,1,个,USB,设备总线的端口。,有,4,个具有,PWM,功能的,16,位定时器和,1,个,16,位内部定时器。,8,通道的,10,位,A/D,转换器,最高速率可达,500kB/s,;提供有触摸屏接口。,具有,117,个通用,I/O,口和,24,通道的外部中断源。,兼容,MMC,的,SD,卡接口。,具有电源管理功能,可以使系统以普通方式、慢速方式、空闲方式和掉电方式工作。,2024/10/18,操作系统实验,32,主要特性,看门狗定时器。,有,LCD,控制器,支持,4K,色的,STN,和,256K,色的,TFT,,配置有,DMA,通道。,具有,PLL,功能的时钟发生器,时钟频率高达,203MHz,。,双电源系统:,1.8/2.0V,内核供电,,3.3V,存储器和,I/O,供电。,没有内置的网络控制器,如果需要网络功能,一般使用,CS8900,和,DM9000,2024/10/18,操作系统实验,33,2024/10/18,操作系统实验,34,Bootloader,Bootloader,的概念,Bootloader,的结构和启动过程,2024/10/18,操作系统实验,35,Bootloader,Bootloader,的概念,系统上电后,需要一段程序来进行初始化:关闭,WATCHDOG,、改变系统时钟、初始化存储控制器、将更多的代码复制到内存中等。如果它能够将操作系统内核复制到内存中运行,无论从本地(比如,Flash,)还是从远端(比如通过网络),就成这段程序为,Bootloader.,简单的说,,Boot,咯啊,der,就是这么一小段程序,它在系统上电时开始执行,初始化硬件设备、准备好软件环境,最后调用操作系统内核。,在开发时,通畅需要使用各种命令操作,Bootloader,,一般通过串口来连接和开发板,可以再串口上输入各种命令、观察运行结果等。,2024/10/18,操作系统实验,36,Bootloader,Bootloader,的结构,嵌入式,Linux,系统从软件的角度通常可以分为以下四个层次:,引导加载程序,包括固化在固件的,Boot,代码(,BIOS,)和,Bootloader,Linux,内核,文件系统,包括根文件系统。里面包含了,Linux,系统能够运行所必需的应用程序、库等,比如可以给用户提供操作,Linux,的控制界面的,shell,程序、动态链接的程序运行时需要的,glibc,库等,用户应用程序,特定于用户的应用程序也存储在文件系统中。有时在用户应用程序和内核层之间可能还会包括一个嵌入式图形用户界面。常用的嵌入式,GUI,有:,Qtopia,和,MiniGUI,等,2024/10/18,操作系统实验,37,Bootloader,Bootloader,的两个阶段,从固态存储设备上启动的,Bootloader,大多都是两阶段的启动过程。第一阶段使用汇编来实现,它完成一些依赖于,CPU,体系结构的初始化,并调用第二阶段的代码;第二阶段则通常使用,C,语言来实现。,Bootloader,第一阶段的功能,硬件设备,初始化,(,关闭,WATCHDOG,,关中断,设置,CPU,的速度和时钟频率等,),为加载,Bootloader,的第二阶段代码准备,RAM,空间,复制,Bootloader,的第二阶段代码到,RAM,空间中,设置好栈,跳转到第二阶段的,C,入口点,Bootloader,第二阶段的功能,初始化本阶段要使用到的硬件设备,检测系统内存映射,将内核映像和根文件系统应用从,Flash,上读到,RAM,空间中,为内核设置启动参数,调用内核,2024/10/18,操作系统实验,38,配置和编译内核,1,、,解压内核,tar xvfj,linux-2.6.34.1.tar.bz2 C /opt/kernel,2024/10/18,操作系统实验,39,Makefile,与,Kconfig,Linux,的,Makefile,分析,Linux,内核源码中含有很多个,Makefile,文件,这些,Makefile,文件又要包含其他一些文件(比如配置信息、通用规则等。)这些文件构成了,Linux,的,Makefile,体系,可以分为如下五类:,名称,描述,顶层,Makefile,它是所有,makefile,文件的核心,从总体上控制着内核的编译、连接,.config,配置文件,在配置内核时生成。根据,.config,可以确定在编译内核时需要使用哪些文件,arch/$(ARCH)/Makefile,对应体系结构的,Makefile,,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像,Scripts/Makefile.*,Makefile,共用的通用规则、脚本等,Kbuild Makefiles,各级子目录下的,makefile,,他们相对简单,被上一层,makefile,调用来编译当前目录下的文件,2024/10/18,操作系统实验,40,Makefile,与,Kconfig,我们主要来关注,Makefile,是如何决定编译哪些文件的,Linux,内核的编译过程从顶层,Makefile,文件开始,然后递归地进入各级子目录调用他们的,makefile,,分为三个步骤:,顶层,Makefile,决定内核根目录下哪些子目录将被编进内核,Arch/$(ARCH)/Makefile,决定,arch/$(ARCH),目录下哪些文件、哪些目录将被编译进内核,各级子目录下的,Makefile,决定所在目录下哪些文件将被编译进内核,哪些文件将被编译成模块(即驱动程序),进入哪些子目录继续调用他们的,Makefile,。,2024/10/18,操作系统实验,41,Makefile,与,Kconfig,在顶层,Makefile,中可以看到如下内容:,2024/10/18,操作系统实验,42,Makefile,与,Kconfig,对于,arch/$(ARCH)/Makefile,,以,arm,为例,在,arch/arm/Makefile,中可以看到如下内容:,2024/10/18,操作系统实验,43,Makefile,与,Kconfig,Linux,内核中的,.config,文件默认是隐藏的,可以输入指令“,ls -a,”看到,2024/10/18,操作系统实验,44,Makefile,与,Kconfig,.config,配置文件中定义了一系列的变量,,Makefile,将结合他们来决定哪些文件被编译进内核、哪些文件被编译成模块、涉及哪些子目录,顶层,makefile,和,arch/$(ARCH)/makefile,决定根目录下哪些子目录、,arch/$(ARCH),目录下哪些文件和目录将被编译进内核,最后,各级子目录下的,makefile,决定所在目录下哪些文件将被编进内核,哪些文件将被编成模块,进入子目录哪些子目录继续调用他们的,Makefile,2024/10/18,操作系统实验,45,Makefile,与,Kconfig,内核源码每个子目录中都有一个,Makefile,与,Kconfig,。,Makefile,的作用已经讲述过了,而,Kconfig,用户配置内核,它就是各种配置界面的源文件。内核的配置工具读取各个,Kconfig,文件,生成配置界面供开发人员配置内核,最后生成配置文件,.config,Arch/arm/mach-s3c2410/Kconfig,2024/10/18,操作系统实验,46,配置和编译内核,3,、,在系统中添加对,ARM,的支持,进入内核源码,修改“,Makefile,”文件,在,189,行,“ARCH ?= (SUBARCH)”,和,194,行,“CROSS_COMPILE ?= “,将其修改为”,ARCH = arm,” 和“,CROSS_COMPILE = arm-linux-,”,然后保存,2024/10/18,操作系统实验,47,配置和编译内核,4,、 配置内核,一般运行,make menuconfig,配置内核,内核的配置选项有很多,用户可以使用我们提供的预配置文件,s3c2410,,也可以自行配置,选择相应的配置时,有三种选择,(,按空格键进行选择,),,它们分别代表的含义如下:,*, 将该功能编译进内核, , 不将该功能编译进内核,M, 将该功能编译成可以在需要时动态插入到内核中的模块,2024/10/18,操作系统实验,48,配置和编译内核,2024/10/18,操作系统实验,49,S3C2410X,所用到的内核选项配置,内核配置主菜单,:,Code maturity level options -,代码成熟等级,Loadable module support -,对模块的支持,System Type -,系统类型,General setup -,普通的属性设置,Parallel port support -,并口支持,Memory Technology Devices (MTD) - MTD,设备,Plug and Play configuration -,即插即用配置,Block devices -,块设备,Multi-device support (RAID and LVM) -,多设备驱动支持,Networking options -,网络选项,Network device support -,网络设备支持,Amateur Radio support -,业余无线广播,IrDA (infrared) support -,红外支持,ATA/IDE/MFM/RLL support - ATA/IDE,设备支持,SCSI support - SCSI,支持,2024/10/18,操作系统实验,50,S3C2410X,所用到的内核选项配置,IEEE 1394 (FireWire) support (EXPERIMENTAL) - 1394,支持,I2O device support - I2O,设备支持,ISDN subsystem - ISDN,子系统,Input core support -,输入输出设备,Character devices -,字符设备,Multimedia devices -,多媒体设备,File systems -,文件系统,Console drivers -,控制台,Sound -,声音,Multimedia Capabilities Port drivers -,多媒体兼容设备,USB support - USB,设备,Bluetooth support -,蓝牙支持,Kernel hacking -,内核调试,-,Load an Alternate Configuration File -,保存当前配置,Save Configuration to an Alternate File -,载入预配置,2024/10/18,操作系统实验,51,S3C2410X,所用到的内核选项配置,Code maturity level options -,代码成熟等级配置选:, * Prompt for development and/or incomplete code/drivers Prompt for obsolete code/drivers,说明:如果要试验现在仍处于实验阶段的功能,比如,IPv6,等,就必须把该项选择为,Y,了;否则可以把它选择为,N,。在,Linux,的世界里,每天都有许多人为它开发支持的,driver,和加强它的核心。但是有些,driver,还没进入稳定的阶段。但其作者很欢迎其他人去测试这些,driver,并提出一些,bugs,。这个问题是说,有一些,drive,还在做测试中,问您是否要选择这些,driver,或支持的程序。,Loadable module support -,对模块的支持配置选项:,* Enable loadable module support Set version information on all module symbols* Kernel module loader,2024/10/18,操作系统实验,52,配置和编译内核,5,、利用默认配置做自己的配置单,在目录,arch/arm/configs,下有所有的系统针对各种平台的默认配置单,其中包括名为“,s3c2410_defconfig,”的配置单,该配置文件里面选择了几乎所有的和,S3C24XX,系列,CPU,相关的配置选项,我们可以在这个配置单的基础上进行配置。,当然,如果有兴趣、时间以及经历的话,完全可以自行配置,具体配置方法,建议摸索,不要害怕出错或失败。,在配置菜单中选择选项“,Load an Alternate Configuration File,”,然后调用刚刚提到的那个配置文件,确认之后,返回到配置界面,2024/10/18,操作系统实验,53,配置和编译内核,2024/10/18,操作系统实验,54,配置和编译内核,2024/10/18,操作系统实验,55,配置和编译内核,6,、保存配置单,然后,选择选项:“,Save,an Alternate Configuration File,”,将其保存为,”.config”,文件,因为编译系统时会调用该文件,2024/10/18,操作系统实验,56,配置和编译内核,7,、编译镜像,然后输入,”make zImage”,,就可以进行编译了,编译完毕后,会在内核源码的“,arch/arm/boot,”目录下面生成名为“,zImage,”的镜像,然后可以将其烧写到开发板中,(,前提是已经烧写了,Bootloader),。,2024/10/18,操作系统实验,57,配置和编译内核,8,、后续工作,前面所做的工作仅仅只是皮毛,移植一个,Linux,内核远比这复杂,移植,Bootloader,、移植内核、移植驱动、移植根文件系统、移植图形开发界面等等。,2024/10/18,操作系统实验,58,作业,学完操作系统的感想,对于,Unix/linux,操作系统的应用前景的看法,截止日期:,2011,年,1,月,1,日,18,点,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 课件教案


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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