驱动程序开发期末抽题题库.doc

上传人:h**** 文档编号:1698633 上传时间:2019-03-11 格式:DOC 页数:8 大小:340.50KB
下载 相关 举报
驱动程序开发期末抽题题库.doc_第1页
第1页 / 共8页
驱动程序开发期末抽题题库.doc_第2页
第2页 / 共8页
驱动程序开发期末抽题题库.doc_第3页
第3页 / 共8页
驱动程序开发期末抽题题库.doc_第4页
第4页 / 共8页
驱动程序开发期末抽题题库.doc_第5页
第5页 / 共8页
点击查看更多>>
资源描述

1、嵌入式系统驱动开发题库(35 题)硬件(8 题):1. 请阐述下图 Fig1 中蜂鸣器电路的工作原理;如果将 Q1 变成 PNP 型三极管如何设计,有什么缺点?当 GPB0 引脚为低电平时,三极管 Q1 饱和导通,蜂鸣器通电鸣响。若 GPB0 引脚为高电平时,三极管 Q1 截止,蜂鸣器没有电流就不鸣响1)GPB0 输出高电平时 NPN 型三极管导通,蜂鸣器接电发声。 2)变成 PNP 型三极管: 3)改为 PNP 设计的话上电即响。2. 请根据 Fig2 阐述课程中键盘驱动的原理。Fig2.键盘扫描电路如果有按键按下去,对应的行输出扫描脉冲就会在对应的列信号线产生变化,就会触发键盘中断。键盘中

2、断服务程序就会将键盘的按键键码寄存器读出来,判断是那个按键按下去。如果没有按键按下,列信号线不会产生中断,没有对按键的处理矩阵键盘由行信号和列信号组成矩阵。每个按键连接到行信号和列信号的交叉点。通过矩阵键盘控制器行信号线顺序逐行输出扫描脉冲,列信号线作为输入信号线。3、请说出 Fig3 电路的原理,R38-R41 电阻值的计算方法。Fig3.LED 发光二极管驱动电路由于发光二极管是向导电,要使 LED 亮,X 引脚低电平即可。 R=(VDD 电源电压-LED 电压)/I 电流4、如何配置 4412 的 GPIOX3_2 到 X3_5 口作为输入口?先声明变量 GPX3CON 声明变量 GPX

3、3CON=iomap(地址) Writel(readl(x) 6、如何配置 4412 的 GPIOX3_2 到 X3_5 口作为输出口?7、如何使 4412 的 GPIOX3_2 到 X3_3 口输出低电平,GPIO X3_4 到 X3_5口输出高电平。8、4412端口有GPXCON、GPXDAT、GPXPUD三个寄存器,分别代表什么?GPXCON为控制寄存器,GPXDAT为数据寄存器,GPXUP 为上拉电阻寄存器,GPXPUD为下拉电阻寄存器。Drivers:(27)9、在驱动程序代码中 module_init(func1),module_exit(func2)两个宏的作用是什么?在 lin

4、ux 下,运行什么命令会调用 func1?运行什么命令会调用 func2?moudle_init 和 module_exit 是比较特别的内核宏来指出这两个函数的角色, 一个在模块加载到内核时被调用( func1 )以及一个在模块被去除时被调用( func2 ).10、请叙述下面的 makefile 中各个字段的含义11、驱动代码中都会涉及到两个结构体,分别是 struct file 和 struct inode,他们分别代表什么含义,而且在什么时候被创建?1)struct file 表示一个打开的文件(文件的描述符)主要供与文件系统对应的设备文件驱动程序使用。2)struct inode 表

5、示文件结点,因为对于单个文件而言可能会有许多个表示打开的文件的描述符,因而就可能会有多个个 file 对应一个 inode。3)由内核在 open()时创建,并(将该文件描述符)传递给该文件上进行操作的所有函数,直到最后的 close 函数,在文件的所有实例都被关闭后,内核会释放这个数据结构。12、 class_create(); device_create();起什么作用?class_create();为自动创建设备文件,device_create();为自动创建设备节点。13、 file_operations 结构体一般都有那几个成员,举三个成员例子,它们的作用都是什么? open:打开设

6、备,如果这个项是 NULL, 设备打开一直成功, 但是你的驱动不会得到通知。 ioctl:控制命令,系统调用提供了发出设备特定命令的方法 。 write:写,发送数据给设备。 read:读,用来从设备中获取数据。 release:释放设备,可以为 NULL。14、 驱动程序中主次设备号分别代表什么?如果事先已经分配主次设备号,那么用什么宏取得 dev_t 类型的设备编号?反过来又如何取得主次设备号?主设备号被系统用来确定驱动程序,次设备号被驱动程序用来确定具体的设备。用 MKDEV(int major,int minor)取得设备编号用 MAJOR(dev_t dev)取得主设备号,MINOR

7、(dev_t dev)取得次设备号。15、 创建设备号的方式有哪几种,我们常采用哪种?各种方法都通过什么函数或命令实现?有静态与动态两种申请方式。1)静态申请:使用 register_ chrdev_region 函数注册设备号例:int register_ chrdev_region( dev_t from , unsigned count , const char * name )2)动态申请:使用 alloc_chrdev_region 分配设备号例:int alloc_chrdev_region( dev_t *dev , unsigned baseminor , unsigned c

8、ount , const char * name )16、 创建设备文件的方式有哪几种?分别是如何创建的?有两种方法,一是使用 mknod 命令手工创建,二是自动创建(驱动程序来实现)。注:手动用这个 mknod filename type major minor 自动用这俩函数 class_create(); device_create();17、 驱动代码中申请内存和释放内存的函数分别是那几种?写出声明一个设备结构及申请对应内存的步骤。申请内存 Kmalloc()和 vmalloc(),释放内存 Kfree()和 vfree()。注:以 I2C 为例:18、 驱动代码中数据在用户空间和内核

9、空间进行传输的函数分别是那些?应用程序向设备写入数据用什么函数?copy_to_user()和 copy_from_user()FILE *fp = open(“/dev/ttyS0”, O_RDWR);19、 驱动模块加载,卸载,查看的命令分别是什么?分别调用驱动程序中哪些函数?insmod:加载模块,rmmod:卸载模块,modinfo :获得模块的信息lsmod:查看系统中所有已经被加载了的所有的模块以及模块间的依赖关系init_module 函数是加载模块时会被调用的,一般作一些初始化的工作;cleanup_module 函数是卸载模块时会被调用的,做一些清理的工作。注:在使用 ini

10、t_module 和 cleanup_module 时要用 module_init(初始化函数名),module_exit(卸载时函数名)这两个宏来声明一下。20、 驱动程序中访问端口的方式有哪两种?这两种方式都采用哪种编址方式?IOPORT、IOMEM,一种是 I/O 映射方式(I/Omapped) ,另一种是内存映射方式(Memorymapped ) 。21、 IOPORT 形式访问端口,程序代码应如何编写?答:struct resource *request_region(unsigned long first, unsigned long n, const char *name); /

11、申请使用 first 开始的 n 个端口,name 为设备名 void release_region(unsigned long start, unsigned long n); /释放端口int check_region(unsigned long first, unsigned long n);/检查端口是否可用unsigned inb(unsigned port);/读字节端口void outb(unsigned char byte, unsigned port);/写字节端口22、 IOMEM 形式访问端口,程序代码应如何编写?答:struct resource *request_me

12、m_region(unsigned long start, unsigned long len, char *name); /申请使用 first 开始的 n 个端口,name 为设备名 void release_mem_region(unsigned long start, unsigned long len); /释放端口 int check_mem_region(unsigned long start, unsigned long len); /检查端口是否可用unsigned int ioread8(void *addr); /读字节端口 void iowrite8(u8 value,

13、 void *addr); /写字节端口23、 请列举你熟悉的几个读写端口的 linux 内核提供的函数。读写字节端口(8 位宽)unsigned inb(unsigned port);【读】voi outb(unsigned char byte, unsigned port);【写】读写字端口(16 位宽)unsigned inw(unsigned port);【 读】voi outw(unsigned short word, unsigned port);【写】读写长字端口(32 位宽)unsigned inl(unsigned port);【读】voi outl(unsigned lon

14、gword, unsigned port);【写】读写一串字节unsigned insb(unsigned port, void *addr, unsigned long count);【读】voi outsb(unsigned port, void *addr, unsigned long count);【写】读写一串字unsigned insw(unsigned port, void *addr,unsigned long count);【读】voi outsb(unsigned port, void *addr, unsigned long count);【写】读写一串长字unsigne

15、d insl(unsigned port, void * addr, unsigned long count);【读】voi outsb(unsigned port, void *addr, unsigned long count);【写】注:捡自己喜欢的背吧(_) 。24、 信号量的获取、释放用什么函数?在什么情形下被使用?答:获取:void down(struct semaphore *sem);释放:void up(struct semaphore *sem);对某个互斥资源的访问会收到信号量的保护,在访问之前需要获得信号量。25、 什么是阻塞,如何用等待队列解决阻塞问题?答:阻塞操作是

16、指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。18、应用程序的 select()系统调用,内核空间对应的函数是什么?我们学过的驱动程序中哪个使用了此方法?答:1.polling();2.struct file_operation 结构体的 poll 函数。19、我们在 LED 驱动程序中用 ioctl()传递哪些参数,分别起什么作用?答:int ioctl(int fd, ind cmd, );其中 fd 文件设备 open 函数返回的文件标示符, cmd 是设备的控制命令,后面是一些补充参数,和 cmd 的意义相关的。20、在用户空间 fd=open(DEV

17、ICE_NAME,0);其中 fd 在哪儿用?两个参数分别什么含义?答:1.fd 是文件读写指针,在执行 read 操作和 write 操作时使用。2.DEVICE_NAME 是设备地址和设备名称。3.0 是读写权限为只读。注:O_RDONLY:以只读方式打开文件O_WRONLY:以只写方式打开文件O_RDWR:以读写方式打开文件21、请说明 fd = open(DEVICE_NAME, O_RDWR);与 fd=open(DEVICE_NAME,0);的差异.答:额(;) ,请看上题注释。22、请分别说明 tasklet 与 workqueue 的应用场合。答:如果中断的下半部分需要执行获得

18、大量内存、需要获取信号量、需要执行阻塞式的 IO操作等需要休眠的动作时,需要使用工作队列,否则,使用 tasklet26、 Misc 设备的主设备号是多少? Linux 如何识别杂散设备?主设备号是 10,相对于普通字符设备驱动,它不需要自己去生成设备文件。27、 请问如果某个设备控制寄存器的物理地址是 0x11000036,那么在linux 驱动程序中如何在不改变其他位的情况下将寄存器中第 12、13 位改变成 0 和 1?28、 如何将某个驱动程序 misc.c 编译进 linux kernel 中?1.将编写的源代码复制到 Linux 内核源代码的相应目录;2.打开 Kconfig 在 DeviceDrivers 菜单下面找到 misc 的选项,然后使用空格更改选择*。注:*表示将该模块编译进内核3.编译目录条目。然后使用 imsmod 命令手动加载驱动。29、 Linux 的设备文件(/dev 下)用什么与驱动程序关联?应用程序与设备相关的系统调用凭什么指向此设备?1.struct file 结构体2.在结构 file_operations 里,指出了设备驱动程序所提供的入口点位置。30、 如何将屏幕图像保存在一个文件中,用什么命令?copy 文件到目录/dev/fb0(随意)下,然后执行 dd if=/dev/fb0 of=./tmp_fb_data。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育教学资料库 > 试题真题

Copyright © 2018-2021 Wenke99.com All rights reserved

工信部备案号浙ICP备20026746号-2  

公安局备案号:浙公网安备33038302330469号

本站为C2C交文档易平台,即用户上传的文档直接卖给下载用户,本站只是网络服务中间平台,所有原创文档下载所得归上传人所有,若您发现上传作品侵犯了您的权利,请立刻联系网站客服并提供证据,平台将在3个工作日内予以改正。