第八章嵌入式Linux应用程序设计(第二讲)精品PPT课件
合集下载
嵌入式Linux应用开发培训讲义.pptx

❖ Linus Torvalds于1991编写 ❖ Linux是一个Unix兼容的系统,大部分通用的
Unix工具和程序都可以在Linux系统下运行。 UNIX-堂兄 Linux—表弟 ❖ 使用GNU工具开发:
➢ gcc,glibc,binutils,make等
❖ GNU = GNU is Not Unix ❖ GPL = General Public License
10
嵌入式系统与PC (2)
嵌入式系统
PC机
引导代码 操作系统 驱动程序
协议栈 开发环境 仿真器
Bootloader引导,针对不同电路板 主板的BIOS引导,无须改动 进行移植
WinCE、VxWorks、Linux等,需要 Windows、Linux等,不需要移
移植
植
每个设备驱动都必须针对电路板进 行重新开发或移植,一般不能 直接下载使用
❖ 微控制器(MCU) ARM7和ARM9的区别(3、5流水线)
❖ 数字信号处理器(DSP)(4流水线) ❖ 片上系统(SOC) ❖ 可编程片上系统(SOPC—Nios2)
8
典型的嵌入式系统与PC机
•软件(操作系统/驱动程序/应用程序)
•存储器
•输入
•处理器
•输出
9
设备名称
嵌入式系统
CPU
嵌入式处理器(ARM, MIPS)
12
❖ ARM ❖ PowerPC ❖ MIPS ❖ Xscale ❖ DSP ❖ X86 ❖ ……
如何选择嵌入式CPU?
13
❖ Linux ❖ uC/OS ❖ Windows CE ❖ VxWorks ❖ Palm OS ❖ Symbian
典型的嵌入式操作系统
Unix工具和程序都可以在Linux系统下运行。 UNIX-堂兄 Linux—表弟 ❖ 使用GNU工具开发:
➢ gcc,glibc,binutils,make等
❖ GNU = GNU is Not Unix ❖ GPL = General Public License
10
嵌入式系统与PC (2)
嵌入式系统
PC机
引导代码 操作系统 驱动程序
协议栈 开发环境 仿真器
Bootloader引导,针对不同电路板 主板的BIOS引导,无须改动 进行移植
WinCE、VxWorks、Linux等,需要 Windows、Linux等,不需要移
移植
植
每个设备驱动都必须针对电路板进 行重新开发或移植,一般不能 直接下载使用
❖ 微控制器(MCU) ARM7和ARM9的区别(3、5流水线)
❖ 数字信号处理器(DSP)(4流水线) ❖ 片上系统(SOC) ❖ 可编程片上系统(SOPC—Nios2)
8
典型的嵌入式系统与PC机
•软件(操作系统/驱动程序/应用程序)
•存储器
•输入
•处理器
•输出
9
设备名称
嵌入式系统
CPU
嵌入式处理器(ARM, MIPS)
12
❖ ARM ❖ PowerPC ❖ MIPS ❖ Xscale ❖ DSP ❖ X86 ❖ ……
如何选择嵌入式CPU?
13
❖ Linux ❖ uC/OS ❖ Windows CE ❖ VxWorks ❖ Palm OS ❖ Symbian
典型的嵌入式操作系统
《嵌入式Linux开发》课件

交叉编译工具链的安装
指导如何安装适用于目标板的交叉编译工具 链。
测试交叉编译环境
提供一种简单的方法来测试交叉编译环境是 否设置成功。
目标板与宿主机的连接方式
串口通信
介绍如何通过串口连接目标板和宿主机 ,以及串口通信的配置和常用命令。
USB连接
介绍如何通过USB连接目标板和宿主 机,以及USB通信的配置和常用命令
02
03
嵌入式系统
是一种专用的计算机系统 ,主要用于控制、监视或 帮助操作机器与设备。
特点
具有实时性、硬件可裁剪 、软件可定制、低功耗、 高可靠性等特点。
应用
汽车电子、智能家居、医 疗设备、工业自动化等领 域。
Linux作为嵌入式操作系统的优势
开源
Linux是开源的,可以免费使用和定制,降 低了开发成本。
路由与交换
介绍路由器和交换机的原理及在网 络中的作用。
03
02
IP地址
解释IP地址的分类、寻址方式以及子 网掩码的作用。
网络安全
简述常见的网络安全威胁和防范措 施。
04
TCP/IP协议栈简介
TCP/IP协议栈结构
详细描述TCP/IP协议栈的层次结构,包括应 用层、传输层、网络层和链路层。
IP协议
解释IP协议的核心功能,如地址解析、路由 选择等。
调试工具
介绍常用的调试工具,如gdbserver和gdb等,并说明如何使用这些 工具进行远程调试。
调试过程
详细描述调试过程,包括启动调试会话、设置断点、单步执行代码等 操作。
调试技巧与注意事项
提供调试过程中的一些技巧和注意事项,以提高调试效率和准确性。
03
嵌入式Linux系统开发基础
ARM嵌入式LINUX应用程序设计PPT课件

内存分配与释放的数据结构2030linuxkfree它们用于分配和释放连续的内存空间blocksizepagedescriptorsizeskfree分配和释放内存block为单位进行的可以分配的空闲块的大小记录在blocksize表中它是一个静态数组linux设置了sizes数组对页面块进行描述数组元素是sizedescriptor结构体blocksizesizes元素数目相同它们一一对应sizes管理的各个页面块中每个块的头blockheader数控冲床冲压件数控冲床落料后再数控折弯件普通冲床开模冲压件剪板机落料及其它加工方式成形的钣金件点焊氩弧焊组焊件拉铆组件等其它方式加工而成的金属零件或组件
嵌入式软件测试中经常用到的测试工具: ➢ 内存分析工具 ➢ 性能分析工具 ➢ 覆盖分析工具 ➢ 缺陷跟踪工具
2021/3/18
15
嵌入式Linux面临的挑战
1
2
3
Linux的实时 扩充性
改变Linux内核 体系结构
完善Linux的集 成开发环境
Solution
➢ 扩展 Linux 的实时 性能
向外扩展 向上扩展
页式存储管理机制 页表
硬件无关部分
进程的映射和逻辑内存的对换
硬件相关部分
为内存管理硬件提供了虚拟接口
每个进程保留一张页表,用于将本进程 空间中 的虚拟地址变换成物理地址。
2021/3/18
20
进程调度
当需要选择下一个进程运行时,由调度程序选择最值得运行的进程,依 据每个进程的task_struct结构
交叉开 发环境
开放类型
GNU工具链
➢ 常用的交叉开发环
境主要有开放和商
业两种类型。开放 Metrowerks CodeWarrior
嵌入式软件测试中经常用到的测试工具: ➢ 内存分析工具 ➢ 性能分析工具 ➢ 覆盖分析工具 ➢ 缺陷跟踪工具
2021/3/18
15
嵌入式Linux面临的挑战
1
2
3
Linux的实时 扩充性
改变Linux内核 体系结构
完善Linux的集 成开发环境
Solution
➢ 扩展 Linux 的实时 性能
向外扩展 向上扩展
页式存储管理机制 页表
硬件无关部分
进程的映射和逻辑内存的对换
硬件相关部分
为内存管理硬件提供了虚拟接口
每个进程保留一张页表,用于将本进程 空间中 的虚拟地址变换成物理地址。
2021/3/18
20
进程调度
当需要选择下一个进程运行时,由调度程序选择最值得运行的进程,依 据每个进程的task_struct结构
交叉开 发环境
开放类型
GNU工具链
➢ 常用的交叉开发环
境主要有开放和商
业两种类型。开放 Metrowerks CodeWarrior
嵌入式Linux介绍ppt课件

可编辑ppt
15
JFFS2 日誌檔案系統:
JFFS2是專門針對快閃記憶體的檔案系統, 除了有日誌功能,還有負載平衡,垃圾收 集等,並且來源碼公開。
可编辑ppt
16
YAFFS2(Yet Another Flash File System)檔案系統
YAFFS2是一種和JFFSx類似的快閃記憶體 檔案系統,和JFFS2相比它減少了一些功能, 所以速度更快,而且對記憶體的佔用比較 小.YAFFS自已NAND晶片驅動,並且為嵌 入式系統提供了直接取用檔案系統的API。
可编辑ppt
12
嵌入式檔案系統簡介
嵌入式檔案系統的結構與LINUX類似,目前常用的有 EXT2,CRAMFS,JFFS2,YAFFS2和RAM磁片檔案系統等。 為了更好的嵌入式系統選擇檔案系統,一般會考察檔案系 統的如下幾個特性:
可寫入 檔案系統是否可以被寫入?
可更新 系統重新啟動後,檔案系統是否能保持重新啟 動前的更改?
可编辑ppt
14
Cramfs 檔案系統:
Cramfs是針對Linux核心2.4之後的版本所設 計的一種新型檔案系統,也是壓縮和唯讀
格式的。它主要的優點是將檔案資料以壓
縮形式儲存,在需要運作的時候進行解壓
縮。由於它儲存的檔形式是壓縮的格式, 所以檔案系統不能直接在Flash上運作。雖 然這樣可以節約很多Flash儲存空間,但是 檔案系統運作需要將大量的資料複製進 RAM中,消耗了RAM空間。
可编辑ppt
7
Linux的基本示意圖
可编辑ppt
8
Boot Loader
負責Linux核心的啟動,它用於初始化系統 資源,包括SDRAM。這部分程式碼用於建 立Linux核心運作環境和從Flash中裝載初始 化ramdisk
嵌入式系统第八章 嵌入式实时操作系统COS -II

任务的调度要完成两项工作,一是在任务就绪表中查 找具有最高优先级别的就绪任务;二是实现任务的切 换,这些工作是由COS-II的函数OSSched( )来实现 的。
8. µC/OS-II任务的创建 COS-II提供两个创建任务函数:一个是普通创 建任务函数 OSTaskCreate( );另一个是扩展 创建任务函数 OSTaskCreateExt( ),可以使用 这两个函数之一来创建任务。
例:试在操作系统µC/OS-II下创建两个任务, 在µC/OS-II管理下运行,要求T1每运行 2次T2运行1次,并将运行的情况传送到 在PC机的超级终端上显示。
/******uCOS-II在ARM上多任务应用程序的头文件******/ #include"../ucos-ii/includes.h" //包含uCOS-II头文件 #include "../ucos-ii/add/osaddition.h"//包含uCOS-II头文件 #include "../inc/drivers.h"//包含驱动头文件 #include "../inc/sys/lib.h"//包含/lib.h头文件
2)任务声明
定义任务1堆栈 任务1函数声明 定义任务1的优先权 定义任务2堆栈 任务2函数声明 定义任务2的优先权
……
定义任务N堆栈 任务N函数声明 定义任务N的优先权
任务声明的例子:
OS_STK task1_Stack[STACKSIZE]={0}; //定义任务1堆栈 void Task1(void *Id); //任务1函数声明
任务栈
每个任务有自己单独的栈, C/OS-II允许每个任务有 不同的栈空间,以便压低应用程序对RAM的需求。
嵌入式Linux系统PPT课件

1,400
1,200
1,000
Millions of units
800
600
400
ARM68KMSIHP-S7XPXowXerP8C0X8S6PARCST20+
200
0
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
Founded in November 1990 Spun out of Acorn Computers---Advanced RISC Machines Ltd, now just ARM Ltd.
小
PXA270-S平台上Linux的引导加载程序设计第1阶段汇编代码,完成:
复位处理异常中断处理, 处理器及外设的初始化; 复制第2阶段代码到内 存
第2阶段汇编代码,初始 化各个操作代码的堆栈, 跳转到C代码
start.S
trampoline.S
C代码的主程序,将各个 功能串接起来,完成应 用的主要功能
4,500
4,000
3,500
3,000
2,500
2,000
1,500
1,000
500
0
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
PC/WS Embedded
相关内容 嵌入式系统 嵌入式处理器与平台的选择 Linux嵌入式操作系统
常见的嵌入式处理器:ARM、MIPS、PowerPC、x86……
为什么在嵌入式系统教学中选用ARM
典型的RISC体系结构
软件资源丰富、完善 编译器 操作系统 应用程序 调试工具
1,200
1,000
Millions of units
800
600
400
ARM68KMSIHP-S7XPXowXerP8C0X8S6PARCST20+
200
0
1998 1999 2000 2001 2002 2003 2004 2005 2006 2007
Founded in November 1990 Spun out of Acorn Computers---Advanced RISC Machines Ltd, now just ARM Ltd.
小
PXA270-S平台上Linux的引导加载程序设计第1阶段汇编代码,完成:
复位处理异常中断处理, 处理器及外设的初始化; 复制第2阶段代码到内 存
第2阶段汇编代码,初始 化各个操作代码的堆栈, 跳转到C代码
start.S
trampoline.S
C代码的主程序,将各个 功能串接起来,完成应 用的主要功能
4,500
4,000
3,500
3,000
2,500
2,000
1,500
1,000
500
0
1998
1999
2000
2001
2002
2003
2004
2005
2006
2007
PC/WS Embedded
相关内容 嵌入式系统 嵌入式处理器与平台的选择 Linux嵌入式操作系统
常见的嵌入式处理器:ARM、MIPS、PowerPC、x86……
为什么在嵌入式系统教学中选用ARM
典型的RISC体系结构
软件资源丰富、完善 编译器 操作系统 应用程序 调试工具
精品课件-基于ARM9的嵌入式Linux系统-第8章
子目录下的Makefile传递一些信息。有些变量,比如 SUBDIRS,不仅在顶层Makefile中定义并且赋初值,而且在 arch/*/Makefile还作了扩充。
第8章 嵌入式Linux内核
7
(3) Rules.make 变量。 前面讲过,Rules.make 是编译规则文件,所有的Makefile
linux2.6.14.1.tar.gz [root@localhost mxl]# pwd /mnt/hgfs/share/mxl
第8章 嵌入式Linux内核
29
8.3.2 修改Makefile 修改内核目录树根下的主Makefile,指明交叉编译器。
[root@localhost linux2.6.14.1]#vi Makefile 找到ARCH和CROSS_COMPILE,修改。
第8章 嵌入式Linux内核
24
图8-2 menuconfig配置界面
第8章 嵌入式Linux内核
25
8.2.3 Linux内核启动原理 在Bootloader将Linux内核映像拷贝到RAM以后,可以通过
下例代码启动Linux内核: call_linux(0, machine_type, kernel_params_base)。
第8章 嵌入式Linux内核
3
8.2 Linux内核软件结构分析
8.2.1 Linux内核配置系统原理 1. 配置系统的基本结构 本节对Makefile分析方法可参看第7章vivi中Makefile的详
细分析,Linux内核的配置系统由三个部分组成,分别是: ① Makefile:分布在Linux内核源代码(包括子目录)中的
/prompt/ /symbol/ /word/
【精品】PPT课件 嵌入式Linux系统设计与开发PPT共44页
60、人民的幸福是至高无个的法。— —西塞 罗
谢谢你的阅读
❖ 知识就是财富 ❖ 丰富你的人生
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,言行相称。——韩非
【精品】PPT课件 嵌入式Linux系统设 计与开发
56、极端的法规,就是极端的不公。 ——西 塞罗 57、法律一旦成为人们的需要,人们 就不再 配享受 自由了 。—— 毕达哥 拉斯 58、法律规定的惩罚不是为了私人的 利益, 而是为 了公共 的利益 ;一部 法律他们会更快乐的话 ,那么 法律作 为一件 无用之 物自己 就会消 灭。— —洛克
谢谢你的阅读
❖ 知识就是财富 ❖ 丰富你的人生
71、既然我已经踏上这条道路,那么,任何东西都不应妨碍我沿着这条路走下去。——康德 72、家庭成为快乐的种子在外也不致成为障碍物但在旅行之际却是夜间的伴侣。——西塞罗 73、坚持意志伟大的事业需要始终不渝的精神。——伏尔泰 74、路漫漫其修道远,吾将上下而求索。——屈原 75、内外相应,言行相称。——韩非
【精品】PPT课件 嵌入式Linux系统设 计与开发
56、极端的法规,就是极端的不公。 ——西 塞罗 57、法律一旦成为人们的需要,人们 就不再 配享受 自由了 。—— 毕达哥 拉斯 58、法律规定的惩罚不是为了私人的 利益, 而是为 了公共 的利益 ;一部 法律他们会更快乐的话 ,那么 法律作 为一件 无用之 物自己 就会消 灭。— —洛克
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
5
gcc编译器的用法
例:给出以下Hello源程序 void main( )
{ printf(“Hello the world\n”)
} 要编译这个程序,只需输入以下命令即可完成 $ gcc –o hello hello.c 其中gcc表示用gcc来编译源程序,-o选项表示要求编译器生 成可执行文件的文件名, hello.c是要编译的源程序文件。
6
Makefile文件和Make命令
Linux内核的配置系统由以下三个部分组成: Makefile:用于定义Linux内核的编译规则; 配置文件(config.in):给用户提供配置选择的功能; 配置工具:包括配置命令解释器和配置用户界面等。
其中,Makefile文件描述了目标文件之间的依赖关系,以 及指定编译过程中使用的工具,即根据配置的情况,构造出 需要编译的源文件列表,然后分别编译,并把目标代码链接 到一起,最终形成Linux内核的二进制文件。 Makefile带来的好处就是自动化编译(批处理),在需 要编译时只需要一个Make命令即可自动完成,极大的提高 了软件开发的效率。
9
Makefile文件和Make命令
Rules.make变量 RБайду номын сангаасles.make定义了所有Makefile共用的编译规则。
Linux把所有共用的编译规则统一放置到Rules.make中,并 在各自的Makefile中通过语句“include Rules.make”包含 Rules.make,这样可避免多个Makefile中重复这些规则。 子目录Makefile
7
Makefile文件和Make命令
在Linux内核中,与Makefile直接相关的文件有: Makefile:顶层Makefile,是整个内核配置、编译的总体 控制文件。 Config:内核配置文件,包含由用户选择的配置选项, 用来存放内核配置后的结果。 Arch/*/Makefile:位于各CPU体系目录下的Makefile。 各子目录下的Makefile:负责所在子目录下源代码的管 理。 Rules.make:规则文件,被所有的Makefile使用。
3
gcc编译器的用法
Gcc的使用格式为: gcc [option] file… 其中option是以“-”开始的各种选项,file是要
编译的文件名。 在使用gcc进行编译时,必须要给出必要的选项 和文件名。 Gcc的整个编译过程分为预处理、编译、汇编 和链接四个过程。
4
gcc编译器的用法
gcc编译器的常用选项有: [ -o ]:表示要求编译器生成指定文件名的可执行文件; [ -c ]:表示只要求编译器进行编译,而不要进行链接,生成 以源文件的文件名命名但把其后缀由.c或.cc变成.o的目标文件。 [ -g ]:要求编译器在编译的时候提供以后对程序进行调试的 信息。 [ -E ]:表示编译器对源文件只进行预处理就停止,而不做编 译、汇编和链接。 [ -S ]:表示编译器只进行编译,而不做汇编和链接。 [ -O ]:是编译器对程序提供的编译优化选项,以提高执行效 率。 [ -Wall ]:指定产生全部的警告信息。
➢ Make config(配置命令) scripts/configure(解释脚本) ➢ Make oldconfig scripts/configure ➢ Make menuconfig scripts/menuconfig ➢ Make xconfig scripts/tkparse 以字符界面配置Make config为例,其配置过程为顶层 Makefile调用scripts/configure按照arch/arm/config.in来 进行配置,命令执行完后产生配置文件.config,其中保存着 有关配置信息。
顶层Makefile有两个主要任务:一是产生vmlinux文件; 二是产生内核模块(module)。
8
Makefile文件和Make命令
Makefile中的变量 顶层Makefile定义并向环境中输出了很多变量,为各个
子目录下的Makefile传递一些信息。具体常用变量如下: ➢ 版本信息:用来定义当前内核的版本; ➢ CPU体系结构:用于定义目标CPU的体系结构; ➢ 路径信息:用于定义内核等源代码所在的目录; ➢ 内核组成信息:包括头文件、内核文件等; ➢ 编译信息:用于定义交叉编译的环境; ➢ 配置变量config_*:用来说明用户配置的结果。
11
配置文件
配置语言
➢ 顶层菜单 mainmenu_name /prompt/ /prompt/
用于指定本CONFIG语言文件顶层的名字,其中/prompt/是 一串提示符。
➢ 询问语句 Bool /prompt/ /symbol/ hex /prompt/ /symbol/ /word/ int /prompt/ /symbol/ /word/ string /prompt/ /symbol/ /word/ tristate /prompt/ /symbol/
用来控制本级目录下源代码的编译规则。
Make
Make是一个解释Makefile中指令的命令工具。 Make命 令执行时,需要一个Makefile文件,以告诉make命令怎么去 编译和链接程序。
10
配置文件
除了Makefile的编写,另外一个重要的工作就是把新功能 加入到Linux的配置选项中,并提供此项功能的说明,让用户 有机会选择此项功能。这些工作需要在config.in文件中用配 置语言编写配置脚本来实现。 在Linux内核中,配置命令有多种方式:
嵌入式系统教案
第八章 嵌入式Linux应用程序设计
1 gcc编译器的使用 2 Makefile文件和Make命令 3 配置文件
4 Linux操作系统的移植 5 Linux内核移植 6 Linux启动过程 7 Linux内核移植中存在的问题
2
gcc编译器的使用
最初gcc的意思是GNU C Compiler,即只作为 C程序语言的编译器;现在,经过多年的发展, gcc 已经变成了GNU Compiler Collection,即GNU编译 器家族的意思,除支持C语言以外,还支持Ada语言、 C++语言、Java语言等多种语言。 gcc是GNU组织提供的免费C编译器,大多数 Linux版本都默认安装了这种编译器。
gcc编译器的用法
例:给出以下Hello源程序 void main( )
{ printf(“Hello the world\n”)
} 要编译这个程序,只需输入以下命令即可完成 $ gcc –o hello hello.c 其中gcc表示用gcc来编译源程序,-o选项表示要求编译器生 成可执行文件的文件名, hello.c是要编译的源程序文件。
6
Makefile文件和Make命令
Linux内核的配置系统由以下三个部分组成: Makefile:用于定义Linux内核的编译规则; 配置文件(config.in):给用户提供配置选择的功能; 配置工具:包括配置命令解释器和配置用户界面等。
其中,Makefile文件描述了目标文件之间的依赖关系,以 及指定编译过程中使用的工具,即根据配置的情况,构造出 需要编译的源文件列表,然后分别编译,并把目标代码链接 到一起,最终形成Linux内核的二进制文件。 Makefile带来的好处就是自动化编译(批处理),在需 要编译时只需要一个Make命令即可自动完成,极大的提高 了软件开发的效率。
9
Makefile文件和Make命令
Rules.make变量 RБайду номын сангаасles.make定义了所有Makefile共用的编译规则。
Linux把所有共用的编译规则统一放置到Rules.make中,并 在各自的Makefile中通过语句“include Rules.make”包含 Rules.make,这样可避免多个Makefile中重复这些规则。 子目录Makefile
7
Makefile文件和Make命令
在Linux内核中,与Makefile直接相关的文件有: Makefile:顶层Makefile,是整个内核配置、编译的总体 控制文件。 Config:内核配置文件,包含由用户选择的配置选项, 用来存放内核配置后的结果。 Arch/*/Makefile:位于各CPU体系目录下的Makefile。 各子目录下的Makefile:负责所在子目录下源代码的管 理。 Rules.make:规则文件,被所有的Makefile使用。
3
gcc编译器的用法
Gcc的使用格式为: gcc [option] file… 其中option是以“-”开始的各种选项,file是要
编译的文件名。 在使用gcc进行编译时,必须要给出必要的选项 和文件名。 Gcc的整个编译过程分为预处理、编译、汇编 和链接四个过程。
4
gcc编译器的用法
gcc编译器的常用选项有: [ -o ]:表示要求编译器生成指定文件名的可执行文件; [ -c ]:表示只要求编译器进行编译,而不要进行链接,生成 以源文件的文件名命名但把其后缀由.c或.cc变成.o的目标文件。 [ -g ]:要求编译器在编译的时候提供以后对程序进行调试的 信息。 [ -E ]:表示编译器对源文件只进行预处理就停止,而不做编 译、汇编和链接。 [ -S ]:表示编译器只进行编译,而不做汇编和链接。 [ -O ]:是编译器对程序提供的编译优化选项,以提高执行效 率。 [ -Wall ]:指定产生全部的警告信息。
➢ Make config(配置命令) scripts/configure(解释脚本) ➢ Make oldconfig scripts/configure ➢ Make menuconfig scripts/menuconfig ➢ Make xconfig scripts/tkparse 以字符界面配置Make config为例,其配置过程为顶层 Makefile调用scripts/configure按照arch/arm/config.in来 进行配置,命令执行完后产生配置文件.config,其中保存着 有关配置信息。
顶层Makefile有两个主要任务:一是产生vmlinux文件; 二是产生内核模块(module)。
8
Makefile文件和Make命令
Makefile中的变量 顶层Makefile定义并向环境中输出了很多变量,为各个
子目录下的Makefile传递一些信息。具体常用变量如下: ➢ 版本信息:用来定义当前内核的版本; ➢ CPU体系结构:用于定义目标CPU的体系结构; ➢ 路径信息:用于定义内核等源代码所在的目录; ➢ 内核组成信息:包括头文件、内核文件等; ➢ 编译信息:用于定义交叉编译的环境; ➢ 配置变量config_*:用来说明用户配置的结果。
11
配置文件
配置语言
➢ 顶层菜单 mainmenu_name /prompt/ /prompt/
用于指定本CONFIG语言文件顶层的名字,其中/prompt/是 一串提示符。
➢ 询问语句 Bool /prompt/ /symbol/ hex /prompt/ /symbol/ /word/ int /prompt/ /symbol/ /word/ string /prompt/ /symbol/ /word/ tristate /prompt/ /symbol/
用来控制本级目录下源代码的编译规则。
Make
Make是一个解释Makefile中指令的命令工具。 Make命 令执行时,需要一个Makefile文件,以告诉make命令怎么去 编译和链接程序。
10
配置文件
除了Makefile的编写,另外一个重要的工作就是把新功能 加入到Linux的配置选项中,并提供此项功能的说明,让用户 有机会选择此项功能。这些工作需要在config.in文件中用配 置语言编写配置脚本来实现。 在Linux内核中,配置命令有多种方式:
嵌入式系统教案
第八章 嵌入式Linux应用程序设计
1 gcc编译器的使用 2 Makefile文件和Make命令 3 配置文件
4 Linux操作系统的移植 5 Linux内核移植 6 Linux启动过程 7 Linux内核移植中存在的问题
2
gcc编译器的使用
最初gcc的意思是GNU C Compiler,即只作为 C程序语言的编译器;现在,经过多年的发展, gcc 已经变成了GNU Compiler Collection,即GNU编译 器家族的意思,除支持C语言以外,还支持Ada语言、 C++语言、Java语言等多种语言。 gcc是GNU组织提供的免费C编译器,大多数 Linux版本都默认安装了这种编译器。