嵌入式驱动 bsp工程师 笔试 面试题

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。
#23届找工作求助阵地##软件开发薪资爆料##你们的毕业论文什么进度了##我的实习求职记录##驱动开发#
全部评论
来看看大佬新的文章
1 回复 分享
发布于 2023-02-16 19:29 四川
多谢分享!狠狠需要了!
1 回复 分享
发布于 2023-02-16 13:54 重庆
来看看来看看
1 回复 分享
发布于 2023-02-16 13:21 浙江
来充实知识储备了
1 回复 分享
发布于 2023-02-16 13:21 天津
感谢分享
点赞 回复 分享
发布于 2023-02-24 12:36 安徽
谢谢分享
点赞 回复 分享
发布于 2023-02-24 09:05 江西
感谢分享,大佬专栏对学习和复习嵌入式知识很有帮助
点赞 回复 分享
发布于 2023-02-23 13:25 四川
干货满满,要抓紧学习了
点赞 回复 分享
发布于 2023-02-23 09:36 广东
感谢分享
点赞 回复 分享
发布于 2023-02-22 23:25 江西
感谢分享
点赞 回复 分享
发布于 2023-02-21 21:26 黑龙江
多谢分享
点赞 回复 分享
发布于 2023-02-21 18:25 四川
谢谢分享,已收藏!
点赞 回复 分享
发布于 2023-02-21 09:38 湖北
太厉害了
点赞 回复 分享
发布于 2023-02-21 08:48 湖北
感谢分享!学习了!
点赞 回复 分享
发布于 2023-02-17 15:49 浙江
很有用,果断收藏了
点赞 回复 分享
发布于 2023-02-17 09:05 湖北

相关推荐

📍 面试公司:汇川技术🕐 面试时间:2025年9月9日💻 面试岗位:C++开发工程师❓ 面试问题:1.  自我介绍与项目深挖◦   详细介绍实习/项目经历,面试官会从技术实现、难点解决、团队协作等角度深度追问,并关注项目是否涉及工业控制、自动化设备通信等场景。2.  C++基础与高级特性◦   智能指针的实现原理:std::shared_ptr的引用计数如何保证线程安全?std::unique_ptr的所有权转移机制是怎样的?◦   C++11新特性:右值引用与移动语义(std::move)的应用场景,以及Lambda表达式的捕获列表区别。◦   多态的实现原理:虚函数表(vtable)的内存布局,以及多重继承下的虚表结构。3.  系统与网络编程◦   Linux进程与线程:如何查看进程的线程数量及CPU占用率(top -H、ps -T);线程同步中自旋锁与互斥锁的适用场景区别。◦   TCP粘包问题的解决方案(如定长报文、分隔符、长度字段),以及HTTP/1.1的长连接与管线化机制。4.  汇川业务相关◦   工业自动化场景:实时控制系统对线程优先级的处理;CAN总线协议在工业设备通信中的常见数据帧格式。◦   出差接受度:能否接受高频出差(如设备调试需驻厂1-3个月)?若客户现场出现软件崩溃,如何快速定位并修复?5.  设计模式与架构◦   在工业控制软件中,如何应用观察者模式处理设备状态变更?◦   单例模式的线程安全实现(懒汉式与饿汉式),并说明其在工业控制中的适用场景。🙌 面试感想:•   难度中等:问题覆盖C++底层机制(内存管理、多态)、系统编程(Linux、网络),且紧密结合工业自动化场景(如实时性、协议处理)。面试官会从项目描述中挖掘深度问题,需确保对项目中的每个技术选型和数据细节都熟悉。•   强调业务适配性:需熟悉工业自动化常见需求(如设备通信、稳定性保障),并了解汇川核心产品(伺服驱动器、PLC)及行业解决方案(新能源电池产线、电梯控制)。•   出差接受度是关键筛选点:汇川业务需紧密对接客户现场(如设备部署、运维),面试官会明确询问出差意愿与持续时间。
查看10道真题和解析
点赞 评论 收藏
分享
评论
10
91
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务