1、1、 什么叫嵌入式系统?嵌入式系统是操作系统和功能软件集成于计算机硬件系统之中。简单地说就是系统的应用软件与系统的硬件一体化。2、 嵌入式系统的特点。嵌入式系统一般功能单一、简单、且兼容性方面要求不高,但在大小、成本方面的限制较多。通常具有软件代码小、高度自动化、响应速度快等特点。3、 有哪些常见的嵌入式操作系统,各有什么特点。VxWorks(可靠性和实时性)(一) 可靠性。VxWorks 的用户群遍及军事、航空、航天等系统要求极高的环境,在长期的实际工作中,充分验证了其极高的可靠性。(二) 实时性。其系统本身的开销很小,进程调度、进程间通信、中断处理等系统公用程序精练而有效,延迟短。多任务机
2、制中对任务的控制采取了优先级抢占和轮转调度机制,也充分保证了可靠的实时性,使同样的硬件配置能满足更强的实时性要求,为应用的开发留下了更大的余地。(三) 可裁剪性。VxWorks 由一个体积很小的内核及一些可以根据需要进行定制的系统模块组成。其内核最小为 8KB。其高度灵活性可使用户很容易对这一操作系统进行定制和做适当开发,来满足自己的实际应用需要。(四) 其他:高效的任务管理;灵活的任务间通信;微秒级的中断处理;支持POSIX1003.1 实时扩展标准;支持多种物理介质及标准的、完整的 TCP/IP 网络协议等。(五) 价格昂贵。pSOS(体系结构先进、实时多任务、商业化)(一) 支持范围相当
3、广泛的 CPU 和驱动器等硬件产品(二) 集成 TCP/IP 协议(三) 快速准确的系统核心为应用提供优化的运行环境(四) 运行高效稳定、多处理器支持(五) 文件系统支持包括 ISO9660、MS-DOS 兼容文件系统和高性能嵌入式文件系统Palm OS(32 位、掌上电脑、开放接口)(一) 操作系统节能功能。半休眠(doze) 、休眠(sleep)(二) 合理的内存管理。类 PC(三) 数据以数据库格式来存储。直接在存储堆处理数据,通过内存管理的 API 实现。(四) 与 PC 信息同步。(五) 外围硬件丰富。QNX(分布式、可扩展、实时)(一) 进程在独立的地址空间运行,运行速度快(二)
4、支持多种资源管理器,多个文件系统同时运行(三) 支持窗口、图形、网络服务Windows CE(32 位、开放接口、图形界面、类 Windows)(一) 灵活的电源管理。睡眠/唤醒(二) 使用对象存储技术,包括文件系统、注册表及数据库。高性能(三) 高效率。按需换页、共享存储、交叉处理同步、支持大容量堆(heap )(四) 良好的通信能力(五) 支持嵌套中断(六) 更好的线程响应能力(七) 256 个优先级别,时序安排灵活(八) API 丰富C/OS-II(小、实时、教学)(一) 免费公开源代码(二) 执行效率高、占用空间小、实时性能优良和可扩展性强(三) 本身没有对文件系统支持(四) 源代码结
5、构清晰,既可商用又可教学嵌入式 Linux(RT-linux 空间数据采集、科学仪器测控、电影特技图形处理,uCLinux没有 MMU,Embedix 完整,红旗嵌入式 Linux 中科院)(一) 开放源代码。(二) 高性能、可裁剪内核。(三) 优秀的网络功能。4、 ARM 共有多少寄存器?其中有哪几个通用寄存器?哪几个状态寄存器?ARM 微处理器共有 37 个 32 位寄存器,其中 31 个为通用寄存器,6 个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可编程访问的,取决微处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器 R14R0 、程序计数器 PC、一个或两个状
6、态寄存器都是可访问的5、 ARM 微处理器有哪 7 种运行模式?1) 用户模式(usr): ARM 处理器正常的程序执行状态2) 快速中断模式(fiq): 用于高速数据传输或通道处理3) 外部中断模式(irq): 用于通用的中断处理4) 管理模式(svc): 操作系统使用的保护模式5) 数据访问终止模式(abt): 当数据或指令预取终止时进入该模式,可用于虚拟存储及存储保护。6) 系统模式(sys): 运行具有特权的操作系统任务。7) 未定义指令中止模式(und):当未定义的指令执行时进入该模式,可用于支持硬件协处理器的软件仿真。6、 几个常用的的指令:B、BL 、 BLX、BX、CMP、MO
7、V、MRS、MSR、LDR、STR、ADD、SUB、TEQ、TST 等。ADC 带进位加法指令ADD 加法指令AND 逻辑与指令B 跳转指令BIC 位清零指令BL 带返回的跳转指令BLX 带返回和状态切换的跳转指令BX 带状态切换的跳转指令CDP 协处理器数据操作指令CMN 比较反值指令CMP 比较指令EOR 异或指令LDC 存储器到协处理器的数据传输指令LDM 加载多个寄存器指令LDR 存储器到寄存器的数据传输指令MCR 从 ARM 寄存器到协处理器寄存器的数据传输指令MLA 乘加运算指令MOV 数据传送指令MRC 从协处理器寄存器到 ARM 寄存器的数据传输指令MRS 传送 CPSR 或
8、SPSR 的内容到通用寄存器指令MSR 传送通用寄存器到 CPSR 或 SPSR 的指令MUL 32 位乘法指令MLA 32 位乘加指令MVN 数据取反传送指令ORR 逻辑或指令RSB 逆向减法指令RSC 带借位的逆向减法指令SBC 带借位减法指令STC 协处理器寄存器写入存储器指令STM 批量内存字写入指令STR 寄存器到存储器的数据传输指令SUB 减法指令SWI 软件中断指令SWP 交换指令TEQ 相等测试指令TST 位测试指令7、S3C2440 的特征。主要结构:频率 400MHz,其 ARM920T 核由 ARM9TDMI、存储管理单元(MMU)和高速缓存三部分组成。其中,MMU 可以
9、管理虚拟内存,高速缓存由独立的 16KB 地址和 16KB 数据高速 Cache 组成。ARM920T 有两个内部协处理器:CP14 和 CP15。CP14 用于调试控制,CP15 用于存储系统控制以及测试控制。片内资源:1 个 LCD 控制器(支持 STN 和 TFT 带有触摸屏的液晶显示屏)SDRAM 控制器3 个通道的 UART4 个通道的 DMA4 个具有 PWM 功能的计时器和 1 个内部时钟触摸屏接口I2C 总线接口2 个 USB 主机接口,1 个 USB 设备接口2 个 SPI 接口SD 接口和 MMC 卡接口看门狗计数器117 位通用 I/O 口和 24 位外部中断源8 通道
10、10 位 AD 控制器体系结构:16/32 位 RISC 体系结构和 ARM920T 内核强大的指令集加强的 ARM 体系结构 MMU,用于支持 WinCE 和 Linux采用 ARM920T CPU 内核支持 ARM 调试体系结构内部高级微控制器总线(AMBA)体系结构(AMBA2.0,AHB/APB)支持高速总线模式和异步总线模式,支持外部等待信号延迟总线周期8、Linux 的基本命令:cd、pwd、cp、chmod、tar、insmod、rmmod、 ping、ifconfig 、mount 、ls 等,vi 中的:q!、:wq、:set nu1.cd 改变工作目录位置,如:cd nam
11、e。例:cd /usr/include(进入/usr/include 目录) ,cd .(.表示上一级目录)2. pwd 显示当前所在目录。3. ls 显示目录文件.如: ls -atFlgR name。例:ls a(显示出包含隐藏文件的所有文件),ls -l (示目录下所有文件的详细信息)4. mkdir 建新目录,如:mkdir directory-name。例:cd /, mkdir test, cd test, mkdir aa(在/目录下建立 test 目录,并在 test 中建立 aa)5. rmdir 删除目录。如:rmdir directory-name。例:rm rf /te
12、st/aa(加 rf 参数删除所有的内容)6. echo 显示环境变量,例:echo $HOME(显示 HOME 变量的值)7. cp 复制文件。例:cp /usr/include/sched.h /test/aa8. mv 移动或更改文件、目录名称。例 mv /test/aa/sched.h /test/aa/aa.h9. rm 删除文件,rm filename 。例:cd /test/aa, rm aa.h10.find 文件的路径寻找。例:find / -name grub.conf(在根目录/下找 grub.conf)11.mount 磁盘挂载命令。例:#mount t vfat /d
13、ev/hda6 /mnt o iocharset=utf8(把windows 的 D 盘挂到/mnt 目录中,并支持中文)12.卸载用 umount,如#umount /mnt13.chmod 文件属性的设置,#cd /test, #chmod 777 aa(把/test/aa 设置为可读、可写、可执行)14.tar 文件备份和压缩,例:#cp /usr/include/* /test/aa, cd /test, # tar zcvf aa.tar.gz aa(把 aa目录压缩成 aa.tar.gz),#tar zxvf aa.tar.gz(把 aa.tar.gz 解压缩)15.ifconfi
14、g 查看和更改网络接口的地址和参数16.ping 测试网络是否畅通,例 : #ping 127.0.0.1 , #ping 202.200.60.117.ps 命令主要查看系统中进程的状态。#ps18.df 显示档案系统的状况,或是看所有档案系统的状况(预设值), #df h19.du 统计目录(或文件)所占磁盘空间的大小。#du /home20.ifconfig 用于查看和更改网络接口的地址和参数,包括 IP 地址、网络掩码、广播地址.#ifconfig eth0 210.22.6.23 netmask 255.255.255.128 broadcast 210.34.6.1279、如何用
15、gcc 编译一个 C 语言程序,标准 C 库有什么用。预处理:gcc E o hello.i hello.c编译:gcc S o hello.s hello.i(.c)汇编:gcc c o hello.o hello.s链接:gcc o hello hello.o生成动态库:gcc shared abs.c o libabs.so标准 C 库使 C 语言程序设计灵活方便,可以在非独立运行的条件下,调用库提供的函数,实现 C 所没有提供的功能。10、 什么叫交叉编译?在主机环境编译目标板上运行的程序11、主机与目标板之间有哪些常见的连接方式,各有什么特点。1) 串口通信接口。常用的串口有 9 针
16、(DB9)和 25 针(DB25) ,通信距离近可用电缆线直连标准 RS232 端口,距离较远需调制解调器。通过串口可以向目标板发送命令,显示信息,也可以通过串口传送文件等。串口通信的优点是驱动程序实现比较简单,缺点是速度较慢,不适合大数据量传输。2) 以太网接口。网络接口一般采用 RJ-45 接头,通过以太网接口进行通信的速度较快,可以实现 NFS 文件共享和 Tftp 网络文件传输等。缺点是驱动程序实现比较困难,一般都基于厂家提供的驱动进行二次开发。3) USB 接口。统一了各种接口设备的连接头、即插即用特性、热插拔特性、具备1.5Mbps、12Mbps 、480Mbps(USB2.0)等
17、传输速率;最多可以连接 127 个设备;可由 USB 电缆供电而不需要附加电源;具有电源管理功能。总线结构采用阶梯式星形的拓扑结构。4) JTAG 接口。最初用来对芯片进行测试,现在常用于实现 ISP(In-System Programmable,在线编程) ,对 FLASH 进行编程。12、主机开发环境如何配置?1) 主机操作系统安装2) 主机与开发板的通信软件(Minicom)安装配置3) 文件传输服务安装配置(Tftp,NFS)4) 建立交叉开发环境13、什么是 NFS 服务?如何设置?如何挂载?什么是 tftp 服务?如何设置?网络文件系统(Network File System,NF
18、S)是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制,通过对网络文件系统的支持,用户可以在本地系统上像操作本地分区一样来对远程主机的共享分区(目录)进行操作。NFS 开发环境的建立需要配置 linux 服务器端和嵌入式目标系统端。配置 NFS 网络文件系统。需要关闭防火墙(iptables -F) ,以简化嵌入式网络调试环境设置过程。配置NFS:点击主菜单运行系统设置-服务器设置-NFS 服务器(英文为:SETUP-SYSTEMSERVICE-NFS) ;或者也可编写/etc/exports 文件,输入/arm2410s 192.168.0.*(rw,sync.no_root_s
19、quash),建议同学这样操作。启动 NFS: service portmap restart , service nfs restartMount t nfs 192.168.1.1:/home/share /mntTftp 协议是简单文件传输协议,基于 UDP 协议,没有文件管理、用户控制等功能,因此实现起来简单易行,使用方便。分服务端程序和客户端程序,在主机通常同时配置有Tftp 服务端和客户端。安装好客户端 tftp,服务端 tftpd 和 inetd,在/etc/inetd.conf 中添加#tftpd dgram udp wait root /usr/sbin/in.tftpd s
20、 /监听目录14、在嵌入式系统中应用什么编译器来编译程序?arm-linux-gcc15、什么是 Bootloader?Bootloader 有什么作用?嵌入式系统有哪些常见的 Bootloader?Bootloader 就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。LILO、 Grub、loadlin、U-Boot、RedBoot、Vivi、ROLO 、Etherboot、LinuxBIOS、blob16、U-Boot 是什么,如何编译?U-Boot
21、是一个开源的 Bootloader(引导装载程序) 。移植参考实验 5,配置好后编译直接 Make。17、Linux 配置内核可以用什么命令?编译内核用什么命令?配置内核:make menuconfig,编译内核:Make zImage18、根文件系统中一般要哪些目录?根文件系统有哪些规则?dev、proc、etc、sbin、bin、lib、mnt、usr把任何在运行时不需要进行更新的文件放在 CramFs 文件系统中,因为其压缩比高;那些需要经常读写的目录如 var、tmp 应放在 tmpFs 文件系统中,以减少对 Flash 的读写次数;对于那些需要进行读写,并且在下次启动之后也能将更新信
22、息保存的文件,则应该放在日志型文件系统里。如果采用 NOR 型闪存,则应选择 JFFS2 文件系统,如果是 NAND闪存,则应选择 YAFFS 文件系统。19、如何用 mknod 创建节点?mknod m 666 null c 1 3mknod m 666 zero c 1 3mknod m 600 console c 5 1cp -dpR /dev/tty0-9 /test/my_rootfs/dev/cp -dpR /dev/ram* /test/my_rootfs/dev/20、BusyBox 是什么?如何使用?BusyBox 是一个 Unix 工具集,提供一百多种 GNU 常用工具、S
23、hell 脚本工具等。Busybox +命令如 ls21、QT/Embedded 是什么?用 QT Designer 生成的程序如何编译?qmake 工程名.promake22、Linux 串口通信中,如何设置串口属性?如何打开串口?如何读写数据?在嵌入式 Linux 中,串口是一个字设备,访问具体的串行端口的编程与读写文件的操作类似,只需打开相应的设备文件即可操作。串口编程特殊在于串口通信时相关参数与属性的设置。嵌入式 Linux 的串口编程时应注意,若在根文件中没有串口设备文件,应使用 mknod 命令创建,这这里假设串口设备是 /dev/ttyS0,介绍一下串口的编程过程。mknod /
24、dev/ttyS0 c 4 641、打开串口打开串口设备文件的操作与普通文件的操作类似,都采用标准的 I/O 操作函数open()。fd = open(“/dev/ttyS0“,O_RDWR|O_NDELAY|O_NOCTTY);open()函数有两个参数,第一个参数是要打开的文件名(此处为串口设备文件/dev/ttyS0);第二个参数设置打开的方式, O_RDWR 表示打开的文件可读 /写,O_NDELAY表示以非阻塞方式打开,O NOCTTY 表示若打开的文件为终端设备,则不会将终端作为进程控制终端。2、设置串口属性串口通信时的属性设置是串口编程的关键问题,许多串口通信时的错误都与串口的设
25、置相关,所以编程时应特别注意这些设置,最常见的设置包括波特率、奇偶校验和停止位以及流控制等。在 Linux 中,串口被作为终端 I/O,它的参数设置需要使用 struct termios 结构体,这个结构体在 termio.h 文件中定义,且应在程序中包含这个头文件。typedef unsigned char cc_t ;typedef unsigned int speed_t ;typedef unsigned int tcflag_t ;struct termiostcflag_t c_iflag ; /*输入模式标志*/ tcflag_t c_oflag ; /*输出模式标志*/tcfl
26、ag_t c_cflag ; /*控制模式标志*/tcflag_t c_lflag ; /*本地模式标志*/tcflag_t c_line ; /*行规程类型,一般应用程序不使用 */cc_t c_ccNCC; /*控制字符*/speed_t c_ispeed ; /*输入数据波特率*/speed_t c_ospeed ; /*输出数据波特率*/;串口的设置主要是设置这个结构体的各成员值,然后利用该结构体将参数传给硬件驱动程序。在 Linux 中,串口以串行终端的方式进行处理,因而,可以使用 tcgetattr()/tcsetattr()函数获取 /设置串口的参数。int tcgetattr(
27、 int fd, struct termios *termios_p );int tcsetattr( int fd, int optional_actions , struct termios *termios_p );这两个参数都有一个批向 termios 结构体的指针作为参数,用于返回当前终端的属性或设置该终端的属性。参数 fd 就是用 open()函数打开的终端文件句柄,而串口就是用open()打开的串口设备文件句柄。 tcsetattr()函数的 optional_action 参数用于指定新设定的参数起作用的时间,其设定值可以为:TCSANOW 改变立即生效TCSADRAIN 在所
28、有的输出都被传输后改变生效,适用于更改影响输出参数的情况。TCSAFLUSH 在所有输出都被传输后改变生效,丢弃所有末读入的输入(清空输入缓 存) 。(1)设置波特率使用 cfsetospeed()/cfsetispeed()函数设置波特率,它们分别用于在 termios 结构体中设置输出和输入的波特率。设置波特率可以使用波特率常数,其定义为字母“B速率” ,如 B19200 就是波特率为 19200bps,B115200 就是波特率为 115200bps。int cfsetispeed( struct termios *termios_p, speed_t speed ); /speed 为
29、波特率常数int cfsetospeed( struct termios *termios_p, speed_t speed );例 :cfsetispeed( ttys0_opt, B115200 );cfsetospeed( ttys0_opt, B115200 );(2)设置控制模式标志控制模式标志 c_cflag 主要用于设置串口对 DCD 信号状态检测、硬件流控制、字符位宽、停止位和奇偶校验等,常用标志位如下:CLOCAL 忽略 DCD 信号,若不使用 MODEM,或没有串口没有 CD 脚就设置此标志CREAD 启用接收装置,可以接收字符CRTSCTS 启用硬件流控制,对于许多三线制
30、的串不应使用,需设置CRTCTSCSIZE 字符位数掩码,常用 CS8CSTOPB 使用两个停止位,若用一位应设置CSTOPBPARENB 启用奇偶校验例如,下面的代码将串口设置为忽略 DCD 信号,启用接收装置,关闭硬件流控制,传输数据时使用 8 位数据位和一位停止位(8N1 ) ,不使用奇偶校验。struct temios ttys0ttyso_opt.c_cflag |= CLOCAL | CREAD ; /将 CLOCAL 与 CREAD 位设置为 1ttys0_opt.c_cflag /将硬件流控制位 CRTSCTS 清0,其他位不变ttys0_opt.c_cflag /设置 8 位
31、数据位标志 CS8ttys0_opt.c_cflag /使用 1 位停止位,停用奇偶校验(3)设置本地模式标志本地模式标志 c_lflag 主要用于设置终端与用户的交互方式,常见的设置标志位有ICANON,ECHO 和 ECHOE 等。其中,ICANON 标志位用于实现规范输入,即 read()读到行结束符后返回,常用于终端的处理;若串口用于发送/接收数据,则应清除此标志,使用非规范模式(raw mode)。非规范模式中,输入数据不组成行,不处规范模式中的特殊字符。在规范模式中,当设置 ECHO 标志位时,用户向终端输入的字符将被回传给用户;当设置 ECHOE 标志位时,用户输入退格键时,则回
32、传 “退格空格退格”序列给用户,使得退格键覆盖的字符从显示中消失,这样更符合用户的习惯(若未设置此标志,输入退格键时,则光标回退一个字符,但原有的字符未从显示中消失) 。(4)设置输入模式标志输入模式标志 c_iflag 主要用于控制串口的输入特性,常用的设置有 IXOFF 和IXON,分别用于软件流控制。其中,IXOFF 用于防止输入缓冲区溢出;IXON 则是在输入数据中识别软件流控制标志。由于许多嵌入式系统无法使用硬件流控制,因此,只能使用软件流控制数据传输的速度,但是,它可能降低串口数据传输效率。启用软件流控制的代码如下:ttys0_opt.c_iflag |= IXOFF|IXON ;
33、(5)设置输出模式标志输出模式标志 c_oflag 主要用于对串口在规范模式时输出的特殊字符处理,而对非规范模式无效。(6)设置控制字符在非规范模式中,控制字符数组 c_cc中的变量 c_ccVMIN和 c_ccVTIME用于设置 read()返回前读到的最少字节数和读超时时间,其值分为四种情况:(a)c_ccVMIN0,c_ccVTIME0读到一个字节后,启动定时器,其超时时间为 c_ccVTIME,read()返回的条件为至少读到 c_ccVMIN个字符或定时器超期。(b)c_ccVMIN0, c_ccVTIME =0只要读到数据的字节数大于等于 c_ccVMIN,则 read()返回;否
34、则,将无限期阻塞等待。(c)c_ccVMIN = 0, c_ccVTIME0只要读到数据,则 read()返回;若定时器超期(定时时间 c_ccVTIME)却未读到数据,则 read()返回 0;(d)c_ccVMIN = 0, c_ccVTIME = 0若有数据,则 read()读取指定数量的数据后返回;若没有数据,则 read()返回0;在 termios 结构体中填写完这些参数后,接下来就可以使用 tcsetattr()函数设置串口的属性。tcsetattr( fd, /将原有的设置保存到 old_opt,以便程序结束后恢复tcsetattr( fd, TCSANOW, 3、清空发送/接
35、收缓冲区为保证读/写操作不被串口缓冲区中原有的数据干拢,可以在读/ 写数据前用 tcflush()函数清空串口发送/接收缓冲区。 tcflush()函数的参数可为:TCIFLUSH 清空输入队列TCOFLUSH 清空输出队列TCIOFLUSH 同时清空输入和输出队列4、从串口读写数据串口的数据读/写与普通文件的读 /写一样,都是使用 read()/write()函数实现。n = write( fd, buf, len ); /将 buf 中 len 个字节的数据从串口输出,返回输出的字节数n = read( fd, buf, len ); /从串口读入 len 个字节的数据并放入 buf, 返
36、回读取的字节数5、关闭串口关闭串口的操作很简单,将打开的串口设备文件句柄关闭即可。close(fd); 23、cramfs、yaffs 、jffs 、ramdisk 是什么?如何区别?如何使用?文件系统,cramfs(实时压缩) 、yaffs(为 NAND FLASH 设计的日志型文件系统) 、jffs(主要用于 NOR FLASH 的日志闪存文件系统) 、ramdisk(固定大小的内存当分区使用)24、嵌入式 C 语言开发参考实验 2 和实验 325、QT 程序设计参考实验 QT 设计26、Make 与 Makefile 的应用。参考书本 P25527、嵌入式 Linux 配置与移植。参考实
37、验 628、从响应时间上考虑,嵌入式操作系统可以分哪两类,请简单说明。硬实时系统:系统对响应时间有严格的要求,如果响应时间不能满足,是绝对不能接受的,因为可能导致系统的崩溃或致命错误。软实时系统:系统对响应时间没有严格的要求,如果响应时间不能满足,可能导致结果错误,但不影响系统继续运行。29、嵌入式 Linux 中有哪些常见的文件系统?有什么特点。CramFS、YAFFS、JFFS、Ramdisk、TmpFS/RamFS30、有哪些常用的嵌入式 GUI?各有什么特点。QT/EmbeddedMiniGUITiny-xGTKOpen GUIPicoGUI31、NOR Flash 和 Nand Flash 各有什么特点。NOR 的特点是芯片内执行,成本高,用于存放引导程序,根文件系统。NAND 使用寿命长,容量大,用于存放用户文件系统。32、BootLoader 的 stage1 需要完成哪五步?stage2 要做什么?