复习嵌入式46.docx
- 文档编号:10199409
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:22
- 大小:28.63KB
复习嵌入式46.docx
《复习嵌入式46.docx》由会员分享,可在线阅读,更多相关《复习嵌入式46.docx(22页珍藏版)》请在冰豆网上搜索。
复习嵌入式46
2、简述共享内存实现方法。
(1)创建共享内存,使用shmget函数。
(2)映射共享内存,将这段创建的共享内存映射到具体的进程空间去,使用shmat函数。
3、内核空间和用户空间通过什么进行交互?
外部设备与内核空间通过什么进行交互?
答:
系统调用用来对内核空间与用户空间交互,而外设与内核空间的交互则通过驱动程序交互。
5、举出5个驱动程序的常用接口函数。
open(),close(),ioctl(),read(),write()
6、如何建立守护进程?
1创建子进程,父进程退出;
2调用setsid()创建一个新的会话,并担任该会话组组长;
3改变当前目录为根目录chdir(“/”);
4重设文件权限掩码umask(0)。
7、从嵌入式系统底层到上层应用软件,试分析嵌入式计算系统的组成主要分为哪几个部分,并写出各部分所完成的功能。
(1)硬件层;
(2)中间层(嵌入式系统初始化,硬件相关的驱动程序);(3)软件层(操作系统、文件系统、GUI,网络及通用组件);(4)功能层。
13、下面是创维特实验箱上的键盘模块驱动程序的部分代码,请在空白处填写完整的代码,完成程序。
条件:
键盘打扫采用I/O内存方式,地址为0X,建议映射时宽度为0X0100
#include
………………
#include
#defineKEY_MAJOR253
#defineDEVICE_NAME"key"
staticstructtimer_listmy_timer;
staticunsignedchar*out_base;
staticunsignedchar*key_scan;
staticunsignedchartt=0xff;
staticunsignedcharkey_table[4][4]={
{0,'.','D','\n'},
{7,8,9,'C'},
{4,5,6,'@'},
{1,2,3,'#'},
};
/************************************
displayled
*************************************/
staticvoiddisplay_led(unsignedchartmp)
{
intnum=tmp;
switch(num){
case1:
writeb(0xef,__out_base______);
tt=0xef;break;//eachledlightaccordingtothekeynumber
……
default:
break;
}
printk("thisis%x\n",num);
}
/*****************************************
scankeyinturns
***************************************/
staticvoiddo_key_scan(void)
{
unsignedcharkey_mask=0x0f,input_key,input_key1,tmp;
unsignedintrow=0,col=0;
while(col<4)
{
*((unsignedchar*)out_base)=~(0x1<
udelay(30000);
input_key=*((unsignedchar*)key_scan)&0x0f;//scaneachrowofcertaincolumtocheckkeydown
if(input_key!
=key_mask)
{
udelay(30000);
input_key1=*((unsignedchar*)key_scan)&0x0f;
if(input_key==____input_key1____)
{
tmp=(~input_key)&0x0f;//workouttherownumber
row=0;
while(tmp>1){
tmp=tmp>>1;
row++;
}
tmp=key_get_char(row,col);//gettheassiccodeofkey;
printk("%x\n",tmp);
display_led(tmp);//displaymatchedled
}
}
}
;
}
/************************************************
*initfunction
*registerchardevice
********************************************/
staticint__initkey_init(void)
{
intret_val;
ret_val=5;
if(ret_val<0){
printk("%sfailedwith%d\n",
"Sorry,registeringthecharacterdevice",ret_val);
returnret_val;
}
elseprintk("registersuccessfully!
\n");
/*phytovirt*/
if(request_region(0x,0x02,____DEVICE_NAME____)==NULL)printk("Error!
\n");
out_base=(unsignedchar*)ioremap(___0x_____,0x02);
key_scan=out_base+2;//thephysicaladdrofkey_scanis0x
printk("%s3Themajordevicenumberis%d.\n","Registerationisasuccess",KEY_MAJOR);
printk("you'llhavetocreateadevicefile.\n");
printk("Wesuggestyouuse:
\n");
printk("mknod%sc%d0\n",DEVICE_NAME,KEY_MAJOR);
return0;
};
综合题(10分)
将嵌入式系统与Internet结合时,后者的通信协议对计算机存储器、运算速度的要求比较高,因此在系统资源要求与提升系统联网之间就存在了很大的矛盾。
如何利用嵌入式系统的MCU自身有限资源对信息进行TCP/IP协议处理,使之成为可以在Internet上传输的IP数据包,已经成为嵌入式Internet技术所要解决的主要问题,试问目前解决这个问题的方案可能有哪几种?
1.把标准网络协议(TCP/IP)一直扩展到嵌入式设备当中,由嵌入式系统自身实现联网功能,每个设备都可与Internet相连。
这是解决问题的最佳方案及未来电器、设备的发展方向。
例如Netscillon公司的ARM+NET系列芯片,将其嵌入到任何设备中既可实现上网。
此方案对微处理器性能的要求较高。
2.通过专用的WEB服务器实现。
在现有的嵌入式系统中大量使用的是8位和16位MCU,并不要求每个设备都直接连到Internet上,用户可以通过Internet接近设备,然后再用轻量级网络扩展到多个设备上。
如电力线、RS-485、RS-232、I2C等。
专用WEB服务器可作为子网设备路由器来转换和实现嵌入式系统与外部网的通信。
emWare公司专门为嵌入式微控制器设备设计的网络服务器。
3.RS232/485,CAN,I2C
通过嵌入式网关(emGateway)联接。
嵌入式网关运行TCP/IP协议,与嵌入式设备轻量级网络(如RS-232,RS-485,现场总线等)相连接,提供与Internet或局域网的协议转换及路由功能。
简答题
1、简述设备驱动的开发流程。
①查看原理图,理解设备的工作原理;②定义主设备号;③在驱动程序中实现驱动的初始化,如果驱动程序采用模块的方式,则实现模块的初始化;④设计所要实现的文件的操作,定义file_operation结构;⑤实现中断服务(中断并不是每个设备驱动所必须的);⑥编译该驱动程序到内核中,或者用insmod命令加载;
⑦测试该设备。
3、进程间通信有哪些方法?
有管道、信号、共享内存、消息队列、报文。
10、进程的相关系统调用有哪些?
作用如何?
Fork()创建一个子进程,返回:
子进程中为0,父进程中为子进程ID,出错为-1;
Exec()执行另一个程序;
_exit()直接使进程停止运行,清除其使用的内存空间,并清除其在内核中的数据结构;
Wait()用于使父进程阻塞,直到一个子进程结束或收到一个指定信号为止。
中断的使用方法
设备驱动程序通过调用request_irq函数来申请中断,通过free_irq来释放中断。
其中:
Intrequest_irq(unsignedintirq,void(*handler)(intirq,voiddev_id,structpt_regs*regs),unsignedlongflags,constchar*device,void*dev_id)
Voidfree_irq(unsignedintirq,void*dev_irq)
较为重要的是中断号和中断处理函数。
操作题。
写出完成以下功能的命令:
1、加载U盘内容到/mnt/udisk文件夹下。
mount–tvfat/dev/sda1/mnt/udisk
2、更改用户root的密码。
(在#提示符下)。
passwdroot
六、程序
1、编写一个进程创建程序,用fork()创建进程并打印出父子进程的进程号(要求写完整的程序)。
main()
{intpid;
pid=getpid();
printf(“Fatherpid%d\n”,pid);
pid=fork();
if(pid>0)
{Printf(“Father!
thechildpidis%d\n”,pid);exit(0);
}if(pid==0)
{printf(“Child\n”);exit(0);}
if(pid<0)
{printf(“Error,CreateFailure\n”);exit
(1);
}}
六、综合题(10分)
3、阅读以下说明和C语言代码,回答问题1至问题4。
有两个任务(编号分别为0和1)需要访问同一个共享资源,为了解决竞争条件(racecondition)的问题,我们需要实现一种互斥机制,使得在任何时刻只能有一个任务访问该共享资源。
代码一给出了一种实现方法。
【代码一】
1:
intflag[2];/*flag数组,初始化为FALSE*/
2:
Enter_Critical_Section(intmy_task_id,intother_task_id)
3:
{
4:
while(flag[other_task_id]==TRUE);/*空循环语句*/
5:
flag[my_task_id]=TRUE;
6:
}
7:
Exit_Critical_Section(intmy_task_id,intother_task_id)
8:
{
9:
flag[my_task_id]=FALSE;
10:
}
当一个任务要访问临界资源时,就可以调用代码一给出的这两个函数。
代码二给出
了任务0的一个例子。
【代码二】
Enter_Critical_Section(0,1);
....使用这个资源.....
Exit_Critical_Section(0,1);
.....做其他的事情.....
什么是临界资源(criticalresource)?
请用100字以内文字简要说明。
1、在多道程序系统中,各进程可以共享各类资源,但有些资源一次只能供一个进程使用,需要互斥访问的资源称为临界资源,如打印机、共享变量、表格等。
代码一所示的方法能够实现共享资源的互斥访问吗?
请用300字以内文字举例说明。
2、代码一所示的方法不能实现资源互斥访问。
例如,考虑如下的情形:
(a)初始化的时候,flag数组的两个元素值均为FALSE
(b)任务0先执行,在执行while循环语句时,由于flag[1]=FALSE,所以顺利结束,不会被卡住。
假设这个时候来了一个时钟中断,打断它的运行;
(c)任务1去执行,在执行while循环语句时,由于flag[0]=FALSE,所以顺利结束,不会被卡住,然后就进入了临界区;
(d)后来当任务0再执行时,也进入了临界区,这样就同时有两个任务在临界区。
、
代码一采用了一种繁忙等待(busywaiting)的策略,这种策略的缺点是什么?
请用
100字以内的文字简要说明。
简要说明:
繁忙等待的基本思路是:
当一个任务要进入临界区,首先需要检查是否允许它进入,若允许,则直接进入;否则,则循环等到,使用一个循环语句不断执行测试指令,从而浪费了大量的CPU资源。
如果把Enter_Critical_Section()函数中的两条语句互换一下位置,会出现什么情况?
可能会出现死锁
简答题
1、驱动程序对外设物理地址的访问方式?
4、如何建立守护进程?
5、I/O端口和I/O内存有何不同,如何使用?
6、进程的相关系统调用有哪些?
作用如何?
7、什么情况下用共享内存、信号、消息队列?
8、父进程产生子进程时空间分配如何?
父进程产生子进程时,只分配一个指向父进程的指针向量,当子进程执行时才从父进程那复制一份为自己所用。
9、什么时候用轮询?
什么时候用中断?
在I/O设备驱动程序开发中,如何克服消耗CPU资源过多?
轮询主要是针对系统功能单一而且专用的场合,而中断则主要适用于系统功能多的复杂系统,且功能无主次之分,尤其是各功能的触发是偶然的;为了克服消耗CPU资源过多,可以采用中断机制,在适当情况下可以非阻塞方式
程序填空题
Led灯驱动功能模块(中断模式):
#defineMAJOR_NUM251
staticvoid*out_base;
staticint__initled_init(void)
{
intret;
ret=register_chrdev(MAJOR_NUM,"led",&led_fops);
if(ret){
printk("ledregisterfailure\n");}
else{
printk("ledregistersuccess\n");
____requset_mem_region(0x,0x0100,"led");________;
_____out_base=ioremap(0x,0x0100);______;
_____set_external_irq(IRQ_EINT2,EXT_FALLING_EDGE,GPIO_PULLUP_DIS);_____;
____request_irq(IRQ_EINT2,led_interfunc,0,"led",0);_______;}
returnret;
}
staticvoid__exitled_exit(void)
{
intret;
_____free_irq(IRQ_EINT2,0);_______;
_____iounmap(out_base);______;
______release_mem_region(0x,0x0100);______;
ret=___unregister_chrdev(MAJOR_NUM,"led");_________;
if(ret){
printk("ledunregisterfailure\n");}
else{
printk("ledunregistersuccess\n");}
}
2013-5-22
1、通常所讲的交叉编译就是在X86架构的宿主机上生成适用于ARM架构的()格式的可执行代码。
A、elfB、exeC、peD、sh
2、以下哪个GUI是由中国人主持的一个自由软件项目:
()
A MinuGUI B OpenGUICMicroWindowsDQt/Embedded
3、以下哪种方式不是Linux操作系统中任务之间通信方式。
()
A、信号量B、消息队列C、邮件D、共享内存
4、操作系统内核与用户程序、应用程序之间的接口是()。
A、shell命令B、图形界面
C、系统调用D、C语言函数
5、下列进程状态的转换中,不正确的是()。
A.就绪一运行B.运行一就绪C.就绪一阻塞D.阻塞一就绪
6、通常,用户编写的程序中所使用的地址是()。
A.逻辑地址B.物理地址C.绝对地址D.内存地址
7、在下面的叙述中,()不是嵌入式图形用户接口(GUI)的主要特点。
A. 运行时占用的系统资源少 B. 模块化结构,便于移植和定制
C. 可靠性高 D. 美观华丽,图形算法复杂
8、设备的打开、关闭、读、写等操作是由()完成的。
A.用户程序B.编译程序C.设备分配程序D.设备驱动程序
9、Linux操作系统支持多种设备,这些设备的驱动程序不包括以下的那一项特点()
A、设备驱动可以使用标准的内核服务如内存分配、中断和等待队列等。
B、大多数Linux设备驱动可以在需要的时候加载到内核,同时在不再使用时被卸载。
C、当系统启动及设备驱动初始化后,驱动程序将维护其控制的设备。
如果一个特有的设备驱动程序所控制的物理设备不存在,将会影响整个系统的运行。
D、Linux设备驱动程序可以集成为内核的一部分。
在编译内核的时候,可以选择把哪些驱动程序直接集成到内核里面。
10、多个进程的实体能存在于同一内存中,在一段时间内都得到运行。
这种性质称作进程的()。
A.动态性B.并发性
C.调度性D.异步性
判断改错题。
注意:
只判断不改错不得分
1、用户程序应与实际使用的物理设备无关,这种特性就称作设备独立性。
正确。
2、应用程序和驱动程序的编程模型完全不同,前者是以main()函数为整个程序的入口点的,后者根本就没有程序入口点。
错误。
后者的入口点是init_modual()函数。
3、如果fork()系统函数调用成功,返回值只有一种,要么是0(在子进程中)要么是子进程的ID号。
错误。
创建成功,它是唯一有两个返回值的系统调用,需要同时在父进程和子进程中给出返回值。
4、进程ID为1通常是init进程,在自举过程结束时由内核调用。
init进程绝不会终止,它是一个系统进程,并且以超级用户特权运行。
错误,它是一个普通的用户进程(与交换进程不同,它不是内核中的系统进程)。
5、一般来说,在fork之后是父进程先执行还是子进程先执行是不确定的,是完全随机的。
错误。
这取决于内核所使用的调度算法。
6、为了提高CPU执行效率,在驱动程序编写的时候应尽可能地对I/O设备访问采用阻塞方式;在应用层程序编写的时候则对用户进程采取非阻塞的方式。
错误,驱动程序中不能采用阻塞方式,内核进程不能阻塞。
7、命名管道在完成进程间通信的任务后,系统就将资源回收,不能再被任何进程读或写了。
错误,管道文件还是保存在磁盘文件中。
8、所有守护进程都以超级用户的优先权运行,所有守护进程都不具备控制终端,并且其父进程都是init进程。
错误,其父进程不是都是init进程。
9、进程试图读空管道时,在有数据写入管道前,进程将一直阻塞。
正确
10、管道已经满时,进程再试图写管道,在其它进程从管道中移走数据之前,写进程将一直阻塞。
正确
填空题(每空0.5分,共20分)
1、嵌入式软件的分类:
—系统——软件、—支撑软件和——、应用软件——————软件。
2、内核负责管理各个任务,或者为每个任务分配CPU时间,并且负责任务之间的———通信—————,内核的基本服务是——任务切换—————。
3、进程的运行有两种方式,即———独立运行————和———使用父进程运行————。
5、程序的执行实例被称为—进程————,并且一定有一个唯一的数字标识符与之对应,通常被称为———进程ID—————。
6、Linux系统是一个多进程的系统,进程之间具有——并行性——、互不干扰——————的特点。
linux中进程包含3个段,分别为代码段”、“数据段”和“堆栈段”。
7、现在linux使用的进程间通信方式有很多,其中属于UNIX进程间通信方式的是————管道————和___有名管道______、___信号signal____;属于SystemV或POSIX进程间通信方式的有—————消息队列———、—————共享内存———、————信号量————;属于网络间不同机器上的不同进程间通信的方式是———套接字—————。
8、—————信号———是软件中断,它是Unix系统中最为古老的进程之间的通信机制,它被经常用于在一个或多个进程之间传递———异步—————信号。
9、、系统在某个信号出现时会按照下列三种方式中的一种进行操作:
———忽略此信号捕捉信号.执行系统默认动作——。
10、信号处理的主要方法有两种,一种是——使用简单的signal函数——————,另一种是—使用信号集函数组———————。
一、选择题
1、通常,用户编写的程序中所使用的地址是()。
A.逻辑地址B.物理地址
C.绝对地址D.内存地址
2、设备的打开、关闭、读、写等操作是由()完成的。
A.用户程序B.编译程序
C.设备分配程序D.设备驱动程序
3、系统软件是______的软件。
A、向应用软件提供系统调用等服务B、与具体硬件逻辑功能无关
C、在应用软件基础上开发D、并不具体提供人机界面
4、设备按照信息的传递特性可分为______和块设备。
A、共享设备B、输入输出设备 C、系统设备 D、字符设备
5、以下哪个不是Linux进程的状态:
()
A.TASK_ZOMBIEB.TASK_INTERRUPTIBLE
C.TASK_RUNNING
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 复习 嵌入式 46