嵌入式复习思考题详解(金凤整理)

更新时间:2023-11-22 16:36:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

《嵌入式系统原理及应用》复习思考题详解

——11通信 梁锦锋 2014/5/16 首发

前言:本复习思考题详解专门针对2014年春季学期老师上传的思考题做了详细解答,主要补全了前五道大题,后面的答案是copy往届师兄整理的答案的(本人也做了部分修正),若此复习资料有误,欢迎大家修改更新,祝大家考个好成绩。

一、 基本概念:嵌入式系统的定义,组成,分类, RISC,CISC, 嵌入式操作系统,流行的嵌入式

操作系统,嵌入式系统的架构.嵌入式系统的开发流程.

定义:嵌入式系统是以应用为中心,以计算机技术为基础,软硬件能灵活变化以适应所嵌入的应用系统。对功能、可靠性、成本、体积、功耗等有严格要求的专用计算机系统。 组成:嵌入式处理器、外围设备、嵌入式操作系统、应用软件 分类:嵌入式微控制器(MCU)、嵌入式DSP处理器(DSP)、嵌入式微处理器(MPU)、嵌入式片上系统(System On Chip)(ps:在课本上这是嵌入式处理器的分类) RISC:精简指令集(Reduced Instruction Set Computer) CISC:复杂指令集(Complex Instruction Set Computer)

嵌入式操作系统包括嵌入式内核、嵌入式TCP/IP网络系统、嵌入式文件系统、嵌入式GUI系统和电源管理等部分;

流行的嵌入式操作系统: VxWorks , μC/OS和μC/OS-Ⅱ,Windows CE , 嵌入式Linux,Palm OS , QNX , Delta OS,Hopen OS,pSOS 嵌入式系统的开发流程:(P35)1. 需求分析阶段:(1)对问题的识别和分析(2)制定规格说明文档(3)需求评审 2. 设计阶段:(1)数据流分析(2)划分任务(3)定义任务间的接口 3. 生成代码阶段:(1)代码编程(2)交叉编译和链接(3)交叉调试(4)测试 4. 固化阶段 5. 嵌入式软件开发的要点:(1)尽量用高级语言开发,少用汇编语言开发(2)局域化不可移植部分(3)提高软件的可重用性

二、 ARM体系架构 ,ARM的工作模式 ARM的异常 ,ARM的存储方式(大端、小端),

异常的优先级,异常的响应过程,异常的返回过程。

ARM体系架构 :请看课本P49和课件【03-00、ARM微处理器体系结构.ppt】 ARM的工作模式: 处理器模式 用户(ser) 系统 (sys) 说明 正常程序执行模式 备注 不能直接切换到其它模式 与用户模式类似,但具有可以直接切换到其它模式等特权 FIQ异常响应时进入此模式 IRQ异常响应时进入此模式 运行操作系统的特权任务 快中断(fiq) 中断 (irq) 支持高速数据传输及通道处理 用于通用中断处理 管理 (svc) 中止 (abt) 未定义 (und) 操作系统保护模式 用于支持虚拟内存和/或存储器保护 支持硬件协处理器的软件仿真 系统复位和软件中断响应时进入此模式 在ARM7TDMI没有大用处 未定义指令异常响应时进入此模式

ARM的异常:两类:同步异常(由内部事件(如处理器指令运行产生的事件)引起的异常)和异步异常(由外部事件(如处理器指令执行不相关的事件)引起的异常,又称为中断) 异常可分成四类 类别 中断 陷井 故障 终止 原因 异步/同步 异步 同步 同步 同步 返回行为 总是返回到下一条指令 总是返回到下一条指令 可能返回到当前指令 不会返回 来自I/O设备的信号 有意的异常 潜在可恢复的错误 不可恢复的错误 ARM的存储方式:(示例:0x01234567) 大端模式

字数据的高位字节存储在低地址中 字数据的低字节则存放在高地址中 地址 0x8000 0x8001 数据(16进制表示) 0x01 0x23 数据(二进制表示) 00000001 00100011 小端模式

低地址中存放字数据的低字节 高地址中存放字数据的高字节 地址 0x8000 0x8001 数据(16进制表示) 0x67 0x45 数据(二进制表示) 01100111 01000101 异常优先级: 优先级 1(最高) 2 3 4 5 6(最低) 0x8002 0x45 01000101 0x8003 0x67 01100111

0x8002 0x23 00100011 异常 复位(Reset) 0x8003

0x01 00000001

数据中止(Data abort) FIQ IRQ 预取中止(Prefetch abort) 未定义指令、SWI(Software interrupt) 异常的响应过程:当异常产生时, ARM core: 拷贝 CPSR 到 SPSR_ 设置适当的 CPSR 位: 改变处理器状态进入 ARM 态、改变处理器模式进入相应的异常模式、设置中断禁止位禁止相应中断 (如需要) 保存返回地址到 LR_ 设置 PC 为相应的异常向量

异常的返回过程:返回时, 异常处理需要: 从 SPSR_恢复CPSR 从LR_恢复PC

Note:这些操作只能在 ARM 态执行.

三、 ARM的寻址方式,立即数寻址,寄存器寻址,寄存器移位寻址,机制寻址(自动索

引的基址寻址,前索引基址寻址和后索引基址寻址),多寄存器寻址,堆栈寻址。 ARM的寻址方式: 1.寄存器寻址: ADD R0,R1,R2 ;R0←R1+R2 2.立即寻址: ADD R3,R3#1 ;R3←R3+1

ADD R8,R7,#0xff ;R8←R7[7:0](R7的32位值与0xFFH相 “与”,结果为将R7的低8位送到R8中)

3.寄存器移位寻址: ADD R3,R2,R1,LSL #3 ;R3←R2+8×R1 4.寄存器间接寻址: LDR R0,[R1] ;R0←[R1]

STR R0,[R1] ;R0→[R1]

5.基址寻址(基址变址寻址): LDR R0,[R1,#4] ;R0←[R1+4] (前索引寻址)

LDR R0,[R1,#4]! ;R0←[R1+4]

;R1←R1+4 (带自动索引的前索引寻址)

(“!”符号表示指令在完成数据传送后应该更新基址寄存器。ARM的这种自动索引不消耗额外的时间)

;R0←[R1]

;R1←R1+4 (后索引寻址)

LDR R0,[R1+R2] ;R0←[R1+R2] (基址加索引寻址)

6.多寄存器寻址: LDMIA R1,{R0,R2,R5} ;R0←[R1]

;R2←[R11+4] ;R5←[R1+8]

7.堆栈寻址:堆栈是用于保存数据的一段连续内存,按一定顺序(后进先出(LIFO)或先进后出(FILO))进行存取。堆栈的访问是通过堆栈指针(SP)指向的存储区域来实现的。 存储器堆栈可分为两种:

向上增长(Ascending Stack): 访问存储器时,存储器地址向高地址方向增长。 向下增长(Descending Stack):访问存储器时,存储器地址向低地址方向增长。 满堆栈(Full Stack):SP指向最后入栈的数据或第一个要读出的数据

空堆栈(Empty Stack):SP指向最后入栈的数据的上一个或下一个空位置 堆栈有4种形式

FA 满递增:堆栈地址向上增长,SP指向第一个要读出的数据 EA 空递增:堆栈地址向上增长,SP指向上一个空位置

FD 满递减:堆栈地址向下增长,SP指向第一个要读出的数据 ED 空递减:堆栈地址向下增长, SP指向下一个空位置 8..块拷贝寻址/块复制寻址:P78 9.相对寻址:P79

四、 ARM的指令,数据处理指令:算数、逻辑、比较和乘法指令;存储器的操作指令

LDR/STR; 跳转指令B,BL,BX;程序状态寄存器传输指令:MRS/MSR; 异常中断指令:SWI,协处理器指令。 1)ARM的指令——数据处理指令 算数:

LDR R0,[R1],#4

序号 1 2 3 4 5 6 助记符 ADD Rd, Rn, operand2 SUB Rd, Rn, operand2 RSB Rd, Rn, operand2 ADC Rd, Rn, operand2 SBC Rd, Rn, operand2 RSC Rd, Rn, operand2 说胆 加法运算指令 减法运算指令 逆向减法指令 带进位加法 带进位减法指令 带进位逆向减法指令 操作 Rd←Rn+operand2 Rd←Rn-operand2 Rd←operand2-Rn Rd←Rn+operand2+Carry Rd←Rn-operand2-(NOT)Carry Rd←operand2-Rn-(NOT)Carry 条件码位置 ADD{cond}{S} SUB{cond}{S} RSB{cond}{S} ADC{cond}{S} SBC{cond}{S} RSC{cond}{S}

示例:1、 2、 3、 4、 5、 6、 逻辑运算: 序号 7 8 9 10 助记符 ADDS R1,R1,#1 ;R1R1+1, CPSR C,N,Z,V ADD R1,R1,R2 ;R1R1+R2 SUBS R0,R0,#1 ;R0R0-1 ,影响 CPSR SUBS R2,R1,R2 ;R2R1-R2 ,影响CPSR RSB R3,R1,#0xFF00 ;R30xFF00-R1 RSBS R1,R2,R3,LSL #2 ;R1R3*4-R2

ADCS R0,R0,R2 R0R)+R2+Carry ,影响CPRS ADC R1,R1,R3 R1R1+R3 SUBS R0,R0,R2 SBC R1,R1,R3 RSBS R2,R0,#0 RSC R3,R1,#0

说胆 操作 条件码位置 AND Rd, Rn, operand2 逻辑与操作指令 ORR Rd, Rn, operand2 逻辑或操作指令 EOR Rd, Rn, operand2 逻辑异或操作指令 BIC Rd, Rn, operand2 位清除指令

示例: 7、 ANDS R0,R0,#0x01 AND R2,R1,R3 9、EOR R1,R1,#0x0F EOR R2,R1,R0 EORS R0,R5,#0x01 比较指令: Rd←Rn & operand2 Rd←Rn | operand2 Rd←Rn ^ operand2 Rd←Rn & (~operand2) AND{cond}{S} ORR{cond}{S} EOR{cond}{S} BIC{cond}{S} 8、 ORR R0,R0,#0x0F MOV R1,R2,LSR #24 ORR R3,R1,R3,LSL #8

10、BIC R1,R1,#0x0F ;将低4位清零 BIC R1,R2,R3

操作 条件码位置 序号 11 12 13 14 助记符 说胆 CMP Rn, operand2 CMN Rn, operand2 TST Rn, operand2 TEQ Rn, operand2 示例:

11、 CMP CMP 12、 CMN 乘法指令:

比较指令 位测试指令 标志N、Z、C、V←Rn-operand2 CMP{cond} 标志N、Z、C、V←Rn & operand2 TST{cond} 负数比较指令 标志N、Z、C、V←Rn+operand2 CMN{cond} 相等测试指令 标志N、Z、C、V←Rn ^ operand2 TEQ{cond}

R1,#10 ; R1-10 ,影响CPRS z,n,c,v

R1,R2 ; R1-R2, 影响CPRS z,n,c,v R0,#1 14、TEQ R0,R1

序号 15 16 17 18 19 20 助记符 MUL Rd,Rm,Rs MLA Rd,Rm,Rs,Rn 说胆 32位乘法指令 32位乘加指令 操作 Rd←Rm*Rs (Rd≠Rm) Rd←Rm*Rs+Rn (Rd≠Rm) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) (RdLo,RdHi) ←Rm*Rs (RdLo,RdHi) ←Rm*Rs+(RdLo,RdHi) 条件码位置 MUL{cond}{S} MLA{cond}{S} UMULL{cond}{S} UMLAL{cond}{S} SMULL{cond}{S} SMLAL{cond}{S} UMULL RdLo,RdHi,Rm,Rs 64位无符号乘法指令 UMLAL RdLo,RdHi,Rm,Rs SMULL RdLo,RdHi,Rm,Rs SMLAL RdLo,RdHi,Rm,Rs 64位无符号乘加指令 64位有符号乘法指令 64位有符号乘加指令 示例:15、 MUL R1,R2,R3 ; R1R2*R3 MULS R0,R3,R7 ; R0<--R3*R7 , 影响CPRS 16、 MLA R1,R2,R3,R0 ; R1R2*R3+R0 17、 UMULL R0,R1,R5,R8 18、 UMLAL R0,R1,R5,R8 19、 UMLAL R0,R1,R5,R8 20、 UMLAL R0,R1,R5,R8 2)存储器的操作指令LDR/STR

LDR和STR——加载/存储指令,根据指令的寻址方式不同,可以分为以下三类: 1、立即数偏移寻址; 格式: LDR Rd,[Rn,#immed_5×4] ;加载内存中的字数据到寄存器Rd中

STR Rd,[Rn,#immed_5×4] ;将Rd中的字数据存储到指定地址的内存中

LDRH Rd,[Rn,#immed_5×2] ;加载内存中的半字数据到寄存器Rd的低16位中 STRH Rd,[Rn,#immed_5×2] ;存储Rd中的低16位半字数据到指定的内存单元 LDRB Rd,[Rn,#immed_5×1] ;加载内存中的字节数据到寄存器Rd中

STRB Rd,[Rn,#immed_5×1] ;存储Rd中的低8位字节数据到指定的内存单元

其中:Rd 表示加载或存储的寄存器。必须为R0~R7。 Rn 表示基址寄存器。必须为R0~R7。

immed_5×N 表示立即数偏移量,其取值范围为(0~31)×N。 示例: LDR R0,[R1,#0x4] STR R3,[R4] LDRH R5,[R0,#0x02] STRH R1,[R0,#0x08] LDRB R3,[R6,#20] STRB R1,[R0,#31] 2、寄存器偏移寻址; 格式: LDR Rd,[Rn,Rm] ;加载一个字数据

STR Rd,[Rn,Rm] ;存储一个字数据

LDRH Rd,[Rn,Rm] ;加载一个无符号半字数据 STRH Rd,[Rn,Rm] ;存储一个无符号半字数据 LDRB Rd,[Rn,Rm] ;加载一个无符号字节数据 STRB Rd,[Rn,Rm] ;存储一个无符号字节数据 LDRSH Rd,[Rn,Rm] ;加载一个有符号半字数据 LDRSB Rd,[Rn,Rm] ;存储一个有符号字节数据

其中:Rd 表示加载或存储的寄存器。必须为R0~R7。 Rn 表示基址寄存器。必须为R0~R7。

Rm 表示内含数偏移量的寄存器,必须为R0~R7 。

示例: LDR R3,[R1,R0] STR R1,[R0,R2]

LDRH R6,[R0,R1] STRH R0,[R4,R5] LDRB R2,[R5,R1] STRB R1,[R3,R2] LDRSH R7,[R6,R3] LDRSB R5,[R7,R2] 3、 PC或SP相对偏移寻址; 格式: LDR Rd,[PC,#immed_8×4]

LDR Rd,label LDR Rd,[SP,#immed_8×4] STR Rd,[SP,#immed_8×4]

其中:Rd 表示加载或存储的寄存器。必须为R0~R7。

immed_8×4 表示偏移量,取值范围是(0~255)×4 。

label 表示程序相对偏移表达式,Label必须在当前指令之后的1KB范围内。 示例: LDR R0,[PC,#0x08] ;读取PC+0x08地址上的字数据, ;保存到R0中 LDR R7,LOCALDAT ;读取LOCALDAT地址上的 ;字数据,保存到R7中 LDR R3,[SP,#1020] ; 读取SP+1020地址上的字数据, ;保存到R3中 STR R2,[SP] ; 存储R2寄存器的数据到SP ;指向的存储单元 (偏移量为0)

注意:以PC作为基地址的相对偏移寻址指令只有LDR,而没有STR指令。 4)跳转指令B,BL,BX (label为程序相对领衔表达式) 序号 1 2 3 助记符 说胆 操作 条件码位置 B label BL label BX Rm 分支指令 带链接的分支指令 带状态切换的分支指令 PC←label LR←PC-4,PC←label PC←label,切换处理器状态 B{cond} BL{cond} BX{cond} 应用示例:B WAITA B 0x1234 BX R0 ? B(Branch)指令引起处理器转移到label

? BL(Branch and Link)指令将下一条指令的地址拷贝到R14(LR,链接寄存器),并引起

转移到label

? 执行BX(Branch and optionally eXchange)指令将引起处理器转移到Rm中的地址。Rm的

位[0]为1,则指令集变换到Thumb。

(还不懂请看书本P92和PPT)

5)程序状态寄存器传输指令:MRS/MSR;(课本P95&PPT的P73)

MRS:在ARM处理器中,只有MRS指令可以对状态寄存器CPSR和SPSR进行读操作。通过读CPSR可以了解当前处理器的工作状态。读SPSR寄存器可以了解到进入异常前的处理器状态。

MRS指令格式: MRS{cond} Rd,psr 应用示例: MRS R1,CPSR MRS R2,SPSR

MSR:在ARM处理器中,只有MSR指令可以对状态寄存器CPSR和SPSR进行写操作。与MRS配合使用,可以实现对CPSR或SPSR寄存器的读-修改-写操作,可以切换处理器模式、或者允许/禁止IRQ/FIQ中断等。

6)异常中断指令:SWI (课本P94,PPT的P70) SWI指令传递参数有以下两种方法:

? 指令中的24位立即数指定了用户请求的服务 MOV R0,#34 类型,参数通过通用寄存器传递。 SWI 12 ? 指令中的24位立即数被忽略,用户请求的服务类型 MOV R0,#12 由寄存器R0的值决定,参数通过其它的通用寄存器传递。 MOV R1,#34 SWI 0 在SWI异常中断处理程序中,取出SWI指令中立即数的步骤为:

首先确定引起软中断的SWI指令是ARM指令还是Thumb指令,这可通过对SPSR访问得到; 然后取得该SWI指令的地址,这可通过访问LR寄存器得到; 接着读出该SWI指令,分解出立即数。

7)协处理器指令。(课本P94)

(1)CDP (2)MCR和MCRR (3)MRC和MRRC (4)LDC和STC (PS:4)5)6)7)建议大家看课本和PPT,内容太多了不知道怎么简化啊....)

五、 C语言与汇编语言混合编程 ,寄存器使用规则,数据栈使用规则,参数传递使用规

则。

在C程序和ARM汇编程序之间相互调用时必须遵守ATPCS规则。ATPCS规定了一些子程序间调用的基本规则,比如: 寄存器的使用规则

子程序之间通过寄存器r0~r3来传递参数,当参数个数多于4个时,使用堆栈来传递参数。 在子程序中,使用寄存器r4~r11保存局部变量。

寄存器r12用于保存堆栈指针SP,当子程序返回时使用该寄存器出栈,记作IP。寄存器r13用作堆栈指针,记作SP。寄存器r14称为链接寄存器,记作LR。该寄存器用于保存子程序的返回地址。寄存器r15称为程序计数器,记作PC。 堆栈的使用规则

堆栈采用满递减类型(FD,Full Descending),即堆栈通过减小存储器地址而向下增长,堆栈指针指向内含有效数据项的最低地址。 参数的传递规则

整数参数的前4个使用r0~r3传递,其他参数使用堆栈传递;浮点参数使用编号最小且能够满足需要的一组连续的FP寄存器传递参数

子程序的返回结果为一个32位整数时,通过r0返回;返回结果为一个64位整数时,通过r0和r1返回;依此类推。结果为浮点数时,通过浮点运算部件的寄存器F0、D0或S0返回

六、 嵌入式Linux的开发基础

1. 基本操作 mkdir rmdir cd pwd cp rm mv file echo ifconfig ping

tar | < >

mkdir 建立新目录 rmdir 删除空目录 cd改变当前路径 pwd显示当前路径 cp 复制文件或目录 rm 删除文件或目录 mv 移动或更改文件、目录名称 file 查看文件类型 echo 是在显示器上显示一段文字

ifconfig 是查看网卡的信息 ping 连续发送回送信号请求直到接收到中断信号 tar 打包 | 管道符,一个命令的输出通过一个“管道”作为另一个命令的输入 < 重定向输入 > 重定向输出

2. 编辑器Vim 三种命令方式

a) 命令行模式(编辑模式) b) 插入模式

c) 底行模式(末行模式)

然后那些vi基本命令做过实验就应该会很清楚的了。

3. Gcc编译器 C程序的编译步骤

编译器的gcc的编译流程分为4个步骤

预处理: pre-processing 将.h文件插入到源文件中 .i

编译: compiling 检查代码的规范性,语法,检查无误后,代码翻译成汇编语言 .s 汇编: assembing .s 文件转换成目标代码 .o

链接: Linking 把函数库链接到文件中生成可执行文件 gcc 一般的格式为

gcc [选项] 文件名 [选项] [目标文件]

如:

gcc –E hello.c –o hello.i 预编译 (头文件包含进来) gcc –S hello.i –o hello.s 编译 (成为汇编语言) gcc –c hello.s –o hello.o 汇编 (二进制代码) gcc hello.o –o hello 链接 (库函数) 而我们通常一条命令搞定:gcc hello.c –o hello 程序运行 ./hello

4. Makefile 脚本编写 格式,

5. 进程的概念,进程的状态 ,线程的概念,线程与进程的区别

进程是一个程序的一次执行的过程,进程是一个动态的概念,包括动态创建、调度和消亡的整个过程。它是程序执行和资源管理的最小单位。

进程的状态:执行态、等待态、停止态、僵尸态(课本是运行态就绪态挂起态休眠态P22) 并发执行的进程具有两个基本的属性:

(1)进程既是一个拥有资源的独立单位,它可独立分配虚地址空间、主存和其它系统资源; (2)进程又是一个可独立调度和分派的基本单位。 为了区分两个属性,资源拥有单元称为进程(或任务),调度的单位称为线程。 每个线程有一个线程ID 线程ID和进程ID的区别:

进程ID在整个系统中是唯一的,但线程ID只在它所属的进程环境中有效

进程是程序执行时的一个实例,即它是程序已经执行到课中程度的数据结构的汇集。从内核的观点看,进程的目的就是担当分配系统资源(CPU时间、内存等)的基本单位。 线程是进程的一个执行流,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。一个进程由几个线程组成(拥有很多相对独立的执行流的用户程序共享应用程序的大部分数据结构),线程与同属一个进程的其他的线程共享进程所拥有的全部资源。

区别:进程有独立的地址空间,线程没有单独的地址空间(同一进程内的线程共享进程的地址空间)

七、 开发环境的建立

1. ARM与宿主机的通信: 串口通信,以太网通信 ,nfs ,tftp,

串口通信:PC-Linux ——minicom ;PC-win——超级终端 NFS:(保证PC与linux开发板处于同一网段) PC-linux:

a) 关闭防火墙

b) setup 选择stem services , 设置 [*]nfs

c) 在/etc/exports文件中输入这样一行 /XXX(共享目录,如/arm2410cl/ exp) *(rw) d) 启动NFS服务service nfs restart 开发板:挂载

#mount 192.168.1.10(PC-linux的IP):/arm2410cl/exp /mnt 查看 /mnt 下的内容 # ls /mnt 卸载 #umount /mnt

2. 交叉编译环境 :arm-linux-gcc 工具的装载与配置

交叉编译环境,指的是你在PC的操作系统上编译ARM上能运行的程序的编译环境。其中GCC的交叉编译器命令由gcc变成arm-linux-gcc

3. Bootloader的启动流程

Stage1:1、硬件设备初始化为加载2、BootLoader的stage2准备RAM空间3、拷贝BootLoader的stage2到RAM空间中4、设置好堆栈5、跳转到stage2的C入口点 Stage2:1、初始化本阶段要使用到的硬件设备2、检测系统内存映射(memory map) 3、将kernel映像和根文件系统映像从flash上读到RAM空间中4、为内核设置启动参数4、调用内核

4. ARM-linux的移植

Linux内核从配置到安装大致有如下步骤:

配置内核:make menuconfig 建立依赖关系:make dep编译内核:make 或 make zImage 编译内核模块:make modules[make menuconfig 配置中选M的选项,可动态加载到arm板中] 安装内核模块:make modules_install 安装内核:make install 其中配置内核,在选择相应的配置时,有三种选择方式:

* -将该功能编译进内核 -不将该功能编译进内核

M -将该功能编译成可以在需要时动态插入到内核中的模块[用make modules命令]

一般步骤:

编译内核的步骤:

a) 下载内核源码

b) 修改内核目录树根下的的Makefile,指明交叉编译器 c) 设置环境变量

d) 配置内核产生.config文件

e) 输入内核配置命令(make menuconfig),进行内核选项的选择 f) 编译内核

g) 下载Linux内核[通过VIVI下载内核]

5. 根文件系统的建立

根文件系统是Linux内核启动后挂接的文件系统。它包含内核可能需要使用的文件和可能使用的文件和可执行文件,还有用于系统管理的可执行文件。Linux内核在启动的时候将挂接根文件系统。挂接完后,Linux将拥有根文件系统的目录结构,此时,Linux可以执行根文件系统的二进制代码,如shell程序等。Linux还可以将其他的文件系统

挂接到根目录的某个目录中。

八、 嵌入式设备驱动

1. 设备的分类 字符设备的特点 块设备的特点 网络设备

分类:1、字符设备;2、块设备;3、网络接口设备。

字符设备:Eg:如串口、触摸屏、并口、虚拟控制台、AD等。

a) 以字符为单位输入/输出数据设备,能够像字节流一样访问的设备 b) 在Linux 中它们也被映射为文件系统的一个节点,常在/dev目录下。 c) 应用程序对于字符设备的每一个I/O操作,都会直接传递给系统内核对应的驱动程序; d) 字符设备驱动程序一般要包含open,close,read,write 等几个系统调用。 块设备:Eg:诸如磁盘,内存,Flash等。

a) Linux 的块设备通常是指可以容纳文件系统的存储设备。

b) 与字符设备类似,块设备也是通过文件系统来进行访问,它们之间的区别仅仅在于内核内部管理数据的方式不同。

c) Linux 中的块设备包含整数个块,每个块包含2 的几次幂的字节。

d) 应用程序对于块设备的操作,要经过系统的缓冲区管理,间接传递给驱动程序处理。 网络设备:

a) 是一种特殊的设备,与字符设备和块设备不同,网络设备并没有文件系统的节点,也就是说网络设备没有设备文件名

b) 由内核中网络子系统驱动,负责发送和接收数据包,而且它并不需要了解每一项事务是如何映射到实际传送的数据包的。

c) 在Linux 中采用给网络接口设备分配一个唯一名字的方法来访问该设备。例如: eth0等

2. 设备文件的管理 设备号

主设备号相同的设备使用相同的驱动程序,次设备号用于区分具体设备的实例。 3. 驱动程序的结构

设备驱动在内和中的挂接、卸载和系统调用

实例:AD/DA转换 LED灯 看一下吧。。。

4. LCD设备驱动

[只需要将要显示的数据按照特定的格式写入显示缓存,对应的屏幕上就会有期望的显示图像出现。]

Framebuffer是出现在Linux2.2.xx内核版本以后的一种驱动程序接口,这种接口将显示设备抽象成为帧缓冲区(一个面向显示缓冲区的统一接口)。应用程序不需要知道底层硬件的任何信息,它仅和Framebuffer抽象出来的接口打交道,这样极大地降低了拥有GUI界面的程序的移植工作。 对于用户来说,帧缓冲区可以被看作是显示内存的一个映像,将其映射的进程地址空间后,就可以进行直接的读写操作,其操作结构也可以立即放映到显示屏幕上。

九、 Qt编程应用 Qt的特点

GUI(Graphics User Interface),图形用户界面 1. QT对象模型

元对象系统[基础对象的类型,接口,类,方法,属性,变量,函数,控制结构等] 信号和插槽[在Qt程序中,利用信号(signal)和插槽(slot)机制进行对象间的通信] 属性

2. QObject类 对象树

[QObject在对象树中组织它们自己。当你以另外一个对象作为父对象来创建一个QObject时,它就被添加到父对象的children()列表中,并且当父对象被删除的时候,它也会被删除。这种机制很好的适合了图形用户界面应用对象的需要。] 事件处理

[事件是由窗口系统或qt本身对各种事务的反应而产生的。当用户按下、释放一个键或鼠标按钮,一个键盘或鼠标事件被产生;当窗口第一次显示,一个绘图事件产生,从而告知最新的可见窗口需要重绘自身。大多数事件是由于响应用户的动作而产生的,但还有一些,比如定时器等,是由系统独立产生的。]

QT特征 面向对象

Qt具有模块设计和注重软件构件或元素的可重用性的特点 构件支持

Qt提供信号(signal)和插槽(slot)概念,并支持对象之间在彼此不知道对方信息的情况下进行合作,这使得Qt非常适合于真正的构件编程 友好的联机帮助

Qt提供了大量的联机参考文档,有超文本HTML方式,也有Unix帮助页man手册页和补充说明。对于初学者,其中的指南将一步步介绍如何进行Qt编程 便利性

由于Qt是一种跨平台的GUI工具包,它对编程者隐藏了在处理不同窗口系统时潜在的问题,Qt定义了一些类来隐藏在不同操作系统上不同处理方式下的细节问题 国际化

Qt为本地化应用提供了完全的支持,所有用户界面文本都可以基于消息翻译表被翻译成各国语言,Qt还支持双字节16bit国际字符标准 丰富的API函数

Qt为专业应用提供了大量的函数,在Qt的API中含有大约250个C++类,大多数的类都是GUI专有的 可用户化外观

Qt支持主题,基于Qt的应用程序能够在Windows外观、Motif外观,以及其它一些用户化外观主题之间切换 完整的一套组件工具

Qt编程的基本模块称之为组件,组件是用户界面的组成部分,Qt含有用来创建专业外观的用户界面所需要的所有组件

十、 嵌入式系统的综合设计

1. 嵌入式系统的定义:

嵌入式系统是以应用为中心,以计算机技术为基础,软硬件能灵活变化以适应所嵌入的应用系统,对功能,可靠性,成本,体积,功耗等有严格要求的专用计算机系统.

2. 试列举三种以上主流的通用处理器

ARM/StrongARM、 MIPS、 PowerPC、X86、68K/Coldfire 3. 嵌入式系统的组成:硬件平台、嵌入式操作系统、嵌入式应用软件

4. 硬件的主要组成部分:嵌入式微处理器和外部设备接口电路与设备 5. 软件的组成部分:嵌入式操作系统和用户的应用程序

6. 嵌入式处理器的分类:嵌入式微处理器、嵌入式微控制器、嵌入式DSP处理器、嵌入式片

上系统

7. 嵌入式系统有哪些特点?

嵌入式系统面向用户、面向产品、面向应用

嵌入式系统拥有无限的创造性 嵌入式系统的定制性 嵌入式系统的开发

8. ARM芯片的应用领域

工业控制、无线通信领域、网络应用、消费类电子产品、成像和安全产品

9. 主流的嵌入式操作系统

WindowsCE、VxVorks、Palm OS、?C/OS-II、嵌入式Linux

10. ARM9处理器的特点?

ARM微处理器采用RISC架构,一般具有如下特点: 体积小、功耗低、成本低、性能高;

支持Thumb/ARM双指令集,兼容8位/16位器件; 大量使用寄存器,执行执行速度更快; 大多数数据操作都在寄存器中完成;

寻址方式灵活简单,执行效率高;指令长度固定。

11. 什么是交叉编译

交叉编译就是在一个平台上生产可以在另一个平台上的执行的代码 12. 嵌入式系统与通用计算机的区别

嵌入式系统同通用型计算机系统相比具有以下特点:1)嵌入式系统是面向特定应用的。2)嵌入式系统是将先进的计算机技术、半导体技术和电子技术与各个行业的具体应用相结合后的产物。3)嵌入式系统的硬件和软件都必须高效率地设计。4)嵌入式系统具有较长的生命周期。5)嵌入式系统中的软件一般都固化在存储器芯片或单片机本身中,而不是存贮于磁盘等载体中。6)嵌入式系统本身不具备自举开发能力,必须有一套开发工具和环境才能进行开发。 13.

请比较嵌入式系统与PC机的异同。

答:1)共同点:计算机科学的三代基石:计算机体系结构、操作系统原理和编译原理。2)异同点:表现在处理器与存储器的选择、输入/输出的配置、操作系统的使用、以及软件开发的方法与过程等方面。 14.

试比较嵌入式系统与单片机的联系与区别:

答:1)联系:重量级的单片机可视为嵌入式系统,而轻量级的嵌入式系统与单片机则没有很大的差别;也就是说,单片机是嵌入式系统的前身,嵌入式系统是增强版的单片机。2)区别:在处理能力、存储空间、操作系统、开发及调试方法等方面均有区别。

15. Linux作为嵌入式操作系统有哪些优势?

a) Linux是开放源码的,不存在黑箱技术,遍布全球的众多Linux爱好者又是Linux开发

的强大技术后盾。

b) Linux的内核小、功能强大、运行稳定、系统健壮、效率高,易于定制剪裁,在价格

上极具竞争力。

c) Linux不仅支持x86 CPU,还可以支持其他数十种CPU芯片。

16. Linux的文件系统与windows文件系统的区别?

Windows文件系统是以驱动器的为基础的,而且每一个目录是与相应的分区对应。而linux恰好相反,文件系统是一个文件树,且它的所有文件和外部设备(如硬盘、光驱等)都是以文件的形式挂接在这个文件树上。总之,在windows下,目录结构属于分区;linux下,分区属于目录结构。

17. Linux的文件类型分为哪4种?

普通文件(-) 、目录(d)、字符设备文件(c)或块设备文件(b) 、符号链接文件(l)

18. 字符设备和块设备的主要区别?

字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了,块设备则不然,它利用一块系统内存作为缓冲区,当用户进程对设备请求能满足用户的要求时,就返回请求的数据,如果不能就调用请求函数来进行实际的I/0操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。

19.

解释 Linux文件属性 – rwx rwx rwx 每一位对应的含义。

“-”表示普通文件,“r”表示读权限,“w”表示写权限,“x”表示可执行权限。 文件类型:普通文件 ;文件所有者权限:可读可写可执行;用户组权限:可读可写可执行;其他用户权限:可读可写可执行

20. 说明下列目录放置的是什么数据

/bin /dev /etc /etc/rd.d/init.d /mnt /usr/bin /usr/src

/bin:包含基本的用户命令工具程序 /etc:(excutive time config)包含系统配置文件和脚本 /dev:设备文件目录,目录下的每个文件代表一个设备 /mnt:文件系统临时挂装目录

/etc/rc.d/init.d:各种程序二进制文件存放目录

/usr/bin:用户二进制文件

/usr/src:用户源代码文件,如内核等

21. 某文件的访问权限用数字法表示567,用字母法则表示为_____r-w rw- rwx_________。

22. 利用ps命令察看进程时,主要输出项PID表示___进程ID_____、TTY表示____当前

终端设备的名称________。

23. 硬链接文件和符号链接文件有什么不同?

硬链接: 新建的文件是已经存在的文件的一个别名;

链接文件和被链接文件必须位于同一个文件系统中,不能建立指向目录的硬连接。

符号连接:新建的文件以“路径”的形式来表示另一个文件,和Windows的快捷方式十分相似;如果链接名已经存在但不是目录,将不做链接;

链接名可以是任何一个文件名,也可以是目录,允许跨文件系统链接;

如果链接名是一个已经存在的目录,系统将在该目录下建立一个或多个和目标同名文件。 命令:ln [参数] <源文件> <链接文件名>录的是目标的 操作:硬链接用ln创建,符号链接用ln -s创建 区别:

1.硬链接和原来的文件没有什么区别,而且共享一个 inode 号(文件在文件系统上的唯一标识);而软链接不共享 inode,也可以说是个特殊的 inode,所以和原来的 inode 有区别。 2.若原文件删除了,则该软连接则不可以访问,而硬连接则是可以的。

3.由于符号链接的特性,导致其可以跨越磁盘分区,但硬链接不具备这个特性. Eg.

[oracle@Linux]$ touch f1 #创建一个测试文件f1 [oracle@Linux]$ ln f1 f2 #创建f1的一个硬连接文件f2 [oracle@Linux]$ ln -s f1 f3 #创建f1的一个符号连接文件f3 [oracle@Linux]$ ls -li # -i参数显示文件的inode节点信息 total 0

9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f1 9797648 -rw-r--r-- 2 oracle oinstall 0 Apr 21 08:11 f2 9797649 lrwxrwxrwx 1 oracle oinstall 2 Apr 21 08:11 f3 -> f1

从上面的结果中可以看出,硬连接文件f2与原文件f1的inode节点相同,均为9797648,然而符号连接文件的inode节点不同。

操作: 24. 查看当前目录下所有文件和子目录的详细信息

命令:ls –la

25. 列出首字母是a、b、c的所有文件

命令:ls [abc]*

26. 挂载u盘

命令:mount –t vfat /dev/sdb1 /mnt/usb

27. 查看/etc目录下所有文件和子目录的详细信息

命令:ls –la /etc/

28.

29.

显示/bin/目录中所有的首字母不是a、b、c、d、e的文件和目录 命令:ls /bin/ [!a-e]*

将ex1文件复制为ex2,如果ex2文件已存在,则备份原来的ex2文件 命令:cp –b ex1 ex2

30. pwd命令的功能是(C)

A 设置用户的口令 B 显示用户的口令 C 相当于Windows命令行里输入CD命令 D 相当于在windows命令行里输入dir命令

31. cd命令可以改变用户的当前目录,当用户键入cd并按enter后(B)

A 当前目录为根目录 B 当前目录没变,屏幕显示当前目录 C 当前目录改为用户主目录 D 当前目录改为上一级目录

32. 当一个目录作为一个挂载点被使用后,该目录上的原文件(B)

A、 被永久删除 B、被隐藏,待挂载设备卸载后恢复 B、 被放入回收站 D、被隐藏,待计算机重新启动后恢复

33. Linux默认的文件系统为(C)

A、vfat B、auto C、ext3 D、iso9600

34. 执行命令“chmod o+rw myfile”后,myfile文件的权限变化为(B)

A、 同组用户可读写myfile文件 B、其他用户可读写myfile文件 B、 所有用户都可读写myfile文件 D、文件所有者读写myfile文件

user 文件所有者 u 对全部 a group 属组 g

other 其他人 o

+ 增加权限 – 删除权限

35. Linux中与Windows系统中Program Files文件夹功能相类似的目录是(D)

A、/var B、/home C、/proc D、/usr

36. tar命令可以进行文件的(A)

A、压缩、归档和解压缩 B、压缩和解压缩 C、压缩和归档 D、归档和解压缩

37. 网络相关命令 ifconfig ping

(1)察看当前网络配置的参数 ifconfig

(2)在Linux主机上eth0的IP地址 192.168.10.1 ifconfig eth0 192.168.10.1 (3)激活网络接口 ifconfig eth0 up

(4)关闭网络接口 ifconfig eth0 down

38. 磁盘挂载命令mount (1)如何挂载u盘

mount –t vfat /dev/sdb1 /mnt/usb

(2)如何挂载光盘

mount /dev/cdrom /mnt/cdrom

(3)如何挂载计算机(开发板)

mount 192.168.1.1[虚拟机IP]:/home/共享目录 /mnt/nfs

39. 文件目录相关命令:cd mkdir cp rm vm ls chmod

(a) 建立如右图所示的目录结构 用户目录x mkdir x cd x

a1 b1 c1 mkdir –p a1/a2 a1/b2 b1 c1/c2 c1/d2

[-p选项:建立上层目录,如a2的 a2 b2 c2 d2 上层是a1,本来不存在a1,因此 要上层目录建立a1]

(b)将下面左图目录结构变为右图的目录结构。用最少的命令完成,写出所使用的命令 / / a1 b1 c1 a1 b1 c1 c2 d2 d e f f i j d e k i j k cd /

mv –f /b1/f /c1/c2/i /a1 mv -f /c1/c2/j /c1/d2/k /b1 mv -f /a1/d /a1/e /c1

[-f:若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录。]

40. 简要说明嵌入式操作系统多任务通讯的常用方式。

答:多任务通讯的方式:a)共享内存,主要是数据的共享;b)信号量,用于基本的互斥和任务同步;c)消息队列和管道,单CPU的消息传送;d)Socket和远程过程调用,用于网络间任务消息传送。 41. 进程与程序的区别,进程工作状态及转换关系。

程序是静止的进程是动态的。进程包括程序和程序处理的对象(数据集)。进程能得到程序处理的结果。进程和程序并非一一对应的。各程序运行在不同的数据集上就构成了不同的进程。

42. 线程的概念,线程与进程的关系。

线程是进程中执行运算的最小单位,亦即执行处理机调度的基本单位。

(1)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。线程是操作系统可识别的最小执行和调度单位。

(2)资源分配给进程,同一进程的所有线程共享该进程的所有资源。 同一进程中的多个线程共享代码段(代码和常量),数据段(全局变量和静态变量),扩展段(堆存储)。但是每个线程拥有自己的栈段,栈段又叫运行时段,用来存放所有局部变量和临时变量。 (3)处理机分给线程,即真正在处理机上运行的是线程。

(4)线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。

43. 嵌入式Linux C语言编程环境。

编辑器(vi ,Emacs), 编译连接器(gcc), 调试器(gdb),

项目管理器(make)

本文来源:https://www.bwwdw.com/article/47pv.html

Top