linux驱动工程师面试题整理

上传人:jiups****uk12 文档编号:40099489 上传时间:2018-05-23 格式:DOCX 页数:16 大小:38.13KB
返回 下载 相关 举报
linux驱动工程师面试题整理_第1页
第1页 / 共16页
linux驱动工程师面试题整理_第2页
第2页 / 共16页
linux驱动工程师面试题整理_第3页
第3页 / 共16页
linux驱动工程师面试题整理_第4页
第4页 / 共16页
linux驱动工程师面试题整理_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《linux驱动工程师面试题整理》由会员分享,可在线阅读,更多相关《linux驱动工程师面试题整理(16页珍藏版)》请在金锄头文库上搜索。

1、1 1、字符型驱动设备你是怎么创建设备文件的,就是、字符型驱动设备你是怎么创建设备文件的,就是/dev/dev/下面的设备文件,供上层应用程下面的设备文件,供上层应用程 序打开使用的文件?序打开使用的文件?答:mknod 命令结合设备的主设备号和次设备号,可创建一个设备文件。评:这只是其中一种方式,也叫手动创建设备文件。还有 UDEV/MDEV 自动创建设备文件的 方式,UDEV/MDEV 是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备 文件,运行在用户态意味着系统要运行之后。那么在系统启动期间还有 devfs 创建了设备 文件。一共有三种方式可以创建设备文件。2 2、写一个中

2、断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的? 答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后 半段。 评:写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,包括 硬件信息,然后推出中断,要做其它事情可以使用工作队列或者 tasklet 方式。也就是中 断上半部和下半部。 第二:中断服务程序中不能有阻塞操作。为什么?大家可以讨论。 第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的 OK,FAIL 之类的。3

3、3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁 还是信号量?还是两者都能用?为什么?还是信号量?还是两者都能用?为什么? 答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使 用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。4 4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源 只有一个使用者行不行?只有一个使用者行不行

4、? 答:原子操作指的是无法被打断的操作。我没懂第二句是什么意思,自己定义一个变量怎 么可能标记资源的使用情况?其他进程又看不见这个变量 评:第二句话的意思是:定义一个变量,比如 int flag =0;if(flag = 0)flag = 1;操作临界区;flag = 0;这样可否?5 5、insmodinsmod 一个驱动模块,会执行模块中的哪个函数?一个驱动模块,会执行模块中的哪个函数?rmmodrmmod 呢?这两个函数在设计上要呢?这两个函数在设计上要 注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的? 答:insmod 调用

5、init 函数,rmmod 调用 exit 函数。这两个函数在设计时要注意什么?卸 载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后发现产生了 死锁的问题。评:要注意在 init 函数中申请的资源在 exit 函数中要释放,包括存储,ioremap,定时器, 工作队列等等。也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一切 不留下一点痕迹。6 6、在驱动调试过程中遇到过、在驱动调试过程中遇到过 oopsoops 没?你是怎么处理的?没?你是怎么处理的?7 7、ioctlioctl 和和 unlock_ioctlunlock_ioctl 有什么区别?有什么区别?

6、8 8、驱动中操作物理绝对地址为什么要先、驱动中操作物理绝对地址为什么要先 ioremap?ioremap? 答:因为内核没有办法直接访问物理内存地址,必须先通过 ioremap 获得对应的虚拟地址。9 9、设备驱动模型三个重要成员是?、设备驱动模型三个重要成员是?platfoemplatfoem 总线的匹配规则是?在具体应用上要不要先总线的匹配规则是?在具体应用上要不要先 注册驱动再注册设备?有先后顺序没?注册驱动再注册设备?有先后顺序没?1010、linuxlinux 中内核空间及用户空间的区别?用户空间与内核通信方式有哪些中内核空间及用户空间的区别?用户空间与内核通信方式有哪些? ?11

7、11、linuxlinux 中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端 内存概念?内存概念?1212、linuxlinux 中中断的实现机制,中中断的实现机制,tasklettasklet 与与 workqueueworkqueue 的区别及底层实现区别?为什么要区的区别及底层实现区别?为什么要区 分上半部和下半部?分上半部和下半部?1313、linuxlinux 中断的响应执行流程?中断的申请及何时执行中断的响应执行流程?中断的申请及何时执行( (何时执行中断处理函数何时执行中断处理函数) )?14

8、14、linuxlinux 中的同步机制?中的同步机制?spinlockspinlock 与信号量的区别?与信号量的区别?1515、linuxlinux 中中 RCURCU 原理?原理?1616、linuxlinux 中软中断的实现原理?中软中断的实现原理?1717、linuxlinux 系统实现原子操作有哪些方法?系统实现原子操作有哪些方法? 1818、MIPSMIPS CpuCpu 中空间地址是怎么划分的?如在中空间地址是怎么划分的?如在 ubootuboot 中如何操作设备的特定的寄存器?中如何操作设备的特定的寄存器?1919、linuxlinux 中系统调用过程?如中系统调用过程?如:

9、 :应用程序中应用程序中 read()read()在在 linuxlinux 中执行过程即从用户空间到内中执行过程即从用户空间到内 核空间?核空间?2020、linuxlinux 内核的启动过程内核的启动过程( (源代码级源代码级) )?2121、linuxlinux 调度原理?调度原理?2222、linuxlinux 网络子系统的认识?网络子系统的认识?2323、linuxlinux 内核里面,内存申请有哪几个函数,各自的区别?内核里面,内存申请有哪几个函数,各自的区别?Kmalloc() _get_free_page() mempool_create() 24.24. IRQIRQ 和和

10、FIQFIQ 有什么区别,在有什么区别,在 CPUCPU 里面是是怎么做的?里面是是怎么做的?25.25. 中断的上半部分和下半部分的问题:讲下分成上半部分和下半部分的原因,为何要分?中断的上半部分和下半部分的问题:讲下分成上半部分和下半部分的原因,为何要分? 讲下如何实现?讲下如何实现? 上半部分执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工 作,这构成矛盾,所以 Linux 有所谓的 bottom half 机制,中断处理程序中所有不要求立即 完成的,在开中断的环境下,由底半程序随后完成. Linux 的底半处理实际上是建立在内核的软中断机制上的. Linux 的

11、底半 机制主要有 Tasklet 和 work queue 以及 softirq ( 2.4 内核则有 BH , Task queue , softirq , tasklet 没有 work queue),其实底半可以理解成一种工作的延 迟。所以实际使用时跟 timer 机制基本上一个意思。26.26. 内核函数内核函数 mmapmmap 的实现原理,机制?的实现原理,机制? mmap 函数实现把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件,他比单纯调用 read/write 也要快上许多。在某些时候我们可以把内存的内容拷贝到一个文 件中实现内存备份,当然,也可以把文件的内容

12、映射到内存来恢复某些服务。另外,mmap 实现共享内存也是其主要应用之一,mmap 系统调用使得进程之间通过映射同一个普通文件 实现共享内存。27.27. 驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?驱动里面为什么要有并发、互斥的控制?如何实现?讲个例子?28.28. spinlockspinlock 自旋锁是如何实现的?自旋锁是如何实现的? 自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于 临界区中。这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定 服务。这里也介绍下信号量的概念,因为它的用法和自旋锁有相似的地方。linux 中的

13、信号 量是一种睡眠锁。如果有一个任务试图获得一个已被持有的信号量时,信号量会将其推入 等待队列,然后让其睡眠。这时处理器获得自由去执行其它代码。当持有信号量的进程将 信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。29.29. 任务调度的机制?任务调度的机制?30.30. 嵌入式嵌入式 linuxlinux 和和 wincewince 操作系统的特点和特性?操作系统的特点和特性?31.31. 嵌入式嵌入式 linuxlinux 中中 ttytty 设备驱动的体系结构?设备驱动的体系结构?32.32. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?嵌入式设备,为加快启

14、动速度,可以做哪些方面的优化?33.33. USBUSB 设备的枚举过程?设备的枚举过程? (1) Get Device Descriptor。主机的第一个命令要求得到设备描述符,此 SETUP 包为 8 个字节数据(80,06,00,01,00,00,40,00),发向地址 0,端口 0。“40”表示返回 数据长度最大为 40H 个字节。实际上,只返回一个包,即数组 DEV_DESC 中的前 8 个字 节,用于说明设备的描述符的真实长度和设备的类型。 (2) Set Address。接着是设置设备地址处理事件,主机发送一个含有指定地址的数据包 (00,05,02,00,00,00,00,00

15、),在主机只有一个 USB 设备的时候,这个地址一般 会是 2,最大地址 127,USB 协议中可以连接 127 个设备。设置地址事件处理结束后,设 备进入地址状态,主机以后会在新的指定地址处访问设备。 (3) Get Device Descriptor。主机再次发送请求得到设备描述符的数据包 (80,06,00,01,00,00,12,00),与上次不同的是,要求的数据的长度是实际的数 据长度,同时是发送到 Set Address 命令所设置的地址。 (4) 读取全部 Configuration Descriptor。接着主机要求得到设备全部的配置描述符、接 口描述符和节点描述符(80,06

16、,00,02,00,00,40,00),由于主机不知道设备描述 符的真实长度,因此它要求得到 64 个字节。 (5) Set Interface,主机发送数据包(01,0B,00,00,00,00,00,00),设置接口值 为 0。 (6) Set Conifguration,确定 USB 设备工作在哪一个配置下。对于 U 盘设备来说,一般只 有 1 个配置值,其值为 01。主机发送数据包(00,09,01,00,00,00,00,00)。 (7) 如果以上步骤都正确,主机将找到新设备,并且配置成功,该设备可以正常使用,可以进行后续的 U 盘枚举过程了。 (8) 用 busHound 观察计算机对于 U 盘的枚举过程,发现上述步骤后还有一个 GetMaxLun 的 操作,但是实际上对于 U 盘来说忽略该步骤也没有问题。34.34. PSRAMPSRAM、SDRAMSDRAM、DDRDDR、DDR2DDR2 的时序特性?的时序特性?35.35.什么是什么是 GPIOGPIO?gen

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

当前位置:首页 > 中学教育 > 其它中学文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号