当前位置: 首页 > news >正文

嵌入式面经篇十——驱动开发

文章目录

  • 前言
  • 一、驱动开发
    • 1、Linux 驱动程序的功能是什么?
    • 2、内核程序中申请内存使用什么函数?
    • 3、内核程序中申请内存和应用程序时申请内存有什么区别?
    • 4、自旋锁和信号量在互斥使用时需要注意什么?在中断服务程序里面的互斥是使用自旋锁还是信号量?
    • 5、驱动卸载异常可能是由什么原因引起的?
    • 6、Linux 中引入模块机制有什么好处?
    • 7、Linux 设备驱动程序中,使用哪两个函数进行中断处理程序的注册和注销?
    • 8、写一个中断服务程序需要注意哪些地方?
    • 9、Linux 系统打开设备文件,进程可能处于三种基本状态,如果多次打开设备文件,驱动程序应该实现什么?
    • 10、简述 static 对于工程模块化的作用。
    • 11、并发是什么?驱动里面为什么要有互斥控制?如何实现?
    • 12、Linux 内核有哪些同步方式?
    • 13、在一个多任务嵌入式系统中,有一个 CPU 可直接寻址的 32 位寄存器 REGn,地址为 0x1F000010,编写一个安全的函数将寄存器 REGn 的指定位反转?


前言

记录一些招聘公司在招聘嵌入式软件岗位时的一些问题,此文为第十篇。


一、驱动开发

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

  • 对设备初始化和释放。
  • 进行内核与硬件的数据交互。
  • 检测和处理设备出现的错误。

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

答:kmalloc()、kzalloc()、vmalloc()。
解读:

  • void *kmalloc(size_t size, gfp_t flags);
    • 申请连续的物理内存,这对于要进行 DMA 的设备十分重要,但大小不能超过 128KB,其中有 16B 是被页描述符占用了。
    • 较常用的 flag 有GFP_ATOMIC(分配内存的过程是一个原子过程)、GFP_KERNEL(正常分配内存)、GFP_DMA(给DMA控制器分配内存)。
    • 对应的内存释放函数为 void kfree(const void *objp)
  • void *kzalloc(size_t size, gfp_t flags);
    • kzalloc() 相对 kmalloc() 只是额外增加了 __GFP_ZERO 标志,除了申请内存外,还会对申请到的内存内容清零。
    • 对应的释放函数也是 kfree()
  • void *vmalloc(unsigned l

http://www.mrgr.cn/news/9851.html

相关文章:

  • 【hot100篇-python刷题记录】【搜索二维矩阵】
  • [JAVA]什么是泛型?泛型在Java中的应用
  • C#算法之二分查找
  • python实现简单中文词元化、词典构造、时序数据集封装等
  • 【Linux】第十六章 高级IO (五种IO模型+fcntl)
  • 什么是ElasticSearch的深度分页问题?如何解决?
  • NRK3301语音识别芯片在汽车内饰氛围灯上的应用方案解析
  • Vue3 获取农历(阴历)日期,并封装日历展示组件
  • 泰国中小企业局局长率考察团到访深兰科技
  • SpringBoot天猫商城基于前后端分离+SpringBoot+BootStrap、Vue.js、JQuery+JPA+Redis
  • Node.js 安装教程
  • C语言:动态内存管理
  • 【数学建模】层次分析法
  • 神经网络算法 - 一文搞懂回归和分类
  • 献给正在挣扎中的技术人!
  • C语言:科目二【基础知识】
  • MATLAB 沿任意方向分层点云(82)
  • 【STM32】电容触摸按键
  • DevOps实现CI/CD实战(二)-Jenkins配置
  • 大厂面试官问我:为什么 Object 有 wait ,为什么不全在 Thread 类上写?【后端八股文十六:Java基础合集】