当前位置:  技术问答>linux和unix

内核大神们请进,驱动要怎么学啊?

    来源: 互联网  发布时间:2016-09-30

    本文导语:  本帖最后由 tgvlcw 于 2010-09-09 12:04:15 编辑 今天面试被人给虐了。那叫一个体无完肤啊,半个小时就给解决掉了。怎么会这样呢?为什么会这样,难道工作一年都白干了吗?只写过一个linux简单的SPI驱动,然后就是弄裸...

本帖最后由 tgvlcw 于 2010-09-09 12:04:15 编辑
今天面试被人给虐了。那叫一个体无完肤啊,半个小时就给解决掉了。怎么会这样呢?为什么会这样,难道工作一年都白干了吗?只写过一个linux简单的SPI驱动,然后就是弄裸机驱动。

没有笔试,上来直接开战,没两个回合,就顶不住了。
1,问:都自己写过什么驱动?
 答:只写过SPI驱动,那还是在4月份
  问:是移植的吗,使用机制写的?
 答:不是,是自己写的一个简单的字符设备驱动,没有使用子系统

2,问:linux内核是怎么管理设备驱动的,使用什么机制?
 答:platform, sysfs
  问:能介绍一下它们是怎么管理的?
 答:sysfs太复杂,没弄明白。platform扯了一会我自己都晕了。

3,问:介绍一下字符设备驱动的框架,是其中的接口是怎么被调用的?
 答:通过file_operation结构体,初始化其中的open, release, read, write指针函数,然后通过platform调用的。
  问:说说platform的结构框架
 答:probe, remove, suspend, resume
    问:这些是怎么被调用的?
 答:无语

4,问:说说互斥体
 答:没用过互斥体,只用过锁
  问:那说说锁,都用过什么锁,为什么用锁而不用互斥体,锁的特点?
 答:只用过自旋锁,锁是用在保护短小的资源的,互斥体可以用在大的资源。锁里不能休眠。
  问:为什么锁里不能休眠?
 答:如果在锁里休眠,若有中断,在中断里又获得同样的锁,会造成死锁
  问:那如果在锁里没有中断呢?
 答:又无语。。。。

3,问:说说linux内核是怎么通过虚拟地址访问物理地址的?
 答:内存管理还真不了解。(其实这里我也没弄明白他是什么意思)
  问:简单点说,要在驱动里写寄存器,使用什么函数往里面写值的?
 答:那个函数还真记不起来了,好像是用mem什么的函数,忘记了。

面试到这就完了,整个过程那叫一个快,完全处于被动。自己的特长什么的都还没体现出来就挂了。

请教内核大神们,我知道自己很菜,今天一看,原来菜到这种地步?现在还有什么驱动是自己从头开始写的呢?原来还以为驱动开发的,只要移植别的驱动,然后调试通过就行了。到底驱动开发要怎么学啊?我该怎么办呢?

|
你都能弄裸机驱动了,已经很不错了

现在需要用Linux的理论来包装一下
看看lkd2 、ldd3 、eldd  

|
看来不深入内核还真的什么都不懂,因为如果不深入内核,写字符驱动程序时,只会调用register_chrdev_region,unregister_chrdev_region,cdev_init,cdev_add,cdev_del这些几个函数搞定,但是在内核中我们见得最多的是register_chrdev,unregister_chrdev这两个函数,但是,两种不同的注册有什么区别,也许真只能到内核中去看才能真正知道区别在于什么地方。

也许用过I2C子系统的都知道,在写应用程序时,如果应用i2c-dev,对于读需要两次启动I2C总线的器件,不能应用read,write操作I2C总线,必须使用ioctl来操作,而ioctl操作则有I2C算法与SMBus算法,对于I2C算法,需要两个结构体,这是为什么?而读/写地址,总为第一个字节,这又是为什么?对于SMBus算法,地址一写在command中,这又是为什么,这些都需要去研究I2C子系统源码才能得知答案。

如果查看内核相关子系统源码,那么对Linux设备模型必须了解才能看得懂,这一串的连接,都是在内核中行走出来的,看书,不动手,什么都不会知道。

|
面试者当然不会问你太具体的东西,只能问一些通用的问题
lz不过是被打击了一下,一下子气不顺

人家的面试题都是很好的切入方向,已经有大量关于它们的讨论,lz要多看书多看牛博,就不至于这么被动

|
不要被一次打击就没信心了
你很厉害,能吹Linux机制的人多了去,但是写驱动最终还是要会操作寄存器才行
我反而觉得内核那些编程机制要简单些,看数据手册写寄存器费力

|
csdn上就有不少:
http://blog.csdn.net/fudan_abc
http://blog.csdn.net/absurd
http://blog.csdn.net/pottichu

更多的是搜资料的时候经常能见到牛博

|
慢慢来 多看书就好了 楼主有裸机驱动经验很不错啊 要有信心

|
  我也找驱动的工作,还是失业状态找呢,我更艰难啊。

|
  linux说白了也就那么回事, 多看书就行了。

|
同情,其实俺也不懂。

|

不着急。慢慢学

|

|
压力啊…

|
这个如果让我来答,我也答不好,驱动 字符 块 网络  都会有一个特定的框架,
一般写的时候都会参照一个已经写好的驱动,主要的时间是花在具体功能的实现与调试上了。

感谢这有点像考背书了。
我觉得还是考实际上机比较考谱。

|
看来的好好研究一下内核了

|
楼主大神!!!!我俩方向一样!!!我以前也是做单片机编程的 而且也做过usb驱动。
然后现在也在做linux驱动开发!!!!!
找到同行了哈哈哈哈~~~

|



同意这款

|
郁闷   Linux 驱动、、、、

|

|
这不是一般人干的事

|
正准备学内核的东西,看完上面的,汗...........

|
怎么那么恐怖啊,都不敢学了

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 内核升级后,如何在新的内核中加载显卡驱动?
  • 弱智问题:搞内核能不能不学驱动编程啊?网络协议栈必须要谙熟驱动吗?
  • 【求助】基于2.6.29内核编译的驱动程序能否应用于2.6.32内核的系统?
  • linux 2.6.15 中被编译为模块的驱动test.ko,应该放在什么路径下才能使得在需要该驱动时,由内核自动加载?谢谢
  • 请问重新编译LINUX内核是否能将没有用的外设的驱动程序删除并减少内核占有内存的资源?请好心人仕指教!
  • 新增一个驱动后,内核不启动
  • 驱动编译环境的内核版本到底是不是必须和使用环境的内核版本一致?
  • 如何获得芯片的内核驱动
  • 我下载了一个驱动,在2.4内核编译后用insmod加载说内核版本不一样?
  • 内核模块和设备驱动的区别?
  • 内核如何知道板子上的硬件要用哪个驱动?
  • rndis驱动编译成内核模块
  • 想搞嵌入式驱动的开发,请大虾给个简单例程(通过SPI读写外扩存储芯片),以及开发步骤及应注意的地方,怎么加入内核和使用该驱动?谢谢
  • linux内核与驱动面试
  • 如何将驱动程序嵌入到内核中?
  • linux内核编程,具体指什么,是不是就是驱动开发 ?
  • 有一定基础后,请问应该先看Linux内核还是驱动呢?
  • 将驱动模块编译进内核是否有用??
  • 谁有2.4内核可用的网卡驱动及应用程序?
  • 求助:makefile,驱动与linux内核的关系?
  • Linux内核中影响tcp三次握手的一些协议配置
  • Fedora Core 2自带的内核升级程序下载下来内核后,要不要再编译一遍内核?
  • TCP协议四次断连过程介绍及Linux内核协议栈中相关设置项
  • 进程内核栈和操作系统内核栈的关系
  • CentOS 6内核升级:下载编译启用新内核版本详细过程
  • Linux中内核线程不访问内核态地址空间?
  • Linux进程的内核栈和用户栈概念,相互关系及切换过程
  • 2.6内核下编译2.4内核
  • linux内核中的likely宏和unlikely宏介绍及用法
  • 谁能提供kgdb内核补丁内核模块的下载
  • CentOS 6.5 下载地址及如何升级内核(kernel)版本到 3.10.28


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3