当前位置: 技术问答>linux和unix
内核大神们请进,驱动要怎么学啊?
来源: 互联网 发布时间:2016-09-30
本文导语: 本帖最后由 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
现在需要用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设备模型必须了解才能看得懂,这一串的连接,都是在内核中行走出来的,看书,不动手,什么都不会知道。
也许用过I2C子系统的都知道,在写应用程序时,如果应用i2c-dev,对于读需要两次启动I2C总线的器件,不能应用read,write操作I2C总线,必须使用ioctl来操作,而ioctl操作则有I2C算法与SMBus算法,对于I2C算法,需要两个结构体,这是为什么?而读/写地址,总为第一个字节,这又是为什么?对于SMBus算法,地址一写在command中,这又是为什么,这些都需要去研究I2C子系统源码才能得知答案。
如果查看内核相关子系统源码,那么对Linux设备模型必须了解才能看得懂,这一串的连接,都是在内核中行走出来的,看书,不动手,什么都不会知道。
|
面试者当然不会问你太具体的东西,只能问一些通用的问题
lz不过是被打击了一下,一下子气不顺
人家的面试题都是很好的切入方向,已经有大量关于它们的讨论,lz要多看书多看牛博,就不至于这么被动
lz不过是被打击了一下,一下子气不顺
人家的面试题都是很好的切入方向,已经有大量关于它们的讨论,lz要多看书多看牛博,就不至于这么被动
|
不要被一次打击就没信心了
你很厉害,能吹Linux机制的人多了去,但是写驱动最终还是要会操作寄存器才行
我反而觉得内核那些编程机制要简单些,看数据手册写寄存器费力
你很厉害,能吹Linux机制的人多了去,但是写驱动最终还是要会操作寄存器才行
我反而觉得内核那些编程机制要简单些,看数据手册写寄存器费力
|
csdn上就有不少:
http://blog.csdn.net/fudan_abc
http://blog.csdn.net/absurd
http://blog.csdn.net/pottichu
更多的是搜资料的时候经常能见到牛博
http://blog.csdn.net/fudan_abc
http://blog.csdn.net/absurd
http://blog.csdn.net/pottichu
更多的是搜资料的时候经常能见到牛博
|
慢慢来 多看书就好了 楼主有裸机驱动经验很不错啊 要有信心
|
我也找驱动的工作,还是失业状态找呢,我更艰难啊。
|
linux说白了也就那么回事, 多看书就行了。
|
同情,其实俺也不懂。
|
不着急。慢慢学
|
|
压力啊…
|
这个如果让我来答,我也答不好,驱动 字符 块 网络 都会有一个特定的框架,
一般写的时候都会参照一个已经写好的驱动,主要的时间是花在具体功能的实现与调试上了。
感谢这有点像考背书了。
我觉得还是考实际上机比较考谱。
一般写的时候都会参照一个已经写好的驱动,主要的时间是花在具体功能的实现与调试上了。
感谢这有点像考背书了。
我觉得还是考实际上机比较考谱。
|
看来的好好研究一下内核了
|
楼主大神!!!!我俩方向一样!!!我以前也是做单片机编程的 而且也做过usb驱动。
然后现在也在做linux驱动开发!!!!!
找到同行了哈哈哈哈~~~
然后现在也在做linux驱动开发!!!!!
找到同行了哈哈哈哈~~~
|
同意这款
|
郁闷 Linux 驱动、、、、
|
|
这不是一般人干的事
|
正准备学内核的东西,看完上面的,汗...........
|
怎么那么恐怖啊,都不敢学了