免费注册 查看新帖 |

Chinaunix

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

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

论坛徽章:
0
11 [报告]
发表于 2011-03-26 17:50 |只看该作者
回复 4# jlccwss


    jlccwss 网友和楼上的的dreamice 网友都说的很不错,c语言基础,数据结构的能力,一些简单的硬件基础都是开发驱动程序很重要的知识组成部分。有了这些基础知识后,就需要忘寝废食的去阅读驱动相关的源代码,先从简单的字符设备阅读开始,然后转到块设备驱动程序的研究。字符设备可以先研究一下简单的LED、内存字符设备等。块设备最要的就是usb了。掌握好这些技术并且灵活应用,就可以算是高手了。
   在我们这个时代有大量的驱动和应用需要去开发,这些都是我们驱动开发人员应该认识到得。就目前的形式来看,平板电脑有很大的市场价值,基于Linux内核的android平台更是流光溢彩。大家应该知道android在07年才宣布推出市场,而Linux驱动开发的技术这些年都变化不大,如果现在的你掌握了驱动,以及驱动移植的技术,将有很多的产品等待着你去移植和开发。
   对于初学驱动的程序员来说,现在开始还不晚,你要做的目标就是在一台裸机上移植你喜欢的Linux操作系统,并为其写好驱动,至于上层的应用软件,你或许都可以不管,现有的应用软件基本能够实现大多数功能了。我深信下一个10年,是以Linux为内核的操作系统、移动设备等的天下。

论坛徽章:
0
12 [报告]
发表于 2011-03-28 12:27 |只看该作者
我是自学linux驱动开发的,现在还在学习中,说说我的看法:
1. Linux驱动的基础知识,如自旋锁、原子操作、互斥、阻塞、信号、中断、队列、linux驱动框架等等;
2. C语言,特别是数据结构、指针、函数指针、链表等C知识;
3. 一定的硬件基础,至少要能看懂电路组成、大致功能、硬件调试等;
4. 用SOURCEINSIGHT多看内核驱动代码,从简至难,如按键驱动、AD驱动、看门狗驱动,接下来,I2C驱动、SPI驱动、FRAMEBUFFER驱动;
5. 看完一些驱动后或者做过一些驱动后回过头再去看一些linux驱动的基础知识,使自己对这些基础知识有一个更深刻、更系统的认识;
5. 良好的E文,linux源码目录下有很多文档,从这些文档中可以获取很多有用的东西;
6. 一定的应用程序编写经验让你写出更好的驱动;
7. 一本好的指导书,不用太多,一两本就足以;
8. 仅看代码是不够的,要多写、多调试驱动,哪怕是最简单的IO驱动或按键驱动。

论坛徽章:
0
13 [报告]
发表于 2011-03-28 13:24 |只看该作者
学习不久,提出点总结

1、最最最重要了解内核,所谓了解当然不是要求对内核非常熟悉,是要能快速找到自己想找的东西,关键在于Kconfig和Makefile这两个文件,懂得如何从这两个文件找到自己要找的源文件,再去读。
2、构建好你的VIM,配置好插件,能够方便地读取源码,为什么要强调工具的重要性呢?因为工具的易用能提高你读源码的效率,这个非常有帮助。
3、多写多看,不要怕错,一开始可以写些小模块,make完后发现有错再修改,完成后就下载开发板加载,慢慢发现错误,不懂上ChinaUnix问。
4、fudan_abc(Linux内核修炼之道作者)说过,驱动开发三件宝:spec、datasheet与内核源码,除了内核源码,spec和datasheet也很重要。

论坛徽章:
0
14 [报告]
发表于 2011-03-29 20:30 |只看该作者
回复 12# reille


    我觉得你说得非常的好。在从整体上了解一下硬件驱动程序,硬件抽象层,应用程序框架层次,和应用程序各部分的功能和相互之间的关系,那么会有意想不到的收获。总之,非常赞同你的这种学习方法,对于驱动还未入门的朋友,参照这种方法是一个好的选择。

论坛徽章:
0
15 [报告]
发表于 2011-03-29 20:34 |只看该作者
回复 8# Trigger_Huang


    建议做一些关于现在android系统的移植工作,这样相信进步会更大。

论坛徽章:
0
16 [报告]
发表于 2011-03-29 20:36 |只看该作者
回复 12# reille


    第4条对于多看源代码的朋友很有帮助,看多了内核源码,如果你在看其他应用层次的源代码,例如游戏引擎会更简单

论坛徽章:
0
17 [报告]
发表于 2011-03-30 11:23 |只看该作者
内核,驱动经验,对内存,中断,抢占有整体的掌握
C语言肯定的
硬件datasheet ,时序把握

论坛徽章:
0
18 [报告]
发表于 2011-03-30 19:43 |只看该作者
在学习的过程中, 我认为应该持之以恒,不断的写驱动代码,阅读源代码,在工作和学习中丰富自己的知识。另外,半年,一年是不能学得很好的,所以坚持下来,给自己18个学的时间,这也是比尔盖茨的时间。

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
19 [报告]
发表于 2011-03-30 20:27 |只看该作者
楼上有些同学说的很有概括性,有些同学说的很具体。要是能把他们提到的都学会基本上就成专家了,不过可能需要很长的时间。每个人的基础、学习能力、运气等因素不同,学习的速度就不同。如果有人指导,肯定会加快学习速度,但如果自学的话,最好能找到适合自己的学习方法。最重要的一点是要坚持(尤其是想成为专家的时候)!
    我说说适合我的方法(有些知识点会和前面同学提到的有重复,不重复很难啊,除非我在说别的,或者他们在说别的 )。
    1 准备必要的基础知识:
       熟悉 C 语言
       阅读内存管理、定时器、中断处理、驱动框架 和 具体驱动代码
       了解和掌握 Linux 模块开发、 Linux 驱动框架、Linux 驱动中如何使用内存、Linux 下如何处理中断、互斥等
       学习、了解硬件知识(这个根据不同硬件难度不同)
      (大家都知道,最好把了解、熟悉改成精通)

    2 动手实践
       开始编写、调试驱动程序(尝试照抄、改写现有驱动,要有一个循序渐进的过程),发现不足的地方再去学习。

    3 深入学习
       要学的东西很多。。。

     我们有 Linux 内核源码,资料也越来也多。硬件厂商也会提供相关文档甚至驱动样例。所以有时候难点就在于自己能不能坚持,当然首先要看自己是否适合做驱动开发。

论坛徽章:
0
20 [报告]
发表于 2011-03-31 00:45 |只看该作者
回复 15# gery258


   呵呵, 目前的工作还接触不到android, 我之前也只是开发过两款Linux驱动,所以理解也不是很深刻, 望多多指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP