嵌入式面经 驱动相关

1.1 Linux 驱动程序的功能是什么?

(1)对设备初始化和释放。

(2)进行内核与硬件的数据交互。

(3)检测和处理设备出现的错误。


1.2内核程序中申请内存使用什么函数?

答案:kmalloc()、kzalloc()、vmalloc()。

解读:

(1)void *kmalloc(size_t size, gfp_t flags);

①申请连续的物理内存,这对于要进行DMA的设备十分重要,但大小不能超过128KB,其中有16B是被页描述符占用了。

②较常用的flag有GFP_ATOMIC(分配内存的过程是一个原子过程)、GFP_KERNEL(正常分配内存)、GFP_DMA(给DMA控制器分配内存)。

③对应的内存释放函数为void kfree(const void *objp)。

(2)void *kzalloc(size_t size, gfp_t flags);

①kzalloc()相对kmalloc()只是额外增加了__GFP_ZERO标志,除了申请内存外,还会对申请到的内存内容清零。

②对应的释放函数也是kfree()。

(3)void *vmalloc(unsigned long size);

①申请虚拟地址连续的内存空间,但其对应的物理内存不一定连续,因此对申请的内存大小没有限制。

②对应的内存释放函数为void free(const void *addr)。

③注意:vmalloc()和vfree()可以睡眠,因此不能在中断上下文调用。


1.3内核程序中申请内存和应用程序时申请内存有什么区别?

答案:内核中申请内存空间用的是函数kmalloc、kzalloc、vmalloc,应用程序申请内存用的函数是malloc。

解读:

(1)kmalloc/kzalloc直接分配连续的物理地址(虚拟地址也是连续的)。

(2)vmalloc分配连续的虚拟地址,但物理地址不一定连续。分配时实际分配了物理内存,不过这个物理内存页面是在公共的页表进行了映射,并没有在本进程的页表进行映射,当访问这段内存时,触发do_page_fault异常(缺页中断)才完成页表的同步工作。

(4)malloc是用户空间申请内存的方法,分配连续的虚拟地址,物理地址一般不会连续。在分配时并没有做实际物理页的分配动作,实际分配物理页的动作是在do_page_fault异常(缺页中断)处理中完成的。


1.4自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量?

(1)使用自旋锁的进程不会睡眠, 而使用信号量的进程会睡眠。

(2)中断服务程序使用的是自旋锁,原因是中断服务程序处于中断上下文,中断上下文是不参与调度的,也就没有保护现场与恢复现场,一旦睡眠就回不来了。
 
以上内容摘自专刊《嵌入式岗位笔试面试真题讲解》,该专刊不仅有真题讲解,还有经验分享,不清楚嵌入式该学什么的同学,想找嵌入式实习/正式工作的同学,都可以来看看:              



嵌入式公司推荐:华为、小米、OPPO、VIVO、荣耀、一加、CVTE、大疆、insta360影石、美的 、TCL、海信、创维、烽火、比亚迪、吉利、长安、大众、经纬恒润 、小鹏、图森未来、百度、滴滴、蔚来、理想、 联发科、 紫光展锐 、全志、寒武纪 、晶晨半导体 、汇顶、华为、中兴、浪潮 、TP-LINK、讯飞、商汤、海康威视 、浙江大华、360、小马智行、元戎启行、深信服、移动、联通、电信、旷视、四维图新、中芯国际、复旦微电子、极氪。

#嵌入式面经##嵌入式##面经##嵌入式软件##驱动开发#
全部评论

相关推荐

回暖了回暖了,都给我回暖这几天也就天气回暖了,今天穿个外套坐地铁差点给我·热死我分享一下这几天总结的嵌入式面经1. 在SPI通信中,时钟极性和时钟相位的设置对数据传输有何影响?2. CAN总线的基本结构和工作原理是什么?如何进行数据发送和接收?3. 操作系统中的进程和线程有什么区别?它们的调度策略有何不同?4. 任务优先级反转是什么?如何通过调度算法来解决这个问题?5. 信号量和互斥量的区别是什么?在多线程编程中如何使用它们?6. 什么是活锁?与死锁相比,它有什么不同的表现?7. 如何通过资源分配图来检测死锁?这种方法的局限性是什么?8. 互斥锁的实现方式有哪些?请举例说明其优缺点。9. 在FreeRTOS中,如何实现任务间的通信?有哪些常用的方法?10. ARM Cortex-M系列处理器的中断控制机制是怎样的?如何配置优先级?11. C语言的预处理阶段主要做什么?常用的预处理指令有哪些?12. ELF文件格式的基本结构是什么?各个部分的作用是什么?13. 静态变量和动态变量的存储位置及生命周期有什么不同?14. 你是否有MQTT协议的使用经验?请简要描述其工作原理。15. HTTP协议和HTTPS协议的主要区别是什么?在什么情况下选择使用HTTPS?16. DHCP协议的工作流程是怎样的?它如何分配IP地址?17. TCP的三次握手和四次挥手过程是什么?为什么需要这些步骤?18. IPv4和IPv6的主要区别是什么?IPv6的优势在哪里?19. ARP缓存的作用是什么?如何管理ARP缓存?20. 在局域网中,如何选择合适的交换机类型以满足网络需求?21. M4内核的特权级别如何划分?不同特权级别的使用场景是什么?22. 如何实现用户态和内核态之间的切换?涉及哪些系统调用?问题答案已经整理到专栏中了,关注我分享更多知识。  c++/嵌入式面经专栏-牛客网 https://www.nowcoder.com/creation/manager/columnDetail/MJNwoM
查看22道真题和解析
点赞 评论 收藏
分享
6 52 评论
分享
牛客网
牛客企业服务