免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: send_linux
打印 上一主题 下一主题

Linux驱动开发应该注意哪些关键知识?提问有奖! [复制链接]

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
31 [报告]
发表于 2011-04-06 11:25 |只看该作者
我不认同楼上的观点,我认为看视频是极度浪费时间,有时候一个简单的知识点早就明白了,但讲的人还在喋喋不休。
我认为看书比较好,多看书,慢慢看  不图快

论坛徽章:
0
32 [报告]
发表于 2011-04-06 12:34 |只看该作者
前不久做了个按键设备驱动,里面涉及到双边缘触发问题,由于我做的按键设备不支持双边缘驱动

所以用了个定时器定时读取相关键状态,结果由于防抖问题,就用了个工作队列来实现

想知道的就是用tasklet是不是也能实现,好像这种方式不能睡眠,不过我在tasklet睡眠好像也没

有出现问题

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
33 [报告]
发表于 2011-04-06 12:42 |只看该作者
我不认同楼上的观点,我认为看视频是极度浪费时间,有时候一个简单的知识点早就明白了,但讲的人还在喋喋不 ...
amarant 发表于 2011-04-06 11:25



    借用“学问”一词,我觉得除了看书学习,听听别人的,哪怕是不合理的,也是有好处的。

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
34 [报告]
发表于 2011-04-06 12:42 |只看该作者
学习内核编程只看书可是不行的,看完书后到网上下载一些视频教程,这样学的很快,可是网上关于linux内核编程 ...
jjinl 发表于 2011-04-06 09:18



    学习+实践,理论结合实践的方式,才能有更大的收获

论坛徽章:
0
35 [报告]
发表于 2011-04-06 12:49 |只看该作者
个人觉得:
1、精通c语言,能读懂一些汇编,C++不懂都没关系
2、熟悉内核构架,能迅速的找到相关需求代码, 懂得利用工具来辅助对工作当然更好
3、能够读懂硬件datasheet,主动分析在实践中出现的相应问题,出了错,出什么错都能在潜意识里知道应该是哪个地方可能搞错了,还有就是能读懂时序图,能知道先设置什么,先拉高什么,为什么供应商提供这样的示例。
4、英文最好平时练练,这样对自己的发展比较好,国内的一些文献远远不够,放眼全球当然更好。

除了这个,我还想说点,平时多练练逻辑思维,很多时候,公司都是想让你独立完成一些模块,出现问题,要从多个方面去思考,比如信号、中断的相辅作用等

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
36 [报告]
发表于 2011-04-06 13:33 |只看该作者
借用“学问”一词,我觉得除了看书学习,听听别人的,哪怕是不合理的,也是有好处的。
dreamice 发表于 2011-04-06 12:42



    呵呵  有道理  可能跟我自身有关吧,我就不爱操着手看视频。。  要有真人讲的话,我就会爱听

论坛徽章:
0
37 [报告]
发表于 2011-04-06 17:39 |只看该作者
这个主题很好啊。认真的看完了所有回复的帖子。

其实09年我就想学linux驱动,当时只是一些简单的移植,基本上就是网上已经有的驱动程序,我只是复制、粘贴到到内核代码的相应目录里。

后来在网上找了一些驱动开发的文档,买了一些驱动开发的书籍,平常有时间了就会看下。

现在感觉自己的基础不够好,C语言是04年的时候学过,学的很浅,后来也一直没有用过,所以现在重新学习了一下C语言,集中时间,花了差不多两个月时间了,现在算是对C语言入门了吧。

我的模电、数电、英语还不错,看电路图和英文的芯片手册没有问题。

接下来,我想把内核代码里关于驱动的部分看下,先挑一些常用芯片的驱动分析一下,然后尝试着修改,在看内核里驱动目录下的代码时,遇到不明白的地方,再去查阅相关书籍和资料。内核里的驱动代码是一个很好的学习资料,我想这个得好好利用。

这个做完之后,找个类似的其他型号的芯片手册,对照着已有的芯片驱动,看看有什么区别,然后修改。

因为现在是自学,所以就先这样打好基础,入个门,下半年就找工作了,等参加工作了,有实际的需求时,就可以验证自己写的驱动是否有问题,是否可用。

我是这样想的。希望前辈指点。

论坛徽章:
0
38 [报告]
发表于 2011-04-06 18:47 |只看该作者
去年下半年接触到驱动,学习了一些理论的东西,中途因为一些琐事放下了,现在重新学习。
我的个人看法,学习驱动的话先要找到一本好的教材,可以事半功倍,理由大家都知道,再次就是要坚持,像我一放下现在得重新来了,第三,实践出真知,多动手,多总结,最好做教程,理解更加深入一些。 驱动和应用程序不同的地方,在于要学习背后的机制,实现原理,不能只会写驱动就行,那样是不能写出好的驱动的。

论坛徽章:
0
39 [报告]
发表于 2011-04-07 13:00 |只看该作者
我还想说一点,学习驱动开发,有时候并不一定要只专对linux内核


其它的也可以参考,当你多参考,多看源代码后,你会发现,其实很多都相通

比如看看ucos,或u-boot源码,我不相信你如果真下功夫学好了u-boot,再

来学inux内核会学不通

论坛徽章:
0
40 [报告]
发表于 2011-04-14 20:56 |只看该作者
1、C语言-基础
2、不同类型的驱动的代码架构,比如说是amba_device、platform_device、字符设备驱动、块设备、网络设备、USB设备、音频、FrameBuffer等等,起码在你写一个新的驱动时知道如何下手。
3、熟悉常见的接口协议:I2C,I2S,UART,SPI等等
4、熟悉一些基本的逻辑、数字电路知识:比如上拉电阻,下拉电阻,A/D D/A转换,PWM,计数器,定时器等等。
5、熟悉操作系统的相关知识:进程、线程、中断、竞争,锁,内存映射。
6、掌握最基本的调试方法(我目前还是用printk),见笑了。
7、学会使用示波器和逻辑分析仪等调试仪器,当驱动运行异常时,可以通过他们进行排错,当然使用这个的前提是你要深入理解驱动的硬件的工作原理。这个我得体会很深,有时驱动出了问题,搞了N天不行,最后用示波器一看波形发现不对,然后对着datasheet的寄存器定义挨个排除,最后才发现一个小小的遗漏,所以必须的辅助仪器还是要熟练使用的。

以上是我在开发过程中的一点愚见,还望各位朋友批评指正补充,大家一起进步!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP