1.(填空)数据类型
ARM处理器支持下列数据类型:
Byte 字节,8位 Halfword 半字,16位(半字必须与2字节边界对齐);
Word 字,32位(字必须与4字节边界对齐)。
2.处理器模式
ARM体系结构支持的处理器模式
在软件控制下可以改变模式,外部中断或异常处理也可以引起模式发生改变。
大多数应用程序在用户模式下执行。当处理器工作在用户模式时,正在执行的程序不能访问某些被保护的系统资源也不能改变模式,除非异常发生。这允许操作系统来控制系统资源的使用。
除用户模式外的其他模式称为特权模式。特权模式是为了服务中断或异常,或访问保护的资源。它们可以自由的访问系统资源和改变模式。其中的5种被称为异常模式,即:FIQ IRQ 管理 中止 未定义。
当特定的异常出现时,进入相应的模式。每种模式都有某些附加的寄存器,以避免异常出现时用户模式的状态不可靠。
剩下的模式是系统模式,不能由于任何异常而进入该模式,它与用户模式有完全相同的寄存器。然而它是特权模式,不受用户模式的限制。
3.异常(问答)
异常由内部或外部源产生并引起处理器处理一个事件,例如外部中断或试图执行未定义指令都会引起异常。在处理异常之前,处理器状态必须保留,以便在异常处理程序完成后原来的程序能够重新执行。异常出现后,强制从异常类型对应的固定存储器地址开始执行程序。
(1)复位:处理器上一旦有复位输入,ARM处理器立刻停止执行当前指令。复位后,ARM处理器在禁止中断的管理模式下,从地址0x00000000或0xFFFF0000开始执行指令。
(2)未定义指令异常:当ARM处理器执行处理器指令时,它必须等待任一外部处理器应答后,才能真正执行这条指令。若处理器没有响应,就会出现未定义指令异常。
(3)软件中断异常(SWI):该异常由执行SWI指令产生,可使用此机制进行软件仿真。
(4)预取中止(取指令存储器中止):若处理器预取指令的地址不存在,或该地址不允许当前指令访问,存储器会向处理器发出中止信号,但当预取的指令被执行时,才会产生指令预取中止异常。
(5) 数据中止(访问数据存储器中止):若处理器数据访问指令的地址不存在,或该地址不允许当前指令访问时,产生数据中止异常。
(6) 中断IRQ异常:当处理器的外部中断请求引脚有效,且CPSR中的I=0,产生IRQ异常。
系统的外设可通过该异常请求中断服务。
(7)快速中断FIQ异常:当处理器的外部中断请求引脚有效,且CPSR中的F=0,产生FIQ异常。FIQ支持数据传送和通道处理,并有足够的私有寄存器,从而在应用中可避免对寄存器保存的需求,减少了开销。
(8)异常优先级
4.块复制寻址(语言描述,画图)
(1)R0的内容传送到R9指向的位置,传送之后R9加一,指向下一位。R0占用32位地址,一次加4
(2)R0传送之前加一,再将R0的内容传送到R9指向的位置,每传送一次加4.
多寄存器指令映射:
STMIB/STMFA:向上生长、增加、之前、满 LDMDA/LDMFA:向上生长、减少、之后、满
STMIA/STMEA:向上生长、增加、之后、空 LDMDB/LDMEA:向上生长、减少、之前、空
LDMIA/LDMFD:向下生长、增加、之后、满 STMDB/STMFD:向下生长、减少、之前、满
LDMIB/LDMED:向下生长、增加、之前、空 STMDA/STMED:向下生长、减少、之后、空
例:STMIA R9{R0,R1,R5} R9向上生长,R9'之后增加
STMFD R13!,{R2-R9}; 存储寄存器到堆栈
LDMFD R13!{R2-R9}; 从堆栈恢复
5.(简答)基于ARM的硬件启动程序一般包括:
(1)分配中断向量表;(2)初始化存储器系统;(3)初始化各工作模式下的堆栈;
(4)初始化有特殊要求的硬件模块;(5)初始化用户程序的执行环境;(6)切换处理器的工作模式;(7)调用主应用程序
6. S3C2410A的存储器控制器提供访问外部存储器所需要的存储器控制信号。具有以下特性:
(1)支持小/大端(通过软件选择) (2)地址空间:每bank有128M字节(总共有8个banks,共1G字节) (3)除bank0(只能是16/32位宽)之外,其他bank都具有可编程的访问大小(可以是8/16/32位宽) (4)总共有8个存储器bank(bank0~bank7)
(5)其中6个banks用于ROM,SRAM等 (6)剩下2个banks用于ROM,SRAM,SDRAM等 (7)7个固定的存储器bank(bank0~bank6)起始地址 (8)最后一个bank(bank7)的起始地址是可调整的 (9)最后两个bank(bank6~bank7)的大小是可编程的
(10)所有存储器bank的访问周期都是可编程的 (11)总线访问周期可以通过插入外部等待来延长 (12)支持SDRAM的自刷新和掉电模式
S3C2410A复位后,存储器的映射情况如下,bank6和bank7对应不同大小存储器时的地址范围:
bank6地址 bank7地址
2MB:起始(0X30000000)终止(0X301FFFFF) 起始(0X30200000)终止(0X303FFFFF)
4MB:起始(0X30000000)终止(0X303FFFFF) 起始(0X30400000)终止(0X307FFFFF)
8MB:起始(0X30000000)终止(0X307FFFFF) 起始(0X30800000)终止(0X30FFFFFF)
16MB:起始(0X30000000)终止(0X30FFFFFF) 起始(0X31000000)终止(0X31FFFFFF)
32MB:起始(0X30000000)终止(0X31FFFFFF) 起始(0X32000000)终止(0X33FFFFFF)
64MB:起始(0X30000000)终止(0X33FFFFFF) 起始(0X34000000)终止(0X37FFFFFF)
128MB:起始(0X30000000)终止(0X37FFFFFF) 起始(0X38000000)终止(0X3FFFFFFF)
7.电源控制模式包括? 正常、慢速、空闲、掉电
正常:正常运行模式; 慢速:不加PLL的低时钟频率模式;
空闲:只停止CPU的时钟; 掉电:所有外设和内核的电源都切断了
8.NAND Flash控制器的启动特点?
(1)NAND Flash模式:支持读/擦除/编程NAND FLASH存储器(2)自动启动模式:系统复位后,启动代码被传送到Steppingstone中。传送完毕后,启动代码在Steppingstone中执行。(3)具备硬件ECC生成模块(硬件生成校验码,通过软件校验)(4)NAND Flash启动以后,4KB的内部SRAM缓冲器Steppingstone可以作为其他用途使用(5)NAND Flash控制器不能通过DMA访问,可以使用LDM/STM指令来代替DMA操作
9慢速模式?不使用PLL,而使用外部时钟直接作为S3C2410A中的FCLK。在这种模式下,功耗大小仅取决外部时钟的的频率,与PLL无关。
10掉电模式?电源管理模块断开内部电源。因此,除唤醒逻辑外,CPU和内部逻辑都不会产生功耗。激活掉电模式需要两个独立的电源,一个电源为唤醒逻辑供电;另一个为包括CPU在内的其他内部逻辑供电,并且这个电源的开、关可以控制。在掉电模式下,CPU和内部逻辑供电的第二电源将关断。
11(填空)Vi编辑器的使用
Vi有4种基本的工作模式:正常模式,插入模式,命令模式和可视模式。
:q退出 :q!强行退出vi,不改写文件 :w存盘 :wq 存盘退出
12.介绍makefile文件的编写格式
(1)makefile中以“#”开始的行是注释行。
(2)Makefile中最终要的是描述文件依赖关系的说明。一般格式是:target:components——表示依赖关系 TAB rule——表示规则
(3)clean 当用户键入“make clean”命令时,会执行clean后面的语句。对于上面的makefile,当用户键入“makeclean”命令时,会执行“rm-rf *0 main”从而删除*0和main文件
(4) makefile有三个非常有用的变量,分别是“$@”“$^”“$<”
13.(简答)Bootloader的stage1通常包含以下步骤:
(1)Bootloader 的第一阶段(Stage1)步骤:
①硬件设备初始化 ②为加载Bootloader的stage2准备RAM空间
③复制Bootloader的stage2到RAM空间中 ④设置好堆栈 ⑤跳转到stage2入口点
(2)Bootloader的stage2通常包含以下步骤:
①初始化本阶段要使用的硬件设备 ②检测系统内存映射 ③将kernel映像和根文件系统映像从Flash读到RAM中 ④为内核设置启动参 ⑤调用内核
14. ViVi程序架构 vivi代码包括arch init lib drivers和include几个主要目录。
①arch:该目录主要包括所有vivi所支持的目标板的子目录
②drivers:该目录包括引导内核需要的设备驱动程序
③init:该目录只含有main.c 和version.c两个文件,vivi将从main.c函数开始C语言的执行。
④lib:该目录包含一些平台的接口函数
⑤include:该目录是头文件的公共目录,该目录定义了目标系统相关的资源配置参数。
15. file-operation结构的作用:
一个设备驱动程序包括两个基本任务:执行系统调用和负责中断处理。而file-operation结构的每一个成员的名称都对应一个系统调用。在操作系统内部,外部设备的存取是通过一组固定入口点进行的,这些入口点由每个外设的驱动程序提供,由file-operation结构向系统说明,因此编写驱动程序的主要工作就是编写子函数,并填充file-operation的各个域。
16.驱动程序的开发步骤:
(1)对该驱动程序使用到的硬件寄存器进行初始化,包括中断寄存器。
(2)初始化与设备相关的参数。一般来说,每个设备要定义一个设备变量,用来保存设备的相关参数。
(3)注册设备(函数的作用)。Linux内核通过主设备号将设备驱动程序同设备文件相连。
(4)注册设备使用的中断,注册中断使用的函数。
(5)其他的一些初始化工作,比如给设备分配I/O,申请DMA通道等。
如果设备的驱动程序使用如下的函数方式,那么设备驱动可以被动态地加载和卸载。
module_init(device_init); module_exit(device_exit);
对于驱动程序的使用,有静态编译和动态编译两种。静态编译将设备的驱动程序添加到内核中,动态编译是指将设备驱动程序编译成驱动模块。
17.若在/dev目录下没有相应的设备文件,就可用“mknod device_name.c主设备号从设备号”命令来创建一个设备文件,从而正确使用驱动模块。卸载驱动模块时,使用“rmmod device_driver”命令。删除设备文件使用“rm device_name”命令。建设被编译成驱动模块。
18.开发linux应用程序的一般分为以下几个步骤:
编写程序;编写makefile文件;编译程序;运行程序;将生成的可执行文件加入文件系统
19.ARM处理中断步骤:
(1)保存现场(2)模式切换(3)获取中断源(4)中断处理(5)中断返回,恢复现场
20.自动启动模式的执行步骤:(1)完成复位 (2)如果自动启动模式使能,NAND Flash存储器的前4KB自动复制到Steppingstone内部缓冲器; (3)Steppingstone映射到nGCS0; (4)CPU在Steppingstone的4KB内部缓冲器中开始执行启动代码。
21.Linux的移植?所谓Linux移植就是针对具体的目标平台对Linux做必要的改写后,安装到该目标平台并使其正确运行的过程。基本内容包括:
(1)获取某一半杯的Linux内核源码;(2)根据具体的目标平台,对源码进行必要的改写,然后添加一些驱动,打造一款适合目标平台的新的操作系统;(3)对该系统进行针对目标平台的交叉编译,生成一个内核映像文件;(4)对该映像文件烧写、安装到目标平台中。
22.Linux内核主要由5个子系统组成:进程调度子系统,内存管理子系统,虚拟文件子系统,网络接口子系统,进程间通信子系统。
Linux内核的主要目录结构:(1)/arch:其中的子目录包含所有与硬件体系结构相关的内核移植代码,每一个目录都代表一种硬件平台,每种平台都应该包括以下几个部分:
boot:包含启动内核所使用的部分或全部平台的相关代码。 kernel:包含支持体系结构特有的特征代码。 lib:包含存放体系结构特有的通用函数的实现代码 mm:包含存放体系结构特有的内存管理程序的实现。 mach-xxx:包含存放该处理器的移植代码。
(2)/documentation:有关内核各部分的通用解释和注释(3)/drivers:设备驱动程序(4)/fs:所支持的各种文件系统的代码(5)/include:建立内核代码时头文件,与系统相关的头文件放置在include/linux子目录下(6)/init:内核初始化代码,内核从此目录下开始工作。(7)/ipc:内核进程间通信的代码(8)/kernel:主内核的代码,包括进程调度、定时器等(9)/lib:通用的库文件代码(10)/mm:内核的内存管理代码(11)/net内核的:网络相关代码(12)/scripts:用于配置内核的脚本文件。
23.S3C2410A的I/O口工作原理:S3C2410共有117个多功能服用输入输出口(I/O口),分为8组PORTA~PORTH。PORT A 除了作为功能口外,它只作为输出口使用;其余的PORT B~PORT H都可以作为输入输出口使用。8组I/O口按照其位数的不同,可分为:
①1个23位的输出口(PORT A) ②2个11位的I/O口(PORT B和PORT H)
③4个16位的I/O口(PORT C 、PORT D、PORT E、PORT G) ④1个8位的I/O口(PORT F)
1.嵌入式系统的特点:⑴硬软件一体化,集计算机技术、微电子技术和行业技术为一体⑵需要操作系统支持,代码小执行速度快⑶专用紧凑,用途固定,成本敏感⑷可靠性要求高⑸多样性,应用广泛,种类繁多 2.操作系统功能:处理器管理,存储器管理,设备管理,文件管理,用户接口 3.实时操作系统的特点:支持异步事件的响应;中断和调度任务的优先级机制;支持抢占式调度;确定的任务切换时间和中断延迟时间;支持同步
4.板级支持包BSP完成的功能:①在系统启动时,对硬件进行初始化,比如对设备的中断、CPU的寄存器和内存区域的分配等进行操作;②为驱动程序提供访问硬件的手段,BSP就是为上层的驱动程序提供访问硬件设备寄存器的函数包。
1.下面是实现LED1和LED2轮流闪烁的程序代码。
void Main(void){
int flag,i;
Target_Init();//进行硬件初始化操作,包括对I/O口的初始化操作
for(; ;){
if(flag==0){
for(i=0;i<1000000;i++); //延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000; //配置第8、第9位为输出引脚
rGPGDAT=rGPGDAT&0xeff|0x200; //第8位输出为低电平,第9位输出为高电平
for(i=0;i<10000000;i++); //延时
flag=1;
}
else{
for(i=0;i<1000000;i++); //延时
rGPGCON=rGPGCON&0xfff0ffff|0x00050000; //配置第8、第9位为输出引脚
rGPGDAT=rGPGDAT&0xdff|0x100; //第8位输出为高电平,第9位输出为低电平
for(i=0;i<10000000;i++); //延时
flag=0; } } }
网友评论