嵌入式Makefile应用与内核裁剪.ppt_第1页
嵌入式Makefile应用与内核裁剪.ppt_第2页
嵌入式Makefile应用与内核裁剪.ppt_第3页
嵌入式Makefile应用与内核裁剪.ppt_第4页
嵌入式Makefile应用与内核裁剪.ppt_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

嵌入式系统教案,嵌入式内核裁剪与Makefile应用,2019/5/25,2,嵌入式内核结构,1内核源代码目录介绍 2内核的配置的基本结构 3编译内核的常用命令 4内核编译过程 5. 内核的下载与运行,3,1内核源代码目录介绍,(1)arch:arch子目录包括所有与体系结构相关的内核代码。 (2)include:include子目录包括编译内核所需要的头文件。与ARM相关的头文件在include/asm-arm子目录下。 (3)init:这个目录包含内核的初始化代码,但不是系统的引导代码,其中所包含main.c和Version.c文件是研究Linux内核的起点。 (4)mm:该目录包含所有独立于CPU体系结构的内存管理代码,如页式存储管理内存的分配和释放等。与ARM体系结构相关的代码在arch/arm/mm中。 (5)Kernel:这里包括主要的内核代码,此目录下的文件实现大多数Linux的内核函数,其中最重要的文件是sched.c。与Xscale体系结构相关的代码在arch/arm-pxa/kernel目录中,4,1内核源代码目录介绍,(6)、Drives:此目录存放系统所有的设备驱动程序,每种驱动程序各占一个子目录。 (a)/block:块设备驱动程序。块设备包括IDE和scsi设备。 (b)/char:字符设备驱动程序。如串口、鼠标等。 (c)/cdrom:包含Linux所有的CD-ROM代码。 (d)/pci:PCI卡驱动程序代码,包含PCI子系统映射和初始化代码等。 (e)/scsi:包含所有的SCSI代码以及Linux所支持的所有的SCSI设备驱动程序代码。 (f)/net:网络设备驱动程序。 (g)/sound:声卡设备驱动程序。,5,1内核源代码目录介绍,(7)lib目录放置内核的库代码; (8)net目录包含内核与网络的相关的代码; (9)ipc目录包含内核进程通信的代码; (10)fs目录是所有的文件系统代码和各种类型的文件操作代码,它的每一个子目录支持一个文件系统,如JFFS2; (11)scripts目录包含用于配置内核的脚本文件等。每个目录下一般都有depend文件和一个makefile文件,他们是编译时使用的辅助文件,仔细阅读这两个文件对弄清各个文件之间的相互依托关系很有帮助。,6,提纲,配置系统的基本结构 Linux 中的Makefile 配置文件 实例解析,7,Arm体系结构内核编译,这里选择menuconfig方式: $cd /home/cvtech/ cvtpxa270/linux $make clean $make menuconfig 进入后加载配置文件config-pxa270 建立依赖关系 $make dep 编译内核 $make zImage 编译并压缩内核 编译生成的Linux映像文件zImage通常保存在arch/arm/boot/目录下。,8,Arm体系结构内核编译-linux源代码结构,arch/arm:与架构和平台相关的代码都放在arch目录下。针对ARM的Linux,有一个子目录和它对应arm。 drivers:这个目录包含了所有的设备驱动程序。驱动程序又被分成“block”、“char”、“net”等几种类型。 fs:这里有支持多种文件系统的源代码,几乎一个目录就是一个文件系统,如MSDOS、VFAT、proc和ext2等。 include:相关的头文件。它们被分成通用和平台专用两部分。目录“asm-$(ARCH)”包含了平台相关的头文件,在它下面进一步分成“arch-$(MACHINE)”以及“arch-$(PROCESSOR)”等子目录。与板子相关的头文件放在“arch-$(MACHINE)”下,与CPU相关的头文件放在“arch-$(PROCESSOR)”下。例如,对于没有MMU的处理器,“arch-arm”用于存放硬件相关的定义。,9,Arm体系结构内核编译-linux源代码结构,init:含一些启动kernel所需做的所有初始化动作,里面有一个main.c,针对kernel做初始化动作,设置一些参数等,并对外围设备初始化。 ipc:提供进程间通信机制的源代码,如信号量、消息队列和管道等。 kernel:包含进程调度算法的源代码,以及与内核相关的处理程序,例如系统调用。 mm:该目录用来存放内存管理的源代码,包括MMU。 net:支持网络相关的协议源代码。 lib:包含内核要用到的一些常用函数。如字符串操作,格式化输出等。 script:这个目录中包含了在配置和编译内核时要用到的脚本文件。,10,内核Makefile 概述,内核中的Makefile和与Makefile相关的文件: 顶层Makefile:整个内核配置、编译的总体控制文件。有两个主要任务:产生vmlinux文件和内核模块。为达此目的,顶层Makefile递归的进入到内核的各个子目录。 Config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果,控制那些代码需要编译。 Arch/*/Makefile,是针对特定平台的Makefile。 各子目录下的Makefile,比如:drivers/Makefile。负责所在子目录下源代码的管理。 Rules.make:规则文件,被所有的Makefile使用。它定义了所有Makefile共用的编译规则。,11,Makefile-变量,版本信息:VERSION PATCHLEVEL SUBLEVEL Cpu体系结构:ARCH 路径信息:TOPDIR SUBDIRS 内核组成信息:HEAD CORE_FILES NETWORKS DRIVERS LIBS 编译信息:CPP CC AS LD AR CFLAGS LINKFLAGS 配置变量:CONFIG_*,12,Makefile Rules. make变量,O-OBJS,L-OBJS,OX-OBJS,LX-OBJS:本目录下需要编译进Linux内核vmlinux的目标文件列表,其中OX-OBJS,LX-OBJS中的“X”表明目标文件使用了EXPROT-SYMBOL. M-OBJS,MX-OBJS:本目录下需要被编译成可加载模块的目标列表。同样,MX-OBJS中的“X”表明目标文件使用了EXPROT-SYMBOL输出符号。 O-TARGET,L_TARGET:每个子目录下都有, Rules. Make首先从源代码编译生成O-OBJS,OX-OBJS中所有的目标文件,然后使用$(LD)-r把它们链接成一个O-TARGET或L-TARGET。 O-TARGET以.o结尾;L-TARGET以.a结尾。,13,Linux 内核配置系统,14,配置文件,把新功能加入到linux的配置选项中,提供此项功能的说明。让用户有机会选择此项功能,这些都需要在config.in文件中用配置语言来编写配置脚本。 配置命令: 解释脚本: Make config, make oldconfig scripts/configure Make menuconfig scripts/menuconfig Make xconfig tkparse 以Make menuconfig 为例,顶层Makefile调用cripts/configure 按照arch/arm/config.in来进行配置。命令执行完后产生.config,原.config被改名config.old,15,配置文件-配置语言(1),询问语句 Bool /prompt/ /symbol/ Hex /prompt/ /symbol/word/ Int /prompt/ /symbol/word/ string /prompt/ /symbol/word/ tristate /prompt/ /symbol/ 询问语句首先显示一串提示符/prompt/ ,等待用户输入后把结果赋给/symbol/,不同询问语句接受不同的数据类型,有的询问语句还有第三个参数/word/,给出缺省值,16,配置文件-配置语言(2),定义语句 define_bool /symbol/ /word/ define_Hex /symbol/word/ define_Int /symbol/word/ define_string /symbol/word/ define_tristate /symbol/word/ 不同于询问语句等待用户输入,定义语句显式的给配置变量/symbol/赋值/word/,17,配置文件-配置语言(3),依赖语句 dep_bool /prompt/ /symbol/dep/. dep_Hex /prompt/ /symbol/ dep/. dep_int /prompt/ /symbol/ dep/. dep_string /prompt/ /symbol/ dep/. dep_tristate /prompt/ /symbol/ dep/. 与询问语句类似,依赖语句也定义新的配置变量。不同的是:配置变量的取值范围依赖于配置变量列表。,18,配置文件-配置语言(4),选择语句 Choice /prompt/ /symbol/word/ Choice语句首先给出一串列表供用户选择其中一种 If语句 if/expr/;then /statement/ fi if/expr/;then /statement/ else /statement/ fi /expr/可以是单个配置变量或字符,也可以是带操作符的表达式。操作符有:=,|=,-o,-a等,19,配置文件-配置语言(5),菜单块 Mainmenu-option next-comment comment. . Endmenu 引入新的菜单。在向内核增加新功能后,需要相应增加新的菜单,并在新菜单下给出此项功能的配置选项。Comment后带的注释就是新菜单的名称。所有归属于此菜单的配置选项语句都写在comment Endmenu之间。 Source 语句 Source /word/ /word/是文件名,Source的作用是调入新的文件。,20,Arm体系结构内核编译,这里选择menuconfig方式: $cd /home/cvtech/ cvtpxa270/linux $make clean $make menuconfig 进入后加载配置文件config-pxa270 建立依赖关系 $make dep 编译内核 $make zImage 编译并压缩内核 编译生成的Linux映像文件zImage通常保存在arch/arm/boot/目录下。,21,Linux映像下载并运行,首先将需要下载的内核映像或者ramdisk文件拷贝到宿主机的/tftpboot目录,然后启动超级终端。 将pxa270的串口0与PC的串口0连接,将pxa270的网卡和PC的网卡使用直连网线进行连接,或者将pxa270和PC机使用普通网线接入同一局域网。 然后将pxa270上电,正常情况下将在超级终端中看到u-boot启动界面。,22,Linux映像下载并运行,依次输入命令: tftp a0500000

温馨提示

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

评论

0/150

提交评论