第7章 嵌入式uClinux及应用开发
如何使用C语言进行嵌入式系统开发
如何使用C语言进行嵌入式系统开发第一章:引言嵌入式系统是一种专门设计用于特定应用领域的计算机系统,它通常由硬件平台和软件系统组成。
C语言作为一种高级编程语言,广泛应用于嵌入式系统开发中。
本文将介绍如何使用C语言进行嵌入式系统开发。
第二章:了解嵌入式系统在使用C语言进行嵌入式系统开发之前,我们需要了解嵌入式系统的基本概念和特点。
嵌入式系统通常运行在资源受限的环境中,因此需要对系统资源的管理和利用进行精确控制。
嵌入式系统的开发过程需要考虑实时性、可靠性、功耗等因素。
第三章:基础知识在使用C语言进行嵌入式系统开发之前,我们需要掌握一些基础知识。
首先是C语言的基本语法和特性,包括数据类型、运算符、控制语句等。
其次是嵌入式系统开发中常用的硬件知识,例如芯片架构、外设接口等。
还需要了解一些常用的嵌入式开发工具,如编译器、调试器等。
第四章:选择适合的开发平台嵌入式系统开发需要选择适合的开发平台。
常见的开发平台包括单片机、嵌入式Linux系统、实时操作系统等。
根据具体应用需求选择合适的开发平台,同时要考虑开发工具的可用性和便利性。
第五章:编写嵌入式系统应用程序使用C语言进行嵌入式系统开发的核心是编写应用程序。
在编写应用程序时,需要根据系统需求设计合适的算法和数据结构,实现功能模块。
同时要考虑资源的合理利用和性能的优化,以保证系统的稳定运行。
第六章:调试和测试嵌入式系统开发过程中,调试和测试是至关重要的环节。
通过调试和测试可以发现和解决系统中的问题,保证系统的可靠性和稳定性。
在调试和测试过程中,可以使用一些专业的嵌入式开发工具,如JTAG、Logic Analyzer等,来辅助分析和调试。
第七章:性能优化嵌入式系统通常具有资源受限的特点,因此性能优化是非常重要的。
通过代码优化、算法改进、资源管理等手段,可以提高系统的实时性、运行速度和功耗效率。
在进行性能优化时,需要仔细分析系统的瓶颈和热点,针对性地进行优化操作。
嵌入式linux操作系统原理与应用
嵌入式Linux操作系统是一种针对嵌入式设备设计和优化的Linux操作系统。
它在嵌入式系统中发挥着关键作用,为嵌入式设备提供了丰富的功能和灵活性。
以下是嵌入式Linux操作系统的原理和应用方面的概述:嵌入式Linux操作系统原理:内核:嵌入式Linux操作系统的核心是Linux内核,它提供了操作系统的基本功能,包括处理器管理、内存管理、设备驱动程序、文件系统和网络协议栈等。
裁剪:为了适应嵌入式设备的资源限制,嵌入式Linux操作系统通常经过裁剪和优化,只选择必要的功能和驱动程序,以减小内存占用和存储空间,并提高性能和响应速度。
交叉编译:由于嵌入式设备通常具有不同的硬件架构和处理器,所以嵌入式Linux操作系统需要通过交叉编译来生成适用于目标设备的可执行文件和库。
设备驱动:嵌入式Linux操作系统需要适配各种硬件设备,因此需要编写和集成相应的设备驱动程序,以使操作系统能够正确地与硬件进行通信和交互。
嵌入式Linux操作系统应用:嵌入式设备:嵌入式Linux操作系统广泛应用于各种嵌入式设备,如智能手机、平板电脑、家用电器、工业控制系统、车载设备等。
物联网(IoT):随着物联网的快速发展,嵌入式Linux操作系统被广泛应用于连接的嵌入式设备,用于数据采集、通信、远程控制和智能化管理。
嵌入式开发板:嵌入式Linux操作系统在开发板上提供了丰富的开发环境和工具链,用于嵌入式软件开发和调试。
自定义嵌入式系统:开发者可以基于嵌入式Linux操作系统构建自定义的嵌入式系统,根据特定需求进行定制和开发,实现各种功能和应用。
嵌入式Linux操作系统的原理和应用非常广泛,它为嵌入式设备提供了灵活性、可定制性和强大的功能支持,使得开发者能够构建高度定制化和功能丰富的嵌入式系统。
嵌入式linux开发课程设计
嵌入式linux开发课程设计一、课程目标知识目标:1. 理解嵌入式Linux系统的基本概念、原理和架构。
2. 掌握嵌入式Linux开发环境的搭建与使用。
3. 学习嵌入式Linux内核配置、编译与移植方法。
4. 掌握常见的嵌入式Linux设备驱动编程技术。
技能目标:1. 能够独立搭建嵌入式Linux开发环境。
2. 熟练运用Makefile、交叉编译工具链进行代码编译。
3. 能够编写简单的嵌入式Linux设备驱动程序。
4. 学会分析并解决嵌入式Linux开发过程中的常见问题。
情感态度价值观目标:1. 培养学生对嵌入式系统开发的兴趣,提高学习积极性。
2. 培养学生的团队协作意识,增强沟通与表达能力。
3. 培养学生勇于克服困难,面对挑战的精神。
分析课程性质、学生特点和教学要求:本课程为高年级专业课程,要求学生具备一定的C语言基础和计算机硬件知识。
课程性质为理论与实践相结合,注重培养学生的实际动手能力。
针对学生特点,课程目标设定了明确的知识点和技能要求,旨在使学生能够掌握嵌入式Linux开发的基本方法,为后续项目实践和职业发展奠定基础。
课程目标分解为具体学习成果:1. 学生能够阐述嵌入式Linux系统的基本概念、原理和架构。
2. 学生能够自主搭建嵌入式Linux开发环境,并进行简单的程序编译与运行。
3. 学生能够编写简单的嵌入式Linux设备驱动程序,并实现相应的功能。
4. 学生能够针对嵌入式Linux开发过程中遇到的问题,提出合理的解决方案,并进行实际操作。
二、教学内容1. 嵌入式Linux系统概述- 嵌入式系统基本概念- 嵌入式Linux的发展历程- 嵌入式Linux系统的特点与优势2. 嵌入式Linux开发环境搭建- 交叉编译工具链的安装与配置- 嵌入式Linux文件系统制作- 常用开发工具的使用(如Makefile、GDB)3. 嵌入式Linux内核与驱动- 内核配置与编译- 内核移植方法- 常见设备驱动编程(如字符设备、块设备、网络设备)4. 实践项目与案例分析- 简单嵌入式Linux程序编写与运行- 设备驱动程序编写与调试- 分析并解决实际问题(如系统性能优化、故障排查)教学内容安排与进度:1. 嵌入式Linux系统概述(2课时)2. 嵌入式Linux开发环境搭建(4课时)3. 嵌入式Linux内核与驱动(6课时)4. 实践项目与案例分析(8课时)本教学内容基于课程目标,结合教材章节内容,注重理论与实践相结合,旨在培养学生的实际动手能力和解决问题的能力。
基于ARM的uClinux及其应用开发
此 外 对 系 统 S C G寄 存 器 也 进 行 了 相 关 的 设 置 。 YS F 如
C c e 作使 能 、写缓 冲使 能 以及 设 置 了特殊 功 能寄存 器组 的 ah 操
基指针 等 。 最后 即定 义 系统存 储器 控制 寄存 器 。
l32 -. 编 译 u ln x内核 C iu
# e n MC K d f ef L i # e n L 2 d f eMC K i
1 . 嵌 入 式 操 作 系 统 u iu 2 Ci x n u l u 就 是 Mir— o t lLn x Ci x n co C nr — iu ,是 针 对 控 制 领 域 的 嵌 入 o
式 l u 操 作 系 统 , 是 从 Ln x2024 核 派 生 而 来 , 袭 了 主 i x n 它 iu . .内 / 沿
系 统 引 导 程 序 B oL a e是 嵌 入 式 系 统 加 电 后 执 行 的 第 一 oto d r
个 程序 , 一般 应写入 Fah ls存储 器 中并从 起始 物理 地址0 0 x 开始 。 在应 用 实际 中B oL a e的 功能 主要 有 : 将 u Ln x oto dr ① C iu 内核 和 文
统配置 文件 、 系统 程序 、 户应 用程 序和必 需 的驱动 程序 。 用
11 B o L a e 程 序 . oto dr
d fn ¥ C 51 b CP ma trco k eie 3 4 0 U se lc
/木 木 球 水 木 术 水 水 术 术 木 丰 术 水 木 术 木/ 术 卓 木 术 木 木 术 木 木 水 木 木 水 木 术 木 木 木
及 其 他相 关硬 件信 息 的定 义文 件h rw r.首 先要 定义 系统 工 ad ae h
《嵌入式系统开发与应用》教学教案
《嵌入式系统开发与应用》教学教案一、教学目标1. 了解嵌入式系统的概念、特点和应用领域。
2. 掌握嵌入式系统的基本组成和开发流程。
3. 学习嵌入式操作系统的基本原理和常用操作系统。
4. 掌握嵌入式系统编程方法和常用编程工具。
5. 培养学生的嵌入式系统设计和开发能力。
二、教学内容1. 嵌入式系统概述1.1 嵌入式系统的定义1.2 嵌入式系统的特点1.3 嵌入式系统的应用领域2. 嵌入式系统的基本组成2.1 硬件平台2.2 软件系统2.3 中间件和驱动程序3. 嵌入式系统开发流程3.1 需求分析3.2 硬件选型和系统设计3.3 软件开发3.4 系统集成与测试3.5 产品发布与维护4. 嵌入式操作系统原理4.1 嵌入式操作系统的概念4.2 嵌入式操作系统的分类4.3 嵌入式操作系统的特点4.4 常用嵌入式操作系统介绍5. 嵌入式系统编程方法5.1 嵌入式编程语言5.2 嵌入式系统编程工具5.3 嵌入式系统编程规范5.4 嵌入式系统编程实例三、教学方法1. 讲授法:讲解嵌入式系统的基本概念、原理和开发流程。
2. 案例分析法:分析实际项目中的嵌入式系统设计和开发案例。
3. 实验法:动手实践,掌握嵌入式系统编程方法和工具。
4. 小组讨论法:分组讨论,培养团队合作能力。
四、教学资源1. 教材:《嵌入式系统开发与应用》2. 课件:教学PPT3. 实验设备:嵌入式开发板、编程器、仿真器等4. 在线资源:相关论文、博客、教程、论坛等五、教学评价1. 课堂参与度:观察学生在课堂上的发言和讨论情况。
2. 作业完成情况:评估学生作业的质量和完成速度。
3. 实验报告:评估学生在实验过程中的操作能力和解决问题的能力。
4. 期末考试:测试学生对嵌入式系统开发与应用知识的掌握程度。
六、教学内容6. 嵌入式系统硬件平台6.1 微控制器(MCU)6.2 应用处理器(AP)6.3 系统级芯片(SoC)6.4 硬件选型的考虑因素7. 嵌入式系统软件系统7.1 固件编程7.2 嵌入式操作系统7.3 中间件与驱动程序开发7.4 软件开发工具与环境8. 嵌入式系统中间件与驱动程序8.1 中间件的概念与作用8.2 常用中间件介绍8.3 驱动程序的概念与开发8.4 设备驱动程序的框架9. 嵌入式系统项目开发流程9.1 需求分析与规格说明书编写9.2 硬件设计与选型9.3 软件设计与开发9.4 系统集成与测试9.5 项目管理与迭代10. 嵌入式系统案例分析与实践10.1 案例选择与分析10.2 系统设计与开发过程10.3 项目实施与调试10.4 项目报告与评审七、教学方法1. 案例分析法:通过分析具体的嵌入式系统项目案例,使学生了解项目开发的实际过程。
嵌入式linux开发教程pdf
嵌入式linux开发教程pdf嵌入式Linux开发是指在嵌入式系统中使用Linux操作系统进行开发的过程。
Linux作为一种开源操作系统,具有稳定性、可靠性和灵活性,因此在嵌入式系统中得到了广泛的应用。
嵌入式Linux开发教程通常包括以下内容:1. Linux系统概述:介绍Linux操作系统的发展历程和基本原理,包括内核、文件系统、设备驱动等方面的知识。
了解Linux系统的基本结构和工作原理对后续的开发工作至关重要。
2. 嵌入式开发环境搭建:通过搭建开发环境,包括交叉编译器、调试器、仿真器等工具的配置,使得开发者可以在本机上进行嵌入式系统的开发和调试。
同时,还需要了解各种常用的开发工具和调试技术,如Makefile的编写、GDB的使用等。
3. 嵌入式系统移植:嵌入式系统往往需要根据不同的硬件平台进行移植,以适应各种不同的硬件环境。
这个过程包括引导加载程序的配置、设备驱动的移植和内核参数的调整等。
移植成功后,就可以在目标硬件上运行Linux系统。
4. 应用程序开发:在嵌入式Linux系统上进行应用程序的开发。
这包括编写用户空间的应用程序,如传感器数据采集、数据处理、网络通信等功能。
还需要熟悉Linux系统提供的各种库函数和API,如pthread库、socket编程等。
5. 系统优化和性能调优:在开发过程中,经常需要对系统进行调优和优化,以提高系统的性能和稳定性。
这包括对内核的优化、内存管理的优化、性能分析和调试等。
只有深入了解和熟练掌握这些技术,才能使得嵌入式系统运行得更加高效和稳定。
嵌入式Linux开发教程PDF通常会结合理论和实践相结合的方式进行教学,通过实际的案例和实践操作,帮助开发者快速掌握嵌入式Linux开发的技术和方法。
同时还会介绍一些常见的开发板和硬件平台,以及开源项目等,帮助开发者在实际项目中应用所学的技术。
总之,嵌入式Linux开发教程PDF提供了系统而详细的指导,帮助开发者快速入门嵌入式Linux开发,掌握相关的技术和方法,以便更好地进行嵌入式系统的开发工作。
《嵌入式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系统开发基础
《嵌入式软件开发》课件
VxWorks是一种实时操作系统,广泛应用于航空航天、军事等领域。 它具有高度的可靠性和实时性,能够满足严苛的实时任务需求。
03
Android
Android是一种基于Linux的开源操作系统,主要用于移动设备。由于
其开放性和丰富的应用生态,Android也被广泛应用于嵌入式领域,如
智能家居、物联网设备等。
数据加密、数据备份与恢复
数据安全与隐私保护问题是嵌入式软 件开发中不可忽视的问题之一。由于 嵌入式系统通常涉及到敏感数据和隐 私信息,如果程序中存在数据泄露或 数据损坏问题,会导致严重的信息安 全和隐私侵犯问题。
解决方案: 对敏感数据进行加密处理 ,使用数据备份与恢复机制,确保数 据的完整性和安全性。同时加强用户 隐私保护意识,避免敏感信息的泄露 和滥用。
时钟管理问题
时钟不准确、时钟同步
时钟管理问题也是嵌入式软件开发中常见的问题之一。由于嵌入式系统 的时钟资源有限,如果程序中存在时钟不准确或时钟同步问题,会导致
系统时间错误或数据采集错误。
解决方案: 使用高精度时钟源,优化时钟配置,实现时钟同步和校准, 确保系统时间的准确性。
多任务并发问题
01
任务优先级、任务同步
外设接口
用于连接外部设备,扩展嵌入 式系统的功能。
嵌入式系统的软件架构
操作系统
负责资源管理和任务调度,提供系统服务。
驱动程序
用于管理硬件设备,实现与操作系统的通信 。
应用程序
实现特定功能的软件,直接与硬件交互。
嵌入式中间件
提供跨平台的通信和数据交换服务。
嵌入式软件开发工具与环境
IDE(集成开发环境)
《嵌入式软件开发》PPT课 件
uCLinux开发介绍
uCLinux开发介绍严永红Linux是当前一种非常受欢迎的操作系统,它与UNIX系统兼容,并开放源代码。
它包含所有现代操作系统所具有的一切特性,包括多任务,虚拟内存,代码共享,按需载入,内存管理,以及TCP/IP网络。
并且,它遵循POSIX标准,只要是遵循POSIX API的应用程序很容易被移植。
目前,随着嵌入式系统的蓬勃发展。
Linux也已对嵌入式系统的开发产生具大影响。
大多数流行的CPU都被移植上去,ARM, PowerPC , MIPS, 68K, SPARC, Alpha, SH 等等. 这些CPU都含有一种叫做内存管理单元(MMU)的硬件,来支持标准Linux所需要的虚拟内存。
但在嵌入式世界里,还有很多CPU是没有MMU的,象ARM7、68328等等。
uClinux 正是为了解决这种没有MMU的CPU而产生的。
在uCLinux这个英文单词中,u表示Micro,小的意思,C表示Control,控制的意思,连起来就是Micro-Control-Linux, ―运行在微控制器上的Linux.‖针对这种没有MMU的CPU架构,uCLinux采用了一种平板式(Flat)的内存模型来去除对MMU的依赖, 并且改变了用户程序的加载方式,开发了运用于uCLinux的C函数库--uCLibc. 由于这些变化,一般的Linux开发工具(例如GDB)在开发uCLinux时会碰到一些困难,包括内核的移植,驱动程序及应用程序的调试。
针对这样状况。
Hitool System公司开发了Hitool for uClinux开发套件,来帮助用户开发基于uClinux的系统。
Hitool for uClinux与其它的Linux开发工具相比,有几个优点:A.整个开发过程只在Windows环境下完成,包括内核的配臵、编译,应用程序的编译,文件系统的生成,内核的调试,用户程序的调试。
B.可以采用多种调试方式,既可以采用JTAG方式来调试,也可通过网口用Hitool自己的监控程序(MDB)来调试。
ARM入门教程.pdf
目录第1章 ARM微处理器概述 51.1 ARM-Advanced RISC Machines 51.2 ARM微处理器的应用领域及特点 51.2.1 ARM微处理器的应用领域 51.2.2 ARM微处理器的特点 61.3 ARM微处理器系列 61.3.1 ARM7微处理器系列 61.3.2 ARM9微处理器系列 71.3.3 ARM9E微处理器系列 71.3.4 ARM10E微处理器系列 71.3.5 SecurCore微处理器系列 81.3.6 StrongARM微处理器系列 81.3.7 Xscale处理器 81.4 ARM微处理器结构 81.4.1 RISC体系结构 81.4.2 ARM微处理器的寄存器结构 91.4.3 ARM微处理器的指令结构 91.5 ARM微处理器的应用选型 101.6 本章小节10第2章 ARM微处理器的编程模型 112.1 ARM微处理器的工作状态 112.2 ARM体系结构的存储器格式 112.3 指令长度及数据类型 122.4 处理器模式 122.5 寄存器组织 132.5.1 ARM状态下的寄存器组织 132.5.2 Thumb状态下的寄存器组织 152.5.3 程序状态寄存器 162.6 异常(Exceptions) 182.6.1 ARM体系结构所支持的异常类型 182.6.2 对异常的响应 182.6.3 从异常返回 192.6.4 各类异常的具体描述 192.6.5 异常进入/退出小节 202.6.6 异常向量(Exception Vectors) 202.6.7 异常优先级(Exception Priorities) 212.6.8 应用程序中的异常处理 212.7 本章小节21第3章 ARM微处理器的指令系统 223.1 ARM微处理器的指令集概述 223.1.1 ARM微处理器的指令的分类与格式 223.1.2 指令的条件域 233.2 ARM指令的寻址方式 233.2.1 立即寻址 243.2.2 寄存器寻址 243.2.2 寄存器间接寻址 243.2.3 基址变址寻址 243.2.4 多寄存器寻址 253.2.5 相对寻址 253.2.6 堆栈寻址 253.3 ARM指令集 253.3.1 跳转指令 253.3.2 数据处理指令 263.3.3 乘法指令与乘加指令 303.3.4 程序状态寄存器访问指令 323.3.5 加载/存储指令 323.3.6 批量数据加载/存储指令 343.3.7 数据交换指令 353.3.8 移位指令(操作) 353.3.9 协处理器指令 363.3.10 异常产生指令 383.4 Thumb指令及应用 383.5 本章小节39第4章 ARM程序设计基础 404.1 ARM汇编器所支持的伪指令 404.1.1 符号定义(Symbol Definition)伪指令 404.1.2 数据定义(Data Definition)伪指令 414.1.3 汇编控制(Assembly Control)伪指令 434.1.4 其他常用的伪指令 454.2 汇编语言的语句格式 484.2.1 在汇编语言程序中常用的符号 494.2.2 汇编语言程序中的表达式和运算符 494.3 汇编语言的程序结构 524.3.1 汇编语言的程序结构 524.3.2 汇编语言的子程序调用 524.3.3 汇编语言程序示例 534.3.4 汇编语言与C/C++的混合编程 554.4 本章小节56第5章应用系统设计与调试 575.1 系统设计概述 575.2 S3C4510B概述 585.2.1 S3C4510B及片内外围简介 585.2.2 S3C4510B的引脚分布及信号描述 615.2.3 CPU内核概述及特殊功能寄存器(Special Registers) 675.2.4 S3C4510B的系统管理器(System Manager) 725.3 系统的硬件选型与单元电路设计 825.3.1 S3C4510B芯片及引脚分析 825.3.2 电源电路 835.3.3 晶振电路与复位电路 835.3.4 Flash存储器接口电路 855.3.5 SDRAM接口电路 895.3.6 串行接口电路 935.3.7 IIC接口电路 945.3.8 JTAG接口电路 955.3.9 10M/100M以太网接口电路 965.3.10 通用I/O接口电路 1005.4 硬件系统的调试 1015.4.1 电源、晶振及复位电路 1015.4.2 S3C4510B及JTAG接口电路 1025.4.3 SDRAM接口电路的调试 1035.4.4 Flash接口电路的调试 1055.4.5 10M/100M以太网接口电路 1055.5 印刷电路板的设计注意事项 1055.5.1 电源质量与分配 1055.5.2 同类型信号线的分布 1065.6 本章小节 106 第6章部件工作原理与编程示例 1076.1 嵌入式系统的程序设计方法 1076.2 部件工作原理与编程示例 1086.2.1 通用I/O口工作原理与编程示例 1086.2.2 串行通讯工作原理与编程示例 1116.2.3 中断控制器工作原理与编程示例 1206.2.4 定时器工作原理与编程示例 1236.2.5 GDMA工作原理与编程示例 1276.2.6 IIC总线控制器工作原理 1336.2.7 以太网控制器工作原理 138主要特性139MAC功能模块 140 带缓冲DMA接口(Buffered DMA Interface) 144以太网控制器特殊功能寄存器(Ethernet Controller Special Registers) 147MAC寄存器(Media Access Control(MAC)Register) 154以太网控制器的操作(Ethernet Controller Operation) 160发送一个帧(Transmitting a Frame) 162接收一个帧(Receiving a Frame) 1626.2.8 Flash存储器工作原理与编程示例 1626.3 BootLoader简介 1676.4 本章小节 167 第7章嵌入式uClinux及其应用开发 1687.1 嵌入式uClinux系统概况 1687.2 开发工具GNU的使用 1707.2.1 GCC编译器 1707.2.2 GNU Make 1727.2.3 使用GDB调试程序 1777.3 建立uClinux开发环境 1807.3.1 建立交叉编译器 1817.3.2 uClinux针对硬件的改动 1847.3.3 编译uClinux内核 1857.3.4 内核的加载运行 1877.4 在uClinux下开发应用程序 1887.4.1 串行通信 1907.4.2 socket编程 1957.4 .3 添加用户应用程序到uClinux 2027.4.4 通过网络添加应用程序到目标系统 2057.5 本章小结 207 第8章ARM ADS集成开发环境的使用 2098.1 ADS集成开发环境组成介绍 2098.1.1 命令行开发工具 2098.1.2 ARM运行时库 2188.1.3 GUI开发环境(Code Warrior和AXD) 2198.1.4 实用程序 2218.1.5 支持的软件 2218.2 使用ADS创建工程 2228.2.1 建立一个工程 2228.2.2 编译和链接工程 2258.2.3 使用命令行工具编译应用程序 2298.3 用AXD进行代码调试 2308.4 本章小结 233第1章 ARM微处理器概述本章简介ARM微处理器的一些基本概念、应用领域及特点,引导读者进入ARM技术的殿堂。
嵌入式Linux C语言应用开发教程(移动学习版 第2版)
6.3进程间通7.1 TCP/IP 概述
2
7.2网络编程 基本知识
3
7.3网络高级 编程
4 7.4实验内容:
NTP的客户端 实现
5
思考与练习
8.2字符设备驱动 编程
8.1设备驱动编程 基础
8.3基于设备树的 字符驱动程序实例
8.5按键驱动程序 实例
读书笔记
这是《嵌入式Linux C语言应用开发教程(移动学习版 第2版)》的读书笔记模板,可以替换为自己的心得。
精彩摘录
这是《嵌入式Linux C语言应用开发教程(移动学习版 第2版)》的读书笔记模板,可以替换为自己的精彩 内容摘录。
感谢观看
8.4 GPIO驱动程序 实例
思考与练习
9.1嵌入式GUI简介
9.2 Qt/Embedded 开发入门
9.3实验内容:使用 Qt编写“Hello, World”程序
思考与练习
10.1仓库信息处理 系统概述
10.2基本数据结构
10.3功能实现 思考与练习
作者介绍
这是《嵌入式Linux C语言应用开发教程(移动学习版 第2版)》的读书笔记模板,暂无该书作者的介绍。
目录分析
一、我们致力于这样 的发展理念
二、我们致力于提供 这样的学习方式
三、我们致力于提供 这样的服务保障
四、我们期待您的加 入
1.2 ARM处理器硬 件开发平台
1.1嵌入式系统概 述
1.3嵌入式软件开 发流程
1.4实验内容: 使用SD-CARD 烧写EMMC
思考与练习
2.1嵌入式
1
Linux下C语言
概述
2
2.2编辑器vim
3
2.3编译器gcc
第七章-数据结构教程(Java语言描述)-李春葆-清华大学出版社
第二阶段通常用C语言完成,以便实现更复杂的功能, 也使程序有更好的可读性和可移植性。这个阶段的任 务有: 初始化本阶段要使用到的硬件设备。 检测系统内存映射。 将内核映像和根文件系统映像从Flash读到RAM。 为内核设置启动参数。 调用内核。
ห้องสมุดไป่ตู้
7.1.4常见的BootLoader
(1)Redboot Redboot (Red Hat Embedded Debug and Bootstrap)是Red Hat公司开发的一个独立运行在嵌入式系统上的BootLoader程序, 是目前比较流行的一个功能、可移植性好的BootLoader。 Redboot是一个采用eCos开发环境开发的应用程序,并采用了 eCos的硬件抽象层作为基础,但它完全可以摆脱eCos环境运行, 可以用来引导任何其他的嵌入式操作系统,如Linux、Windows CE等。
BootLoader是嵌入式系统在加电后执行的第一段代码, 在它完成CPU和相关硬件的初始化之后,再将操作系 统映像或固化的嵌入式应用程序装载到内存中然后跳 转到操作系统所在的空间,启动操作系统运行。
对于嵌入式系统而言,BootLoader是基于特定硬件平 台来实现的。因此,几乎不可能为所有的嵌入式系统 建立一个通用的BootLoader,不同的处理器架构都有 不同的BootLoader。
第7章 嵌入式Linux系统移植及调试
目录
7.1 Boot Loader基本概念与典型结构 7.2 U-Boot 7.3 交叉开发环境的建立 7.4 交叉编译工具链 7.5 嵌入式Linux系统移植过程 7.6 Gdb调试器 7.7 远程调试 7.8 内核调试
一个嵌入式linux系统通常由引导程序及参数、 linux内核、文件系统和用户应用程序组成。 由于嵌入式系统与开发主机运行的环境不同, 这就为开发嵌入式系统提出了开发环境特殊化 的要求。交叉开发环境正是在这种背景下应运 而生。
基于ARMulator的嵌入式uClinux软件开发环境
发, 它需 要交 叉 开发 环境 . 叉 开 发 环 境 是 指 编 交
译、 链接 和调 试 嵌 入 式 应 用 软 件 的 环 境 . 入 式 嵌 软件 开发 通 常采用 宿 主机/目标机 模 式 来构 建 交 叉开 发环 境 , 型 的 u lu 典 Ci x嵌 入 式 开 发 环 境 如 n
有保 护 , 个进 程 实 际上共 享一 个 运行 空 间. 各 2 嵌 入式 u l u 软 件 开发 环境 Ci x n
嵌 入式 软 件 开 发 不 同于 一 般 应 用 软 件 的 开
验箱 与宿 主机 之 间通 过 串行 口或 以太 网建 立 网
3 构 建 基 于 A Mua r的 嵌 入 式 u l u R lt o Ci x软 件 n 开发 环境 3 1 建 立 Ln x宿 主机 交叉编 译环 境 . iu
选项 .
ds 一 2 0 0 3 .a. z 本 文 使 用 u l u i t 0 7 10 tr g. C i x— n
图 l 基 于 u l u 嵌 入 式 软 件 开 发 环 境 Ci x的 n
宿主机 安 装 Lnx操 作 系 统 和 u l u iu Ci x—ds n i t
开 发环 境 , 目标 机是 A M 嵌 入式 开发 实 验箱 . R 实
还 可 以扩展 添加 自己 的外 设 . 系统 , 从 Ln x ./ . 它 i 0 24内核 派生 而来 , u2 而又 针 对没 有 MMU的处 理 器 进 行 设 计 , 因此 有 着 特 别 小 的内核 和用 户 软件 空间 , 所有 程 序访 问 的地 且 址 都 是实 际 的物理 地址 . 作 系统 对 内存 空 间 没 操
嵌入式入门(设计与实例开发)PPT课件
可靠性框图
02
03
故障树分析(FTA)
通过可靠性框图分析嵌入式系统 的可靠性结构,确定关键件和冗 余件。
通过故障树分析找出导致系统故 障的原因和最小割集,评估系统 的可靠性和安全性。
06
嵌入式系统应用案例分 析
智能家居系统案例分析
开源硬件与软件
开源硬件和软件的发展 为嵌入式系统的设计和 开发提供了更多选择和
灵活性。
02
嵌入式硬件设计
ARM处理器
ARM处理器是一种流行的嵌入式处理器架构,广泛应用于各种嵌入式系 统。
ARM处理器具有低功耗、高性能的特点,适用于各种应用场景,如智能 家居、工业控制等。
ARM处理器的选择需要根据具体应用需求来决定,如ARM Cortex-M系 列适用于微控制器应用,ARM Cortex-A系列适用于智能手机、平板电 脑等应用。
工业控制系统发展前景
探讨工业控制系统的发展趋势和未来发展方向。
医疗电子设备案例分析
医疗电子设备概述
医疗电子设备是指用于医疗领域的电子设备, 如监护仪、超声波诊断仪等。
医疗电子设备优势
分析医疗电子设备的优势,如高精度、高可 靠性、实时监测等。
医疗电子设备案例
介绍医疗电子设备的具体应用案例,如远程 医疗监护系统等。
FPGA芯片
FPGA芯片是一种可编程逻辑器件,可以通过编程 实现各种数字逻辑功能。
FPGA芯片具有高度的灵活性,可以根据实际需求 进行定制,实现各种复杂的数字逻辑功能。
FPGA芯片广泛应用于通信、图像处理、雷达等领 域,可以大大提高系统的性能和可靠性。
嵌入式微控制器
PG上嵌入式系统实例作者赵峰第7章
第7章 嵌入式Mini VOS服务器
图7.2.8 添加OPB TIMER
第7章 嵌入式Mini VOS服务器
(11) 接下来图7.2.9所示的对话框显示了Timer的配 置参数,这里,我们只需要一个Timer,并把中断打开, 然后点击“Next”按钮。
第7章 嵌入式Mini VOS服务器
图7.2.9 OPB TIMER配置
第7章 嵌入式Mini VOS服务器
图7.2.1 配置向导
第7章 嵌入式Mini VOS服务器
(2) 在弹出的对话框中,点击“Browse”按钮,选择一 个目标磁盘并建立一个自己的工程文件夹;双击进入自己 的工程文件夹后,点击保存,系统会自动为此项目命名为 system.xmp;点击“OK”按钮,进入BSB欢迎对话框。
第7章 嵌入式Mini VOS服务器
图7.2.5 I/O端口配置(一)
第7章 嵌入式Mini VOS服务器
(8) 继续配置I/O端口。由于在远程控制中需要通过LED 来测试远程控制成功与否,所以选择“LEDs_8bit”,并且打 开中断;其他外设除FLASH外,暂不需要,均不勾选,之 后点击“Next”按钮,如图7.2.6所示。
图7.2.2 开发板选择窗口
第7章 嵌入式Mini VOS服务器
图7.2.3 处理器选择窗口
第7章 嵌入式Mini VOS服务器
(6) 进入MicroBlaze配置对话框(见图7.2.4),参考时钟 频率选择默认值50 MHz即可,MicroBlaze处理器的总线时 钟频率选择为“66.67”MHz。其中参考时钟由开发板上的 时钟源提供,用来产生总线和处理器的频率,并且根据开 发板的不同而不同。“Debug I/F”选择“On-chip H/W debug module”,“Local memory”选择默认“8 KB”即可。 “Cache setup”选择“Enable cache link”。设置完成后点击 “Next”按钮。
基于嵌入式uClinux的远程测控系统的设计与应用
第3 5卷( 07 第 4期 20 )
计算机与数字工程
17 5
基 于嵌 入 式 u l u Ci x的远 程 测 控 系统 的设 计 与应 用 n
王 立红 张国友
( 安徽工程科技学 院电气工程 系 芜 湖 2 10 ) 4 0 0 摘 要 针对工业 控制领域 对测 控系统需要集散控 制 的要 求 , 于 F4 B X硬件 开发平 台和嵌入 式  ̄ l u 基 S4 O Ci x操作 系 n
的状态 。
统的硬件采用 8 1 位 的单片机 ; /6 软件多采用汇编 ( ) 些 数 据 可 以 以文 件形 式 存 储 在本 地 4一 语 言编程 , 包 含 一 个 简 单 的循 环 处 理 的控 制 流 S R M 中。 仅 DA 程 ; 片 机 与 单 片 机 或 上 位 机 之 间 通 信 通 过 单 ( ) 控系 统可 连 到 工业 以太 网 , 过 工 业 以 5测 通
2 测 控 系统 总体 设 计
2 1 设计 目标 .
2 3 系统 结构 图 ( 图 1 示 ) . 如 所
测控系统以基于 F4 B X硬件开发平 台和裁 S4 O 剪后 的嵌 入式 I l u z i x的操作 系统 为 核 心 , 计 目 Cn 设 标归纳起来主要有以下几点 :
统, 给出一种应 用于测控系统新的设计方案 , 保证测控 系统的实时性 、 可靠性 , 助工业 以太 网, 借 实现远程 测控 , 在工业 控制
领域有很好 的应用前景 。 关键 词 嵌入式操作 系统
中图分类号 T 3 3 1 P9 .1Байду номын сангаас
 ̄ l u 远程测控 系统 Ci x n
F4 B X 工业 以太网 S4 O
嵌入式平台ARM—uClinux的构建与应用开发
常 用 于 具 有 很 少 内存 或 Fah的 嵌 入 式 系 统 . ls u l u 是 一 个 完 全 符 合 GUN/ P I( Ci x n G I GNU GP P bi Lcne 公 约 的操 作 系统 , 全 开放 代 码 . u l i s) c e 完
S C 4 OX 为例 , 3 4B 讨论 了 将u l u Ci x移植 到 A n RM 芯 片的 问题 , 以此 为平 台开 发 出一 种 车 载 G S 并 P
接 收机L . 1 q]
道外 部 中断输 入 , 8通道 1 O位 AD 输入 , 日历 C 带
功 能 的 实 时 时 钟 ( TC) 带 P R , I 的 片 内 时 钟 发 I
和 一般 用途 的高 性 价 比 的微 处 理器 . 过 集 成 丰 通
富 的外 围 , 降低 了 系统整 体价 格 . 3 4 OX 的片 S C4B
上 资 源 包 括 : . V 供 电 的 AR TD 25 M7 MI内核 带 8 AC KB C HE, E 控 制 器 ( 5 L D 2 6色 ) 2 通 道 ,
ulu C i x从 L n x . / . n iu 2 o 2 4内核 派 生而 来 , 沿
列 . M 7系 列 微 处 理 器 为 低 功 耗 的 1 / 2位 AR 63
RI C处 理器 , 主要用 于对 价位 和 功耗要 求 比较 S 它
袭 了主流 Ln x的绝 大 部 分 特 性. 是 专 门针 对 iu 它
嵌入式Linux网络编程和嵌入式Linux设备驱动开发
结构字段常见值:sa_family:
(2)数据存储优先顺序
两种字节顺序:高位字节优先和低位字节优先,四个函数:htons,
ntohs,htonl,ntohl,分别实现网络字节序和主机字节序的转化, h—host, n—network, s—short, l--long
(3)地址格式转化
(4)名字地址转化
实现主机名和IP地址的转化,gethostbyname,gethostbyaddr,
getaddrinfo.实现IPv4和IPv6的地址好主机名之间的转化, gethostbyname是将主机名转化为IP地址,gethostbyaddr把IP地 址转化为主机名,getaddrinfo可自动识别IPv4和IPv6的地址。
3、设备驱动程序的主要组成 (1)设备注册:register_chrdev,调用该函数后向系统申请主设
备号,调用成功,设备名会出现在/proc/devices文件里。 关闭设备时,要解除设备注册unregister_chrdev (2)打开设备open主要完成: 递增计数器(用于设备计数,设备可能会被打开多次,可能由不 同进程打开,若想关闭此设备,就要保证其他进程或设备没有 使用该设备,用计数器实现此功能管理,有三个宏来实现操作)、 检查特殊设备的特殊情况、初始化设备、识别次设备号。 (3)释放设备release,与关闭设备不同,主要完成: 递减计数器和最后一次释放设备操作时关闭设备 (4)读写设备read write,即把内核空间的数据复制到用户空间, 或相反的操作。注意:用户空间的内存是可以被换出的,可能 出项页面失效,不能用memcpy函数,要用copy_to_user (5)获取内存:在设备驱动程序中动态开辟内存有两类:基于内 存地址(kmalloc返回物理地址),基于页面(3个函数) (6)打印信息:内核空间printk,不能用printf 4、proc文件系统:是内核和内核模块向进程发送信息的机制,让 用户可以与内核内部数据结构进行交互,获取进程的有用信息 p363 LCD驱动编写实例。
《《嵌入式Linux开发》》
《《嵌入式Linux开发》》一、嵌入式Linux开发的历程Linux操作系统是由Linus Torvalds在1991年开发的,从最初的个人项目到现在的开源操作系统它的发展历程充满着波折和机遇。
随着Linux操作系统的普及和应用场景的增多,人们发现Linux操作系统在嵌入式系统领域也有着广泛的应用。
在过去,嵌入式系统采用的是实时操作系统(Real-Time Operating System,RTOS)进行开发,它的硬实时性和精实时性需求比较高,但是应对不了复杂的嵌入式应用场景,而Linux操作系统因为有着资源丰富、标准化、安全稳定等优点,迎合了嵌入式应用领域的要求,成为了主流的嵌入式开发操作系统。
经过了多年的发展,如今的嵌入式Linux操作系统已经可以在全球各种各样的嵌入式设备中运行,如智能手机、平板电脑、智能电视、汽车导航、智能家居、工业控制和医疗设备等。
二、嵌入式Linux系统的应用现状目前,嵌入式Linux系统广泛应用在各领域,如智能家居、工业自动化、智能医疗、智能交通等领域,这些领域的需求为嵌入式Linux系统的发展和创新提供了契机。
下面,我们以智能家居为例进行探讨。
在智能家居领域中,嵌入式Linux系统能够控制家庭设备,例如:门禁系统、安全系统、灯光控制、温度控制、智能音响、智能电视等。
随着智能家居对嵌入式Linux系统硬件性能的要求越来越高,当前的开发者也必须面对越来越多的智能家居相关的技术挑战。
基于嵌入式Linux操作系统的智能家居应用必须考虑网络安全、性能稳定、实时性、硬件兼容性等方面的问题。
由于各种设备和厂商之间的差异,嵌入式Linux的代码库、驱动等需要满足这样一种通用和可定制的状态,开发人员必须根据智能家居中的特定需求进行适配和优化。
除了智能家居之外,嵌入式Linux还可以应用于医疗设备、消费电子、家电、军事、工业自动化、智能交通等领域,应用范围广泛,未来的嵌入式Linux发展可期。
嵌入式Linux应用开发菜鸟进阶
小结
9.1.1中断处理过程 9.1.2 Linux中断处理程序的上半部与下半部机制
10.2混杂设备驱动
10.1自创建设备文 件
10.3 Linux设备模 型
10.4设备驱动 分层思想
小结
10.3.1 kobject和kset数据结构 10.3.2 sysfs文件系统 10.3.3总线、设备和驱动程序
19.2.1 CID寄存器 19.2.2 SD总线协议 19.2.3 SD卡指令和命令 19.2.4块读写操作
19.3.1 SD卡驱动程序的重要数据结构 19.3.2 SD设备驱动分析 19.3.3 SD卡驱动在mini2440开发板的开发与移植
19.4.1系统设计思路与步骤 19.4.2系统测试结果
小结
13.3.1按键与LED集成在一个驱动中 13.3.2按键与LED驱动的实现
14.1
1
DS18B20温度
传感器简介
14.2
2
DS18B20温度
传感器程序设
计实现
3
14.3应用程序 设计
4
14.4驱动运行 效果
5
小结
14.1.1温度传感器的工作特点 14.1.2 DS18B20的外部结构 14.1.3 DS18B20的内部结构 14.1.4 DS18B20的应用电路结构 14.1.5 DS18B20的工作原理
17.2块设备驱动基 本框架
17.1字符设备驱动 与块设备驱动
17.3块设备在 Linux系统中各层
的调用关系
17.5块设备驱动程 序分析
17.4块设备驱动的 重要数据结构
小结
17.4.1 block_device_operations结构体 17.4.2 gendisk结构体 17.4.3 request与request_queue结构体 17.4.4块I/O 17.4.5块设备中各结构体之间的关系
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
せ7』 uClinux ⩗ゴҢ ϔϾ䩜 S3C4510B⹀ӊ ⱘ uClinux ㋏㒳 Ϟ䖯㸠 ⫼ ⱘ ˈ䗤ℹ䆆䗄 ԩ Linux⦃ ϟ㓪 ⫼ ⫼ ⱘ ⊩ ℹ偸ˈ Ў❳ Windows ㋏㒳ⱘ⫼ ҟ㒡 䖭⾡ ПϞˈՓ⫼ԩ⾡ 㓪 㓪䆥㞾 ⱘ ⫼DŽ䗮䖛 ゴⱘ дˈ䇏㗙 ҹ uClinux ϔ ⱘњ㾷ˈ Ϩ Linux Windows ϟ ㋏㒳 ⫼ ⱘ ⊩DŽゴЏ㽕 ˖ˉ uClinux㋏㒳ὖˉ GNUⱘՓ⫼ˉ ゟuClinux ⦃ˉ uClinuxϟ ⫼7.1 uClinux㋏㒳ὖPC Ϟ ⫼ ⱘ⫼ 䛑Ӯ 䖭ḋⱘ 㾝ˈPC ⱘ ㋏㒳 կ ⫼ ˄API˅ˈ ⱘ ⫼ ҹⳈ ㋏㒳Ϟ䖤㸠DŽ㱑✊ ㋏㒳ⱘ ⫼ ҹ 㻌 Ϟ䖤㸠ˈԚЎњՓ㋏㒳 ӏ ㅵ⧚ǃ ㅵ⧚ǃ ㅵ⧚ǃ䌘⑤ㅵ⧚ǃџӊㅵ⧚ǃ㋏㒳ㅵ⧚ǃ⍜ ㅵ⧚ǃ䯳 ㅵ⧚ Ё ⧚ⱘ㛑 ˈ կ ӏ ⧚ˈ ⱘ 䜡㋏㒳䌘⑤ⱘ 㛑ˈ⫼ 䳔㽕䩜 㞾 ⱘ⹀ӊ 䰙 ⫼䗝 䗖 ⱘ ㋏㒳˄Embedded Operating Systemˈҹϟㅔ⿄EOS˅DŽ 㡖 㒧 к 䇜 ⱘ⹀ӊ S3C4510Bˈҟ㒡ϔ⾡䩜 ϡ MMUⱘARM ⧚ ⱘ ㋏㒳uClinuxDŽuClinux ϔϾ ヺ GNU/GPL 㑺ⱘ ㋏㒳ˈ ҷⷕˈ⦄ ⬅Lineo 㓈 DŽuClinuxⱘ ䷇ Āyou-see-linuxā, ⱘ 㞾Ѣ 㜞 ↡Āmuā 㣅 ↡ĀCāⱘ㒧 DŽĀmuāҷ㸼Ā āП ˈ ↡ĀCāҷ㸼Ā āˈ ҹҢ 䴶Ϟ ҹⳟ ⱘ Нˈ Ā 乚 ЁⱘLinux㋏㒳āDŽЎњ䰡Ԣ⹀ӊ 䖤㸠 㗫ˈ ϔ㉏CPU 䆒䅵Ё ⍜њ ㅵ⧚ ˄Memory Management Unitˈҹϟㅔ⿄MMU˅ 㛑 DŽ ˈ䖤㸠Ѣ䖭㉏≵ MMUⱘCPUПϞⱘ䛑 ϔѯ ㅔ ⱘ ӏ ㋏㒳ˈ 㗙 ㅔ ⱘ ˈ⫮㟇ḍ ≵ ㋏㒳㗠Ⳉ 䖤㸠 ⫼ DŽ 䖭⾡ ϟˈ㋏㒳 ⊩䖤㸠 ⱘ ⫼ ˈ 㗙 ⥛ Ԣˈ㗠Ϩˈ ⱘ ⫼ 䳔㽕䞡 ˈ 㽕∖ њ㾷⹀ӊ⡍ DŽ䖭ѯ䛑䰏њ ⫼Ѣ䖭㉏CPU ПϞⱘ ѻ ⱘ䗳 DŽ✊㗠ˈ䱣ⴔuClinuxⱘ䆲⫳ˈ䖭ϔ 䛑 њDŽuClinuxҢLinux 2.0/2.4 Ḍ⌒⫳㗠 ˈ⊓㺁њЏ⌕Linuxⱘ㒱 䚼 ⡍ DŽ ϧ䮼䩜 ≵ MMUⱘCPUˈ ϨЎ ㋏㒳 њ䆌 ⱘ DŽ䗖⫼Ѣ≵ 㰮 ㅵ⧚ ˄MMU˅ⱘ ⧚ ˈ՟ ARM7TDMIDŽ 䗮 ⫼Ѣ Flash ⱘ ㋏㒳DŽuClinux Ўњ ≵ MMUⱘ ⧚ 㗠 Linux ⱘ ℷDŽ ⬭њ ㋏㒳ⱘ ⡍ ˈЎ⹀ӊ ⱘ䖤㸠 ⾡ կњ 䆕DŽ GNU䗮⫼ 䆌 䆕˄GNU GPL˅ⱘ 䆕ϟˈ䖤㸠uClinux ㋏㒳ⱘ⫼ ҹՓ⫼ Т ⱘLinux API ˈϡӮ Ў≵ MMU㗠 DŽ⬅ѢuClinux ⱘLinux ⸔Ϟ䖯㸠њ䗖 ⱘ㺕 Ӭ ˈ њϔϾ催 Ӭ ⱘǃҷⷕ㋻ ⱘ Linuxˈ㱑✊ ⱘԧ⿃ ˈuClinux ҡ✊ ⬭њLinuxⱘ ⱘӬ⚍˖〇 ǃ㡃 ⱘ⿏ỡ ǃӬ⾔ⱘ㔥㒰 㛑ǃ ⱘ ⾡ ӊ㋏㒳ⱘ ǃҹ Є ⱘAPIㄝDŽ 7.1ЎuClinuxⱘ DŽ7.1uClinuxⱘBoot Loader˖䋳䋷Linux Ḍⱘ ˈ ⫼Ѣ ㋏㒳䌘⑤ˈ SDRAMDŽ䖭䚼 ҷⷕ⫼Ѣ ゟLinux Ḍ䖤㸠⦃ ҢFlashЁ㺙䕑 ramdiskDŽḌ ˖Linux Ḍⱘ ⚍ start_kernel˄˅ DŽ Ḍⱘ Ҫ䚼 ˈ 㦋ˈIRQ䗮䘧ˈ䇗 ˈ䆒 偅 ˈ 䖳 ⦃ˈ 䞡㽕ⱘ 㛑 forkĀinitā䖯ˈҹ Ͼ ӏ ⦃ DŽ㋏㒳䇗⫼ / 㦋 ˖ 㸠 Āinitā ˈ Ḍ ⌕ϡ Ⳉ ⱘ ˈℸ ˈ ⱘ⫼ҙҙ ⧚ ℹџӊ(՟ ⹀ӊЁ ) Ў㋏㒳䇗⫼ կ䖯DŽ䆒 偅 ˖䆒 偅 њLinux Ḍ 䚼 DŽ Ҫ ㋏㒳ϔḋˈ䆒 偅 Ў Ӏ ⱘ⹀ӊ䆒 ㋏㒳 կ DŽӊ㋏㒳˖Linux 䞡㽕ⱘ⡍ Пϔ ⾡ ӊ㋏㒳ⱘ DŽ䖭⾡⡍ Փ Linux Ҫ ㋏㒳 DŽ ӊ㋏㒳ⱘὖ Փ ⫼ 㛑 ⳟ 䆒 Ϟⱘ ӊ 䏃 㗠 乏㗗㰥 䰙⠽⧚䆒 ⱘ ӊ㋏㒳㉏ DŽLinux䗣 ⱘ 䆌 ϡ ⱘ ӊ㋏㒳ˈ ⾡ 㺙ⱘ ӊ ӊ㋏㒳ҹϔϾ ⱘ㰮 ӊ㋏㒳ⱘ ⦄㒭⫼ DŽϟ䴶ҟ㒡ϔѯ uClinuxⳌ ⱘⶹ䆚DŽ1ǃ MMU(内存管理单元)和VM(虚拟内存)䆌 ⧚ 䛑⬅Ѣ≵ MMU㗠ϡ 㰮 DŽ≵ ㅵ⧚ ⱘ ㅔ њ㢃⠛䆒䅵ˈ䰡Ԣњѻ DŽ⬅Ѣ ⱘ 䆒 ≵ ⺕Ⲭ 㗙 䰤ⱘ ぎ䯈ˈ ҹ 䳔 ⱘ ㅵ⧚ DŽԚ ⬅Ѣ≵ MMUⱘㅵ⧚ˈ ㋏㒳 ぎ䯈 ≵ ⱘˈ 䆓䯂ⱘ 䛑 䰙⠽⧚ DŽԚҢ ㋏㒳ϔ㠀䛑 ⦄ ⾡⡍ 㛑ⱘ㾦 㗗㰥ˈ Ѣ ㅵ⧚ⱘ㽕∖ ҹ⬅ Ҏ 㗗㰥DŽ2、实时性的支持uClinux 䑿 ϡ ˈⳂ ϸ⾡ϡ ⱘ Ḝ կuClinux ⱘ ˈ Ӏ RTLinux(RTL) RTA I(Real Time A pplication Interface)DŽ њ䖭ϸ⾡ ḜˈuClinux ҹ ⫼ 㽕∖䕗催ⱘ DŽ3、平台支持uClinuxⱘ 䫒˖uClinux䗮 ⫼ ⱘGNU 䫒DŽ㒣䖛 ⱘ 䫒 ϔѯ催㑻⡍ ˈ↨ XIP(Execute-In-Place) ˈ ѿ ㄝDŽuClinux 䗖⫼ⱘ ˖uClinux䗖⫼Ѣ 㔫 ⱘColdFire/DragonballˈARM㋏ (՟ Atmel, TI, Samsungㄝ⫳ѻⱘ㢃⠛)ˈIntel i960, Sparc (՟ MMUⱘLEON), NEC v850ˈ⫮㟇 ⱘ 㓐 ( CLPD )ⱘCPUḌˈ↨ OPENcoreDŽ4、与标准Linux的兼容性uClinux䰸њϡ㛑 ⦄fork()㗠 Փ⫼vfork() ˈ ԭuClinuxⱘAPI Ϣ Linux ⱘ Ⳍ DŽ䖭 ϡ ⴔuClinuxϡ㛑 ⦄ 䖯ˈ 䰙ϞuClinux 䖯ㅵ⧚ 䗮䖛vfork() ⦄ⱘˈ 㗙 䖯ҷ ⠊䖯 㸠ˈⳈ 䖯䇗⫼exit() 䗔 ˈ 㗙 䖯䇗⫼exec() 㸠ϔϾ ⱘ䖯DŽ ⱘLinux ⫼ ҢLinux ㋏㒳⿏ỡ uClinux㋏㒳 ˈ Тϡ⫼ ҔМ ⱘ ˈ ҹ 䖒 ϔϾ ⫼ ⱘ㽕∖(՟ ⧚ⱘ䌘⑤Փ⫼)DŽuClibc libc( ⫼Ѣ Linuxⱘ ) њ ЎuClinux կњ Ў㊒ㅔⱘ ⫼ DŽ5、网络的支持uClinux ϔϾ ⱘTCP/IP 䆂ˈ 䖬 䆌 Ҫ㔥㒰 䆂DŽuClinux Ѣ ㋏㒳 䇈 ϔϾ㔥㒰 ⱘ ㋏㒳DŽ6、应用领域uClinux ⊯ ⫼Ѣ ㋏㒳Ёˈ՟ VPN䏃⬅ /䰆☿ ˈ ⫼ 㒜ッˈ 䆂䕀 ˈIP⬉䆱ˈ Ϯ ˈInternet ˈPDA䆒 ㄝDŽuClinux њϔϾ ℹ䅸䆚П ˈ 㽕 䇏㗙ҟ㒡 Ё Ў 䘡Փ⫼ⱘ㓪䆥 GNU GCCDŽ7.2 GNUⱘՓ⫼GCC(gcc)ⱘϡ Փ䆌 Ϯ㓪䆥 䛑Ⳍ 㾕㒠ˈGCC⬅GNU ҎRichard Stallman佪 ˈ GNUⱘ ѻ ˈ⬅ѢUNIX ⱘ催 ⿏ỡ ˈGCC Т ⾡ 㾕ⱘUNIX Ϟ䛑 ˈ Փ Win32/DOSг GCCⱘ⿏ỡDŽ↨ 䇈SUNⱘSolaris ㋏㒳䜡㕂ⱘ㓪䆥 GNUⱘGCCDŽGNU䕃ӊ C㓪䆥 GCCˈC++㓪䆥 G++ˈ∛㓪 ASˈ䫒 LDˈѠ䖯 䕀 (OBJCOPYˈOBJDUMP)ˈ䇗䆩 (GDBˈGDBSERVERˈKGDB) Ѣϡ ⹀ӊ ⱘ DŽ GNU GCC ϟ⫼ ҹՓ⫼⌕㸠ⱘC/C++䇁㿔 ⫼ ˈ⒵䎇⫳ 催 ⥛䖤㸠ҷⷕǃ ⱘ㓪䇁㿔ⱘ⫼ 䳔∖DŽ䖭ѯ 䛑 GPL⠜ ˈӏԩҎ ҹҢ㔥Ϟ㦋 䚼ⱘ⑤ҷⷕˈ 䳔Փ⫼ӏԩ䌍⫼DŽ ѢGNU 䆌 䆕 䆂ⱘ䆺㒚䌘 ˈ䇏㗙 ҹ ⳟGNU㔥キⱘҟ㒡ˈ/home.htmlDŽGNU 䛑 䞛⫼ Ҹ㸠ⱘ ˈ⫼ 䍋 Ⳍ ↨䕗 䲒ˈϡ ѢWindows ㋏㒳ⱘ ⫼ˈԚ GNU ⱘ ⬅Ѣ 䌈䖥㓪䆥 ㋏㒳ⱘ ˈ կњ ⱘ♉⌏ DŽϔ д њⳌ ˈ њ㾷њ㋏㒳䆒䅵ⱘ ⸔ⶹ䆚DŽ䖤㸠ѢLinux ㋏㒳ϟⱘ㞾⬅䕃ӊGNU gcc㓪䆥 ˈϡҙ ҹ㓪䆥Linux ㋏㒳ϟ䖤㸠ⱘ ⫼ ˈ䖬 ҹ㓪䆥Linux Ḍ 䑿ˈ⫮㟇 ҹѸ 㓪䆥ˈ㓪䆥䖤㸠Ѣ CPUϞⱘ DŽ ҹˈ 䖯㸠 ㋏㒳 ⫼ ˈ䖭ѯ њ Ⲟ ⊯ⱘ ⫼DŽ7.2.1 GCC㓪䆥GCC GNU㒘㒛ⱘ 䌍C㓪䆥 ˈLinuxⱘ 㔎ⳕ 㺙ⱘ 䖭⾡DŽ ⌕㸠ⱘ㞾⬅䕃ӊ⑤ҷⷕ 䛑㛑 GCC㓪䆥 ϟ㓪䆥䖤㸠DŽ ҹ GCC㓪䆥 ⱘՓ⫼ 䆎 Ѣ㓪䆥㋏㒳 Ḍ䖬 㞾 ⱘ ⫼ 䛑 ⱘDŽϟ䴶䗮䖛ϔϾ ԧⱘ՟ ˈ д ԩՓ⫼GCC㓪䆥 DŽLinux ㋏㒳Ёˈ ϔϾ⫼ C䇁㿔 ⱘ⑤ 䖯㸠㓪䆥ˈ㽕Փ⫼GNUⱘgcc 㓪䆥 DŽ՟ ϟ䴶ϔϾ䴲 ㅔ ⱘHello⑤ (hello.c)˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖hello.c* Description˖introduce how to compile a source file with gccNie* Author˖Xueyuan* Date˖*******************************************************/void main(){printf("Hello the world\n")˗}㽕㓪䆥䖭Ͼ ˈ Ӏ 㽕 Linuxⱘbash ⼎ヺϟ䕧 Ҹ˖$gcc -o hello hello.cgcc 㓪䆥 Ӯ⫳ ϔϾhelloⱘ 㸠 ӊDŽ hello.cⱘ Ⳃ ϟ 㸠./hello ҹⳟ ⱘ䕧 㒧 ˈ Ϟ ĀHello the worldāⱘ ヺІ DŽҸ㸠Ё gcc㸼⼎ ⫼gcc 㓪䆥⑤ ˗-o outputfilename䗝乍㸼⼎㽕∖㓪䆥 ⫳ ӊ Ўoutputfilenameⱘ 㸠 ӊˈ ϡ -o䗝乍ˈ 㔎ⳕ ӊ a.outDŽ 䖭䞠⫳ ӊ Ўhelloⱘ 㸠 ӊˈ㗠hello.c Ӏⱘ⑤ ӊDŽgcc ϔϾ Ⳃ ⱘ DŽgcc ⱘ⫼⊩ ˖gcc [options] file... ˈЁⱘoption ҹ- ⱘ ⾡䗝乍ˈfile Ⳍ ⱘ ӊ DŽ Փ⫼gccⱘ ˈ 乏㽕㒭 㽕ⱘ䗝乍 ӊ DŽgccⱘ Ͼ㓪䆥䖛ˈ 䋼Ϟ ℹ䖯㸠ⱘˈ↣ϔℹ ϔϾ⡍ ⱘ ˈ䖭 ℹ ˖乘 ⧚ˈ㓪䆥ˈ∛㓪 䫒 DŽ ԧ ϔℹˈ ⬅gcc 䴶ⱘ 䗝乍 ӊ㉏ ⱘDŽ⏙Ἦⱘ 㓪䆥 䖲 䞡㽕ⱘDŽ㓪䆥 Փ⫼⑤ ӊ㓪䆥ѻ⫳ ⾡ ⱘⳂ ӊ(object files)DŽ 䖭Ͼ䖛Ёˈ 䚼ⱘヺ ⫼ ≵ 㹿㾷䞞 ˈ✊ ӀՓ⫼䫒 䫒 䖭ѯⳂ ӊ ϔѯ ⱘ ӊˈ ⫳ ϔϾ 㸠 ӊDŽ 䖭Ͼ䖛ЁˈϔϾⳂ ӊЁ ⱘ ӊЁⱘヺ ⱘ ⫼㹿㾷䞞ˈ ϡ㛑㹿㾷䞞ⱘ ⫼ˈϔ㠀 ҹ䫭䇃 ⱘ DŽgcc㓪䆥 䆌 䗝乍ˈԚ Ѣ 䗮⫼ 䇈 㽕ⶹ䘧 Ё ⫼ⱘ Ͼ њDŽ 䖭䞠Ў䇏㗙 Ͼ ⫼ⱘ䗝乍˖-o䗝乍㸼⼎㽕∖㓪䆥 ⫳ ӊ ⱘ 㸠 ӊ˗-c䗝乍㸼⼎ 㽕∖㓪䆥 䖯㸠㓪䆥ˈ㗠ϡ㽕䖯㸠䫒 ˈ⫳ ҹ⑤ ӊⱘ ӊ Ԛ㓔⬅.c .cc .oⱘⳂ ӊ˗-g䗝乍㽕∖㓪䆥 㓪䆥ⱘ կҹ 䖯㸠䇗䆩ⱘ ˗-E䗝乍㸼⼎㓪䆥 ⑤ ӊ 䖯㸠乘 ⧚ ℶˈ㗠ϡ 㓪䆥ˈ∛㓪 䫒 ˗-S䗝乍㸼⼎㓪䆥 䖯㸠㓪䆥ˈ㗠ϡ ∛㓪 䫒 ˗-O䗝乍 㓪䆥 կⱘ㓪䆥Ӭ 䗝乍ˈ 㓪䆥ⱘ Փ⫼䆹䗝乍ˈ ҹՓ⫳ ⱘ 㸠 ӊⱘ 㸠 ⥛ 催˗-Wall䗝乍 ѻ⫳ 䚼ⱘ䄺 DŽԴⱘ⑤ҷⷕЁ ѯ ˈ 㓪䆥ⱘ 㽕䫒 ⹂ ⱘ ˈ↨ ҷⷕЁ њ ѯ ˈ LinuxϟˈЎњՓ⫼ ˈ 乏 䫒 ˈЎℸ㽕 -lm 䗝乍DŽг䆌 䇏㗙Ӯ䯂ˈ 䴶䙷Ͼ՟ Փ⫼printf ⱘ Ўԩ≵ 䫒 ˛ gccЁ Ѣϔѯ ⫼ ⱘ ⦄ˈgcc㓪䆥 Ӯ㞾 䫒 ϔѯ ⫼ ˈ䖭ḋ⫼ ≵ 㽕㞾 њDŽ 㓪䆥 ⱘ 䖬㽕 ⱘ䏃 ˈ䖭Ͼ 㽕⫼ 㓪䆥 ⱘ-L䗝乍 䏃 DŽ↨ 䇈 Ӏ ϔϾ /home/hoyt/mylibϟˈ䖭ḋ Ӏ㓪䆥ⱘ 䖬㽕 Ϟ-L/home/hoyt/mylibDŽ Ѣϔѯ 䇈ˈ≵ 㽕 䏃 DŽ 㽕 Ӏ 䍋㔎ⳕ ⱘ䏃 ϟ ҹњˈgcc 䫒 ⱘ Ӯ㞾 䙷ѯ ⱘDŽGNU㓪䆥 ⫳ ⱘⳂ ӊ㔎ⳕḐ Ўelf(executive linked file)Ḑ ˈ䖭 Linux㋏㒳 䞛⫼ⱘ 㸠䫒 ӊⱘ䗮⫼ ӊḐ DŽelfḐ ⬅㢹 ↉(section)㒘 ˈ ≵ ⡍ ˈ⬅ c⑤ҷⷕ⫳ ⱘⳂ ӊЁ ҹϟ↉˖.text(ℷ ↉) ⱘ Ҹҷⷕˈ.data( ↉) ⱘ ˈ 䞣ˈ ヺІㄝˈ.bss( ↉) ⱘ 䞣 㒘ㄝDŽ䇏㗙㢹 ⶹ䘧 ⱘ䗝乍 ⫼⊩ˈ ҹ ⳟgccⱘ ḷˈ䙷䞠 䆌 䗝乍ⱘ䆺㒚䇈 DŽњ⑤ ӊhello.c ˈ䳔㽕䞡 㓪䆥 ˖$gcc -c hello.c✊ 䞡 䫒 ⫳ ˖$gcc –o hello.oѢ ՟ˈ Ў ϔϾ⑤ ӊˈ ҹ њ⑤ⷕ ˈ䖯㸠䞡 ⱘ㓪䆥䫒 ⱘ䖛 ϡ 㐕⧤ˈԚ ˈ ϔϾ Ё њ㢹 ⱘ⑤ⷕ ӊˈ㗠䖭ѯ⑤ⷕ ӊЁⱘ Ͼ Ͼ 㹿 Ҫ⑤ⷕ ӊ ˈ䙷Мˈ ϔϾ ӊ㹿 ˈ ⱘ䙷ѯ⑤ ӊ䛑㽕䖯㸠䞡 㓪䆥䫒 ˈ 䞣 㗠ⶹⱘDŽ 䖤ⱘ ˈGNU կњՓ䖭Ͼℹ偸 ㅔ ⱘ ˈ ϟ䴶㽕ҟ㒡㒭 ⱘGNU Make DŽ7.2.2 GNU Makemake 䋳䋷Ң乍Ⳃⱘ⑤ҷⷕЁ⫳ 㒜 㸠 ӊ Ҫ䴲⑤ҷⷕ ӊⱘ DŽmake Ҹ 䑿 ⾡ ˖ ǃ Нǃ 䗄 ӊ Ⳃ ӊ DŽ Ў˖make [flags] [macro definitions] [targets]Unix㋏㒳ϟ ԡflags䗝乍 НЎ˖-f file file ӊЎ 䗄 ӊˈ file Ў '-' ヺˈ䙷М 䗄 ӊ 䕧 DŽ ≵ '-f' ˈ ㋏㒳 咬䅸 Ⳃ ϟ Ўmakefile 㗙 ЎMakefileⱘ ӊЎ 䗄 ӊDŽ LinuxЁˈ GNU make Ⳃ Ё ✻GNUmakefileǃmakefileǃMakefileⱘ乎 ㋶ makefile ӊDŽ-i ⬹ Ҹ 㸠䖨 ⱘ 䫭 DŽ-s≝咬 ˈ 㸠П ϡ䕧 Ⳍ ⱘ Ҹ㸠 DŽ-r⽕ℶՓ⫼䱤 㾘 DŽ-n䴲 㸠 ˈ䕧 㸠 ҸˈԚ ϡ 㸠DŽ-t Ⳃ ӊDŽ-q make ḍ Ⳃ ӊ 㒣 䖨 "0" 䴲"0"ⱘ⢊ DŽ-p䕧 Н Ⳃ ӊ 䗄DŽ-d Debug ˈ䕧 ӊ Ẕ⌟ 䯈ⱘ䆺㒚 DŽLinuxϟmake ԡⱘ ⫼䗝乍ϢUnix㋏㒳Ё ϡ ˈϟ䴶 њϡ 䚼 ˖-c dir 䇏 makefile П ⱘⳂ dirDŽ-I dir Ҫ makefile ӊ ˈ ⫼䆹䗝乍 ㋶Ⳃ DŽ-h help ˈ ⼎ ⱘmake䗝乍DŽ-w ⧚ makefile П П ˈ䛑 ⼎ Ⳃ DŽ䗮䖛 Ҹ㸠 Ёⱘtarget ˈ make㽕㓪䆥ⱘⳂ ˈ Ϩ 䆌 Н㓪䆥 ϾⳂ ˈ ✻Ң ⱘ乎 ձ㓪䆥target䗝乍Ё ⱘⳂ ӊDŽ Ҹ㸠Ё≵ Ⳃ ˈ ㋏㒳咬䅸target 䗄 ӊЁϔϾⳂ ӊDŽmake ԩ ⦄ ⑤ҷⷕⱘ 䗮䖛ϔϾ㹿⿄ПЎmakefileⱘ ӊ ⱘˈ ϟ䴶ⱘ 㡖䞠ˈЏ㽕 䇏㗙ҟ㒡ϔϟmakefileⱘⳌ ⶹ䆚DŽ7.2.2.1 makefile 㒧GNU Make ⱘЏ㽕 䇏ϔϾ ӊ makefileDŽmakefile ⫼bash䇁㿔 ⱘˈbash 䇁㿔 BASIC䇁㿔ⱘϔ⾡ Ҹ㾷䞞䇁㿔DŽ䖭Ͼ ӊ䞠Џ㽕 䗄њ ѯⳂ ӊ Ң ѯձ䌪 ӊЁѻ⫳ⱘˈ ⫼ԩ⾡ Ҹ 䖯㸠䖭Ͼѻ⫳䖛ⱘDŽ њ䖭ѯ ˈ make ӮẔ ⺕Ⲭⱘ ӊˈ Ⳃ ӊⱘ ( 䆹 ӊ⫳ ⱘ )㟇 ↨ ⱘϔϾձ䌪 ӊ ⱘ䆱ˈmake Ӯ 㸠Ⳍ ⱘ Ҹˈҹ Ⳃ ӊDŽmakefileϔ㠀㹿⿄Ў“makefile” “Makefile”DŽ䖬 ҹ make ⱘ Ҹ㸠Ё ⱘ ӊ DŽ ≵ ⡍ ⱘ䆱ˈmake Ӯ “makefile” “Makefile”ˈ ҹЎњㅔ 䍋㾕ˈ 䆂䇏㗙Փ⫼䖭ϸ DŽ 㽕Փ⫼ Ҫ ӊЎ makefileˈ ⫼㉏Ԑϟ䴶ⱘ make Ҹ䗝乍 makefile ӊ˖$ make -f makefilenameϔϾ makefile Џ㽕 ϔ㋏ ⱘ㾘 ˈ ϟ˖Ⳃ ӊ : ձ䌪 ӊ(tab䬂) Ҹϔ㸠⿄ПЎ㾘 ˈѠ㸠 㸠㾘 ⱘ Ҹˈ 乏㽕ҹtab䬂 DŽϟ䴶ВϔϾㅔ ⱘmakefileⱘ՟ DŽexecutable : main.o io.ogcc main.o io.o -o executablemain.o : main.cgcc -Wall -O -g -c main.c -o main.oio.o : io.cgcc -Wall -O -g -c io.c -o io.o䖭 ϔϾ ㅔ ⱘ makefileˈmakeҢϔ 㾘 ˈexecutable makefile 㒜㽕⫳ ⱘⳂ ӊDŽ㒭 ⱘ㾘 䇈 executableձ䌪ѢϸϾⳂ ӊmain.o io.oˈ 㽕executable ↨ ձ䌪ⱘ ӊЁⱘӏԩϔϾ ⱘ䆱ˈϟϔ㸠ⱘ Ҹ Ӯ㹿 㸠DŽԚ ˈ Ẕ ӊ main.o io.o ⱘ П ˈ Ӯ ϟ 䙷ѯ main.o io.o ЎⳂ ӊⱘ㾘 DŽmake њ Ѣ main.o ⱘ㾘 ˈ䆹Ⳃ ӊⱘձ䌪 ӊ main.cDŽmakefile 䴶ⱘ ӊЁ гϡ ⫳ 䖭Ͼձ䌪 ӊⱘ㾘 њDŽℸ ˈmake Ẕ ⺕ⲬϞ䖭Ͼձ䌪 ӊⱘ ˈ 䖭Ͼ ӊⱘ ↨main.o ⱘ䆱ˈ䙷М䖭Ͼ㾘 ϟ䴶ⱘ Ҹgcc -c main.c –o main.o Ӯ 㸠ˈҹ ӊ main.o DŽ ḋmake ӊio.o ㉏ԐⱘẔ ˈ ⱘձ䌪 ӊ io.cˈ io.oⱘ ⧚ main.o㉏ԐDŽ⦄ ˈ ϔϾ㾘 ˈ ϸϾ㾘 ЁⱘӏԩϔϾ㹿 㸠ˈ 㒜ⱘⳂ ӊexecutable䛑䳔㽕䞡 ( Ўexecutable ձ䌪ⱘ ЁϔϾ .o ӊ Ӯ↨ )ˈ ℸ䫒 Ҹ Ӯ㹿 㸠DŽњmakefileˈ ӏԩϔϾ⑤ ӊ䖯㸠 ˈ ձ䌪Ѣ䆹 ӊⱘⳂ ӊ䛑Ӯ㹿䞡 㓪䆥( Ў.o ӊձ䌪Ѣ.c ӊ)ˈ䖯㗠 㒜 㸠 ӊӮ㹿䞡 䫒 ( Ў ձ䌪ⱘ.o ӊ㹿 њ)ˈ гϡ⫼ ϔϾϾ њDŽ7.2.2.2㓪 makeǃ Нmakefile 䞠ⱘ ⱘˈϔ㠀䛑Փ⫼ ↡DŽ Ӏ Т ҹҢӏԩ 㹿 ⫼ˈ ҹҷ㸼 ㉏ ˈ՟ ҹ ӊ 㸼ˈ 㸠 ӊ 㓪䆥 ㄝDŽ㽕 НϔϾ ˈ makefileЁˈӏ ϔ㸠ⱘ ϟ䆹 ˈ 䴶䎳ϔϾㄝ ˈㄝ 䴶 㽕䆒 ⱘ䖭Ͼ ⱘ DŽ ҹ 㽕 ⫼ 䆹 ˈՓ⫼ $ ( )ˈ 㗙 ${ }ˈ⊼ ϔ 㽕 㢅 П DŽ Ϟϔ 㡖 Вⱘ՟ ˈ⫼ ⱘ ⊩ˈ ҹ ϟ䴶ⱘ ˖OBJS = main.o io.oCC = gccCFLAGS = -Wall -O -gexecutable: $(OBJS)$(CC) $(OBJS) -o executablemain.o : main.c$(CC) $(CFLAGS) -c main.c -o main.oio.o : io.c$(CC) $(CFLAGS) -c io.c -o io.o䖭ϾmakefileЁ њϝϾ Нˈ ҹ 䖭ѯ Ёⱘ ѯ ⫳ ˈ 㗙 䳔 㽕 ⱘ ˈ Ў㽕∖ⱘ ˈmakefileЁ⫼ 䖭ѯ ⱘ Ӯ㞾 DŽ makeЁ䖬 ϔѯ 㒣 Н ⱘ 䚼 䞣ˈ Ͼ䕗 ⫼ⱘ 䞣 $@ˈ $< ˈ$?ˈ$*, $^ (⊼ ˖䖭ѯ 䞣ϡ䳔㽕 ԣ)DŽ$@ Ў 㾘 ⱘⳂ ӊ ˗$< Ў 㾘 ձ䌪 ӊ 㸼ЁⱘϔϾձ䌪 ӊ˗$? Ў ⱘ ↨ 㾘 ⱘⳂ ӊⱘ ⱘձ䌪 ӊˈ䆹 Փ⫼ 㾘 Ӯ㹿Փ⫼˗$* 㾘 ЁⳂ ӊ ձ䌪 ӊ ѿⱘ ӊ ˈϡ ˗$^ Ў Ͼձ䌪 ӊⱘ 㸼(䰸 њ 䞡 ⱘ ӊ )DŽ⫼䖭ѯ 䞣ˈ ҹ Ϟ䴶ⱘ makefile ˖OBJS = main.o io.oCC = gccCFLAGS = -Wall -O -gexecutable: $(OBJS)$(CC) $^ -o $@main.o : main.c$(CC) $(CFLAGS) –c $< -o $@io.o : io.c$(CC) $(CFLAGS) -c $< -o $@ҹ 䞣 ⫼ Ҫ䆌 ˈ Ӏ ⏋ Փ⫼ⱘ ˈℷ⹂Փ⫼ ˈӮ㒭 㗙 ⱘ DŽ2ǃ䱤 㾘䇋⊼ ˈ Ϟ䴶ⱘ՟ 䞠ˈ Ͼѻ⫳ .o ӊⱘ Ҹ䛑 ҹ.c ӊЎձ䌪 ӊѻ⫳ .o Ⳃ (obj) ӊˈ䖭 ϔϾ ⱘ⫳ Ⳃ ӊⱘℹ偸DŽ ⫳ main.o io.oⱘ㾘 ҢmakefileЁ 䰸ˈmake Ӯ ⱘ䱤 㾘 ˈ✊ Ӯ ϔϾ䗖 ⱘ Ҹ 㸠DŽ 䰙Ϟmake 㒣ⶹ䘧䆹 ԩ⫳ 䖭ѯⳂ ӊˈ Փ⫼ 䞣 CC Ў㓪䆥 ˈ ϨӴ䗦 CFLAGS㒭 C 㓪䆥 (CXXFLAGS⫼Ѣ C++ 㓪䆥 )ˈCPPFLAGS(C乘 ⧚䗝乍)ˈTARGET_ARCH ( Ⳃ ՟ 㗠㿔ˈ䖬ϡ⫼㗗㰥䖭Ͼ )ˈ✊ 䗝乍 -c ˈ 䴶䎳乘 Н $<(ϔϾձ䌪 ӊ )ˈ 乍 -oˈ 䎳乘 Н $@ (Ⳃ ӊ )DŽϔϾ˟㓪䆥ⱘ ԧ Ҹ Ӯ ˖$(CC) $(CFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c $< -o $@make Ё ⱘ䖭ѯ 㕂ⱘ 䱤 ⱘ㾘 ˈ Нњ ԩҢϡ ⱘձ䌪 ӊ ゟ⡍ ㉏ ⱘⳂ DŽUnix㋏㒳䗮 ϔ⾡ Ѣ ӊ ӊ 㓔ⱘ䱤 㾘 DŽ䖭⾡ 㓔㾘 Нњ ԩ ϔϾ ⡍ ӊ 㓔ⱘ ӊ(՟ .c ӊ)ˈ䕀 Ў ϔ⾡ ӊ 㓔ⱘ ӊ(՟ .o ӊ)˖㋏㒳Ё咬䅸ⱘ ⫼ ӊ НЎ˖.oⳂ ӊ.c C⑤ ӊ.f FORTRAN⑤ ӊ.s∛㓪⑤ ӊ.y Yacc-C⑤䇁⊩.l Lex⑤䇁⊩㗠GNU make 䰸њ 㓔㾘 䖬 ϔ⾡㉏ ⱘ䱤 㾘 㾘 DŽ䖭⾡㾘 䗮⫼ˈ Ў ҹ ⫼ 㾘 Н ⱘձ䌪 㾘 DŽ ⫼ НⳂ ձ䌪 ӊП䯈ⱘ ㋏ˈ՟ ϟ䴶ⱘ 㾘 Нњ ԩ ӏ ϔϾ.c ӊ䕀 Ў ӊ Ⳍ ⱘ.o ӊ˖%.o : %.c$(CC) $(CFLAGS) $(CPPFLAGS) -c -o $@ $<3ǃӾⳂ䳔㽕 㒜ѻ⫳ϸϾ ⱘ 㸠 ӊˈԚ䖭ѯ ӊ ⳌѦ⣀ゟⱘˈг 䇈ӏԩϔϾⳂ ӊⱘ䞡 ˈϡӮ ҪⳂ ӊDŽℸ ˈ ҹ䗮䖛Փ⫼ 䇧ⱘӾⳂ 䖒 䖭ϔⳂⱘDŽϔϾӾⳂ ϔϾⳳℷⱘⳂ ӊⱘ ϔ Ѣˈ䖭ϾⳂ ӊ 䑿 ϡ DŽ ℸˈ make Ӯ 䆒 䳔㽕㹿⫳ ˈ make 䆹ӾⳂ ӊⱘ ձ䌪 ӊ䛑 ˈ Ӯ 㸠 ⱘ㾘 䞠ⱘ Ҹ㸠DŽВϔϾㅔ ⱘ՟ ˈ makefile 䕧all : executable1 executable2䖭䞠 executable1 executable2 㒜 ⫳ ⱘϸϾ 㸠 ӊDŽ make 䖭Ͼ 'all' Ў ⱘЏ㽕Ⳃ ˈ↣ 㸠 䛑Ӯ 䆩 'all' DŽԚ ˈ⬅Ѣ䖭㸠㾘 䞠 ≵ Ҹ ⫼ ϔϾ 'all' ⱘ 䰙 ӊϞ(џ Ϟˈ all гϡӮ 䰙⫳ )ˈ ҹ䖭Ͼ㾘 ϡⳳⱘ 'all' ⱘ⢊ DŽ ✊䖭Ͼ ӊ ϡ ˈ ҹ make Ӯ 䆩 all 㾘 ˈ ℸ Ẕ ⱘձ䌪 ӊ executable1, exectable2 䳔㽕 ˈ 䳔㽕ˈ Ӏ ˈҢ㗠䖒 ⫳ ϸϾⳂ ӊⱘⳂⱘDŽӾⳂ makefileЁ ⊯Փ⫼DŽ4ǃmakefile 䞠ⱘ 䎳 ⱘ ⳌԐˈ Փ⫼ⱘ ˈ⫼ϔϾ $ ヺ 䎳 ˈ ˈぎḐ 䎳ϔ㋏ ⬅䗫 䱨ⱘ DŽ՟ ˈ GNU Make 䞠 ϔϾ Ў 'wildcard' ⱘ ˈ ϔϾ ˈ 㛑 ϔ ヺ ⬅ 䗄ⱘ ӊ ˈ ӊ䯈ҹぎḐ䯈䱨DŽ ҹ ϟ䴶 ⼎Փ⫼䖭Ͼ Ҹ˖SOURCES = $(wildcard *.c)䖭ḋӮѻ⫳ϔϾ ҹ '.c' 㒧 ⱘ ӊⱘ 㸼ˈ✊ 䞣 SOURCES 䞠DŽ ✊Դϡ䳔㽕ϔ 㽕 㒧 ϔϾ 䞣DŽϔϾ ⫼ⱘ patsubst (patten substitude, 䜡 ⱘ㓽 ) DŽ 䳔㽕ˏϾ ˖ϔϾ ϔϾ䳔㽕 䜡ⱘ ˈѠϾ㸼⼎⫼ҔМ ˈϝϾ ϔϾ䳔㽕㹿 ⧚ⱘ⬅ぎḐ 䱨ⱘ DŽ՟ ˈ ⧚䙷Ͼ㒣䖛Ϟ䴶 Н ⱘ 䞣ˈOBJS = $(patsubst %.c,%.o,$(SOURCES))䖭Ͼ䇁 ⧚ SOURCES Ёⱘ ӊ 㓔 '.c'ⱘ ӊˈ⫼ '.o' '.c' ҷDŽ⊼ 䖭䞠ⱘ % ヺ 䗮䜡ヺˈ 䜡ϔϾ Ͼ ヺˈ ↣ 䜡ⱘ ヺІ ϔϾ‘ ’(stem) DŽ ѠϾ 䞠ˈ%㹿㾷䞞 ⫼ϔ 䜡ⱘ䙷Ͼ DŽ䍷ⱘ䇏㗙 䳔㽕 䖯ϔℹⱘњ㾷ˈ䇋 㗗GNU Make DŽ7.2.2.3 makefileⱘϔϾ ԧ՟䖭䞠㒭䇏㗙ВϔϾㅔ ⱘmakefileⱘ՟ ˈ䗮䖛 䖭Ͼmakefileⱘ䆆㾷ˈ 䴶ҟ㒡ⱘⳌ ⶹ䆚DŽINCLUDES =-I/home/nie/mysrc/include \-I/home/nie/mysrc/extern/include \-I/home/nie/mysrc/src \-I/home/nie/mysrc/libsrc \-I. \-I..EXT_CC_OPTS = -DEXT_MODECPP_REQ_DEFINES = -DMODEL=tune1 -DRT -DNUMST=2 \-DTID01EQ=1 -DNCSTATES=0 \-DMT=0 -DHAVESTDIORTM_CC_OPTS = -DUSE_RTMODELCFLAGS = -O -gCFLAGS += $(CPP_REQ_DEFINES)CFLAGS += $(EXT_CC_OPTS)CFLAGS +=$(RTM_CC_OPTS)SRCS = tune1.c rt_sim.c rt_nonfinite.c grt_main.c rt_logging.c \ext_svr.c updown.c ext_svr_transport.c ext_work.cOBJS = $(SRCS:.c=.o)RM = rm –fCC = gccLD = gccall: tune1%.o : %.c$(CC) -c -o $@ $(CFLAGS) $(INCLUDES) $<tune1 : $(OBJS)$(LD) -o $@ $(OBJS) -lmclean :$(RM) $(OBJS)䖭ϾmakefileЁ佪 Нњ Ͼ ˖' INCLUDES =-I …'(ⳕ⬹ ҷ㸼-I 䴶ⱘ )ˈ'-I dirname' 㸼⼎ dirname ⱘⳂ ӊⳂ 㸼Ё ˈ 䖯㸠乘 ⧚䖛ЁՓ⫼ⱘ ˗' EXT_CC_OPTS = -DEXT_MODE ' 㸼⼎ Ё Нњ EXT_MODEˈㄝӋѢ ⑤ҷⷕ 䇁 ' #define EXT_MODE ' ˗ϟ ⱘϸϾ НCPP_REQ_DEFINES RTM_CC_OPTS䍋 EXT_CC_OPTS ㉏Ԑⱘ⫼˗'CFLAGS =-O -g ' 㓪䆥 ⱘ㓪䆥䗝乍ˈ㸼⼎ 㓪䆥ⱘ䖛Ё ҷⷕ䖯㸠 Ӭ ˈ ѻ⫳㛑㹿GNU䇗䆩 ( gdb)Փ⫼ⱘ䇗䆩 ˗'CFLAGS += ' 㸼⼎ 䖭Ͼ Н ⱘ ⸔Ϟ ⱘ ˗' SRCS = …'ҷ㸼њ 㽕㓪䆥ⱘ⑤ҷⷕ ӊ 㸼˗' OBJS = $(SRCS:.c=.o)'㸼⼎ SRC ҷ㸼ⱘ ҹ.c㒧 ⱘ ӊ ⫼.o㒧 ⱘ ӊ ˈ 㸼⼎ Ͼ⑤ ӊ ⱘⳂ ӊ ˗' RM = rm –f ' 㸼⼎ 䰸 Ҹˈ-f 䰸䗝乍ˈՓ⫼䆹ヺ ˈ ӊ䖯㸠 䰸 ˈ≵ ⼎˗' CC = gcc '㸼⼎㓪䆥 ⫼gcc˗' LD= gcc' 㸼⼎䫒 Ҹ ⫼gcc˗all clean ϸϾӾⳂ ˈ Փ⫼make Ҹⱘ ˈ ϡ Ⳃ ӊ ˈ ҹ makefile Ё ⦄ⱘϔϾⳂ Ў 㒜Ⳃ ˈ ҹ 䬂 Ҹmakeˈ ӾⳂ all㹿Ў 㒜ⱘⳂ 㗠 㸠ˈ⬅Ѣ䖭Ͼ ӊ ϡ ˈ ҹ make Ӯ 䆩 all 㾘 ˈ ℸ Ẕ ⱘձ䌪 ӊ tune1 䳔㽕 ˈ 䳔㽕ˈ ˈ䖭ḋӾⳂ ϟ䴶ⱘϸ 㾘 Ӯ㹿 㸠ˈҢ㗠⫳ 㸠 ӊtune1DŽ 㽕 㸠 䰸 Ҹˈ 䳔㽕䬂 Ҹmake cleanˈ Ӯ ҹ.o㒧 ⱘЁ䯈 ӊ 䰸DŽˈ䇋䇏㗙⊼ makefileⱘ՟ Ё ⫼ ' \'ˈ䆹ヺ ⫼Ѣ makefileЁˈ ϔ 䇁 䖛䭓 ˈ ҹ⫼' \' 䖭 䇁 ⱘ 䖍⬠ˈ䗮䖛 䔺 㸠ˈՓϟ䴶 ϔ㸠ⱘ䇁 Ў䆹䇁 ⱘ㓁㸠DŽmakefile ӊЁˈ⫼ヺ ' #'Ў⊼䞞㸠䇁 ⱘ ˈҹ makefile ӊⱘ 䇏 DŽ ՟ 䆒makefile ӊ Ўmakefileˈ ✊г ✻ϾҎⱘ Ҫ ӊ ˈ ӊ ϡ makefileˈMakefileⱘ䆱ˈ ⫼make Ҹ ˈ䇋Փ⫼make –f makefilenameDŽ ℸˈ 䇏㗙㛑 make makefileⱘ Փ⫼DŽ7.2.3Փ⫼GDB䇗䆩䆎 М䌘⏅ⱘ 㓪 ⱘ ˈ䛑ϡ 㛑ϔ Ӯ ˈ 䖤㸠 ˈӮ ⦄䆌䆌 ϡ ⱘ䫭䇃ˈϔ ⳟ ⫼ ϡ ˈ ⱘ ⊩䗮䖛ϔѯ ↉䖯 䚼䖯㸠䇗䆩DŽ䗮 䇗䆩 ⱘ 㛑 ҹϟϔѯ ˈ Ѣ 㗙 䫭䇃 ⱘDŽ1ˊ 䖤㸠 Ͼ䇁 㗙㸼䖒 ⫳њ䫭䇃˛2ˊ 䫭䇃 㸠ϔϾ ⱘ ⦄ⱘˈ䙷М ⱘ ϔ㸠 њ䖭Ͼ ⱘ䇗⫼䇁 ˈ 䇗⫼䆹 ⱘ Ӵ䗦ⱘ ҔМ˛3ˊ 㸠 ˈ ⱘ ϔϾ 䞣 Ў ˛4ˊ Ͼ㸼䖒 㒜䖤㸠ⱘ㒧 Ўԩ ˛䇗䆩 ( ⹂ 䇈 䆹⿄Ўヺ 䇗䆩 )㛑 Ϟ䗄Ⳃ DŽ ϔϾ㛑 䖤㸠 Ҫ ⱘ ⫼ ˈ 䗮 НϞⱘ ⱘ ϔϡ П Ѣˈ䇗䆩 㛑 䖯 ⑤ⷕЁˈ 䆌 㗙䖯㸠䗤㸠 ℹ䖤㸠ˈњ㾷 ҷⷕ 㸠乎 ˈ ↣ 䇁 㸠ⱘ㒧 ˈ ҹ 䖤㸠ⱘ ˈ ⳟ⫮㟇 ӏϔ 䞣 DŽ 䖤㸠 䫭 ˈ Ў 㗙 կ 䖤㸠 ⱘ䆺㒚㒚㡖ˈҢ㗠 䫭ⱘ DŽ Linux㋏㒳Ёˈ ⫼ ⱘ GDB(GNU Degugger)DŽGDB GNU㞾 ⱘ䇗䆩 DŽ7.2.3.1 GDB ⫼ Ҹ㽕 Փ⫼gdbˈ 乏 ⑤ⷕ䖯㸠㓪䆥ⱘ ˈՓ⫼-g㓪䆥䗝乍 ˈ 䗮ⶹ㓪䆥 ˈ 㗙 䖯㸠 䇗䆩DŽ⫼њ-g䗝乍 ˈ 㓪䆥ⱘ Ӯ 䇗䆩 ˈ䖭ѯ䇗䆩 Ⳃ ӊЁˈ 䗄њ↣Ͼ 䞣ⱘ ㉏ ҹ ⑤ⷕ㸠 㸠ҷⷕ 䯈 ㋏ˈgdbℷ 䗮䖛䖭ѯ Փ⑤ⷕ ⷕⳌ 㘨ⱘˈ ⦄њ⑤ⷕ㑻ⱘ䇗䆩DŽЎњՓ⫼gdb䇗䆩ˈ 䳔㽕 Ҹ㸠Ё䕧 gdb filename(filename ⫼gcc㓪䆥⫳ ⱘ 㒜 㸠 ӊ )ˈ䆹䇁 Ϣ䇗䆩 ⱘ DŽ Ϟϔ 㡖Ё Вmakefile՟ 䇈ˈ 䬂 gdb tune1ˈ ϞӮ ⦄[nie@uClinux mysrc]$ gdb tune1GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT)Copyright 2001 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux"...(gdb)gdb㱑✊䖤㸠䍋 ˈԚ 㸠 tune1 ≵ 䖤㸠ˈℸ gdb ⼎ヺϟⳈ 䬂 run Ҹ ˈ 㸠 䖤㸠ⱘ 䳔㽕䕧 Ҹ㸠 ˈ gdb ⼎ヺϟ ҹ䖭ḋ䬂 Ҹ˖run command-line-arguments ˈ 䕧 Ҹ˖tune1 command-line-argumentsϔḋˈ њ 㸠 ⱘ䖤㸠DŽˈ Ӏ 㛑 ⚍䇗䆩 ˈ䅽 㸠 ҷⷕ ℶ㒻㓁 㸠ϟ ˈℸ ҹՓ⫼ Ҹbreakˈ䆹 ҸⱘḐ Ўbreak placeˈ䖭䞠place ҹ ҷⷕⱘ㸠 ˈ ˈ⫮㟇 ҹ ⫼break main ˈ䅽 ⚍䆒㕂 ҷⷕϔ 㸠ⱘ ˈ↨ ѢϞ䴶Вⱘ 㸠 ӊ Ўtune1ⱘ՟ ˈ 䇗⫼њϔϾ ЎrtExtModeCheckInitⱘ ˈ 䅽 㸠 䆹 ℶˈ ҹ gdb ⼎ヺϟ䕧 ˖break rtExtModeCheckInitˈℸ Ϟ ⦄ϟ ˖Breakpoint 1 at 0x8049a28: file grt_main.c, line 604.DŽ ✊ˈг ҹՓ⫼㸠 䆒㕂Ё ԡ㕂ˈϞ䴶䆒㕂Ё ⱘ䇁 ҹㄝӋЎbreak 604ˈ ҹ Ϟⳟ Ⳍ ⱘ DŽ䆒㕂њ ⚍ ˈ Ӯ䖤㸠 ⚍ ϟ ˈℸ Ң Ϟ ҹ ㉏Ԑϟ䴶ⱘ ˖Breakpoint 1, main (argc=4, argv=0xbffffb84) at grt_main.c:604604 rtExtModeCheckInit();(gdb)Ͼ ⚍䰸 ˈ ҹ gdb ⼎ヺϟ䕧 Ҹ˖delete Nˈ䖭䞠N㸼⼎ ϾЁ ˈϔϾ䆒㕂ⱘЁ Ў1ˈѠϾ䆒㕂ⱘ Ў2ˈձ㉏ DŽ delete ϡ䎳ӏԩ ˈ 㸼⼎ 䆒㕂ⱘ ⚍䛑 䰸DŽ ⳟⳂ 䆒㕂 ⚍ⱘ ˈ ҹՓ⫼ Ҹinfo breakˈ Ӯ ⼎ ↣ϔϾ䆒㕂ⱘ ⚍ DŽgdb ⼎ヺϟՓ⫼help ҸˈӮ㒭 gdb ҸⱘϔϾㅔⷁ 䗄 Ҹ ㉏DŽ 㗙 䖯 䚼䖯㸠 ℹ䇗䆩ˈgdb կϸ⾡ Ҹկ䗝 ˈstep next Ҹˈϸ㗙ⱘ Ѣstep 㸠↣ϔ 䇁 ˈ 䘛 䇗⫼ˈӮ䏇䕀 䆹 Нⱘ 㸠 㸠ˈ㗠next ϡ䖯 䚼ˈ 䇗⫼䇁 䗮ϔ 䇁 㸠 DŽcontinue Ҹ 㒻㓁䖤㸠 ˈⳈ 䘛 ϟϔϾ ⚍ 㒧 DŽՓ⫼㗙ҙҙ linuxⱘbash ⼎ヺϟ䕧 Ҹgdb ˈ њgdb㗠 ˈℸ ˈ 㽕 䕑 㸠 ӊˈ䳔㽕 gdb ⼎ヺϟ䬂 Ҹ˖file filename(filenameЎ 㸠 ӊ )ˈ⊼ 㸠 ӊⱘ 㗠ϡ ⑤ ӊ DŽ䇗䆩䖛Ёˈ ⳟϔϾ 䞣 ⱘ ˈ ҹ gdb⦃ ϟ䕧 Ҹ˖watch variablename ˈ䖭䞠ⱘvariablename Դ 㾖 ⱘ 䞣 DŽ䖬 ϔϾ ҹ ⼎㸼䖒 ⱘ Ҹprintˈ Փ⫼㾘 Ўprint expressionnameˈ ЁexpressionnameЎ㽕 ⼎ⱘ㸼䖒 DŽ7.2.3.2 GDB ԧ䇗䆩 ՟ϟ䴶䗮䖛Փ⫼ϔϾㅔ ⱘ Փ䇏㗙䖯ϔℹ❳ ⫼gdbⱘ䇗䆩 ⊩DŽ⑤ Ўexample1.cˈҷⷕ ϟ˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖example.c* Description˖ introduce how to use gdbNie* Author˖Xueyuan* Date˖*******************************************************/#include <stdio.h>static void display(int i, int *ptr);int main(void){int x = 5;int *xptr = &x;printf("In main():\n");printf(" x is %d and is stored at %p.\n", x, &x);printf(" xptr holds %p and points to %d.\n", xptr, *xptr);display(x, xptr);return 0;}void display(int z, int *zptr){printf("In display():\n");printf(" z is %d and is stored at %p.\n", z, &z);printf(" zptr holds %p and points to %d.\n", zptr, *zptr);}㽕Փ⫼gdb䇗䆩 ˈϔ 㽕 㓪䆥 ˈՓ⫼-g㓪䆥䗝乍ˈҹ⫳ ヺ 㸼( augmented symbol table)ˈ կ䇗䆩 DŽ佪 Փ⫼gcc –g –o example1 example.c ⑤ҷⷕ䖯㸠㓪䆥ˈ䖭ḋ ҹՓ⫼gdbⲥ㾚example1ⱘ 㸠㒚㡖DŽ bash ⼎ヺϟˈ䬂 Ҹ:gdb example1ˈ њ 㸠 ӊexample1 ⱘ䇗䆩ˈ ϞӮ ⦄ϟ䴶ⱘ ˖[nie@uClinux nie]$ gdb example1GNU gdb Red Hat Linux 7.x (5.0rh-15) (MI_OUT)Copyright 2001 Free Software Foundation, Inc.GDB is free software, covered by the GNU General Public License, and you arewelcome to change it and/or distribute copies of it under certain conditions.Type "show copying" to see the conditions.There is absolutely no warranty for GDB. Type "show warranty" for details.This GDB was configured as "i386-redhat-linux"...(gdb)ϔ㸠(gdb) 䖯 gdb䇗䆩Ёⱘ ⼎ヺˈℸ ҹ ⼎ヺϟ䕧 ӏԩ 䬂 ⱘ ҸDŽ⦄ 㽕䖯㸠 ⚍䇗䆩ⱘ䆱ˈ 䳔㽕 ⼎ϔϟ㽕䇗䆩ⱘ⑤ⷕˈҹ ⶹ䘧 Ͼ 䖯㸠 ⚍䆒㕂DŽ gdbϟˈLinux ⫼ 㓪䕥 Ҹviϡ㛑Փ⫼ˈ ҹՓ⫼list Ҹ 㸠 ӊⱘ⑤ҷⷕⱘϔ䚼 ˈЎњ ⑤ҷⷕⱘ 䚼ˈ 㽕 䬂 list Ҹ DŽ ԧ ϟ˖(gdb) list1 #include <stdio.h>2 static void display(int i, int *ptr);34 int main(void) {5 int x = 5;6 int *xptr = &x;7 printf("In main():\n");8 printf(" x is %d and is stored at %p.\n", x, &x);9 printf(" xptr holds %p and points to %d.\n", xptr, *xptr);10 display(x, xptr);(gdb) list11 return 0;12 }1314 void display(int z, int *zptr) {15 printf("In display():\n");16 printf(" z is %d and is stored at %p.\n", z, &z);17 printf(" zptr holds %p and points to %d.\n", zptr, *zptr);18 }(gdb) listLine number 19 out of range; example1.c has 18 lines.(gdb)Ϟ⏙Ἦ ⼎ њ↣ϔϾ䇁 ⱘ ԧ㸠 ˈ↨ ⦄ Ӏ Ѩ㸠䆒㕂 ⚍ˈ ҹ gdb ⼎ヺϟ䕧 Ҹ˖break 5ˈ ҹⳟ ϟ䴶ⱘ ⼎ ˖(gdb) break 5Breakpoint 1 at 0x8048466: file example1.c, line 5.⚍ 㒣䆒㕂 ˈ⦄ 䅽 䖤㸠䍋 ˈ䬂 Ҹrunˈг ҹ䬂 㓽 rˈ Ϟ ⦄ⱘ ϟ˖(gdb) rStarting program: /home/nie/example1Breakpoint 1, main () at example1.c:55 int x = 5;Ϟ䗄 㸼 ˈgdb 㒣 㸠 㸠 ˈⳂ 䖤㸠 example1.c Ёmain() ⱘѨ㸠 ℶˈ Ϩ ⼎ 㽕 㸠ⱘѨ㸠䇁 DŽ⦄ Ӏ䖯㸠 ℹ䇗䆩ⱘ ˈ䕧 Ҹ˖nextˈ 㸼 ℹ 㸠 ⱘ↣ϔ 䇁 ˈ ⫼next Ҹ 㸠 display ˈ ⦄ ϟ ⼎ ˖(gdb) next6 int *xptr = &x;(gdb) next7 printf("In main():\n");(gdb) nextIn main():8 printf(" x is %d and is stored at %p.\n", x, &x);(gdb) nextx is 5 and is stored at 0xbffffb44.9 printf(" xptr holds %p and points to %d.\n", xptr, *xptr);(gdb) nextxptr holds 0xbffffb44 and points to 5.10 display(x, xptr);Ўњ䖯 display 䚼䖯㸠䇗䆩ˈ䕧 Ҹstepˈ ˖(gdb) stepdisplay (z=5, zptr=0xbffffb44) at example1.c:1515 printf("In display():\n");step ҸՓ 㸠䖯 䚼ˈℸ 䆹 䚼ˈ ҹ㒻㓁Փ⫼step Ҹ 㗙 next Ҹ䖯㸠 ℹ 㸠ˈ ϡ ℹ 㸠ˈ㗠 Ⳉ ϔ 㸠 ↩ˈ ҹ䕧 Ҹcontinue DŽ㽕䗔 gdbˈ䇋䬂 Ҹquitˈ ℸ ҡ 䖯㸠ˈgdbӮ䅽Դ⹂䅸 ⳳⱘ㽕䗔 ˈ Ӯ ⦄㉏Ԑϟ䴶ⱘ ⼎ ˖(gdb) quitThe program is running. Exit anyway? (y or n)ϟ'y' 䗔 䇗䆩 ˈ 䑿 㒣䖤㸠 ↩ˈ quit Ҹ䬂 ˈӮⳈ 䗔 gdb,㗠ϡ ⦄ӏԩ ⼎ DŽ✊䰸њՓ⫼gdb䖯㸠 䇗䆩 ˈ ↨䕗ㅔⷁˈ䘏䕥 ↨䕗ㅔ ˈℸ ҹϡ⫼gdbˈ䞛⫼printf䇁 Ё䕧 Ё䯈 䞣ⱘ 䇗䆩 ˈг ϔϾϡ䫭ⱘ䇗䆩 ⊩DŽℸЎℶˈ Ӏ 㒣ҟ㒡њuClinux ㋏㒳ˈGNU ⱘՓ⫼ˈ њ䖭ѯ乘 ⶹ䆚 ˈ Ӏ 䖯 ゴⱘ䞡⚍ њDŽ7.3 ゟuClinux ⦃Ўњ ⦄ ѢuClinuxⱘ ⫼㋏㒳ⱘ ˈ ゟ ϔϾ ⱘuClinux ⦃ 㽕ⱘDŽѢuClinux ㋏㒳ⱘ ⫼ ⦃ ϔ㠀 ⬅Ⳃ ㋏㒳⹀ӊ ЏPC DŽⳂ ⹀ӊ ( кЁ ѢS3C4510Bⱘ )⫼Ѣ䖤㸠 ㋏㒳 ㋏㒳 ⫼䕃ӊˈ㗠Ⳃ ⫼ ⱘ ㋏㒳ⱘ Ḍ㓪䆥ǃ ⫼ ⱘ 䇗䆩 䳔㽕䗮䖛 ЏPC DŽ П䯈ϔ㠀䗮䖛І ˈ ҹ 㔥 ゟ䖲 ㋏DŽ7.3.1 ゟѸ 㓪䆥䗮 ⱘ ㋏㒳ⱘ 䛑 ҹ㺙 LinuxⱘPC Ў Џ 㓪䆥 Ḍ ⫼ ⫼ ⱘˈԚ Ѣ 䭓 Windows ㋏㒳ϟⱘ⫼ 䇈ˈさ✊ Linux⦃ ϟ Ӯ 䇌 ϡ ˈ ℸ к Ѣϡ ⱘ䇏㗙 կњ Џ 㺙 ϡ ㋏㒳 ˈⳌ ⱘѸ 㓪䆥⦃ ゟⱘ ⊩DŽ7.3.1.1ˊЎ 㺙Linuxⱘ Џ ゟѸ 㓪䆥佪 ˈ㽕 Џ Ϟ 㺙 Linux ㋏㒳ˈ RedHat Linux( кՓ⫼ⱘ Redhat 7.2)ˈϔ 㽕⹂ 䅵ㅫ ⱘ㔥 偅 ǃ㔥㒰䗮䆃䜡㕂ℷ ˈ ԩ PC Ϟ 㺙Linux ㋏㒳ⱘ䯂乬ˈ䇋 㗗 䌘 DŽ⬅ѢuClinux ⱘⳌ 䲚 䛑 㞾㞾⬅䕃ӊ㒘㒛ⱘ ⑤ҷⷕˈ ҹ 䕃ӊ ⦃ ゟⱘ ˈ 䕃ӊ䛑 ҹҢ㔥㒰ϞⳈ ϟ䕑㦋 ˈ ϟ ҹ ゟѸ ⦃ DŽ⦄ ҟ㒡ϔϟѸ 㓪䆥ⱘὖ DŽㅔ 䆆ˈѸ 㓪䆥 ϔϾ Ϟ⫳ ҹ ϔϾ Ϟ 㸠ⱘҷⷕDŽ⊼ 䖭䞠ⱘ ˈ 䰙Ϟ ϸϾὖ ˖ԧ㋏㒧 (Architecture)ǃ ㋏㒳(Operating System)DŽ ϔϾԧ㋏㒧 ҹ䖤㸠ϡ ⱘ ㋏㒳˗ ḋˈ ϔϾ ㋏㒳г ҹ ϡ ⱘԧ㋏㒧 Ϟ䖤㸠DŽВ՟ 䇈ˈ Ӏ 䇈ⱘx86 Linux 䰙Ϟ Intel x86ԧ㋏㒧 Linux for x86 ㋏㒳ⱘ㒳⿄˗㗠x86 WinNT 䰙Ϟ Intel x86ԧ㋏㒧 Windows NT for x86 ㋏㒳ⱘㅔ⿄DŽ к ⍝ ⱘⳂ ⹀ӊS3C4510B㗠㿔ˈП ҹՓ⫼Ѹ 㓪䆥 Ў 䆹⹀ӊϞ ⊩ 㺙 Ӏ 䳔ⱘ㓪䆥 ˈ Ѣ Џ ˈ Џ Ϟ 䖤㸠 Ⳃ Ϟⱘ ⫼ 䖯㸠㓪䆥ˈ⫳ Ⳃ Ϟ䖤㸠ⱘҷⷕḐ DŽ䇏㗙 ҹҢ.tw/->download ϟ䕑 䫒˖arm-elf-binutils-2.11-5.i386.rpmˈarm-elf-gcc-2.95.3-2.i386.rpmˈgenromfs-0.5.1-1.i386.rpmⱘ ӊ Џ ϞⱘӏϔⳂ ϟDŽ䬂 ϟ䴶ⱘ Ҹ 㺙rpm ˖$su#rpm –ivh *.rpmRPM(Red Hat Package Manger)䕃ӊ ㅵ⧚ ˈ ⱘ䕃ӊ 㺙 ˈ䕏 ⫼ ϔ DŽRPMⳂ ⱘ 3⾡㉏ ˖x86(i386)ˈSparcҹ Alphaˈ ҹ ⱘҢ ӊ Փ⫼ⱘ DŽ Ⳃ ϟ䕑 ӊ↨ arm-elf-binutils-2.11-5.i386.rpmˈarm-elf-binutils㸼⼎ ӊ ˈ2.11㸼⼎⠜ 㓪 ˈ5㸼⼎ 㸠 ˈг Ⳃ 㒣 㸠ⱘ ˈi386 ℸ䕃ӊ Ў䗖⫼ѢIntel x86ⱘѠ䖯 (binary) ˈг 㒣㓪䆥 Ϩ ҹⳈ 㺙ⱘ䕃ӊ ˈ ⱘĀrpmā㸼⼎䖭 Red HatⱘRPM DŽ↣ϔ⠜ⱘRPM ˈ㢹 ⦄䕃ӊ 䯂乬ˈ䛑Ӯ䞡 䖯㸠patch buildˈ䖭ḋ 㸠 ⱘ䚼 Ӯ 1ˈҹ㸼⼎䆹⠜ ϞϾ⠜ ⱘ DŽ䖭䞠 ⫼ⱘ Ҹrpm –ivhЁˈ-i㸼⼎Installationˈ 㺙 ⱘRPM䕃ӊ ˗-h㸼⼎Hashˈ䆹 㺙 䯈 ⦄”#”ヺ ˈ ⼎Ⳃ ⱘ 㺙䖛ˈ䖭Ͼヺ ϔⳈ 㓁 㺙 ℶ˗-v㸼⼎Verboseˈ ⼎ 㺙 ⱘ䆺㒚 DŽ㟇ℸ Ӏ Ѹ 㓪䆥 㒣 㺙 њ Џ DŽҹ Ӏ ҹ⫼Ѹ 㓪䆥 arm-elf-gcc 㓪䆥 ㋏㒳 Ḍ ⫼ ⫼ њDŽ䇏㗙г ҹҢ㔥キ/pub/uClinux/arm-elf-tools/Ϟϟ䕑 ⱘarme-elf-gcc ˈ 㛮 ӊarm-elf-tools-20030314.shˈ Џ Ϟ 㺙䆹 䫒ˈ 䆹 ӊ Ⳃ ϟˈ䬂 ˖$su#ls –l arm-elf-tools-20030314.sh䆹 Ҹ ⼎ ӊⱘ ⾡ ˈ 䆹㛮 ӊ ⱘϡ 㸠ⱘˈ 䖬䳔㽕䕧 Ҹ˖#chmod 755 arm-elf-tools-20030314.shҹ Ў 㸠 ˈ✊ 䗮䖛䬂 Ҹ:#sh ./arm-elf-tools-20030314.shҹ 㸠䆹 ӊDŽ 㸠 /usr/local/bin/䏃 ϟ gcc, g++, binutils, genromfs, flthdr elf2flt ㄝ ⾡ ⫼ DŽ7.3.1.2Ў 㺙windowsⱘ Џ ゟѸ 㓪䆥䖭䚼 ϧ䮼䩜 䙷ѯ Linux⦃ LinuxЁⱘ ⫼ ϡ❳ ˈ ⫼PCϞ ѢWindowsⱘ ㋏㒳 ㋏㒳ⱘ䇏㗙㗠 ⱘDŽ1. Cygwin䕃ӊҟ㒡Ўњ Windowsϟ ㋏㒳 ⫼ ˈ ҹ Windows⦃ ϟ㺙ϞCygwin 䕃ӊDŽCygwin ϔϾ Windows Ϟ䖤㸠ⱘUnix ⦃ ˈ Cygnus Solutions ⱘ㞾⬅䕃ӊDŽ Ѣ д Unix/Linux ⦃ ˈ 㗙䖯㸠 ѯ⡍⅞ⱘ ˈ Փ⫼GNU 䲚 WindowsϞ䖯㸠 ㋏㒳 ˈ䴲 ⫼DŽCygnus 佪 gccˈgdbㄝ 䖯㸠њ 䖯ˈՓ Ӏ㛑 ⫳ 㾷䞞win32ⱘⳂ ӊDŽ✊ ˈ 䖭ѯ ⿏ỡ windows Ϟ DŽϔ⾡ Ḝ Ѣwin32 API 䖭ѯ ⱘ⑤ҷⷕ䖯㸠 ˈ䖭ḋ ✊䳔㽕 䞣 DŽ ℸˈCygnus䞛 њϔ⾡ϡ ⱘ ⊩üüҪӀ њϔϾ ѿ ( cygwin1.dll)ˈ win32 APIЁ≵ ⱘUnix亢Ḑⱘ䇗⫼( fork,spawn,signals,select,socketsㄝ) 㺙 䞠䴶ˈг 䇈ˈҪӀ Ѣwin32 A PI њϔϾUnix㋏㒳 ⱘ DŽ䖭ḋˈ 㽕 䖭ѯ ⱘ⑤ҷⷕ 䖭Ͼ ѿ 䖲 ϔ䍋ˈ ҹՓ⫼UnixЏ ϞⱘѸ 㓪䆥 ⫳ ҹ Windows Ϟ䖤㸠ⱘ 䲚DŽҹ䖭ѯ⿏ỡ Windows Ϟⱘ Ў ⸔ˈCygnus 䗤ℹ Ҫⱘ ( Тϡ䳔㽕 ⑤ҷⷕ䖯㸠 ˈ 䳔㽕 ҪӀⱘ䜡㕂㛮 )䕃ӊ⿏ỡ WindowsϞ DŽ䖭ḋˈ Windows Ϟ䖤㸠bash ǃ⫼ ˈ 㾝 UnixϞ DŽ ѢCygwin ⦄ⱘ 䆺㒚 䗄ˈ䇋 㗗/cygwin-ug-net/cygwin-ug-net.htmlDŽ2. Cygwin䕃ӊⱘ 㺙㽕 Cygwinⱘ 㺙⠜ ˈ䇋 CygwinⱘЏ义/Ϟϟ䕑 ⱘCygwinˈ 䆹义䴶ⱘ Ϟ㾦 '' Install Cygwin Now ''ˈ⚍ ℸ ˈ Ӯ ϟ䕑ϔϾ setup.exeⱘGUI 㺙 ˈ⫼ 㛑ϟ䕑ϔϾ ⱘCygwinDŽ 7.2 ⼎Ў ⚍ setup.exe ⦄”䗝 㺙㉏ ” 䆱ḚDŽ 䆂䇏㗙 Cygwin Ͼ 㺙 ϟ䕑 ˈ 䖯㸠 㺙↨䕗 ˈ ϟ 䗝 ѠϾ䗝乍ˈㄝ Cygwin ϟ䕑 ˈ 䗝 ϝϾ䗝乍䖯㸠 㺙DŽ7.2䗝 㺙㉏㺙ⱘ 䆂 ϡ㽕 㺙 C:\Ⳃ ϟˈ↨ 㺙 D:\ϟDŽ㺙ⱘ䖛ЁˈӮ䅽⫼ 䗝 㺙 ѯ ˈ䖭ѯ Џ㽕 ⹂ ⦃ ˈ㓪䆥 ㄝˈ ϡ㛑⹂ ԧ䳔㽕 ѯ ⱘ䆱ˈ㗠⹀Ⲭぎ䯈䎇 ⱘ ϟˈ 䗝 䚼 㺙DŽ ⦄ⱘ 䆱Ḛⱘ''All''ⱘ 䖍⚍ ''Default''ˈⳈ ''Install''ˈ ϟ 7.3 ⼎˖7.3䗝 㺙Cygwinⱘ 㺙䖛 䯈↨䕗䭓ˈ䇋䇏㗙㗤 ㄝ DŽ ⦄ ⱘ⬏䴶⚍ Ā ā 䪂П ˈ Ӯ ⾦䩳ⱘ䮾 ˈ ⦄㉏Ԑϟ䴶ⱘ⬏䴶 7.4 ⼎ˈ䖭 㸠Cygwin 㺙 ⱘ㛮 䜡㕂DŽ7.4Cygwin 㺙 㞾 䜡㕂㞾 䜡㕂㒧 ˈ ⦄Cygwin 㺙㒧 ⱘ ⼎ḚDŽḠ䴶ϞӮ ⦄Cygwinⱘ DŽ3. Cygwinϟ⫳ Ѹ 㓪䆥㞾 ⫳ Ѹ 㓪䆥 П ˈ佪 cygwin䖯㸠ϔѯ䆒㕂DŽ 䆒Cygwin 㺙 dⳂ ϟˈ Cygwinに П ˈ䖯 D:\cygwinⳂ ˈ 䖭ϾⳂ ϟˈ ϔϾ ӊ Ўcygwin.batⱘ ⧚ ӊˈ㓪䕥䆹 ӊˈ ϔ㸠 set CYGWIN=title nteaˈ䖭 Ўcygwinⱘ ⧚ ӊ䳔㽕 Unix ӊ㋏㒳 DŽ ↩ ˈ 䗔 DŽ Ḡ䴶ϞⱘCygwin ˈ 咬䅸⫼ Ў WindowsЁⱏ ⱘ⫼ (䖭䞠 Փ⫼ⱘ ㋏㒳 windows 2000professsional)ˈ 7.5 ⼎ⱘ⬠䴶Ёˈ ḍⳂ ( D:\cygwin)ϟ䬂 ˖cd binmv sh.exe sh-original.exeln –s bash.exe sh.exeϞ䗄 ℹⱘ Ў linux㋏㒳 shヺ 䫒 bashˈCygwinϞⱘsh.exe bash.exe ϡ ⱘˈ ℸ 乏⫼bashҷ shDŽҢ㔥キ/pub/uClinux/arm-elf-tools/tools-20030314/Ϟϟ䕑⫳ 䫒ⱘ ⾡⑤ⷕˈḍ 㛮 ӊbuild-uclinux-tools.sh ゟ windowsϟ㓪䆥⫼ ⫼ ⱘѸ 㓪䆥 ˈ⫳ ⱘѸ 㓪䆥 㒜㹿 Ўarm-elf-tools-cygwin-yyyymmdd.tar.gzⱘ ӊˈ ЁyyyyЎ⫳ Ѹ 㓪䆥 ⱘ ˈmmЎ⫳ Ѹ 㓪䆥 ⱘ ӑˈddЎ DŽ䖭䞠ˈ 䇏㗙⊼ ⱘ ⫳ Ѹ 㓪䆥 ⱘ䖛Ёˈ 㛑Ӯ䘛 䫭䇃ˈ䇏㗙 䆹ḍ 㒭 ⱘ 䫭 ˈ䖯㸠Ⳍ ӊⱘ DŽ⬅Ѣд Ϟⱘ ˈlinuxϟⱘ 㓽 ӊϔ㠀䛑 ҹ.tar.gz 㗙.tgz㒧 ⱘˈ㱑✊⫼windowsϟⱘ㾷 䕃ӊ↨ winzip 㗙winrar ҹ㾷 䖭ѯ ӊˈԚ 㤤䇏㗙ϡ㽕⫼䖭ѯ䕃ӊ windowsϟ㾷 ˈ Ў䖭ḋ 㛑Ӯ䗴 ѯ ⱘ϶ DŽк⫳ ⱘѸ 㓪䆥 Ўarm-elf-tools-cygwin-20030502.tar.gzDŽ7.5Cygwin ⦃4. Cygwin⦃ ϟ ゟѸ 㓪䆥ḍⳂ ϟ䬂 ˖tar xvzf arm-elf-tools-cygwin-20030502.tar.gz䖯㸠Ѹ 㓪䆥 ⱘ㾷 ˈ㾷 ↩ /usr/local/bin/Ⳃ ϟ ҹⳟ ⾡GNU DŽ њѸ 㓪䆥 ˈ❳ Windowsⱘ䇏㗙 ҹ Windowsϟ㓪䆥 uClinuxϞ䖤㸠ⱘ ⫼ њDŽ7.3.2 uClinux䩜 ⹀ӊⱘⳂ ˈuClinux 㹿 ⿏ỡ S3C4510B Ҫ ℒARM㢃⠛ϞˈԚ⬅Ѣ ㋏㒳ⱘ䖤㸠 Ϣ ㋏㒳ⱘ⹀ӊ Ⳍ ⱘˈ㗠⹀ӊⱘ䆒䅵 Ӯ ЎՓ⫼ ⱘϡ 㗠 ϛ ˈ ℸˈ uClinux Ḍ⑤ҷⷕЁ ⹀ӊ㋻ Ⳍ ⱘ䚼 䆹䩜 ⡍ ⱘ⹀ӊ 䗖 ⱘ ˈ⬅ѢuClinux Ḍ⑤ҷⷕ ϔ䚼 ⱘ⹀ӊ偅 ˈϡ 㛑ϔϔ Вˈ ℸˈ ѢS3C4510Bⱘ ㋏㒳ⱘ䆒䅵Ϣ䖤㸠Ⳍ ⱘ䚼 ㅔ ⱘҟ㒡ˈ 䇏㗙 DŽuClinux Ḍ⑤ҷⷕЁ S3C4510B⠛ ⡍⅞ 㛑 ҹ ҪⳌ ⹀ӊ ⱘ НԡѢuClinux-Samsung\Linux-2.4.x\include\asm-armnommu\arch-samsung\hardware.h ӊЁˈ Ё Ͼ ⊼ ˖/** define S3C4510b CPU master clock*/#define MHz 1000000#define fMCLK_MHz (50 * MHz)#define fMCLK (fMCLK_MHz / MHz)#define MCLK2 (fMCLK_MHz / 2)ҹϞ Нњ㋏㒳 ⱘЏ 䩳乥⥛Ў50MHzˈ㢹⫼ ㋏㒳ⱘ 乥⥛ϡ ˈ ℸ ˈ㢹І㸠 䞛⫼ 䚼 䩳 ⫼Ѣ⊶⡍⥛⫳ ˈ䆹乥⥛ 䖬ϢІ㸠䗮 ⊶⡍⥛ DŽ/**********************************//* System Memory Control Register *//**********************************/#define DSR0 (2<<0) /* ROM Bank0 */#define DSR1 (0<<2) /* 0: Disable, 1: Byte, 2: Half-Word, 3: Word */ #define DSR2 (0<<4)#define DSR3 (0<<6)#define DSR4 (0<<8)#define DSR5 (0<<10)#define DSD0 (2<<12) /* RAM Bank0 */#define DSD1 (0<<14)#define DSD2 (0<<16)#define DSD3 (0<<18)#define DSX0 (0<<20) /* EXTIO0 */#define DSX1 (0<<22)#define DSX2 (0<<24)#define DSX3 (0<<26)#define rEXTDBWTH (DSR0|DSR1|DSR2|DSR3|DSR4|DSR5 | DSD0|DSD1|DSD2|DSD3 | DSX0|DSX1|DSX2|DSX3)ҹϞ Нњ㋏㒳 ˈ ✻ҹϞ НˈROM/SRAM/FLASH Bank0 НЎ16ԡ ˄џ ϞˈROM/SRAM/FLASH Bank0ⱘ ⬅B0SIZE[1:0]ⱘ⢊ ˅ˈ㗠ROM/SRAM/FLASH Bank1̚ROM/SRAM/FLASH Bank5⽕⫼˗DRAM/SDRAM Bank0 НЎ16ԡ ˈDRAM/SDRAM Bank1̚DRAM/SDRAM Bank3⽕⫼˗ 䚼I/O㒘 䚼⽕⫼˗㢹⫼ ㋏㒳ⱘ ㋏㒳䜡㕂ϡ ˈ ℸ DŽП 䖬 њ Ҫϔѯ ˈ ROM/SRAM/FLASH Bank0 ⱘ䆒㕂ˈFlash 䞣ⱘ䆒㕂ˈDRAM/SDRAM Bank0 ⱘ䆒㕂ˈSDRAM 䞣ⱘ䆒㕂ㄝˈ䖭ѯ䆒㕂 䆹Ϣ⫼ ㋏㒳 DŽ7.3.3㓪䆥uClinux ḌЎ ㋏㒳ⱘḌ ˈuClinux Ḍ䋳䋷ㅵ⧚㋏㒳ⱘ䖯ǃ ǃ䆒 偅 ǃ ӊ㋏㒳 㔥㒰㋏㒳ˈ ⴔ㋏㒳ⱘ ⾡ 㛑DŽuClinux Ḍⱘ⑤ҷⷕ ⱘˈӏԩҎ 㽕䙉 GPLˈ ҹ Ḍ ҹ 㒭ҪҎՓ⫼ˈ ℸˈ 㓪Ҏ ⱘ ϟˈuClinuxⱘ Ḍ⠜ ϡ ˈ ⱘ Ḍ њ ⱘ Ḍⱘ㔎䱋ˈ њ䆌 ⱘ⡍ ˈ⫼ 㞾 ⱘ㋏㒳ЁՓ⫼䖭ѯ ⱘ⡍ ˈ ḍ 㞾 ⱘ㋏㒳䞣䑿 催 ǃ 〇 䴴ⱘ Ḍˈ 䳔㽕䞡 㓪䆥 ḌDŽϔ㠀䇈 ˈ ⱘ Ḍ⠜ Ӯ ⱘ⹀ӊˈ ⱘ䖯ㅵ⧚㛑 ˈ䖤㸠䗳 Ӯ ǃ 〇 ˈ Ϩϔ㠀䛑Ӯ ⠜ Ё ⦄ⱘ㔎䱋ㄝˈ ℸˈ㒣 䗝 㑻 ⱘ㋏㒳 Ḍ 㽕ⱘDŽuClinux Ḍ䞛⫼ ⱘ㒘㒛㒧 ˈ䗮䖛 Ḍ ⱘ ㋏㒳ⱘ 㛑ˈ ℸˈℷ⹂ ⧚ⱘ䆒㕂 Ḍⱘ 㛑 ˈҢ㗠 㓪䆥㋏㒳 䳔 㛑ⱘҷⷕˈӮ ㋏㒳ⱘ䖤㸠䖯㸠 ϟ Ͼ 䴶ⱘӬ ˖ü⫼ ḍ 㞾䑿⹀ӊ㋏㒳ⱘ 䰙 㓪䆥ⱘ Ḍ Ў ⱘҷⷕˈϔ㠀Ӯ㦋 催ⱘ䖤㸠䗳 DŽü⬅Ѣ Ḍҷⷕ ㋏㒳䖤㸠 Ӯ 偏 ˈ ℸˈ ⷁ ⱘ ḌӮ㦋 ⱘ⫼ ぎ䯈DŽü ḌЁϡ 㽕ⱘ 㛑 ˈ ҹ ㋏㒳ⱘⓣ⋲ˈҢ㗠 ㋏㒳ⱘ〇 DŽuClinuxⱘ Ḍ⑤ҷⷕ ҹҢ䆌 㔥キϞ 䌍ϟ䕑ˈ Ḍⱘ ϔ㠀 ϸ⾡ ˈϔ⾡ ⱘ Ḍ⠜ ˈ ⱘ Ḍ⠜ ϔ㠀 .tar.gz ӊˈՓ⫼ 䳔㽕㾷 DŽ ϔ⾡ 䗮䖛ⱘ⠜ 㸹ϕ˄patch˅ˈ䖒 㑻ⱘ DŽ՟ 䞛⫼ⱘ LinuxϟՓ⫼ⱘѸ 㓪䆥 uClinux-Samsung-20020318.tar.gz⑤ⷕ 㞾㔥キ.twDŽuClinuxⱘ Ḍ⑤ҷⷕ ˈ ⫼Ѹ 㓪䆥 ҹ㓪䆥⫳ 䖤㸠 ⹀ӊⳂ ϞⱘuClinux ḌDŽҢ.twϞϟ䕑uClinux Ḍ⑤ҷⷕuClinux-Samsung-20020318.tar.gzˈ Џ ⱘ⫼ Ⳃ DŽ䖤㸠㾷 Ҹ˖tar xzvf uClinux-Samsung-250020318.tar.gz㾷 ↩ ˈ Ӯ ⫼ Ⳃ ϟ⫳ uClinux-SamsungⳂ ˈҹϟ Ҹ䖯 䆹Ⳃ Ё˖$cd uClinux-Samsung1.䬂 Ҹ˖make menuconfigḌ䜡㕂DŽ䆹 Ҹ 㸠 ↩ ⫳ ӊ.configˈ 䖭Ͼ䜡㕂 DŽϟϔ make menuconfigⱘ ѻ⫳ ⱘ.config ӊˈ ⱘ.config㹿 Ў.config.oldDŽℸ Ӯ ⦄㦰 䜡㕂 䆱Ḛˈ㽕∖䖯㸠Ⳃ ⱘ䗝 ˈ 7.6 ⼎ˈ䕧 䔺 ˈ ⦄կ䗝 ⱘ ԧⱘկ ѻ 㸼ˈ 䖭䞠 Ӏ䗝 ˖Samsung/4510Bˈ 7.7 ⼎ˈ ⱘ䗝 Ϟˈ Ӏ䗝 uC-libcˈ Ҫ䗝乍 ϡ⫼ ˈ 䆒㕂 ˈ Ⲭ䗔 DŽ7.6Ⳃ 䜡㕂7.7䗝 䗖ⱘѻ ㉏2ˊ䬂 Ҹ˖make dep䆹 Ҹ⫼Ѣ ձ ㋏DŽ3.䬂 Ҹ˖make clean䆹 Ҹ⏙䰸ҹ 䗴 Ḍ ⫳ ⱘ Ⳃ ӊˈ ӊ ϔѯЈ ӊDŽ4ˊ䬂 Ҹ˖make lib_only䆹 Ҹ㓪䆥 ӊDŽ5ˊ䬂 Ҹ˖make user_only䆹 Ҹ㓪䆥⫼ ⫼ ӊDŽ6ˊ䬂 Ҹ˖make romfs䆹 Ҹ⫳ romfs ӊ㋏㒳DŽ7ˊ䬂 Ҹ˖make image⊼ 䖭ϔℹⱘ 㛑Ӯ ⦄䫭䇃ⱘ ⼎ˈ㉏ԐѢ˖arm-elf-objcopy: /home/nie/uClinux-Samsung/linux-2.4.x/linux: No such file or directorymake[1]: *** [image] Error 1make[1]: Leaving directory `/home/nie/uClinux-Samsung/vendors/Samsung/4510B'make: *** [image] Error 2䖭 Ўϔ㓪䆥 䖬≵ romfs.oˈ ҹ 䫭ˈㄝromfs.o㓪䆥 њҹ ˈ 䖯㸠 Ḍⱘ㓪䆥ˈ ϡӮ ⦄䖭Ͼ䫭䇃 њDŽ ϡ Ḍⱘ㓪䆥ˈ ҹ ϡ ⧚Ӯ䖭Ͼ䫭䇃 DŽ㒻㓁䖯㸠㓪䆥 DŽ8ˊ䬂 Ҹ˖make䗮䖛 ϾⳂ ⱘMakefile ӊ䖯㸠ˈӮ Ⳃ ϟ⫳ ϔ Ⳃ ӊDŽϞ䗄ℹ偸 ˈ њ uClinux⑤ⷕⱘ㓪䆥 DŽ Ͼ㓪䆥䖛㾚䅵ㅫ 䖤㸠䗳 㗠 ˈ 㑺䳔㽕 䩳 DŽ㓪䆥 Ḍⱘ ˈ 䆂 Linux ϟ䖯㸠DŽ7.3.4 Ḍⱘ 䕑䖤㸠Ḍⱘ㓪䆥 П ˈӮ / uClinux-Samsung/imagesⳂ ϟⳟ ϸϾ Ḍ ӊ˖image.ram image.romˈ Ёˈ image.rom⚻ ROM/SRA M/FLA SH Bank0 ⱘFlash Ёˈ ㋏㒳 ԡ Ϟ⬉ ˈ Ḍ㞾㾷 SDRAMˈ 䖤㸠DŽimage.ram Ⳉ ㋏㒳ⱘSDRAMЁ䖤㸠ˈՓ⫼ADS˄ SDT˅䲚 ⦃ ㋏㒳ⱘSDRAM 䍋 Ў0x0 ˈ image.ram䕑 Ң0x8000 ⱘSDRAMЁˈ 䕑 ↩ ˈ PC 䩜 ⱘ Ў0x8000 㸠DŽ⊼ 䆹 Ḍ咬䅸І㸠 COM1Ў䕧 䕧 ˈ⊶⡍⥛Ў19200ˈ8Ͼ ԡˈ1Ͼ ℶԡˈ 偠DŽ7.4 uClinuxϟ ⫼њϞ䗄 ˈϔϾ ⫼ 㒣 њˈ 䖭Ͼ ПϞˈ ҹḍ ϡ 䳔㽕 ⫼њDŽ 7.8 ⼎ЎϔϾ ѢuClinuxⱘ ㋏㒳 Ḛ 㒧 ˈϟ䴶 䇏㗙ҟ㒡 ԩ 㞾 ⱘ ⫼ ⏏ Ⳃ Ϟ䖤㸠DŽ7.8 ѢuClinux ㋏㒳ḚѢuClinux㋏㒳ⱘ ⫼ ⱘ 䗮 Linux Ϟ( к 㒣ҟ㒡њ䗖⫼ѢWindows⦃ ⱘѸ 㓪䆥 ˈ ҹг ҹ Windows )⫼Ѹ 㓪䆥 DŽ⬅ѢuClinux Ў≵ ㅵ⧚ (MMU)ⱘ ⧚ 㗠䆒䅵ⱘˈ њ䕗 ⱘ㊒ㅔˈ ҹ 㛑 ⦄䖭ḋⱘ ˖ Linuxϟ ҹՓ⫼ⱘ ѯ uClinuxϟ ⫼ϡњˈ䖭Ͼ ˈ 䳔㽕⫼ 㓪 Ⳍ ⱘ њDŽ ✊㒱 ⱘ Ӏ䛑䖬 䗮⫼ⱘDŽ䰸ℸҹ ˈ x86⠜ ⱘgcc㓪䆥 ϟ㓪䆥䗮䖛ⱘ䕃ӊˈ䗮 ϡ䳔㽕 ⱘ ҹ⫼ Ӏ ゟⱘѸ 㓪䆥 㓪䆥 ҹ uClinuxϞ䖤㸠ⱘ ӊḐ DŽ ℸ uClinuxϟ䖤㸠ⱘ ˈ Ϟ Linuxϟ䖤㸠ⱘ ϔḋⱘˈ ѢLinuxϟⱘ㓪ˈ䇏㗙 ҹ 㗗 Ҫ 䆺㒚ⱘ䌘 ˈҹϟ ϔϾㅔ ⱘ՟ ˈ 䗄 䖛DŽ㗗㰥ϔϾ Ё ⱘ՟ ˈ ӊ Ўlednxy.cˈ ⑤ҷⷕ ϟ˖/******************************************************** Institute of Automation, Chinese Academy of Sciences* File Name˖lednxy.c* Description˖ timing interrupt* Author˖Xueyuan Nie* Date˖*******************************************************/#include <signal.h>#include <unistd.h>#define IOPMOD (*(volatile unsigned*)0x3ff5000)#define IOPDATA (*(volatile unsigned *)0x3ff5008)。