免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 19756 | 回复: 6
打印 上一主题 下一主题

几个Linux驱动面试题 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-16 10:56 |只看该作者 |倒序浏览
这几天面试几个想做安卓Linux驱动的,总体感觉上驱动基础还是比较薄弱,大部分情况是虽然做过驱动,但是基本上都是采用内核现成的,或者是开发板上已经有的,单独写过模块驱动很少,驱动机制理解不是很透彻.以下是几个随口问过的基础问题,供参考.

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件?

2、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?

3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?

4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?

5、insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?

6、在驱动调试过程中遇到过oops没?你是怎么处理的?

7、ioctl和unlock_ioctl有什么区别?

8、驱动中操作物理绝对地址为什么要先ioremap?

9、设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?

这些应该都是比较基础的问题吧,但是从实际情况上来看,回答的都不是很正确。

论坛徽章:
0
2 [报告]
发表于 2014-08-17 18:32 |只看该作者
新手试着回答一下,欢迎指正。

1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件?
答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。

2、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?
答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后半段。

3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?
答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。

4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?
答:原子操作指的是无法被打断的操作。我没懂第二句是什么意思,自己定义一个变量怎么可能标记资源的使用情况?其他进程又看不见这个变量

5、insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?
答:insmod调用init函数,rmmod调用exit函数。这两个函数在设计时要注意什么?卸载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后发现产生了死锁的问题。

6、在驱动调试过程中遇到过oops没?你是怎么处理的?
没有。。

7、ioctl和unlock_ioctl有什么区别?
没用过unlock_ioctl。。

8、驱动中操作物理绝对地址为什么要先ioremap?
答:因为内核没有办法直接访问物理内存地址,必须先通过ioremap获得对应的虚拟地址。

9、设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
这个真不知道。。

论坛徽章:
0
3 [报告]
发表于 2014-08-18 22:38 |只看该作者
1、字符型驱动设备你是怎么创建设备文件的,就是/dev/下面的设备文件,供上层应用程序打开使用的文件?
答:mknod命令结合设备的主设备号和次设备号,可创建一个设备文件。
评:这只是其中一种方式,也叫手动创建设备文件。还有UDEV/MDEV自动创建设备文件的方式,UDEV/MDEV是运行在用户态的程序,可以动态管理设备文件,包括创建和删除设备文件,运行在用户态意味着系统要运行之后。那么在系统启动期间还有devfs创建了设备文件。一共有三种方式可以创建设备文件。
2、写一个中断服务需要注意哪些?如果中断产生之后要做比较多的事情你是怎么做的?
答:中断处理例程应该尽量短,把能放在后半段(tasklet,等待队列等)的任务尽量放在后半段。
评:写一个中断服务程序要注意快进快出,在中断服务程序里面尽量快速采集信息,包括硬件信息,然后推出中断,要做其它事情可以使用工作队列或者tasklet方式。也就是中断上半部和下半部。
第二:中断服务程序中不能有阻塞操作。为什么?大家可以讨论。      
第三:中断服务程序注意返回值,要用操作系统定义的宏做为返回值,而不是自己定义的OK,FAIL之类的。

3、自旋锁和信号量在互斥使用时需要注意哪些?在中断服务程序里面的互斥是使用自旋锁还是信号量?还是两者都能用?为什么?
答:使用自旋锁的进程不能睡眠,使用信号量的进程可以睡眠。中断服务例程中的互斥使用的是自旋锁,原因是在中断处理例程中,硬中断是关闭的,这样会丢失可能到来的中断。
评:回答的还可以。
4、原子操作你怎么理解?为了实现一个互斥,自己定义一个变量作为标记来作为一个资源只有一个使用者行不行?
答:原子操作指的是无法被打断的操作。我没懂第二句是什么意思,自己定义一个变量怎么可能标记资源的使用情况?其他进程又看不见这个变量
评:第二句话的意思是:
  定义一个变量,比如 int flag =0;
   if(flag == 0)
  {
       flag = 1;

       操作临界区;
      flag = 0;
   }这样可否?
5、insmod 一个驱动模块,会执行模块中的哪个函数?rmmod呢?这两个函数在设计上要注意哪些?遇到过卸载驱动出现异常没?是什么问题引起的?
答:insmod调用init函数,rmmod调用exit函数。这两个函数在设计时要注意什么?卸载模块时曾出现卸载失败的情形,原因是存在进程正在使用模块,检查代码后发现产生了死锁的问题。

评:要注意在init函数中申请的资源在exit函数中要释放,包括存储,ioremap,定时器,工作队列等等。也就是一个模块注册进内核,退出内核时要清理所带来的影响,带走一切不留下一点痕迹。
6、在驱动调试过程中遇到过oops没?你是怎么处理的?
没有。。
评:其他人可以接着说。
7、ioctl和unlock_ioctl有什么区别?
没用过unlock_ioctl。。
评:其他人可以接着说。
8、驱动中操作物理绝对地址为什么要先ioremap?
答:因为内核没有办法直接访问物理内存地址,必须先通过ioremap获得对应的虚拟地址。
评:其他人可以接着说。
9、设备驱动模型三个重要成员是?platfoem总线的匹配规则是?在具体应用上要不要先注册驱动再注册设备?有先后顺序没?
这个真不知道。。
评:其他人可以接着说。

论坛徽章:
0
4 [报告]
发表于 2014-08-18 22:38 |只看该作者
本帖最后由 gz金易龙 于 2014-08-18 22:40 编辑

发重复了。

论坛徽章:
0
5 [报告]
发表于 2014-08-19 20:23 |只看该作者
回复 3# gz金易龙

多谢!

第二句话的意思是:
  定义一个变量,比如 int flag =0;
   if(flag == 0)
  {
       flag = 1;

       操作临界区;
      flag = 0;
   }这样可否?


这样应该不能起到互斥的作用。因为另外一个进程根本没有flag这个变量,自然不用检查就能进入临界区。充当互斥的变量应该是访问进程都可见的

论坛徽章:
0
6 [报告]
发表于 2016-03-26 20:54 |只看该作者
设备驱动模型三个重要成员       device设备 driver驱动 bus总线

论坛徽章:
0
7 [报告]
发表于 2016-04-14 14:38 |只看该作者
做linux驱动好多年了,对这些问题只能回答三分之一吧,确实在基础理论方面比较欠缺。只有实际工作中经常用的东西才会了解一些。
一些不懂的东西,baidu了一下,

6、在驱动调试过程中遇到过oops没?你是怎么处理的?
oops就是kernel在运行过程中打印出来的warning、exceptiont等的信息,一般包含stack信息,调用过程,
不同有情况不同的处理方法,有些不影响运行的warning级的,都不处理,
7、ioctl和unlock_ioctl有什么区别?
在2.6.36以后ioctl函数已经不再存在了,而是用unlocked_ioctl和compat_ioctl两个函数实现以前版本的ioctl函数。同时在参数方面也发生了一定程度的改变,去除了原来ioctl中的struct inode参数,同时改变了返回值。
compat_ioctl主要是在64位系统中可能会用到,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP