嵌入式makefile应用与内核裁剪

上传人:wt****50 文档编号:54685894 上传时间:2018-09-17 格式:PPT 页数:25 大小:626.50KB
返回 下载 相关 举报
嵌入式makefile应用与内核裁剪_第1页
第1页 / 共25页
嵌入式makefile应用与内核裁剪_第2页
第2页 / 共25页
嵌入式makefile应用与内核裁剪_第3页
第3页 / 共25页
嵌入式makefile应用与内核裁剪_第4页
第4页 / 共25页
嵌入式makefile应用与内核裁剪_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《嵌入式makefile应用与内核裁剪》由会员分享,可在线阅读,更多相关《嵌入式makefile应用与内核裁剪(25页珍藏版)》请在金锄头文库上搜索。

1、嵌入式系统教案,嵌入式内核裁剪与Makefile应用,2018/9/17,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:该目录包含所有独

2、立于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所

3、有的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目录包含用于配置内核的脚本文件等。每个目录下

4、一般都有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通常保存在a

5、rch/arm/boot/目录下。,8,Arm体系结构内核编译-linux源代码结构,arch/arm:与架构和平台相关的代码都放在arch目录下。针对ARM的Linux,有一个子目录和它对应arm。 drivers:这个目录包含了所有的设备驱动程序。驱动程序又被分成“block”、“char”、“net”等几种类型。 fs:这里有支持多种文件系统的源代码,几乎一个目录就是一个文件系统,如MSDOS、VFAT、proc和ext2等。 include:相关的头文件。它们被分成通用和平台专用两部分。目录“asm-$(ARCH)”包含了平台相关的头文件,在它下面进一步分成“arch-$(MACHIN

6、E)”以及“arch-$(PROCESSOR)”等子目录。与板子相关的头文件放在“arch-$(MACHINE)”下,与CPU相关的头文件放在“arch-$(PROCESSOR)”下。例如,对于没有MMU的处理器,“arch-arm”用于存放硬件相关的定义。,9,Arm体系结构内核编译-linux源代码结构,init:含一些启动kernel所需做的所有初始化动作,里面有一个main.c,针对kernel做初始化动作,设置一些参数等,并对外围设备初始化。 ipc:提供进程间通信机制的源代码,如信号量、消息队列和管道等。 kernel:包含进程调度算法的源代码,以及与内核相关的处理程序,例如系统调

7、用。 mm:该目录用来存放内存管理的源代码,包括MMU。 net:支持网络相关的协议源代码。 lib:包含内核要用到的一些常用函数。如字符串操作,格式化输出等。 script:这个目录中包含了在配置和编译内核时要用到的脚本文件。,10,内核Makefile 概述,内核中的Makefile和与Makefile相关的文件: 顶层Makefile:整个内核配置、编译的总体控制文件。有两个主要任务:产生vmlinux文件和内核模块。为达此目的,顶层Makefile递归的进入到内核的各个子目录。 Config:内核配置文件,包含由用户选择的配置选项,用来存放内核配置后的结果,控制那些代码需要编译。 Ar

8、ch/*/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

9、 配置变量: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中所有的目标文件,然

10、后使用$(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 为例,顶层

11、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/,不同询问语句接受不同

12、的数据类型,有的询问语句还有第三个参数/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

13、/ /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 /statem

14、ent/ else /statement/ fi /expr/可以是单个配置变量或字符,也可以是带操作符的表达式。操作符有:=,|=,-o,-a等,19,配置文件-配置语言(5),菜单块 Mainmenu-option next-comment comment. . Endmenu 引入新的菜单。在向内核增加新功能后,需要相应增加新的菜单,并在新菜单下给出此项功能的配置选项。Comment后带的注释就是新菜单的名称。所有归属于此菜单的配置选项语句都写在comment Endmenu之间。 Source 语句 Source /word/ /word/是文件名,Source的作用是调入新的文件。,

15、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连接,将pxa2

16、70的网卡和PC的网卡使用直连网线进行连接,或者将pxa270和PC机使用普通网线接入同一局域网。 然后将pxa270上电,正常情况下将在超级终端中看到u-boot启动界面。,22,Linux映像下载并运行,依次输入命令: tftp a0500000 ramdisk.gz 下载文件系统 tftp a0008000 zImage 下载Linux内核 go a0008000 运行Linux系统 若tftp出现失败: 1. 检查网线连接和IP设置; 2. 所传送文件是否在宿主机/tftpboot目录下; 3. 检查命令是否正确。(注意0的个数),23,Linux启动过程1,核心打印 信息,内核命令行,存储器,24,Linux启动过程2,IIC总线初始化,Frame Buffer显示初始化,25,Linux启动过程3,Linux控制台,

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

当前位置:首页 > 机械/制造/汽车 > 机械理论及资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号