嵌入式Linux软件开发工程师职业资格认证考卷
注:普通教室考试时间:120分钟
一、填空题(每小题1分,共20分)
1、在linux系统中,以文件方式访问设备。
2、安装linux系统对硬盘分区时,必须有两种分区类型:文件系统分区和交换分区。
3、在Linux系统中,用来存放系统所需要的配置文件和子目录的目录是/etc 。
4、进行远程登录的命令是telnet 。
5、利用gdb进行调试时,可通过step 或next 命令进行单步执行。
6、gcc的编译可分为__预处理__、编译、汇编和_ ___链接__等四个阶段。
7、卸载Linux内核模块使用命令___ rmmod ___。
8、ARM处理器的中断有两种处理模式,分别为___快速中断____模式和的___快速中断_ ___模式。
9、Linux文件的链接可分为符号链接和___ _硬链接__两种。
10、Qt/Embedded使用___ 信号___和___ _插槽____的机制实现函数的回调。
11、ARM处理器有多种运行模式,用户程序运行在其中的__ _用户___模式。
12、Linux系统在启动init进程时使用的配置文件是_ _/etc/inittab ____。
13、交叉编译是指___ 在一个平台上生成可以在另一个平台上执行的代码___。
14、在linux系统中,以文件方式访问设备。
15、利用gdb进行调试时,可通过step或next 命令进行单步执行。
16、Qt/Embedded的底层图形引擎基于FrameBuffer 接口技术。
17、Linux操作系统的系统管理员(也就是超级用户)帐号是root。
18、编写的shell程序运行前必须赋予该脚本文件执行权限。
19、使用gcc编译c程序生成可执行文件有时似乎是一步完成的,但实际要经历如下四步:预处理、编译、
汇编和连接。
20、内核分为进程管理系统、内存管理系统、IO管理系统和文件管理系统等四个子系统。
二、单项选择题。(每小题1分,共15分)
1、如下哪一个命令可以帮助你知道shell命令的用法(A)
A. man
B. pwd
C. help
D. more
2、在大多数Linux发行版本中,以下哪个属于块设备(B )
A. 串行口
B. 硬盘
C. 虚拟终端
D. 打印机
3、在Linux系统,默认的shell是什么(  A )
A.bash
B.ash
C.csh
4、L ILO的配置文件是:(  B )
A. /etc/conf
B. /f
C. /proc/kcore
D. /usr/local/
5、Linux文件权限一共10位长度,分成四段,第三段表示的内容是(D )
A.文件类型
B.文件所有者的权限
C.文件所有者所在组的权限
D.其他用户的权限
6、不是shell具有的功能和特点的是(  A )
A.管道
B.输入输出重定向
C.执行后台进程
D.处理程序命令
7、你用vi编辑器编写了一个脚本文件shell.sh,你想将改文件名称修改为shell2.sh,下列命令(  B )可以实现。
A. cp shell.sh shell2.sh
B. mv shell.sh shell2.sh
C. ls shell.sh >shell2.sh
D. ll shell.sh >shell2.sh
8、字符设备文件类型的标志是(  B )
A. p
B. c
C. s
D. l
9、(B )命令可更改一个文件的权限设置?
A. attrib
B. chmod
C. change
D. file
10、系统中有用户user1和user2,同属于users组。在user1用户目录下有一文件file1,它拥有644的权限,如果
user2用户想修改user1用户目录下的file1文件,应拥有(  B )权限。
A. 744
B. 664
C. 646
D. 746
11、在CPU和物理内存之间进行地址转换时,(B )将地址从虚拟(逻辑)地址空间映射到物理地址空间。
A、TCB
B、MMU
C、CACHE
D、DMA
12、关于文件系统的安装和卸载,下面描述正确的是(A )。
linux内核文件放在哪A. 如果光盘未经卸载,光驱是打不开的
B. 安装文件系统的安装点只能是/mnt下
C. 不管光驱中是否有光盘,系统都可以安装CD-ROM设备
D. mount /dev/fd0 /floppy 此命令中目录/floppy是自动生成的
13、用下列(A )命令查看Linux使用了多少内存
A.cat /proc/meminfo
B. cat /bin/meminfo
C.vi /proc/meminfo
D.vi /user/local/meminfo
14、下列(  D )设备是字符设备。
A. hdc
B. fd0
C. hda1
D. tty1
15、有如下的命令:$dd if=f1 of=f2。其中if=f1表示(  A )
A. 以f1作为源文件,代替标准输入
B. 以f1作为目标文件,代替标准输出
C. 当条件满足f1的时候,执行真正的拷贝
D. 拷贝的过程中,不转化文件
三、多项选择题。(每小题3分,共15分)
1. 嵌入式操作系统不同于通用操作系统的功能是(BC )
A、任务调度
B、可裁减性
C、强实时
D、设备管理
E、存储器管理
2. Linux系统中的设备文件通常有如下分类( BCD )
A、虚拟设备
B、字符设备
C、网络设备
D、块设备
E、存储设备
3. 常用的软件开发模型有( BCD )
A、结构型
B、原型模型
C、迭代型
D、瀑布型
E、综合型
4. ARM处理器的工作模式中属于异常模式的有( CDE )
A、用户模式usr
B、系统模式sys
C、外部中断模式irq
D、中止模式abt
E、快速中断模式fiq
5. 芯片总线又称元件级总线,它是指系统内或插件板内各元件之间所使用的总线,下列属于芯片总线的有( ACD )
A、I2C总线
B、ISA总线
C、SPI总线
D、SCI总线
E、PCI总线
四、判断题。(每小题1分,共10分)
1、在gdb调试过程中,不退出gdb也可以执行UNIX shell命令。(对)
2、Linux文件系统的文件都按其作用分门别类地放在相关的目录中,对于外部设备文件,一般应将其放在/etc目
录中。(错)
3、在Linux系统中,测试DNS服务器是否能够正确解析域名的的客户端命令,使用命令nslookup 。(对)
4、激活网卡需要编译内核。(错)
5、在gdb调试过程中,用make命令可以不用退出gdb就可以重新产生可执行文件。(对)
6、在重新启动Linux系统的同时把内存中的信息写入硬盘,应使用shutdown –r now命令实现。(对)
7、ARM处理器的运行模式可通过中断或异常处理改变。(对)
8、BootLoader属于嵌入式操作系统的一部分。(错)
9、Busybox常用于替代桌面系统中的init和shell等程序,为嵌入式用户提供使用环境。(对)
10、在嵌入式系统中,整个系统的加载启动任务就完全由Boot Loader 来完成。(对)
五、综合题。(每小题5分,共20分)
1、已知C语言程序有主程序模块prog.c,prog.h,其中调用了另一模块subr.c, subr.h中的功能。试写出一个可将这两个模块编译成可执行文件pr1的makefile。(5分)
pr1: prog.o subr.o
gcc –o pr1 prog.o subr.o
prog.o: prog.c prog.h
gcc –c –o prog.o prog.c
subr.o: subr.c subr.h
gcc –c –o subr.o subr.c
2、下面几条宏定义语句的GPBCON 、GPBDAT、GPBUP地址分别是多少?
#define GPIO_CTL_BASE 0x56000000
#define bGPIO(p) __REG(GPIO_CTL_BASE + (p))
#define GPBCON bGPIO(0x10)
#define GPBDAT bGPIO(0x14)
#define GPBUP bGPIO(0x18)
GPBCON寄存器地址0X56000010
GPBDAT寄存器地址0X56000014
GPBUP 寄存器地址0X56000018
3、简述说明字符设备注册函数register_chrdev和注销函数unregister_chrdev中参数的意义。
int register_chrdev(unsigned int major, const char *name, struct file_ operations *fops);
其中,major是为设备驱动程序向系统申请的主设备号,如果为0,则系统为此驱动程序动态分配一个主设备号。name是设备名,fops是对各个调用的入口点说明。此函数返回0时表示成功;返回-EINVAL,表示申请的主设备号非法。如果动态分配主设备号成功,此函数将返回所分配的主设备号。如果register_chrdev()操作成功,设备名就会出现在/proc/dvices文件中。
当设备驱动模块从Linux内核中卸载,对应的主设备号必须被释放。字符设备在cleanup_ module()函数中调用unregister_chrdev()来完成设备的注销。unregister_chrdev()的定义为:
int unregister_chrdev(unsigned int major, const char *name);
此函数的参数为主设备号major和设备名name。Linux内核把name和major在内核注册的名称对比,如果不相等,卸载失败,并返回-EINVAL;如果major大于最大的设备号,也返回-EINVAL。
4、Linux设备驱动程序通过调用request_irq函数来申请中断,通过free_irq来释放中断。它们在linux/sched.h中的定义如下:
int request_irq(unsigned int irq, void (*handler)(int irq,void dev_id,struct pt_regs *regs),unsigned long flags, const char *device, void *dev_id );
void free_irq(unsigned int irq, void *dev_id);
试简述request_irq函数。
Linux设备驱动程序通过调用request_irq函数来申请中断,从request_irq函数返回的值为0时,表示申请成功;负值表示出现错误。
该函数中的参数为:
irq表示所要申请的硬件中断号。
handler为向系统登记的中断处理子程序,中断产生时由系统来调用,调用时所带参数irq为中断号,dev_id为申请时告诉系统的设备标识,regs为中断发生时寄存器内容。
device为设备名,将会出现在/proc/interrupts文件里。
flag是申请时的选项,它决定中断处理程序的一些特性,其中最重要的是决定中断处理程序是快速处理程序(flag 里设置了SA_INTERRUPT)还是慢速处理程序(不设置SA_INTERRUPT)。
六、应用实践题(每小题10分,共20分)
1、Qt/Embedded对嵌入式GUI提供了强大的支持,信号和插槽机制是QT的核心机制,使用QT实现如下界面的登陆程序,其原代码如下所示,请回答如下问题:
1)什么是Qt中的信号插槽机制?(3分)
2)应用程序中用到了哪些控件,列举2个并说明该控件的特点?(4分)
3)根据注释完成程序中相应的语句?(4分)
#include <QtGui/QtGui>
#include "window.h"
CWinDlg::CWinDlg(QWidget* parent) : QDialog(parent)
{
setWindowTitle("Example"); /*设置窗口的标题*/
Edit1 = new QLineEdit; /*创建一个Edit1和一个Buttion1*/
Button1 = new QPushButton("OK");
Edit1->setEchoMode(QLineEdit::Password);
QVBoxLayout* Layout1 = new QVBoxLayout; /*创建一个布局对像Layout1*/
Layout1->addWidget(Edit1); /*把Edit1加入到Layout1*/
Layout1->addWidget(Button1); /*把Button1加入到Layout1*/
(1); /*应用Layout1布局*/
(2) ; /*建立Signal-Slot,使button1与function()相关联*/
}
CWinDlg::~CWinDlg()
{
delete Edit1; /*删除Edit1与Button1对象*/
delete Button1;
}
void CWinDlg::function()
{
if(Edit1->text() == "example") /*如果Edit1输入"example"*/
{ /*显示"Pass!"消息框*/
QMessageBox::warning(this, "warning", "Pass!", QMessageBox::Yes);
}
else
{ /*显示"Error!"消息框*/
QMessageBox::warning(this, "warning", "Error!", QMessageBox::Yes);
}
}
#include <QtGui/QtGui>
#include "window.h"
int main(int argc, char* argv[])
{
QApplication app(argc, argv); /*创建QT应用程序*/
CWinDlg dlg; /*创建窗口*/
(); /*运行程序*/
}
1、参考答案:
答案要点:
1)什么是Qt中的信号插槽机制?与回调函数机制有何不同?(3分)
答案要点:回调函数机制是事先将一个回调函数指针传递给一个处理过程,当这个处理过程得到执行时,回调预先定义好的回调函数以期实现激活其他处理程序的目的。不同与回调函数机制,Qt提供了信号和插槽机制,信号是一个特定的标识;一个槽就是一个函数,与一般函数不同,槽函数既能和信号关联,当某个事件出现时,通过发送信号,可以将与之相关联的槽函数激活,执行相应代码。
2)应用程序中用到了哪些控件,列举2个并说明该控件的特点?(4分)
答案要点:应用程序中用到的控件有(1)文本框控件Edit,文本框控件主要用来显示或接收用户的输入信息。
(2)按钮控件Button,按钮控件主要响应用户单击功能。
3)根据注释完成程序中相应的语句?(4分)
(1)setLayout(Layout1);
(2) connect(Button1, SIGNAL(clicked()), this, SLOT(function()));
2、假定你在目录/home/arm下有一个C程序,他由几个单独的文件组成,而这几个文件又分为包含了其他文件,如下图所示:
完成下列任务:
1)编写makefile文件,最终的目标文件为hello(交叉编译器为arm-linux-gcc)。
2)在目标机上通过网络文件系统挂载/mnt 到宿主机上的/home/arm目录。
hello: main.o list.o symbol.o table.o
arm-linux-gcc -o prog main.o list.o symbol.o table.o
main.o: main.c table.h symbol.h list.h
arm-linux-gcc -c -o main.o main.c
list.o: list.c list.h
arm-linux-gcc -c -o list.o list.c
symbol.o: symbol.c symbol.h
arm-linux-gcc -c -o symbol.o symbol.c
table.o: table.c table.h symbol.h list.h
arm-linux-gcc -c -o table.o table.c
clean:
rm hello *.o
2)Mount –t nfs –o noclock 192.168.0.10:/home/armtest/hello /mnt

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。