ARM&Linux嵌入式系统期末复习总结(个人整理自存)

写在前面:

以下材料均为个人从互联网各处整理而成,不保证所含信息完全正确,考点基于个人学校答疑课和相关考试资料总结,不保证考点和您的实际考点相吻合。

仅供学习分享,如需转载还请私信告知。

word版文档与相关资源有偿提供,白嫖党绕道。

注:本笔记应配合北京航空航天大学出版社ARM&Linux嵌入式系统教程(第三版)使用!!

目录

写在前面

第一章 嵌入式系统基础

第二章 嵌入式系统开发过程

第三章 嵌入式Linux和Android操作系统

第四章 ARM体系结构

第五章 嵌入式Linux应用程序开发

第六章 嵌入式Linux驱动程序开发

第七章 嵌入式Linux的Gui


第一章 嵌入式系统基础

  1. ·什么是嵌入式系统                                                                                  p1
  2. 嵌入式处理器的分类,各自特点                                                             p8
  3. 进程和线程                                                                                              p15
  4. 实时系统的调度算法有哪些,各自什么特点,适用与什么情况               p27

特点:

基于优先级的调度算法:

非抢占式调度:简单易实现,适用于任务数量较少,对实时性要求不高的情况。

抢占式调度:可以保证高优先级任务及时响应,但实现较为复杂,可能会引起上下文切换开销。

同一优先级的时间轮转调度算法:

可以避免低优先级任务长时间无法得到执行的情况,提高了任务的响应时间。

时间片长度的选择需要权衡任务切换的开销和响应时间的折中考虑。

单调速率调度算法:

确定性强,不存在饥饿和死锁的情况,可以保证任务的可靠性。

可能存在负载不均衡的问题,因此需要进行负载平衡处理。

适用于:

基于优先级的调度算法:

非抢占式调度:适用于任务的响应时间要求不高,且任务数量相对较少的情况。

抢占式调度:适用于强实时性系统,在保证高优先级任务及时响应的同时,还可以尽可能地保证其他任务的执行效率。

同一优先级的时间轮转调度算法:

适用于多个同一优先级的任务需要周期性轮询执行的情况。可以避免低优先级任务等待过长时间无法得到执行的情况,提高了任务的响应时间。

单调速率调度算法:

适用于周期性任务数量相对较多,各任务间存在明确的截止期限,并且需要使得所有任务都能够按时得到执行的情况。该算法不会出现任何饥饿和死锁情况,可以保证任务的可靠性。

第二章 嵌入式系统开发过程

  1. 嵌入式开发特点                                                                                       p35
  2. 嵌入式软件开发特点                                                                                p35-36
  3. 嵌入式软件开发过程                                                                                p37-43
  4. 嵌入式调试方法                                                                                       p46
  5. BSP                                                                                                         p47

第三章 嵌入式Linux和Android操作系统

  1. Linux的特点                                                                                             p55-56
  2. Linux采用模块化的优缺点                                                                       p256 p61
  3. Linux采用单一内核结构的原因                                                                p59
  4. Linux的设备独立性                                                                                  p55
  5. Linux的进程族系关系                                                                               p64
  6. 进程的定义和状态转换                                                                            p15 p62
  7. Linux的文件系统                                                                                     p68
  8. Flash存储器的特点                                                                                  p69

第四章 ARM体系结构

  1. arm特点                                                                                                   p101
  2. arm处理器的7种工作方式                                                                        p128
  3. jtag的各个引脚功能                                                                                  p113
  4. 哈佛结构,冯结构,流水线级数的意义                                                    p107 p117
  5. 大端小端系统                                                                                           p137
  6. 堆栈的四种类型                                                                                       p141
  7. 通用寄存器,真正通用寄存器                                                                  p129
  8. Cpsr和spsr中各个位的意义                                                                     p131
  9. Arm中常用指令  数据块传输与堆栈传送数据                                          p142
  10. arm指令的第二操作数类型第二操作数的限制                                             p151

在ARM指令中,第二操作数可以是一个立即数、一个寄存器中的值、一个移位后的寄存器中的值或者一个寄存器中的值与移位后的立即数的组合。

不同ARM架构版本对第二操作数的限制略有不同,以下是一些常见的限制:

立即数的范围:在32位的ARM指令中,立即数的范围通常是±0到±2^8-1或者±0到±2^12-1。在64位的ARM指令中,立即数的范围为±0到±2^21-1。

移位的类型和范围:移位操作可以是逻辑左/右移、算术左移、循环左移等,不同操作类型的移位的范围和产生的结果也不同。例如,在32位的ARM指令中,逻辑右移可以移位0~31位,但算术右移只能移位1~32位。

寄存器的使用:第二操作数可以是一个寄存器中的值或者移位后的寄存器中的值,但不能是两个寄存器中的值的组合。

操作数的类型:指令中规定了每个操作数的类型,如整数、浮点数或向量,而且大小和格式也受到限制。

总之,在编写ARM汇编程序时,需要根据具体指令的要求和ARM架构版本的限制来选择和处理第二操作数,以确保指令正确执行。

第五章 嵌入式Linux应用程序开发

  1. Linux常用命令 mount unmount命令                                                      p191 p198
  2. Vi编辑器 p199 gcc编译器的功能,p203常用参数,p205 GDB调试器的作用,和gcc的关系

GDB是一种功能强大的调试器,可以帮助程序员在开发过程中找出程序中的错误和问题。具体来说,GDB可以帮助程序员进行以下几个方面的调试工作:

跟踪程序的执行过程:GDB可以帮助程序员跟踪程序的运行过程,包括断点调试、单步执行、快速向前/向后执行、查看堆栈信息等。

查看变量的值:GDB可以帮助程序员查看变量的值,并对其进行修改、赋值等操作。

分析程序的崩溃信息:GDB可以帮助程序员分析程序的错误信息,如段错误、内存泄漏等,并定位错误的位置和原因。

支持多种编程语言:除了C/C++语言之外,GDB还支持多种编程语言,如Python、Java等。

而GCC是一个编译器集合,可以将高级语言源代码翻译成机器码。在开发过程中,程序员通常会使用GCC将源代码编译成可执行文件,然后使用GDB调试器对该可执行文件进行调试。

GDB调试器和GCC编译器是密切相关的,在程序运行时,GCC编译器会把调试信息加入到可执行文件中,而GDB调试器则可以使用这些调试信息来进行调试工作,例如定位变量、函数、指令等位置。因此,可以说GCC编译器产生了GDB调试器所需的信息,而GDB调试器则使用这些信息来进行调试工作。

  1. Make的功能,makefile文件包含的内容,会写makefile文件                     p262   p201  

Make是一个非常常用的构建工具,可以自动化执行编译、链接等操作。Make通常使用makefile文件来描述项目的各个组成部分,包括源代码文件、库文件、头文件等,以及这些文件之间的依赖关系和编译规则。Make会根据这些信息来自动执行编译、链接等操作,从而生成可执行文件或者库文件。

makefile文件通常包括以下几个部分:

宏定义:这部分定义了一些宏变量,用于简化后续的编写过程。例如可以定义编译器、链接器等工具的路径,以及编译选项、链接选项等等。

目标描述:这部分定义了每个目标(可执行文件、库文件等)的名称、依赖项以及生成规则。在这个部分中,我们需要指定该目标所需要的源代码文件、库文件、头文件等,以及如何编译这些文件。需要注意的是,在描述目标之前需要先定义其所依赖的其他目标,确保可以正确地进行编译和链接。

自定义规则:这些规则用于自定义一些编译和链接过程中的操作,例如清除目标文件、生成文档等等。

特殊变量:这些变量用于指定一些特殊的内容,如源代码文件的后缀名、编译器的命令等。

通过makefile文件,我们可以指定整个项目的编译和链接过程,使得构建工具可以自动化地进行这些操作。这可以大大简化开发过程,并使得整个项目的维护更加容易。

  1. Framebuffer的定义 功能 使用                                                                       p211

Framebuffer即帧缓冲,它是一种在图形显示领域中广泛使用的技术。它是一块内存区域,用于保存屏幕上每个像素的信息,包括颜色、透明度等。因此,通过对该内存区域的读写可以实现屏幕上的图形渲染和显示。

Framebuffer的主要功能可以总结为以下几点:

图形渲染:Framebuffer提供了一个图形操作的接口,程序可以将图像数据以特定格式写入到内存区域中,从而实现图形渲染的功能。

屏幕显示:Framebuffer通过将内存中的图像数据传输到显示设备上,实现了屏幕显示的功能。当图像数据更新时,Framebuffer会自动更新对应的屏幕区域。

多平台支持:由于Framebuffer是一种硬件无关的技术,它可以在多种不同的平台和系统上使用,包括嵌入式设备、PC、手机等。

更高的性能:与传统的软件渲染方式相比,Framebuffer直接在显卡硬件上进行操作,因此具有更高的性能和更低的延迟。

Framebuffer的使用非常广泛,特别是在Linux嵌入式系统中,由于其稳定性和良好的硬件适配性,它被广泛应用于嵌入式系统的图形界面开发中。例如,在Linux下桌面环境(如X Window)和各种嵌入式窗口管理器(如QT、GTK)中,Framebuffer都是常用的图形渲染技术。此外,Framebuffer还可以用于游戏制作、数字媒体处理等领域。

第六章 嵌入式Linux驱动程序开发

  1. 驱动程序的功能                                                                                             p249
  2. 字符设备和块设备的区别                                                                              p260?

字符设备和块设备是Linux内核中两种不同类型的设备。它们在物理设备和应用程序之间提供了接口,以实现数据传输等功能。这两种设备的主要区别在于以下几点:

设备操作的大小:字符设备是按字符流来操作设备(像终端、串口、键盘等),所以每次读取或写入的数据大小是一个字符;而块设备是按固定大小的数据块来操作设备(像硬盘、USB存储设备等),每次读取或写入的数据大小是一个或多个块。

数据读写方式:字符设备的数据读写是通过输入输出流进行的,在读取时可能会阻塞直到有足够的数据可读;而块设备的数据读写是通过缓冲区进行的,通常不会阻塞。

设备驱动程序的实现方式:字符设备的驱动程序通常是通过相应的系统调用来实现,如read() 和 write();而块设备驱动程序的实现通常是通过内存映射方式实现的,如 mmap()。

设备访问方式:字符设备可以通过终端或串口等字符形式的接口进行交互;而块设备则常常通过文件系统的方式来访问,例如通过/dev/sda或/dev/hda等设备文件来进行访问。

总体而言,字符设备和块设备在应用场景和使用方式上有较大的差异。因此,在Linux内核中,针对不同的设备类型,需要使用不同的驱动程序进行管理和控制。

  1. 编写驱动程序 如何向系统申请中断和内存                                                  p252-253
  2. 会向内核添加硬件设备驱动程序                                                                  p264

第七章 嵌入式Linux的Gui

  1. 现代gui的特点                                                                                             p293
  2. 嵌入式gui的特点                                                                                         p295 p299

轻型,占用资源少。嵌入式GUI要求是轻量型的,这主要是受限于嵌入式硬件资源。

可配置。由于嵌入式设备的可定制性,要求相应的GUI系统也是可以定制的,所以嵌入式GUI一般都具有可裁剪性。

高性能。耗用系统资源较少,能在硬件性能受限的情况下、尤其是CPU资源较少的情况下达到相对较快的系统响应速度,同时减少能源消耗。

高可靠性。系统独立,能适用于不同的硬件,在高性能的同时保证高可靠性。

  1. Minigui的有哪些特征                                                                                   p295
1、 ARM微处理器有 7种工作模式,它们分为两类 非特权模式 、 特权模式 。其中用户模式属于 非特权模式 2、 ARM支持两个指令集, ARM核因运行的指令集不同,分别有两个状态 ARM 、 Thumb ,状态寄存器CPSR的 T 位反映了处理器运行不同指令的当前状态 3、 ARM核有多个寄存器,其中大部分用于通用寄存器,有小部分作为专用寄存器, R15 寄存器用于存储PC,R13通常用来存储 SP 4、 ARM处理器有两种总线架构,数据和指令使用同一接口的是 冯诺依曼 ,数据和指令分开使用不同接口的是 哈佛结构 1. 下列不是嵌入式系统特点的是: A. 系统内核小 B. 专用性强 C. 系统精简 D. 实时性要求不高 2. 关于ARM汇编和C语言混合编程下列错误的是: A.C语言中可以直接嵌入某些汇编指令 B. C语言中可以调用汇编的子程序 C. 汇编程序中可以调用C语言的函数 D. C语言嵌入的汇编指令时,不可以使用C的变量 3. 关于ATPCS规则,说法错误的是: A. 只能使用R0-R3来传递参数 B. R13为堆栈指针SP,需要保护 C. R14为连接寄存器,用于存放程序返回地址 D. 单字的返回值存放在R0 4. 关于交叉编译描述正确的是: A. 编译器运行在目标机,生成的可执行文件在宿主机上运行 B.编译器运行在宿主机,生成的可执行文件在宿主机上运行 C.编译器运行在目标机,生成的可执行文件在目标机上运行 D.编译器运行在宿主机,生成的可执行文件在目标机上运行 5. 建立嵌入式Linux开发环境中,使用Bootp协议的直接目的是: A. 分配宿主机的IP地址 B. 分配目标机的IP地址 C. 用于宿主机和目标机之间通讯 D. 用于监控目标机的运行。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Draina

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值