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

上传人:s****u 文档编号:13053375 上传时间:2020-06-05 格式:DOC 页数:8 大小:340.50KB
返回 下载 相关 举报
驱动程序开发期末抽题题库.doc_第1页
第1页 / 共8页
驱动程序开发期末抽题题库.doc_第2页
第2页 / 共8页
驱动程序开发期末抽题题库.doc_第3页
第3页 / 共8页
点击查看更多>>
资源描述
嵌入式系统驱动开发题库(35题)硬件(8题):1. 请阐述下图Fig1中蜂鸣器电路的工作原理;如果将Q1变成PNP型三极管如何设计,有什么缺点?当GPB0引脚为低电平时,三极管Q1饱和导通,蜂鸣器通电鸣响。若GPB0引脚为高电平时,三极管Q1截止,蜂鸣器没有电流就不鸣响1)GPB0输出高电平时NPN型三极管导通,蜂鸣器接电发声。2)变成PNP型三极管:3)改为PNP设计的话上电即响。2. 请根据Fig2阐述课程中键盘驱动的原理。Fig2.键盘扫描电路如果有按键按下去,对应的行输出扫描脉冲就会在对应的列信号线产生变化,就会触发键盘中断。键盘中断服务程序就会将键盘的按键键码寄存器读出来,判断是那个按键按下去。 如果没有按键按下,列信号线不会产生中断,没有对按键的处理矩阵键盘由行信号和列信号组成矩阵。每个按键连接到行信号和列信号的交叉点。通过矩阵键盘控制器行信号线顺序逐行输出扫描脉冲,列信号线作为输入信号线。3、请说出Fig3电路的原理,R38-R41电阻值的计算方法。Fig3.LED发光二极管驱动电路由于发光二极管是向导电,要使LED亮,X引脚低电平即可。R=(VDD电源电压-LED电压)/I电流4、如何配置4412的GPIOX3_2到X3_5口作为输入口?先声明变量GPX3CON声明变量GPX3CON=iomap(地址)Writel(readl(x)&(152*4)|(153*4)|(154*4),GPX3CON);5、如何配置4412的GPIOX3_2到X3_5口作为中断触发口?GPFCON=0x00;6、如何配置4412的GPIOX3_2到X3_5口作为输出口?7、如何使4412的GPIOX3_2到X3_3口输出低电平,GPIOX3_4到X3_5口输出高电平。8、4412端口有GPXCON、GPXDAT、GPXPUD三个寄存器,分别代表什么?GPXCON为控制寄存器,GPXDAT为数据寄存器,GPXUP为上拉电阻寄存器,GPXPUD为下拉电阻寄存器。Drivers:(27)9、在驱动程序代码中module_init(func1),module_exit(func2)两个宏的作用是什么?在linux下,运行什么命令会调用func1?运行什么命令会调用func2?moudle_init 和 module_exit 是比较特别的内核宏来指出这两个函数的角色, 一个在模块加载到内核时被调用(func1)以及一个在模块被去除时被调用(func2).10、请叙述下面的makefile中各个字段的含义11、驱动代码中都会涉及到两个结构体,分别是struct file和struct inode,他们分别代表什么含义,而且在什么时候被创建?1)struct file表示一个打开的文件(文件的描述符)主要供与文件系统对应的设备文件驱动程序使用。2)struct inode表示文件结点,因为对于单个文件而言可能会有许多个表示打开的文件的描述符,因而就可能会有多个个file对应一个inode。3)由内核在open()时创建,并(将该文件描述符)传递给该文件上进行操作的所有函数,直到最后的close函数,在文件的所有实例都被关闭后,内核会释放这个数据结构。12、 class_create(); device_create();起什么作用?class_create();为自动创建设备文件,device_create();为自动创建设备节点。13、 file_operations结构体一般都有那几个成员,举三个成员例子,它们的作用都是什么?l open:打开设备,如果这个项是 NULL, 设备打开一直成功, 但是你的驱动不会得到通知。 l ioctl:控制命令,系统调用提供了发出设备特定命令的方法 。l write:写,发送数据给设备。 l read:读,用来从设备中获取数据。 l release:释放设备,可以为 NULL。14、 驱动程序中主次设备号分别代表什么?如果事先已经分配主次设备号,那么用什么宏取得dev_t类型的设备编号?反过来又如何取得主次设备号?主设备号被系统用来确定驱动程序,次设备号被驱动程序用来确定具体的设备。用MKDEV(int major,int minor)取得设备编号用MAJOR(dev_t dev)取得主设备号,MINOR(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 count , const char * name )16、 创建设备文件的方式有哪几种?分别是如何创建的?有两种方法,一是使用 mknod 命令手工创建,二是自动创建(驱动程序来实现)。注:手动用这个mknod filename type major minor自动用这俩函数class_create(); device_create();17、 驱动代码中申请内存和释放内存的函数分别是那几种?写出声明一个设备结构及申请对应内存的步骤。申请内存Kmalloc()和vmalloc(),释放内存Kfree()和vfree()。注:以I2C为例:18、 驱动代码中数据在用户空间和内核空间进行传输的函数分别是那些?应用程序向设备写入数据用什么函数?copy_to_user()和copy_from_user()FILE *fp = open(“/dev/ttyS0”, O_RDWR);19、 驱动模块加载,卸载,查看的命令分别是什么?分别调用驱动程序中哪些函数?insmod:加载模块,rmmod:卸载模块,modinfo:获得模块的信息lsmod:查看系统中所有已经被加载了的所有的模块以及模块间的依赖关系init_module函数是加载模块时会被调用的,一般作一些初始化的工作;cleanup_module函数是卸载模块时会被调用的,做一些清理的工作。注:在使用init_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); /申请使用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_mem_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, 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 longword, 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);【写】读写一串长字unsigned 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、 什么是阻塞,如何用等待队列解决阻塞问题?答:阻塞操作是指,在执行设备操作时,若不能获得资源,则进程挂起直到满足可操作的条件再进行操作。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(DEVICE_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的应用场合。答:如果中断的下半部分需要执行获得大量内存、需要获取信号量、需要执行阻塞式的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@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!