
linu驱动工程师面试题整理.docx
15页1、字符型驱动设备你是怎么创立设备文件的,就是/dev/下面的设备文件,供上层应用程序翻开使用的文件?答:mknod 命令结合设备的主设备号和次设备号,可创立一个设备文件评:这只是其中一种方式,也叫手动创立设备文件还有 UDEV/MDEV 自动创立设备文件的方式,UDEV/MDEV 是运行在用户态的程序,可以动态治理设备文件,包括创立和删除设备文件,运行在用户态意味着系统要运行之后那么在系统启动期间还有 devfs 创立了设备文件一共有三种方式可以创立设备文件答:中断处理例程应当尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后半段评:写一个中断效劳程序要留意快进快出,在中断效劳程序里面尽量快速采集信息,包括硬件信息,然后推出中断,要做其它事情可以使用工作队列或者tasklet 方式也就是中断上半部和下半部其次:中断效劳程序中不能有堵塞操作为什么?大家可以争论第三:中断效劳程序留意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的OK,FAIL 之类的2、写一个中断效劳需要留意哪些?假设中断产生之后要做比较多的事情你是怎么做的?答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。
中断效劳例程中的互斥使用的是自旋锁,缘由是在中断处理例程中,硬中断是关闭的,这样会丧失可能到来的中断3、自旋锁和信号量在互斥使用时需要留意哪些?在中断效劳程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?答:原子操作指的是无法被打断的操作我没懂其次句是什么意思,自己定义一个变量怎么可能标记资源的使用状况?其他进程又看不见这个变量评:其次句话的意思是:定义一个变量,比方 int flag =0; if(flag == 0){flag = 1;操作临界区; flag = 0;4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?}这样可否?答:insmod 调用init 函数,rmmod 调用exit 函数这两个函数在设计时要留意什么?卸载模块时曾消灭卸载失败的情形,缘由是存在进程正在使用模块,检查代码后觉察产生了死锁的问题5、insmod 一个驱动模块,会执行模块中的哪个函数?rmmod 呢?这两个函数在设计上要留意哪些?遇到过卸载驱动消灭特别没?是什么问题引起的?评:要留意在 init 函数中申请的资源在exit 函数中要释放,包括存储,ioremap,定时器,工作队列等等。
也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一切不留下一点痕迹6、在驱动调试过程中遇到过oops 没?你是怎么处理的?7、ioctl 和 unlock_ioctl 有什么区分?答:由于内核没有方法直接访问物理内存地址,必需先通过ioremap 获得对应的虚拟地址8、驱动中操作物理确定地址为什么要先ioremap?9、设备驱动模型三个重要成员是?platfoem 总线的匹配规章是?在具体应用上要不要先注册驱动再注册设备?有先后挨次没?10、linux 中内核空间及用户空间的区分?用户空间与内核通信方式有哪些?11、linux 中内存划分及如何使用?虚拟地址及物理地址的概念及彼此之间的转化,高端内存概念?12、linux 中中断的实现机制,tasklet 与 workqueue 的区分及底层实现区分?为什么要区分上半部和下半部?13、linux 中断的响应执行流程?中断的申请及何时执行(何时执行中断处理函数)?14、linux 中的同步机制?spinlock 与信号量的区分?15、linux 中 RCU 原理?16、linux 中软中断的实现原理?17、linux 系统实现原子操作有哪些方法?18、MIPS Cpu 中空间地址是怎么划分的?如在uboot 中如何操作设备的特定的存放器?19、linux 中系统调用过程?如:应用程序中 read在 linux 中执行过程即从用户空间到内核空间?20、linux 内核的启动过程(源代码级)?21、linux 调度原理?22、linux 网络子系统的生疏?Kmalloc get_free_mempool_create23、linux 内核里面,内存申请有哪几个函数,各自的区分?24. IRQ 和 FIQ 有什么区分,在CPU 里面是是怎么做的?上半局部执行与硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成冲突,所以Linux 有所谓的bottom half 机制,中断处理程序中全部不要求马上完成的,在开中断的环境下,由底半程序随后完成.Linux 的底半处理实际上是建立在内核的软中断机制上的.Linux 的底半 机制主要有Tasklet 和 work queue 以及 softirq ( 2.4 内核则有BH , Task queue , softirq , tasklet 没有work queue),其实底半可以理解成一种工作的延迟。
所以实际使用时跟timer 机制根本上一个意思25. 中断的上半局部和下半局部的问题:讲下分成上半局部和下半局部的缘由,为何要分? 讲下如何实现?mmap 函数实现把一个文件映射到一个内存区域,从而我们可以像读写内存一样读写文件, 他比单纯调用read/write 也要快上很多在某些时候我们可以把内存的内容拷贝到一个文件中实现内存备份,固然,也可以把文件的内容映射到内存来恢复某些效劳另外,mmap实现共享内存也是其主要应用之一,mmap 系统调用使得进程之间通过映射同一个一般文件26. 内核函数 mmap 的实现原理,机制?实现共享内存27. 驱动里面为什么要有并发、互斥的把握?如何实现?讲个例子?自旋锁在同一时刻只能被最多一个内核任务持有,所以一个时刻只有一个线程允许存在于临 界区中这点可以应用在多处理机器、或运行在单处理器上的抢占式内核中需要的锁定效劳这里也介绍下信号量的概念,由于它的用法和自旋锁有相像的地方linux 中的信号量是一种睡眠锁假设有一个任务试图获得一个已被持有的信号量时,信号量会将其推入等待队列,然后让其睡眠这时处理器获得自由去执行其它代码当持有信号量的进程将信号量释放后,在等待队列中的一个任务将被唤醒,从而便可以获得这个信号量。
28. spinlock 自旋锁是如何实现的?29. 任务调度的机制?30. 嵌入式 linux 和 wince 操作系统的特点和特性?31. 嵌入式 linux 中 tty 设备驱动的体系构造?32. 嵌入式设备,为加快启动速度,可以做哪些方面的优化?33. USB 设备的枚举过程?(1) Get Device Descriptor主机的第一个命令要求得到设备描述符,此SETUP 包为 8 个字节数据〔80,06,00,01,00,00,40,00〕,发向地址 0,端口 040”表示返回数据长度最大为 40H 个字节实际上,只返回一个包,即数组 DEV_DESC[ ]中的前 8 个字节, 用于说明设备的描述符的真实长度和设备的类型2) Set Address接着是设置设备地址处理大事,主机发送一个含有指定地址的数据包〔00, 05,02,00,00,00,00,00〕,在主机只有一个USB 设备的时候,这个地址一般会是 2, 最大地址 127,USB 协议中可以连接 127 个设备设置地址大事处理完毕后,设备进入地址状态,主机以后会在的指定地址处访问设备3) Get Device Descriptor。
主机再次发送恳求得到设备描述符的数据包〔80,06,00, 01,00,00,12,00〕,与上次不同的是,要求的数据的长度是实际的数据长度,同时是发送到 Set Address 命令所设置的地址4) 读取全部Configuration Descriptor接着主机要求得到设备全部的配置描述符、接口描述符和节点描述符〔80,06,00,02,00,00,40,00〕,由于主机不知道设备描述符的真实长度,因此它要求得到 64 个字节5) Set Interface,主机发送数据包〔01,0B,00,00,00,00,00,00〕,设置接口值为 06) Set Conifguration,确定USB 设备工作在哪一个配置下对于U 盘设备来说,一般只有 1 个配置值,其值为 01主机发送数据包〔00,09,01,00,00,00,00,00〕7) 假设以上步骤都正确,主机将找到设备,并且配置成功,该设备可以正常使用,可以进展后续的U 盘枚举过程了8) 用 busHound 观看计算机对于U 盘的枚举过程,觉察上述步骤后还有一个GetMaxLun 的操作,但是实际上对于U 盘来说无视该步骤也没有问题。
general purpose input/outputGPIO 是相对于芯片本身而言的,如某个管脚是芯片的GPIO 脚,则该脚可作为输入或输出高或低电平使用,固然某个脚具有复用的功能,即可做GPIO 也可做其他用途也就是说你可以把这些引脚拿来用作任何一般用途的输入输出,例如用一根引脚连到led 的一极来把握它的亮灭,也可以用一根〔一些〕引脚连到一个传感器上以获得该传感器的状态,这给cpu 供给了一个便利的把握周边设备的途经假设没有足够多的gpio 管脚,在控制一些外围设备时就会力有不逮,这时可实行的方案是使用CPLD 来帮助治理34. PSRAM、SDRAM、DDR、DDR2 的时序特性? 35.什么是 GPIO?触摸屏的主要三大种类是:电阻技术触摸屏、 外表声波技术触摸屏、 电容技术触摸屏电阻触摸屏的主要局部是一块与显示器外表格外协作的电阻薄膜屏, 这是一种多层的复合薄膜,它以一层玻璃或硬塑料平板作为基层,外表图有一层透亮氧化金属 〔ITO 氧化铟, 透亮的导电电阻〕 导电层,上面在盖有一层外外表硬化处理、光滑防擦的塑料层 、它的内外表也涂有一层ITO 涂层 、在他们之间有很多细小的〔小于 1/1000 英寸〕的透亮隔离点把两层导电层隔开绝缘 。
当手指触摸屏幕时,两层导电层在触摸点位置就有了接触,把握器侦测到这一接触并计算出〔X,Y 〕的位置,再依据模拟鼠标的方式运作这就是电阻技术触摸屏的最根本的原理外表声波技术是利用声波在物体的外表进展传输,当有物体触摸到外表时,阻碍声波的传输, 换能器侦测到这个变化,反映给计算机,进而进展鼠标的模拟电容技术触摸屏利用人体的电流感应进展工作 用户触摸屏幕时 ,由于人体电场,用户和触摸屏外表形成以一个耦合电容, 对于高频电流来说,电容是直接导体,于是手指从接触点吸走一个很小的电流36. 触摸屏的硬件原理?使用 fork 创立一个进程或exec 函数族掩盖原进程37. 在 Linux C 中,ls 这个命令是怎么被执行的?38. 在一个只有 128M 内存并且没有交换分区的机器上,说说下面两个程序的运行结果1#defi。












