嵌入式系统设计与开发教程 课件 第7章 嵌入式系统的移植_第1页
嵌入式系统设计与开发教程 课件 第7章 嵌入式系统的移植_第2页
嵌入式系统设计与开发教程 课件 第7章 嵌入式系统的移植_第3页
嵌入式系统设计与开发教程 课件 第7章 嵌入式系统的移植_第4页
嵌入式系统设计与开发教程 课件 第7章 嵌入式系统的移植_第5页
已阅读5页,还剩35页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第8章

嵌入式系统移植移植的基本概念使某个平台的代码运行在其他平台上的过程就叫做移植。如Linux系统通过移植可以运行在ARM,PowerPC,M68K等多种平台上。软件的移植:从一个硬件平台移植到另一个硬件平台从一个操作系统移植到另一个操作系统软件进行移植的容易程度即可移植性3嵌入式系统需要移植什么?Bootloader操作系统内核(kernel)文件系统硬件驱动应用程序嵌入式系统的BootLoader程序相当于PC中BIOS+MBR大多数BootLoader程序都包括两种不同的操作模式:启动加载模式(Bootloading)下载模式(Downloading)BootLoader1、把Linux操作系统针对具体的目标平台做必要的改写之后,安装到该目标平台使其正确运行,这就叫内核移植。2、因为不同的嵌入式系统使用的微处理器不同,且硬件设计时,可能存储器安排的地址也不同。因此要根据系统的体系结构、硬件的结构来修改源代码,否则系统不能正确运行。3、一般由将它打到内核上,最后进行交叉编译就行。目标平台提供商来完成。例如ARM平台,它的这部分工作就是由ARM公司的工程师完成的。我们所做的就是:下载相关版本的linux内核补丁,操作系统内核

根文件系统是Linux操作系统运行时所需要的特有文件系统,相当于Windows中的C盘。不仅具有普通文件系统的存储数据文件的功能,还被操作系统用来存储运行时所需要的一些特殊文件。这些特殊文件包括操作系统运行时的配置数据文件(通常位于/etc目录下)和设备文件(位于/dev目录下)。操作系统通过使用它们来与应用程序进行接口,并与设备进行交互。根文件系统

指系统启动后运行的程序,如手机上启动的第一个程序,有的是Android程序,有的是Qt程序,根据不同的需求不一而足。

有的应用程序直接放在根文件系统,有的则是存放在另外的文件系统。应用程序从Linux系统角度看,通常可以分为四个层次,即:引导加载程序(BootLoader)Linux内核根文件系统用户应用程序嵌入式软件系统分四层2025/1/9操作系统实验9Linux操作系统移植获取内核源码构建交叉编译环境101、获得内核代码,并解压内核源码的官方网址:此处的内核首先确保的是在Intelx86体系结构上可以正常运行。国内镜像/sites//pub/linux/kernel/Linux下输入以下命令可获得linux的代码:sudowget/sites//pub/linux/kernel/v.../linux-版本号.tar.xzARM体系结构的源码网址:.uk/developer获得内核源码#cd/root/yizhi/boot-kernel-source/#tariTop4412_Kernel_3.0_20191007.tar.gz#cdiTop4412_Kernel_3.0镜像中的内核源代码:/root/yizhi/boot-kernel-source/iTop4412_Kernel_3.0_20191007.tar.gz解压缩代码:内核源码目录结构分析arch与体系结构相关的代码。对应于每个支持的体系结构,有一个相应的子目录如x86、arm等,每个体系结构子目录下包含几个主要子目录:.boot启动内核所需的平台特有代码.kernel体系结构特有特征(如SMP)的实现.mm 与体系结构相关的内存管理代码.lib 与体系结构相关的通用函数的实现内核源码目录结构分析drivers所有设备驱动程序代码,它占整个内核代码量一半以上,每一个子目录对应一类驱动程序。fs文件系统代码,每个支持的文件系统有相应的子目录,如cramfs,yaffs,jffs2等include

包括编译内核所需的大部分头文件,与平台无关的头文件放在include/linux子目录下,平台相关的头文件如include/asm-arm内核源码目录结构分析init内核初始化代码kernel内核管理核心代码lib库函数代码Mm内存管理代码net网络支持代码sound音频设备驱动代码scripts用于配置内核的脚本文件documentation内核相关文档2、构建交叉编译环境搭建交叉编译环境是嵌入式开发的第一步,也是很关键的一步。不同的体系结构、不同的操作内容设置是不同的版本的内核,都会用到不同的交叉编译器。选择交叉编译器非常重要,有些交叉编译器经常会有部分的bug,都会导致最后的代码无法正常运行。gcc的版本有很多种,我们采用arm-linux-gcc2009q3版本修改交叉编译环境cd输入以下命令查看编译器版本arm-none-gnueabi-linux-gcc-vvim.bashrc在最后一行加入:exportPATH=$PATH:/usr/local/arm/arm-2009q3/bin:wq保存退出输入exit推出root用户重新su进入rootLinux内核配置(1)尺寸小。

自己定制内核可以使代码尺寸减小,运行将会更快。(2)节省内存。

由于内核部分代码永远占用物理内存,定制内核可以使系统拥有更多的可用物理内存。(3)减少漏洞。

不需要的功能编译进入内核可能会增加被系统攻击者利用的机会。(4)动态加载模块。

根据需要动态地加载或者卸载模块,可以节省系统内存。

因此,在编译之前必须根据特定平台配置内核源代码。Linux内核有上千个配置选项,配置相当复杂。所以,Linux内核源代码组织了一个配置系统。

18Makefile与.configLinux的Makefile分析

内核源码中含有很多个Makefile文件,这些Makefile文件又要包含其他一些文件(比如配置信息、通用规则等。)这些文件构成了Linux的Makefile体系,可以分为如下五类:名称描述顶层Makefile它是所有makefile文件的核心,从总体上控制着内核的编译、连接.config配置文件,在配置内核时生成。根据.config可以确定在编译内核时需要使用哪些文件arch/$(ARCH)/Makefile对应体系结构的Makefile,它用来决定哪些体系结构相关的文件参与内核的生成,并提供一些规则来生成特定格式的内核映像Scripts/Makefile.*Makefile共用的通用规则、脚本等KbuildMakefiles各级子目录下的makefile,他们相对简单,被上一层makefile调用来编译当前目录下的文件Makefile是如何决定编译哪些文件?1).config配置文件中定义了一系列的变量,Makefile将结合这些变量来决定哪些文件被编译进内核、哪些文件被编译成模块、涉及哪些子目录。2)

编译过程从顶层Makefile文件开始,然后递归地进入各级子目录调用他们的makefile,分为三个步骤:顶层Makefile决定内核根目录下哪些子目录将被编进内核Arch/$(ARCH)/Makefile决定arch/$(ARCH)目录下哪些文件、哪些目录将被编译进内核各级子目录下的Makefile决定所在目录下哪些文件将被编译进内核,哪些文件将被编译成模块(即驱动程序),进入哪些子目录继续调用他们的Makefile。2025/1/9操作系统实验20Makefile与.configLinux内核中的.config文件默认是隐藏的,可以输入指令“ls–a”查看

如何得到.config?内核源码每个子目录中都有一个Makefile与Kconfig。

Kconfig是各种配置界面的源文件。内核的配置工具读取各个Kconfig文件,生成配置界面供开发人员配置内核,最后生成配置文件.configArch/arm/mach-exynos/Kconfig配置命令有三种:makeconfig字符界面

makemenuconfigNcurses图形界面makexconfigXwindows图形界面配置文件:执行以上任意一个命令配置内核后生成文件.config,执行make时根据.config来决定使用哪些Makefile配置内核1、执行配置命令配置内核一般运行makemenuconfig配置内核,内核的配置选项有很多,用户可以使用提供的预配置文件,也可以自行配置,选择相应的配置时,有三种选择(按空格键进行选择),它们分别代表的含义如下:

[*]-将该功能编译进内核

[]-不将该功能编译进内核

[M]-将该功能编译成可以在需要时动态插入到内核中的模块配置和编译内核配置和编译内核如果要利用默认配置做自己的配置单

(不做)

在目录arch/arm/configs下有所有的系统针对各种平台的默认配置单,其中exynos4_defconfig为4412cpu的默认配置单,用户也可以在这个配置单的基础上进行配置。输入命令

makeexynos4_defconfig再输入命令makemenuconfig,在进行修改。载入配置文件

arch/arm/configs/exynos4_defconfig2025/1/9操作系统实验26配置和编译内核2、保存配置单

将其保存为”.config”文件,因为编译系统时会调用该文件编译内核内核文件:vmlinux编译出来的最原始的内核文件,未压缩zImage是vmlinux经过gzip压缩后的文件

uImageU-boot专用的映像文件,由bootm命令启动

4、输入”makezImage”,编译完毕后,会在内核源码的“arch/arm/boot”目录下面生成名为“zImage”的镜像,然后可以将其烧写到开发板中。配置和编译内核5、后续工作前面所做的工作仅仅只是皮毛,移植一个Linux内核远比这复杂移植Bootloader、移植内核、移植驱动、移植根文件系统、移植图形开发界面等等。将自己编写的VirtualCharDev驱动加入到内核1、将VirtualCharDev.c和VirtualCharDev.h拷贝到内核代码iTop4412_Kernel_3.0/drivers/char目录下cd/root/yizhi/boot_kernel_source/iTop4412_Kernel_3.0/drivers/charcp/home/xitee/driver/VirtualCharDev/VirtualCharDev.c./cp/home/xitee/driver/VirtualCharDev/VirtualCharDev.h./将自己编写的VirtualCharDev驱动加入到内核2、修改MakefilevimMakefile到文件最末端加入一句:obj-$(CONFIG_VIRTDEV_CTL)+=VirtualCharDev.o保存退出将自己编写的VirtualCharDev驱动加入到内核3、修改KconfigvimKconfig到文件最末端endmenu前加入一段:保存退出将自己编写的VirtualCharDev驱动加入到内核4、退回到内核目录(iTop4412_Kernel_3.0)下cd../..makemenuconfig选中对应的项目将自己编写的VirtualCharDev驱动加入到内核5、vim.config可查看到CONFIG_VIRTDEV_CTL=y表示该选项已被选中编译,6、makezImage在…./drivers/char目录下可看到Virt

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论