第九章 嵌入式Linux操作系统移植

上传人:猪** 文档编号:243144338 上传时间:2024-09-16 格式:PPT 页数:30 大小:698.50KB
返回 下载 相关 举报
第九章 嵌入式Linux操作系统移植_第1页
第1页 / 共30页
第九章 嵌入式Linux操作系统移植_第2页
第2页 / 共30页
第九章 嵌入式Linux操作系统移植_第3页
第3页 / 共30页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,最新,的,Linux,内核版本可以从官方站点,http:/www.kernel.org,获取。,因为嵌入式,Linux,系统在开发过程中需要对,Linux,内核进行重新定制,所以熟悉内核配置、编译和移植是非常重要的。,1.Linux,内核的版本,Linux,内核的版本号分为主版本号、次版本号和扩展版本号等。根据稳定版本、测试版本和开发版本定义不同版本序列。,9.1,嵌入式,Linux,基本概念,2.Linux,系统的分类,(,1,)以功能差异和发行组织分类,标准,linux,。,Clinux,。无,MMU,支持的,linux,系统,运行在无,MMU,的,CPU,上。,Linux-RT,。是最早在,linux,上实现硬实时支持的,linux,发行版本。,Linux/RTAI,。,Embedix,。由,Lineo,公司开发,基于,PowerPC,和,x86,平台开发的。,Red Hat Linux,。,红旗,Linux,等。,(,2,)以应用的嵌入式平台分类,在嵌入式,Linux,系统开发过程中,内核移植是将系统适合于自己特定的硬件平台系统的重要步骤,只有引导内核完毕,才能运行用户应用程序。,9.1,嵌入式,Linux,基本概念,3. Linux,内核组成:内存管理、进程调度、虚拟文件系统、网络接口、进程间通信,.,Linux,内核由进程管理、内存管理、虚拟文件系统、网络接口和进程间通信五大子系统组成,各个子系统之间的依赖关系如下图所示。,9.1,嵌入式,Linux,基本概念,内存管理,虚拟文件系统,进程调度,网络接口,进程间通信,9.1,嵌入式,Linux,基本概念,Linux,系统结构层次,可以发现,Linux,内核中各个系统之间有如下关系:,(,1,)进程调度处于中间。,(,2,)进程调度与内存管理的依赖关系,(,3,)进程间通信依赖于内存管理。,(,4,)虚拟文件系统与网络接口之间的关系。,(,5,)内存管理与虚拟文件系统之间的关系。,9.1,嵌入式,Linux,基本概念,Linux,内核源码非常庞大,采用,C,语言和少量汇编实现,并且随着版本的发展不断增加。源码的工程管理采用目录树结构,并使用,Makefile,组织配置编译。,获得新的,Linux2.6,内核源码之后,一般首先仔细阅读顶层目录的,README,文件,了解对内核的概述和编译命令说明。,顶层目录中另一个比较重要的文件是,Makefile,,它是整个内核配置编译的核心文件,负责组织目录树中的子目录的配置编译管理,还决定了体系结构和内核版本号等。,9.2 Linux,内核源码结构,Linux,内核源码非常庞大,采用,C,语言和少量汇编实现,并且随着版本的发展不断增加。源码的工程管理采用目录树结构,并使用,Makefile,组织配置编译。,获得新的,Linux2.6,内核源码之后,一般首先仔细阅读顶层目录的,README,文件,了解对内核的概述和编译命令说明。,顶层目录中另一个比较重要的文件是,Makefile,,它是整个内核配置编译的核心文件,负责组织目录树中的子目录的配置编译管理,还决定了体系结构和内核版本号等。,9.2 Linux,内核源码结构,9.2 Linux,内核源码结构,1,Linux,内核源代码目录结构,arch,包含和硬件体系结构相关的代码,每种平台占一个相应,的目录。如,arm,、,avr32,、,blackfin,、,mips,等。,block,块设备驱动程序的,IO,调度。,crypto,常用的加密和离散算法,还有一些压缩和,CRC,校验算法,9.2 Linux,内核源码结构,Documentation,内核的说明文档。,drivers,设备驱动程序,其下细分为不同种类的设备。如,block,、,char,、,mtd,、,net,、,usb,、,video,等等。,fs,内核支持的文件系统的实现,如,ext2,、,ext3,、,cramfs,、,jffs2,、,nfs,等,。,Linux,内核源代码目录结构,9.2 Linux,内核源码结构,Linux,内核源代码目录结构,include,头文件。与系统相关的头文件放在,include/linux,下,,与,ARM,体系结构相关的头文件放在,include/asm-arm,下。,init,内核初始化代码。,ipc,进程间通信代码。,9.2 Linux,内核源码结构,Linux,内核源代码目录结构,kernel,内核的核心代码,包括进程调度、定时器等。和,arm,平,台相关的核心代码在,arch/arm/kernel,目录下。,lib,库文件代码,mm,内存管理代码,和,arm,平台相关的内核管理代码在,arch/arm/mm,目录下。,9.2 Linux,内核源码结构,Linux,内核源代码目录结构,net,网络相关的代码,实现了各种常见的网络协议。,scripts,包含用于配置内核的各种脚本文件。只在配置时是有意义的。,sound,音频设备驱动的通用代码和硬件驱动代码都在这个文件件下面。,Linux,内核有两种映像,:,非压缩内核,Image,压缩内核,zImage,嵌入式系统存储容量有限,因此通常选择压缩内核,zImage.,要使用压缩内核,zImage,,需要在映像开头加入解压缩代码,将,zImage,解压后,才可以执行。,9.2 Linux,内核源码结构,2,Linux,内核启动方案,内核编译完成后,会在,arch/arm/boot,目录下生成,zImage,文件。,zImage,文件的组成:,pggy.o:,压缩后的内核文件,head.o:,系统初级初始化代码文件,misc.o:,解压缩代码文件,9.2 Linux,内核源码结构,3,zImage,的构成,对于,ARM,处理器来讲,,Linux,内核,zImage,第一段代码入口位于,arch/arm/boot/compressed/head.S,文件中。,它依次完成如下功能:,初始化,Cache,、,Mmu,等设置,跳转到,C,语言内核解压函数中,bl decompress_kernel,跳转到非压缩内核启动汇编段,b call_kernel,9.2 Linux,内核源码结构,汇编部分,9.3.1,内核修改,1.,解压内核源码,使用如下命令进行加压:,tar,jxvf,linux-2.6.32.4.tar.bz2,2.,修改,Makefile,整个,Linux,内核工程是以,Makefile,为核心完成编译和连接的。,进入内核源码目录,使用编辑工具打开一级目录下的,Makefile,文件,找到相关变量进行修改:,ARCH?= arm,CROSS_COMPILE?= arm-,linux,-,9.3,内核移植的一般步骤,3.,修改目标板输入时钟,使用编辑工具打开内核源码目录中,arch/arm/mach-s3c2440/mach-smdk2440.c,文件,找到函数,mini2440_map_io(void),的实现代码,如下:,s3c24xx_init_clocks(12000000);,4,修改,MTD,分区,Linux,下的,MTD,驱动程序接口被划分为两类模块:用户模块和硬件模块。,内核,MTD,分区必须与,Bootloader,分区相一致。,最后去掉,ECC,校验:将,driver/mtd/nand/s3c2410.c,文件中的“,NAND_ECC_SOFT,”,语句将其改为“,NAND_ECC_NONE;”,。,9.3,内核移植的一般步骤,9.3,内核移植的一般步骤,5.,配置,yaffs2,文件系统的补丁,YAFFS,意义为,yet another flash file system,,也是一个开源的文件系统。,YAFFS,文件系统则是专门针对,NAND flash,的,源代码可以到,http:/www.aleph1.co.uk/yaffs/index.html,上下载。,使用如下命令解压补丁包:,tar -zxvf root.tar.gz,进入补丁所在目录,使用如下命令打补丁:,./patch-ker.sh c ,其中,为,linux,内核源码所在目录。,上面命令执行过程中相当于完成以下三项操作:,(1),修改内核,fs/Kconfig,:,增加了一行,:source fs/yaffs2/Kconfig,(2),修改内核,fs/Kconfig,增加一行,:ojb-$(CONFIG_YAFFS_FS) +=yaffs2/,(3),在内核,fs/,目录下创建,yaffs2,目录,9.3.2,内核配置,Linux,内核版本不断更新,新的内核修订了旧内核的,bug,,并增加了许多新的特性。,为了正确、合理、有选择地使用内核提供的模块,设置内核编译配置选项,一般主要有下面几个考虑。,.,节省存储空间。,.,节省运行空间。,.,减少漏洞。,针对于一个新的目标系统按照上一节进行了内核的修改之后,就可以对内核进行进一步的配置工作。,9.3,内核移植的一般步骤,1.,内核配置工具,配置工具主要包含,Makefile,、,Kconfig,和配置界面生成工具,这些项目可以由,Kbuild,系统调用,生成配置界面。配置界面是通过工具来生成的,工具通过,Makefile,编译执行,选项则是通过各级目录的,Kconfig,文件定义。,Linux 2.6,内核中,Makefile,分类:,Kernel Makefile,顶层目录下的,Makefile,文件,.config,内核配置文件,arch/$(ARCH)/Makefile,对应不同平台体系结构的,Makefile,scripts/Makefile.*,所有,kbuild Makefiles,的通用规则等定义,kbuild Makefiles,内核编译各级目录下的,Makefile,文件,9.3,内核移植的一般步骤,Kbuild,大体上按照下列步骤执行编译过程。,内核配置,生成,.config,文件。,保存内核版本信息到,include/linux/version.h,。,创建链接符号,include/asm,,链接,include/asm-$(ARCH),源目录。,升级所有依赖的前提文件,在,arch/$(ARCH)/Makefile,中指定附加依赖条件。,递归地遍历各级子目录并且编译所有的目标。,init-*,、,core*,、,drivers-*,、,net-*,、,libs-*,的目录变量值在,arch/$(ARCH)/Makefile,文件中有些扩展。,链接所有的目标文件,生成顶层目录的,vmlinux,。链接的第一个目标文件在,head-y,列表中,是在,arch/$(ARCH)/Makefile,中定义的。,最后,体系结构相关的部分作必须的后期处理,编译生成最终的引导映像。这可以包括编译引导记录;准备,initrd,映像等类似工作。,9.3,内核移植的一般步骤,(,1,)配置入口,在顶层的,Makefile,中,可以查找到如下几行定义的规则。,config %config: scripts_basic outputmakefile FORCE,$(Q)mkdir -p include/linux,$(Q)$(MAKE) $(build)=scripts/kconfig $,(,2,),Kconfig,下面解释一下,Kconfig,的特点和语法。,菜单项,菜单属性,菜单依赖关系,菜单组织结构,Kconfig,语法,9.3,内核移植的一般步骤,(,3,)内核编译方式,Kbuild,系统使用,Kbuild Makefile,来编译内核或模块。,Kbuild Makefile,的文件名不一定是,Makefile,,尽管推荐使用,Makefile,这个名字。,Kbuild Makefile,的一个最主要功能就是指定编译什么,这个功能是通过两个对象指定的,obj-?,和,xxx-objs,。,obj-?,语法:,obj-? = $(target).o,xxx-objs,指定了编译对象需要的文件,一般只有在源文件是多个时才需要它。,9.3,内核移植的一般步骤,(,4,)配置选项,在进行配置之前,在内核目录下执行下列操作,生成平台默认配置文件,.config,:,make s3c2410_defconfig,执行完后会出现:,# configuration written to .config,。,常规设置选项,General setup,引导模块支持,Loadable module support,块设备,Enable the Block layer,处理器类型及特性,Processor type and features,电源管理选项,Power management options (ACPI, APM),总线选项,Bus options,用户可执行文件格式,Executable file formats,驱动程序配置选项,Driver Drivers,9.3,内核移植的一般步骤,9.3.3,内核编译,编译的步骤就是执行一些相对固定的命令目标序列。,Kbuild,还提供了许多可选的配置编译目标和规则。可以使用,make help,命令把所有的配置编译目标和说明信息打印到屏幕。,其中常用的配置编译目标有(其执行格式为:,make ,):,(,1,)清理目标(,Clean targets,):,(,2,)内核配置的目标(,Configuration targets,),(,3,)其他通用目标(,Other generic targets,),(,4,)静态解析器目标(,Static analysers,),(,5,)内核打包目标(,Kernel packaging,),(,6,)文档目标(,Documentation targets,),(,7,),ARM,体系结构相关的目标(,Architecture specific targets (arm),),(,8,)缺省目标,9.3,内核移植的一般步骤,内核编译产生了哪些目标,连接形成了哪些映像,这些映像是如何组成的,又处于,Linux,内核启动运行的哪个阶段,1.vmlinux,映像:了解这个映像(,vmlinux image,)的构成。,2.zImage,映像:嵌入式,Linux,系统的引导方式有两种,一种是上文所说的非压缩方式;另外一种是压缩方式。,zImage,产生的过程。,Linux,内核是一个很复杂的代码块,有许许多多的全局符号。它不使用符号名,而是通过变量或函数的地址来识别变量或函数名。,内核主要是用,C,写的,编译成目标代码或者映像就可以直接使用地址了。,9.3,内核移植的一般步骤,9.3.4,建立,Linux,根文件系统,1.,文件系统介绍,2.Linux,文件系统:包括以下几项内容:,基本的文件系统结构,包含一些必需的目录比如:,/,dev,,,/,proc,,,/bin,,,/,etc,,,/lib,,,/,usr,,,/,tmp,等。,基本程序运行所需的库函数,如,Glibc,/,uC-libc,。,基本的系统配置文件,比如,rc,,,inittab,等脚本文件。,必要的设备文件支持:,/,dev,/,hd,*,,,/,dev,/,tty,*,,,/,dev,/fd0,。,基本的应用程序,如,sh,,,ls,,,cp,,,mv,等。,9.3,内核移植的一般步骤,3.,根文件系统的结构,(,1,),/dev,设备文件。,(,2,),/root root,用户主目录。,(,3,),/usr,。,(,4,),/var,。,(,5,),/home,。,(,6,),/proc,。,(,7,),/bin,。,(,8,),/sbin,。,(,9,),/etc,。,(,10,),/boot,。,(,11,),/lib,。,(,12,),/mnt,。,(,13,),/tmp,。,(,14,),/initrd,9.3,内核移植的一般步骤,4.,制作根文件系统,(,1,)建立目录结构,(,2,)编译,busybox,(,3,)创建设备节点,(,4,)建立配置文件,(,5,)添加共享链接库,(,6,)制作映像,9.3,内核移植的一般步骤,9.3.5,下载目标文件,首先要通过目标板的,JTAG,接口将,Bootloader,映像下载到它的分区中 运行有,Bootloader,的目标板一般都具有下载操作系统内核和根文件系统的能力。,下载的命令为,Load,,说明如下:,vivi load help,Usage:,load | ,9.3,内核移植的一般步骤,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 小学资料


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

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


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