版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、简答题与应用题:1、什么是嵌入式系统?主要有什么特点?答:以应用为中心,以计算机技术为基础的, 并且软件硬件是可剪裁的,能满足应用系统对功能、可靠性、成本、体积、功耗等指标的严格要求的专用计算机系统。他可以实现对其他设备的控制、监视或者管理等功能。矚慫润厲钐瘗睞枥庑赖。与通用的计算机系统相比,特点为:(1)面向特定应用,一般都有实时要求;(2)集先进性的计算机技术、半导体工艺、电子技术和通信网络技术于一体的并且在不断创新的知识集 成系统;(3)嵌入式系统是和具体应用对象有机结合在一起,因而其升级换代也是和具体的产品同步进行的。(4) 嵌入式系统的软硬件设计着重于高效率性。在最大限度满足应用需求
2、的前提下,降低成本是必须要考虑的主要问题。聞創沟燴鐺險爱氇谴净。(5)嵌入式系统软件一般都固化在存储器芯片中。2、嵌入式系统有哪几个部分?答:嵌入式系统通常由嵌入式处理机、嵌入式外围设备、嵌入式操作系统和嵌入式应用软件等几大部分组成。3、嵌入式操作系统的作用是什么?*实际是一组软件模块集合满足多任务处理、稳定运行、安全可靠、占用系统资源少、特有的实时事件处理、便于维护和管理、简洁良好的用户界面残骛楼諍锩瀨濟溆塹籟。4、什么是Linux?什么是嵌入式 Linux?答:严格来讲,Linux是指由Linux本人维护并不断更新的内核。一个嵌入式Linux系统指的是一个基于 Linux内核的,但不包含有
3、关这个内核的任何专业的库或是用户工具的嵌 入式系统。酽锕极額閉镇桧猪訣锥。5、用Linux内核构建嵌入式操作系统有什么优势(优良特性)?答:(1 )程度代码是可以获取的,可靠度高;(2)有完整的源码,软件丰富并且免费;(3) 得到众多硬件生产家的广泛支持;包括cpu、计算机外围设备(4)完善的通信协议、软件标准和文件管理机制;(5)提供完全免费且优秀的开发工具;(6)广泛的社群支持(7)无需购买lice nee,是免费的;(8)不依赖特定厂商、供应商;(9)成本相对低廉。6、RTOS(嵌入式操作系统)强调的实时是什么概念?与中断的关系?7、什么是实时Linux?涉及到哪些软硬件内容?答:实时L
4、inux( RT-Linux)通过在Linux内核与硬件中断之间增加一个精巧的可抢先的实时内核,把标准的Linux内核作为实时内核的一个进程与用户进程一起调度,标准的Linux内核的优先级最低,可以被实时进程抢断。 正常的Linux进程仍可以在 Linux内核上运行,这样既可以使用标准分时操作系统即Linux的各种服务,又能提供低延时的实时环境。它在硬件上涉及到硬件中断,软件上涉及到对高优先级的实时硬件中断的快速响应。謀荞抟箧飆鐸怼类蒋薔。能在规定的时间内完成对突发事件的处理的Linux系统;软件:中断服务程序、进程调度程序,硬件:嵌入式系统所采用的中断管理硬件。8、试简要说明Linux内核构
5、成,并简要说明各部分的功能?答:MMU :内存管理单元,完成地址映射(应用虚拟地址方式)VFS :虚拟文件管理系统,提供了统一管理计算机资源的途径。使统一规范计算机资源的使用格式成为可能,方 便传输厦礴恳蹒骈時盡继價骚。SCHED:进程调用单元。支持多任务运行。利用软件中断的特点,将CPU的时间线划分给各个任务,完成多任务管理 茕桢广鳓鯡选块网羈泪。IPC :进程间通信单元。实现多个不同程序在运行时可以进行数据交换、通信。NET:网络。网络不做为通用设备,以特定工作单元存在。负责计算机系统与其他计算机相互通信的接口。9、通常可采用哪几种方式来开发嵌入式Linux系统?给出示意图。答:方式有:(
6、1)连接型(宿主机/目标板链接开发)(2) 可移动连接型(利用可移动的存储器作为宿主机/目标板之间的中介)(3)标准化(在开发板上进行独立开发)10(3) 第二引导加载程序内核(2)鹅娅尽損根文件系统鹌惨歷茏鴛賴。10、为什么要建立交叉开发平台?在何种情形下可以不必建立?答:嵌入式系统的构造决定。嵌入式处理器多为专用的cpu, 1、必须将用C编写的程序编译成能在该专用平台上运行的机器码。2、C语言库是必需的,必需提供能在专用cpu上运行的库的二进制代码。以上两点要求有这么一种编译工具能够实现两种 CPU之间的交叉。当执行应用程序的平台和用来建立应用程序的平台相 同时就可以不建立交叉开发平台。籟
7、丛妈羥为贍债蛏练淨。11、试简要叙述GNU及其所提供的开发工具链。答:GNU是“GNUs Not Unix”的递归缩写,它是一个自由软件工程项目组织。提供各种开源代码。提供一 整套的开发工具链包括:GNU工具链基础,内核头文件安装程序,Bin utils (二进制工具)的安装程序,引导编译器安装程序,C库安装程序,全编译器安装程序,完成工具链的设置。預頌圣鉉儐歲龈讶骅籴。12、试解释make和makefile的关系?简单举例说明。答:使用make就必须写makefile文件,它描述工程中文件之间的关系,提供更新每个文件的命令。Makefile就是一组规则,它指导make程序的运行,告诉 mak
8、e需要做什么,多数情况是怎样编译和链接一个程序。目标和目标运行规则一旦建立,make就会按此进行工作。渗釤呛俨匀谔鱉调硯錦。edit : main.o kbd.o comma nd.o display.o in sert.o search.o files.o utils.occ -o edit main.o kbd.o comma nd.o display.o in sert.o search.o files.o utils.omai n.o : main .c defs.hcc -c mai n.ckbd.o : kbd.c defs.h comma nd.hcc -c kbd.ccomma
9、 nd.o : comma nd.c defs.h comma nd.hcc -c comma nd.cdisplay.o : display.c defs.h buffer.hcc -c display.cin sert.o : in sert.c defs.h buffer.hcc -c in sert.csearch.。: search.c defs.h buffer.hcc -c search.cfiles.o : files.c defs.h buffer.h comma nd.hcc -c files.cutils.o : utils.c defs.hcc -c utils.ccl
10、ea n :(此段为Makefile )铙誅卧泻噦rm edit mai n.o kbd.o comma nd.o display.o in sert.o search.o files.o utils.o圣骋贶頂廡。make clean(此为make 执行上述Makefile 规则)13、GCC是什么?为什么说它是必不可少的?答:GCC是由GNU组织开发的一个免费的C/C+编译工具,由它将高级语言转换为机器语言。因为GCC是一一个交叉平台的编译器,几乎所有主流CPU处理平台上目标代码的变换,它有力的支持了 Linux系统的发展。没有就无法获得可执行程序。擁締凤袜备訊顎轮烂蔷。14、C库是什么概
11、念?在嵌入式Linux系统中对此有何要求?答:提供C语言里包含常用函数的源代码。在嵌入式Linux系统中是必不可少的。否则无法获得可执行程序的完整代码。因为操作系统是用C语言编写的。贓熱俣阃歲匱阊邺镓騷。15、在设计嵌入式Linux系统时为什么要配置内核?可用哪几种命令来配置?答:针对嵌入式系统,内核需要知道运行在怎么样的平台上,它要管理的硬件单元,这就需要我们重新组装内核 来达成上述目标。因为完整的Linux的内核比较庞大,不适合嵌入式系统这样的对速度、容量要求苛刻的系统上面运行,因此我们需要去掉那些与目标系统无关的、只编译系统需要的功能的代码。坛搏乡囂忏蒌鍥铃氈淚。我们通常使用内核配置命令
12、make config (字符界面);make oldconfig ; make menuconfig (文本图形界面);makexconfig (x-window图形界面)来配置内核。通常使用后两个命令, 在图形界面下比较直观。显然,在makefile中详细定义了界面是如何生成的,以及配置和编译内核的规则。此外还有make oldconfig命令。蜡變黲癟報伥铉锚鈰赘。16、重新编译内核应考虑哪几个方面的因素?模块是什么概念?答:建立依存关系,建立内核,建立模块。模块的概念:可动态、静态加载的二进制代码。17、什么是根文件系统?Linux内核启动与根文件系统的关系?答:根文件系统是 Linu
13、x系统的安装点,应该包括支持Linux系统正常运行的基本内容,包含着系统使用的软件和库,以及所有用来为用户提供支持构架和用户使用的应用软件。Linux内核在运行期必须要用到的存储代码体系,与内核同时存在,只在内核运行时才存在于内存中。根文件系统必须要能够提供Linux内核启动过程中要加载的模块買鯛鴯譖昙膚遙闫撷凄。18、在构建嵌入式Linux系统时,对根文件系统的目录项有什么要求?答:构建嵌入式操作系统时应包括的目录项有:/bin ; /boot; /dev; /ect; /home; /lib ; /mnt; /opt; /proc; /root;/sbin ; /tmp ; /usr; /
14、var綾镝鯛駕櫬鹕踪韦辚糴。其中/bin ; /dev; /ect; /lib ; /proc; /sbin; /tmp ; /usr ; /var这9项必须包含,另外 5项可有可无。 驅踬髏彦浃绥譎饴 憂锦。19、Linux内核在目标板上启动过程(简要叙述)?需要考虑哪些因素?答:1、通过合适的bootloader找到内核源代码,加载到内存2、内核源代码开始进行初始化3、内核源代码初始化完毕,开始调用和用户有关的进程。用户进程初始化 选用和目标板相配的启动装载程序20、如何理解文件系统?常用的文件系统有哪几种?答: 文件系统是对一个存储设备上的数据和元数据进行组织的机制 另一种看待文件系统的
15、方式是把它看作一个协议。网络协议(比如IP )规定了互联网上传输的数据流的意义,同样,文件系统会给出特定存储媒体上数据的意义。 猫虿驢绘燈鮒诛髅貺庑。常用的文件系统: CRAMFS ;JFFS2;Ext2 over NFTL ;Ext3 over NFTL ;Ext2 over RAM disk ; EXT4 。锹籁饗迳琐 筆襖鸥娅薔。21、什么是VFS?它在Linux内核中的主要作用是什么?答:VFS (虚拟文件系统)是物理文件系统与服务之间的接口层。它对Linux的每个文件系统的所有细节进行抽象,使得不同的文件系统在 Linux 核心以及系统中运行的其它进程看来,都是相同的。 作用为: 记
16、录可用的 文件系统类型, 将设备同对应的文件系统联系起来, 处理一些面向文件的通用操作, 涉及到针对文件系统的 操作时, VFS 把它们影射到与控制文件、目录以及inode。 構氽頑黉碩饨荠龈话骛。22、 内核模块的编程和普通程序的编程有哪些区别?(6 分)参考答案:主要区别为:(1)因为内核模块运行在内核态,所以包含的头文件是内核程序相关的头文件,而普通程序则包含的是glibc的头文件( 1 分) 輒峄陽檉簖疖網儂號泶。( 2)模块程序没有 main 函数,而是通过 init_module 函数在加载后初始化。 ( 2 分)(3) 模块程序内可直接调用内核函数,而普通程序则只能通过系统调用使
17、用内核函数。(2分)(4) 普通用户程序可运行多次,而内核函数通常则只能加载1 次( 1 分)。23、 什么是交叉编译?为什么要采用交叉编译(5 分)参考答案:所谓交叉编译,是指在一个平台上编译生成在另一个平台上运行的可执行程序。(3分)。之所以采用交叉编译,是因为目标平台上不具备直接运行开发环境的条件。(2分) 尧侧閆繭絳闕绚勵蜆贅。24、简述嵌入式 Linux 系统的初始化过程( 5 分)参考答案:嵌入式 Linux 系统开机首先运行 BootLoader, 然后由 BootLoader 引导启动内核, 由内核检查和初始化硬件设备, 载入设备的驱动程序模块,安装 root 文件系统,然后内
18、核将启动一个名为 init 的进程( 2分)。在 init 运行完 成并启动其它必要的后续进程后,系统开始运行,引导过程结束。init 进程启动时需要读取 inittab 配置文件,该文件确定 init 在系统启动和关机时的工作特性。 ( 3 分) 识饒鎂錕缢灩筧嚌俨淒。应用题1、管道是 Linux 中进程通信的一种方式,以下程序在父进程和子进程之间创建了一个管道,然后建立它们之间 的通信,实现父进程向子进程写数据的功能。说明标号所在行代码的功能。凍鈹鋨劳臘锴痫婦胫籴。#include #include #include #include #include int main()int pipe
19、_fd2;pid_t pid;char buf_r100;char* p_wbuf;int r_num;memset(buf_r,0,sizeof(buf_r); (1)if(pipe(pipe_fd)0) (5)printf( %d numbers read from the pipe is %sn,r_ num,buf_r);恥諤銪灭萦欢煬鞏鹜錦。close(pipe_fd0);(6)exit(0);else if(pid0) (7)close(pipe_fd0);(8)if(write(pipe_fd1,Hello,5)!=-1)(9)prin tf(pare nt write1 suc
20、cess!n);if(write(pipe_fd1, Pipe,5)!=-1)prin tf(pare nt write2 success!n);close(pipe_fd1);(10)sleep (3);waitpid(pid,NULL,O);exit(0);答案要点:(1)将数据缓冲区清0(2)创建管道(3) 创建子进程(4)关闭子进程写描述符 (5)子进程读取管道内容(6)关闭子进程读描述符(7)父进程运行控制语句(8)关闭父进程的读描述符(9)将数据写入缓冲区鯊腎鑰诎褳鉀沩懼統庫。(10)关闭父进程写描述符2、由于 Boot Loader 的实现依赖于 CPU的体系结构,因此大多数Bo
21、ot Loader 都分为stage1 和stage2 两大部分。依赖于 CPU体系结构的代码,比如设备初始化代码等,通常都放在stage1中,而且通常都用汇编语言来实现,以达到短小精悍的目的。而stage2则通常用C语言来实现,这样可以实现给复杂的功能,而且代码会具有更好的可读性和可移植性。请根据你对嵌入式系统中bootloader的理解,简要设计一下stage1和stage2需要完成的功能。硕癘鄴颃诌攆檸攜驤蔹。参考答案:BootLoader的stage1 通常包括以下步骤(以执行的先后顺序):(3分)基本硬件设备初始化。为加载 Boot Loader 的stage2 准备RAM空间。 拷
22、贝Boot Loader 的stage2 到RAM空间中。设置好堆栈。跳转到stage2 的C入口点。BootLoader的stage2 通常包括以下步骤(以执行的先后顺序):(3分) 初始化本阶段要使用到的硬件设备。检测系统内存映射 (memory map)。将kernel映像和根文件系统映像从flash 上读到RAM空间中。为内核设置启动参数。调用内核。3、Qt/Embedded对嵌入式GUI提供了强大的支持,信号和插槽机制是QT的核心机制,使用 QT实现如下界面的登陆程序,其原代码如下所示,请回答如下问题阌擻輳嬪諫迁择植秘騖。1) 什么是Qt中的信号插槽机制?(3分)2) 应用程序中用到
23、了哪些控件,列举2个并说明该控件的特点?(4分)3) 根据注释完成程序中相应的语句? (4分)#in elude #i nclude wi ndow.hCWin Dlg:CWi nDlg(QWidget* pare nt) : QDialog(pare nt)氬嚕躑竄贸恳彈濾颔澩。setWindowTitle(Example);/*设置窗口的标题 */Editl = new QLineEdit; /*创建一个 Editl 和一个 Buttion1*/Butto n1 = new QPushButt on (OK);Edit1-setEchoMode(QLi neEdit:Password);Q
24、VBoxLayout* Layoutl = new QVBoxLayout; /*创建一个布局对像 Layoutl*/釷鹆資贏車贖孙滅獅赘。Layout1-addWidget(Edit1); /*把Editl 加入到 Layoutl*/ 怂阐譜鯪迳導嘯畫長凉。Layout1-addWidget(Button1); /*把Button1 加入到 Layoutl*/ 谚辞調担鈧谄动禪泻類。(1) setLayout(Layoutl) ;/* 应用 Layoutl 布局 */(2) connect(Button 1,SIGNAL(clicked(), this,SLOT(function();/*
25、建立 Signal-Slot,嘰觐詿缧铴嗫偽純铪锩。使 button1 与 function()相关联 */CWin Dlg:CWi nDlg()delete Editl; /* 删除 Editl 与Button1 对象*/delete Butto n1;void CWin Dlg:fu nctio n()if(Edit1-text() = example)/*如果 Editl 输入example*/ 熒绐譏钲鏌觶鷹緇機库。/*显示Pass!消息框*/QMessageBox:warni ng(this, warni ng, Pass!, QMessageBox:Yes);鶼渍螻偉阅劍鲰腎邏蘞。
26、else/*显示Error! 消息框*/纣忧蔣氳頑莶驅藥悯骛。QMessageBox:war nin g(this, war nin g, Error!, QMessageBox:Yes);#inelude #i nclude wi ndow.hint main (i nt arge, char* argv)QApplication app(argc, argv); /*创建 QT应用程序 */CWinDlg dlg; /*创建窗口 */return dlg.exec();/* 运行程序 */答案要点:1)什么是Qt中的信号插槽机制?与回调函数机制有何不同? (3分)答案要点:回调函数机制是事
27、先将一个回调函数指针传递给一个处理过程,当这个处理过程得到执行时,回调 预先定义好的回调函数以期实现激活其他处理程序的目的。不同与回调函数机制,Qt提供了信号和插槽机制,号是一个特定的标识;一个槽就是一个函数,与一般函数不同,槽函数既能和信号关联,当某个事件出现时,通 过发送信号,可以将与之相关联的槽函数激活,执行相应代码。颖刍莖峽饽亿顿裊赔泷。2) 应用程序中用到了哪些控件,列举2个并说明该控件的特点? (4分)答案要点:应用程序中用到的控件有(1)文本框控件Edit,文本框控件主要用来显示或接收用户的输入信息。按钮控件Button,按钮控件主要响应用户单击功能。濫驂膽閉驟羥闈詔寢賻。3)
28、根据注释完成程序中相应的语句?(4分)(1)setLayout(Layoutl);(2)c銚銻縵哜鳗鸿锓謎諏涼。4. 在Linux操作系统下,完成下列任务:1、编程实现以下功能主程序 hello.c(打印 Hello World!)主程序通过头文件hello.h 调用message函数头文件hello.h( 声明message函数)message 函数由 message.c 定义(打印 This is a message !)1、答:hello.c:# in clude # in clude # in clude # in clude head.hint main (int argc,char
29、 *argv)prin tf(Hello World!n);message();return 0;head.h:void message(void);message.c:# in elude void message (void)prin tf(This is a message! n);挤貼綬电麥结鈺贖哓类。5. 用C语言编写一个源程序 main.e , (1)用以在打开当前目录下的文件test.txt ”,如果没有创建该文件,并使其具有读写属性,(2)编写一个makefile实现自动编译,生成可执行文件 main。注:头文件可忽略。赔荊紳谘侖驟辽輩袜錈。1、(1)(5 分)Void main (void)int fid;fid = open( “./test.txt ”,O_RDWR|O_CREAT);if(fid=-1)Printf( “ open or create error n ” );exit(0)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 建筑工程泥工分包合同格式
- 长期供暖服务合同
- 项目融资策划合同
- 技术优化委托服务合同
- 借款保证合同书样本
- 工作保证书承诺严谨工作
- 试用阶段责任保证函
- 奶制品买卖协议模板
- 电商合作方供应商协议范本
- 品牌年度服务合同法规
- 颈托的正确使用培训课件
- 渔业资源与渔场学PPT完整全套教学课件
- 代码审计报告完整版
- 非淹没矩形堰、三角堰、梯形堰流量计算
- 变压器绝缘油试验
- 【深信服】大云云计算PT1-adesk认证必备考试题库(含答案)
- T-CHSA 010-2023 恒牙拔牙术临床操作规范
- Python数据分析与应用(第2版)PPT完整全套教学课件
- 4s店整车库管岗位职责5篇
- 内分泌科常见疾病诊疗常规
- 精神分裂症病历
评论
0/150
提交评论