收藏 分享(赏)

嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt

上传人:bubibi 文档编号:20014197 上传时间:2023-12-02 格式:PPT 页数:114 大小:1.65MB
下载 相关 举报
嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt_第1页
第1页 / 共114页
嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt_第2页
第2页 / 共114页
嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt_第3页
第3页 / 共114页
嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt_第4页
第4页 / 共114页
嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt_第5页
第5页 / 共114页
亲,该文档总共114页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述

1、第4章:交叉编译环境构建和系统移植4.1嵌入式交叉编译环境构建4.2Bootloader程序4.3 Linux内核移植和编译第4章:嵌入式交叉编译环境及系统裁剪 4.1嵌入式交叉编译环境构建4.2Bootloader程序4.3 Linux内核移植和编译在通用计算机上开发软件时,一般是软件开发环境(编译、调试)与软件运行环境相同。思考以下问题:(1)什么叫交叉编译?(2)为什么要使用交叉编译?1 1、交叉编译概述、交叉编译概述交叉开发(CrossDeveloping)的模式是指:开发系统在PC机(一般称为宿主机或host)上,即完成软件的编辑、编译、链接等工作;软件的运行是在嵌入式设备(一般称为

2、目标机或target)上。宿主机目标机交叉编译定义:交叉编译是指:在宿主机上进行软件编辑、编译、链接等,并生成能够在目标机上运行的可执行程序的过程。宿主机目标机使用交叉编译的原因:由于嵌入式系统的硬件资源有限,不能安装编译所需要的资源。(1)实时在线仿真(2)模拟调试(3)软件调试(3)OCD调试2 2、嵌入式常用的调试方法、嵌入式常用的调试方法(1)实时在线仿真(ICE)方式 实时在线仿真(In-Circuit Emulator,ICE)是一种用于替代目标上CPU的设备,可以执行目标机CPU指令,能够将内部的信号输出到被控的目标机,ICE上的内存也可以被映射到用户的程序空间。这样,即使目标机

3、不存在,也可以进行代码调试。实时在线仿真具有以下优缺点:优点:功能非常强大,软硬件均可做到完全实时在线调试。缺点:价格昂贵。(2)模拟调试调试工具和待调试的嵌入式软件都在宿主机上运行,由宿主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。优点:简单方便,不需要目标机,成本低。缺点:功能非常有限,无法实时调试。(3)软件调试宿主机和目标机通过某种接口(通常是串口)连接,宿主机上提供调试界面,待调试软件下载到目标机上运行。这种方式的先决条件是在宿主机和目标机之间建立起通信联系(目标机上需要固化监控程序)将一段称为ROM Monitor的程序固化在目标机上,负责监控目标机上被调试程序的运行

4、。优点:纯软件,价格较低,简单,软件调试能力较强。缺点:需要事先在目标机上烧写监控程序(往往需多次试验才能成功),且目标机能正常工作,功能有限,特别是硬件调试能力较差。(4)OCD方式 OCD(片上调试器)将ICE提供的实时跟踪和运行控制分开,使用很少的实时跟踪功能放弃,而大量使用的运行控制放到目标机的CPU核内,由一个专门的调试控制逻辑模块来实现,并用一个专用的串行信号接口开放给形。这样,OCD可以提供ICE80%的功能,成本还不到ICE的20%。由于历史原因,OCD有许多不同的实现方式,标准并不统一。比较典型的有:IBM和TI公司提出的连接测试存取组(Joint Test Action G

5、roup,JTAG)。Motorola公司提出的后台调试模式(Background Debugging Method,BDM)嵌入式交叉编译硬件连接图2 2、交叉编译环境构建、交叉编译环境构建交叉编译环境构建包括2个部分:第一部分是:宿主机(嵌入式交叉编译环境)PC+Linux+交叉编译工具链(toolchain-4.4.6)第二部分是:目标机(嵌入式软件运行环境)实验箱+引导程序+嵌入式操作系统。本教材选用的目标机是FS4412,选用的操作系统是Ubuntu 12.04 LTS 64bit,并配有USB、RS232串口(也可以使用USB转串口替代)和至少一路以太网卡接口(RJ45)等。交叉编

6、译环境(交叉工具链)交叉编译环境(交叉工具链)已安装在/usr/local/toolchain/toolchain-4.6.4/bin/目录,如何让他们立即生效?(1)在/etc/bash.bashrc文件最后一行添加exportPATH=$PATH:/usr/local/toolchain/toolchain-4.6.4/bin/(2)source/etc/bash.bashrc(3)arm-none-linux-gnueabi-gcc-vecho$PATH命令是什么意思?3 3、串口通信软件配置串口通信软件配置可以使用串口通信软件来监视和控制目标机。串口通信软件很多,这里介绍“超级终端”软

7、件(1)选择“开始”“所有程序”“附件”“通讯”“超级终端”,弹出“连接描述”对话框,(2)在连接硬件时,通常使用宿主机的第一个串口,即COM1(要根据实际情况决定,如果使用USB转串口线时,则一般不是COM,可以从硬件资源中查看)(3)串口的属性主要包括:波特率、数据位、奇偶校验位,停止位和数据流控制等(属性要与连接的目标机一致)(4)对该窗口的操作就是对目标机的操作(5)目标机开机(图中的信息是目标机的启动提示信息)4、目标机运行环境构建(软件部署)、目标机运行环境构建(软件部署)问题:(1)目标机上运行Linux系统需要那些软件?部署在什么地方?(关机状态)(2)目标机启动Linux的过

8、程?(3)如何部署系统软件?复习一下:(1)PC机运行Windows部署了那些软件?部署在什么地方?(关机状态)(2)PC机启动Windows过程(BIOS、硬盘和内存等在启动过程中的作用)?FS4412目标机运行Linux系统需要的映像文件如下。(1)ubootfs4412.bin:Uboot镜像文件。(2)uImage:Linux(Ubuntu)镜像文件。(3)exynos4412fs4412.dtb:设备树镜像文件。(4)ramdisk.img:根文件系统镜像文件。FS4412目标机需要的软件软件部署启动Linux的过程如何将软件部署到如何将软件部署到Flash上上(1)利用专门的Fla

9、sh烧写设备(2)利用Uboot的命令和环境变量拨码开关启动方式OM2OM3OM5OFFONONeMMC和NFS挂载ONOFFOFFTF/SDFS4412支持的启动方式第一步:使用SD卡启动Uboot,使用命令将Uboot写入到目标机的Flash上。因为在目标机上没有任何程序时,只能选择SD卡启动。第二步:选择eMMC方式启动(因为Flash已经有了Uboot)。使用命令和环境变量,将内核镜像(uImage)、设备树(exynos4412-fs4412.dtb)和文件系统镜像(ramdisk.img)等文件烧写到目标机的Flash中。可以使用Linux系统的TFTP服务来传输文件。如何将软件部

10、署到如何将软件部署到Flash上?上?烧写步骤见教材。第1步:将目标机的“拨码开关”拨到“eMMC”启动方式。第2步:在宿主机Windows操作系统下,打开超级终端。第3步:打开目标机的电源开关,这时窗口界面会出现目标机的启动信息,按任意键停止在Uboot下载模式第4步:在Uboot环境修改环境变量值,输入命令如下。#setenvserverip192.168.100.192/主机的IP地址#setenvipaddr192.168.100.191/目标机的IP地址#saveenv/保存环境变量可以使用print命令查看修改后的环境变量,还可使用ping命令测试宿主机与目标机的网络是否连通。第5

11、步:烧写Uboot镜像文件到目标机Flash上(如不更新Uboot,可以跳过这步)。#tftp40008000u-boot-fs4412.bin/从tftp服务器上下载文件到内存#moviwriteu-boot40008000/将内存中的程序写入u-boot分区第6步:烧写内核镜像到目标机Flash上。#tftp41000000uImage#moviwritekernel41000000第7步:烧写设备树文件到目标机Flash上。#tftp41000000exynos4412-fs4412.dtb#moviwritedtb41000000第8步:烧写文件系统镜像到目标机Flash上。#tftp

12、41000000ramdisk.img#moviwriterootfs41000000300000/后面的参数是烧写大小第9步:设置启动参数。#setenvbootcmdmovireadkernel41000000;movireaddtb42000000;movireadrootfs43000000300000;bootm410000004300000042000000#setenvbootargs#saveenv第10步:重新启动目标机,等待一段时间后,如果会自动进入Linux操作系统,则表示目标机运行环境安装成功。第4章:嵌入式交叉编译环境及系统裁剪 4.1嵌入式交叉编译环境构建4.2Bo

13、otloader程序4.3 Linux内核移植和编译思考:(1)BootLoader的核心任务是什么?(2)系统加电后执行的第一段代码是什么?这段代码一般保存在什么位置?一、初识一、初识BootLoadert程序程序BootLoader的核心任务是:启动内核从Linux系统角度看,通常可以分为四个层次,即:引导加载程序(BootLoader)Linux内核根文件系统用户应用程序嵌入式软件系统分四层嵌入式系统的BootLoader程序相当于PC中的什么程序?相当于:BIOS+MBR大多数BootLoader程序都包括两种不同的操作模式:启动加载模式(Bootloading)下载模式(Downlo

14、ading)1、启动加载模式就是进入了操作系统2、下载模式就是在命令行界面(shell界面)在下载模式,可以通过命令和环境变量设置,完成系统软件部署。例如:查看FLASH分区命令BootLoader程序的结构框架分两部分:Stage1(用汇编语言来实现,主要进行设备的初始化)Stage2下载模式(用C语言来实现,增强程序的移植性和可读性)Stage1通常包括以下步骤:硬件设备初始化为Stage2准备RAM空间拷贝Stage2到RAM中设置好堆栈跳转到Stage2的入口Stage2通常包括以下步骤:初始化本阶段使用到的硬件设备检测系统内存映射(MemoryMap)将Kernel和根文件系统从Fl

15、ash上读到RAM空间设置内核启动参数引导内核常用的引导程序有:uu-bootuBlobuARMbootuRedBootuvivi二、常用的二、常用的BootLoadert程序程序(1)U-BootU-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。支持的操作系统:Linux,VxWorks,QNX等。支持的处理器:ARM、PowerPC、MIPS、x86等。源码下载:http:/(2)BlobBlob是BootLoaderObject的缩写。它遵循GPL,源泉代码完全开放。Blob最初是为一块专用开发板写的(处理器是StrongARMSA-1100)。现

16、在Blob已经被移植到了很多CPU上。源码下载:http:/ bootm 命令对应就是 cmd_bootm.cdisk对磁盘的支持doc文档目录。Uboot 有非常完善的文档,供用户参考阅读。driver驱动程序,每一个子目录代表一类驱动程序,Uboot 支持的设备驱动程序都放在该目录,如支持的网卡、串口和 USB 等。fs支持的文件系统,一个目录一个文件系统代码,如:cramfs、fat、fdos和jffs2等。include头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和文件系统文件。lib与体系结构相关的库文件。net网络协议栈相关代码,如:BOOTP 协议、TFTP 协议、R

17、ARP 协议和 NFS 文件系统等等。tools生成Uboot工具,如:mkimage。3Uboot源代码结构Uboot源代码可以在ftp:/ftp.denx.de/pub/uboot/服务器上下载。问题:问题:Uboot源代码支持那些开发板?源代码支持那些开发板?答:查看顶层目录下的boards.cfg文件,文件内容如下:#TargetARCHCPUBoardnameVendorSoC#omap4_pandaarmarmv7pandatiomap4omap4_sdp4430armarmv7sdp4430tiomap4omap5_evmarmarmv7omap5_evmtiomap5s5p_g

18、oniarmarmv7gonisamsungs5pc1xxsmdkc100armarmv7smdkc100samsungs5pc1xxorigenarmarmv7origensamsungexynoss5pc210_universalarmarmv7universal_c210samsungexynosOrigen目目标的含的含义:有一个开:有一个开发板名叫板名叫origen,它是三星公司生,它是三星公司生产的的exynos芯芯片,片,该芯片芯片选用用arm架构中的架构中的armv7版本的内核。版本的内核。问题问题2:Uboot源代码支持很多开发板,如何编译出某个开发源代码支持很多开发板,如何

19、编译出某个开发板上使用的生成板上使用的生成Uboot镜像文件(镜像文件(如:u-boot.bin)?)?编译出origen开发板上使用的Uboot#make distclean#make origen_config 配置配置#make问题问题3:make origen_config(配置配置)完成的具体工作是什么完成的具体工作是什么?make origen_configMakefile文件文件%_config 表示所有以表示所有以.config结尾的文件结尾的文件$(:_config=)将去掉将去掉_configMKCONFIG 执行命令执行命令mkconfig实际上是执行:./mkconfi

20、gorigenmkconfig 的作用的作用a-解析解析boards.cfg文件中文件中origen的的相关数据相关数据。b-针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。c-创建顶层创建顶层Makefile包含的文件包含的文件 include/config.mkd-创建开发板相关的头文件创建开发板相关的头文件inlucde/config.hU-Boot的编译流程(执行make命令)a-首先编译cpu/$(CPU)/start.S,对于不同的CPU,还可能编译cpu/$(CPU)下的其他文件;b-然后,对于平台/开发

21、板相关的每个目录、每个通用目录都使用它们个字的Makefile生成相应的库;c-将a、b步骤生成的.o.a文件按照board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/U-Boot.lds链接脚本进行链接。d-第c步得到的是ELF格式的U-Boot,后面的Makefile还会将它转换成二进制格式、S-Record格式。4Uboot启动流程第一阶段:第一阶段:a-设置cpu工作模式为SVC模式b-关闭中断,mmu,cachev-关看门狗d-初始化内存,

22、串口e-设置栈f-代码自搬移g-清bssh-跳c第二阶段第二阶段a-初始化外设,进入超循环b-超循环处理用户命令Uboot的程序入口:在Uboot源码中有一个arch/arm/cpu/u-boot.lds文件,这是链接脚本文件,由它指定Uboot的入口。第一阶段的文件:第一阶段的文件:(1)arch/arm/cpu/armv7/start.S1.设置CPU为SVC模式2.关闭中断,MMU,Cache跳转到lowlevel_init函数,该函数在lowlevel_init.S文件中。文件中。(2)board/samsung/origen/lowlevel_init.S3.关闭看门狗4.初始化内存

23、,串口串口5.设置栈6.代码自搬移7.清BSS8.跳转到C入口?跳转到_main函数,该函数在crt0.S文件中。第二阶段的文件:第二阶段的文件:(1)arch/arm/lib/crt0.S初始化C运行环境:_main函数所在处,初始化SP,为C语言准备,代码重定位,清BSS,设置R0R1R2R8相应寄存器跳转到board_init_f(),该函数在board.c文件中。(2)arch/arm/lib/board.cboard_init_f函数,填充GD结构体,初始化外设,执行完成后,返回。(3)arch/arm/lib/crt0.S代码重定位代码自搬移跳转到board_init_r(),该函

24、数board.c文件中。(4)arch/arm/lib/board.cboard_init_r()函数532行enable_caches();很多紧急工作都做完了,可以打开cache了535行board_init();关键关键!这个就是板级定制文件的这个就是板级定制文件的origen.c的入口函数的入口函数651行interrupt_init();中断初始化667行eth_initialize(gd-bd);网卡初始化,函数的实现在net/eth.c,会回调板级origen.c中的board_eth_init()703行for(;)main_loop();执行超循环。main_loop()的实

25、现在common/main.c,它的主要功能就是循环检测输入的命令并执行,其中一个环境变量bootdelay(自启动)的设置决定了是否启动内核,如果延时大于等于零,并且没有在延时过程中接收到按键,则引导内核。四四、U-Boot移植移植Uboot移植是指根据目标机的处理器以及具体外部电路,选择Uboot提供的一个合适的参考源程序,然后在此基础上进行修改,最后编译出镜像文件的过程。本小节以u-boot-2013.01.tar.bz2版本为例,先介绍origen目标机Uboot镜像文件的生成过程,再介绍将origen目标机源程序移植到FS4412目标机,最后向Uboot中添加一些功能。1、orige

26、n目标机Uboot镜像文件的生成Uboot支持多种类型的处理器,所以它要为不同类型的处理器编写代码,因此它的源代码比较多。对于某一个具体的目标机只需要使用到Uboot中的部分代码。下面以origen目标机为例,介绍生成Uboot镜像文件的过程。origen目标机使用的处理器型是Exynos。(1)查看Exynos处理器相关源代码Exynos是ARM处理器核,属于V7体系架构。根据Uboot目标结构,它的源代码应该保存在arch/arm/cpu/armv7目录下,输入以下命令。#lsarch/arm/cpu/armv7exynos上面显示的信息说明存在exynos目录,则表示支持Exynos处理

27、器。(2)查看origen目标机相关源代码origen目标机是samsung设计的目标机,根据Uboot目录结构,它的源代码应该保存在board/samsung目录下,输入以下命令。#lsboars/samsungorigen上面显示的信息说明存在origen目录,则表示支持origen目标机。(3)编译生成origen目标机镜像文件编译生成origen目标机镜像文件具体步骤如下。第1步:解压Uboot源文件,命令如下。#tarxvfu-boot-2013.01.tar.bz2解压后,会在当前目录下创建u-boot-2013.01目录,源文件都在该目录中。第2步:进入源文件顶层目录,命令如下。

28、#cdu-boot-2013.01以下操作都在顶层目录下完成。第3步:指定交叉编译工具链。本教材使用的交叉编译工具链是arm-none-linux-gnueabi-,通过修改顶层目录下的Makefile文件来完成。在Makefile文件中,找到如下内容。ifeq($(HOSTARCH),$(ARCH)CROSS_COMPILE?=#endif将其修改成。ifeq(arm,$(ARCH)CROSS_COMPILE?=arm-none-linux-gnueabi-#endif第4步:编译生成镜像文件,命令如下。#makedistclean/清除以前编译过程生成的文件#makeorigen_conf

29、ig/为origen目标机配置编译环境#make/编译编译完成后,会生成镜像文件u-boot.bin。2、将origen目标机源程序移植到FS4412目标机第1步:为FS4412目标机创建一个目录fs4412,该目录要存在board/samsung/下。为了简化操作,可以将origen目标机的整个目录复制过来,命令如下。#cp-rfboard/samsung/origen/board/samsung/fs4412第2步:修改文件名,命令如下。#mvboard/samsung/fs4412/origen.cboard/samsung/fs4412/fs4412.c第3步:修改编译环境,将boar

30、d/samsung/fs4412/Makefile文件内容中的origen.o修改为fs4412.o。第4步:复制需要的头文件,命令如下。#cpinclude/configs/origen.hinclude/configs/fs4412.h第5步:修改头文件内容。打开include/configs/fs4412.h文件,找到如下内容。#defineCONFIG_SYS_PROMPTORIGEN#defineCONFIG_IDENT_STRINGforORIGEN将其修改为:#defineCONFIG_SYS_PROMPTfs4412#defineCONFIG_IDENT_STRINGforfs

31、4412第6步:添加目标机信息,目标机的信息保存在顶层目录的boards.cfg文件中,文件中的每一行表示一个目标机信息,可以参考origen目标机的信息,添加FS4412目标机的信息,方法是:在boards.cfg文件中找到origen目标机的信息,内容如下。origenarmarmv7origensamsungexynos上一行是origen目标机的信息,具体含义如下origenarmarmv7Origensamsungexynos目标目标Target平台平台ARCH芯片芯片CPU板子名字板子名字Board name厂商厂商VenderCPU类型类型SOC添加FS4412目标机的信息到bo

32、ards.cfg文件中找到origen目标机的信息,内容如下。origenarmarmv7origensamsungexynos在其下方添加一行FS4412目标机的信息,具体内容如下。fs4412armarmv7fs4412samsungexynos3.为FS442目标机的Uboot添加功能移植完成后,还可以根据外围硬件,以及实际需求,在Uboot中添加相应的功能程序。下面简单介绍部分功能的添加方法。第一,添加点亮LED2灯功能第二,添加串口输出功能第三,添加网卡通信功能4.为FS4412目标机生成镜像文件完成功能添加后,再编译生成镜像文件,命令如下。#makedistclean#makefs

33、4412_config/为fs4412目标机配置编译环境#make编译完成后,会生成镜像文件u-boot.bin,将其更名为u-boot-fs4412.bin,该文件就是FS4412目标机的Uboot镜像文件。第4章:嵌入式交叉编译环境及系统裁剪 4.1嵌入式交叉编译环境构建4.2Bootloader程序4.3 Linux内核移植和编译一、内核简介(1)系统调用接口(SCI)SCI层为用户空间提供了一套标准的函数来访问Linux内核,搭起了用户空间到内核空间的桥梁。(2)进程调度(PM)进程管理的重点是创建进程(fork、exec),停止进程(kill、exit),并控制它们之间的通信(sig

34、nal或者POSIX机制)。进程管理还包括控制活动进程如何共享CPU,这就是进程调。(3)内在管理(MM)内存管理的主要作用是控制多个进程安全地共享内存区域。(通过虚拟内容映射让系统更加MMU)(4)网络管理(协议栈,NS)内核协议栈为Linux提供了丰富的网络协议实现(Tcp/Ip、PPPoE)PPPoE全称PointtoPointProtocoloverEthernet,意思是基于以太网的点对点协议。Q:为什么协议栈要放在内核,而不放在用户空间?A:协议栈要与网卡驱动多次调用,如果2种软件在不用的空间进行调用,则要通过系统调用,而系统调用的速度比较慢。(5)文件系统(虚拟文件系统VFS)V

35、FS隐藏了各种文件系统的具体细节,为所有类型的文件系统提供统一的操作接口。(6)设备驱动(DD)Linux内核中有大量代码都在设备驱动程序中,它们控制特定的硬件设备。Linux内核源代码通常位于/usr/src/目录下,采用树形结构进行组织,非常合理地把功能相关联的文件都放在同一个子目录下,使得程序更具有可读性。Linux内核源代码结构内核源代码结构目录用途arch体系结构相关的代码,如 arch/i386、arch/arm等。drivers设备驱动程序,例如,drivers/char、drivers/block等。fs文件系统,例如,fs/ext3、fs/jffs2等。include头文件,

36、include/asm 是体系结构相关的头文件,include/linux是Linux 内核头文件initLinux 初始化,如 main.c等。ipc进程间通信的代码。kernelLinux内核核心代码。lib库文件,如 zlib、crc32等。mm内存管理代码。net网络支持代码,主要是网络协议。sound 声音驱动的支持。scripts使用的脚本。usr用户代码。什么叫Linux移植?内核为什么要移植?如何移植?1、针对具体的硬件平台,修改Linux源代码(主要修改与体系结构相关的代码),然后重新编译,生成能够在目标平台上运行的映像文件,这个过程就叫Linux系统移植。二、内核的移植、配

37、置和编译二、内核的移植、配置和编译2、因为不同的嵌入式系统使用的微处理器不同(体系结构不同),再加上,硬件设计时,可能存储器安排的地址也不同。因此要根据系统的体系结构、硬件的结构来修改源代码,否则系统不能正确运行。通常对Linux源码的修改工作难度较大,它要求不仅对Linux内核结构要非常熟悉,还要对目标平台的硬件结构非常熟悉。所以这部分工作一般由目标平台提供商来完成。例如ARM平台,它的这部分工作就是由ARM公司的工程师完成的。我们所做的就是:下载相关版本的linux内核补丁(Patch);然后将它打到内核上,最后进行交叉编译就行。本节以linux-3.14内核为例,简单介绍内核移植、配置和

38、编译过程。1、内核移植Linux内核支持多种处理器,内核移植的主要工作就是指定处理器的类型、以及使用的交叉编译工具链。本教材选择的处理器是ARM,使用的交叉编译工具链是arm-none-linux-gnueabi-。下面将Linux内核源代码解压到Linux操作系统下的/home/linux/kernel/linux-3.14目录,之后的所有移植工作都在该目录下完成(1)解压源文件命令如下:#tarxvflinux-3.14.tar.xz#cdlinux-3.14会生成一个Linux-3.14子目录,然后进入这个子目录进行下面的操作。(2)指定处理器架构和交叉工具链根据处理器的类型来指定。实现

39、方法是:修改内核顶层目录下的Makefile文件,在文件中找到如下内容。ARCH?=$(SUBARCH)CROSS_COMPILE?=$(CONFIG_CROSS_COMPILE:%=%)修改为:ARCH?=armCROSS_COMPILE?=arm-none-linux-gnueabi-只有指定完处理器架构和交叉工具链,在后面的内核配置中,才能找到对应的处理器。(3)清除配置,或利用参考板的配置这一步可以不做这一步可以不做u清除配置是运行makedistclean命令,它的主要作用是将源码恢复到出厂状态。它会删除.config等文件。u利用参考板的配置,是将某个参考板的配置文件复制到顶层目录

40、,并更名为.config等文件。如:cparch/arm/configs/exynos_defconfig.config(4)内核配置内核配置的命令是:#makemenuconfigu内核配置信息来源于Kconfig。每个目录都有Kconfig文件,这些文件构成一个分布式的内核配置数据库。u配置完的信息保存在.config文件中。执行make menuconfig命令后的配置界面几点说明:带有“”表示该选项包含子选项。每个选项前面有 或,中括号表示仅有种选择(*或空),尖括号表示有种选择(M,*或空),按空格键可显示这几种选择。M表示以模块方式编译进内核,在内核启动后,需要手工执行insmod

41、命令才能使用该项驱动;*表示直接编译进内核;空表示不编译进内核。内核配置主要包括:u处理器的选择u支持的文件系统u需要安装的设备驱动程序u。下面以配置FS4412目标机的处理器为例,讲解一下配置处理器的步骤(参照教材)。(5)内核编译#makeulmage执行完编译命令后,会在arch/arm/boot目录下生成Image、zImage和uImage等3个内核映像文件。其中:Image是没有压缩的内核映像文件,文件大小大约为6Mb;zImage是经过压缩后的内核映像文件,文件大小大约为3Mb;uImage是Uboot专用的内核映像文件。uImage也是FS4412目标机上的内核映像文件。驱动程

42、序的编译有3种方式,即:编译入内核、编译成模块、根据变量编译。在Makefile文件中各种编译的表示格式如下:u驱动程序直接编译入内核uImageobj-y+=demo.ou驱动程序编译生成一个独立的模块demo.ko,obj-m+=demo.ou驱动程序根据CONFIG_DEMO变量值,确定编译方式,obj-$(CONFIG_DEMO)+=demo.o三、在内核添加驱动程序三、在内核添加驱动程序第1步:将驱动程序复制到内核的合适位置第2步:创建驱动程序变量在drvers/char/demo目录下新建2个文件(Kconfig和Makefile),在Kconfig文件中新建变量,在Makefil

43、e文件中使用变量。第3步:将驱动程序装配到系统配置中在上一级目录drvers/char/的Kconfig和Makefile文件中添加相关内容。在Linux3.x之前的内核源码中,有大量对板级细节信息描述的代码,这些代码都存放在/arch/arm/plat-xxx和/arch/arm/mach-xxx目录。为了解决这个问题而引入设备树。设备树的主要优势是:对于使用相同处理器,但外围电路有所不同的主板,只需更换设备树文件*.dtb,即可实现不同主板之间的无差异支持,而无需更换内核其它文件。四、四、设备树设备树设备树是一种描述硬件资源的数据结构。编译设备树会使用到DTC(devicetreecomp

44、iler)、DTS(devicetreesource)和DTB(devicetreeblob)共3个文件。(1)DTS是dts文件,用于对DeviceTree的描述,放置在内核的/arch/arm/boot/dts目录。一个dts文件对应一种目标板。dts文件描述了一个目标板的硬件资源。(2)DTC是编译工具,它可以将dts文件编译成dtb文件。(3)DTB是编译后生成的二进制文件。设备树的工作过程是:目标机上电之后,BootLoader会将设备树在内存中的地址传给内核,然后内核去解析和读取对应的硬件资源。所以设备树不仅仅需要内核的支持,还要BootLoader的支持。下面介绍FS4412目标

45、机设备树的生成过程。第1步:编写*.dts文件。将arch/arm/boot/dts/exynos4412-origen.dts文件复制出一个名为arch/arm/boot/dts/exynos4412-fs4412.dts的文件。然后添加设备节点,例如添加A/D节点,则在该文件中添加如下内容。fs4412-adc126c0000/这是资源某个节点名compatible=”fs4412,adc”;/这是资源匹配时的名称reg=;/资源占用的地址interrupt-parent=;/资源的中断控制器interrupts=;/资源占用的中断;第2步:向内核添加FS4412目标机信息,即在arch/

46、arm/boot/dts/目录的Makefile文件中添加FS4412目标机信息。在Makefile文件中,找到如下内容。exynos4412-origen.dtb它是origen目标机的相关信息,在它的下方,添加FS4412目标机信息,内容如下。exynos4412-fs4412.dtb这一行是告诉系统,编译设备树时,编译一个exynos4412-fs4412.dtb文件。第3步:编译设备树文件。编译设备树文件是在内核的顶层目标下进行,命令如下。#makedtbs编译完成后,就会在arch/arm/boot/dts/生成一个名为exynos4412-fs4412.dtb设备树文件。本节的主要

47、内容:1、根文件系统的功能是什么?2、Linux常用目录及其作用?3、BusyBox工具的功能是什么?五、根文件系统的构建五、根文件系统的构建1、根文件系统的功能是什么?文件系统是什么?数据保存到设备上所使用的一种组织结构或格式。也可以说是操作系统访问外部设备数据所约定的一种通用访问接口格式。1、根文件系统的功能是什么?根文件系统是Linux(或者说是UNIX类)操作系统运行时所需要的特有文件系统。该文件系统不仅具有普通文件系统的存储数据文件的功能,还被操作系统用来存储运行时所需要的一些特殊文件。这些特殊文件包括操作系统运行时的配置数据文件(通常位于/etc目录下)和设备文件(位于/dev目录

48、下)。操作系统通过使用它们来与应用程序进行接口,并与设备进行交互。因此根文件系统是Linux运行时所必须的。2、Linux常用目录及其作用?目录用途/bin系统的一些重要的执行文件。如:登录命令login;文件操作命令cp、mv、rm、ln等;文件编辑器ed、vi等;磁盘管理程序dd、df、mount等;系统实用程序uname、hostname等等/boot引导加载(bootstrap loader)使用的文件。/dev系统的设备文件。/etc系统的配置文件。如:/etc/inittab文件决定系统启动的方式。/home系统用户的工作目录。/lib系统上所需的函数共享库。/mnt系统管理员临时

49、mount的安装点。如:光驱、软盘都挂接在此目录的cdrom和floppy子目录中。/proc记载整个系统的运行信息。/root根用户的主目录。/tmp临时文件而保留的目录。/usr是Linux中内容最多、规模最大的一个目录。它包含所有命令、库、man页和其他一般操作中所需的不改变的文件。/var包括系统运行时要改变的数据。3、BusyBox工具的功能是什么?BusyBox工具是将数以百计的常用UNIX/Linux命令集成到一个可执行文件中,所占空间1MB左右。具体步骤见教材小结(1)嵌入式开发环境的搭建过程(2)BootLoader的结构(3)常用的BootLoader程序(4)简述Linux内核架构?(5)BusyBox工具(6)根文件系统的创建过程

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

当前位置:首页 > 网络技术 > 前端技术

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:文库网官方知乎号:文库网

经营许可证编号: 粤ICP备2021046453号世界地图

文库网官网©版权所有2025营业执照举报