学习驱动的一些经验2

天嵌上转载的:


别人学习驱动的一些经验,先保存在这里。



学了这么久,看了很多资料。发现大部分资料都是告诉你是什么?为什么?和学什么。却没告诉你怎么学。所以我在门外徘徊了很久,至今,看了韦老师的视频,才有所领悟。虽然仍是菜鸟一枚,但是却想将这些感想和大家分享。求高人指正,也为同在郁闷迷茫期的通道门提供一些参考。

我以为,LDD这东西,能站的上边儿的知识有三块:
1、驱动架构
这是驱动学习最重要东西,即所谓最高纲领。对驱动架构有认识之后,就相当于在森林里有了地图。你就不会转晕,你就知道你每一步从宏观上看的最终目的。用宋宝华老师的《Linxu设备驱动开发详解》那本书里的话讲就是:不能一叶障目,不见森林。
在这一大块,主要学习的是架构,比如字符设备驱动架构、块设备架构、USB驱动架构、I2C驱动架构、“总线-设备-驱动”模型、平台总线架构、输入子系统架构等等。
切记别为驱动架构中的一些公用接口函数的实现耽误时间。有一个讲座里说的好,你想游览北京市,你最好先看地图,这样你就会对整体有把握,如果你一开始就钻进小胡同里,那你肯定会转晕的。
因为是讲架构,所以最好有现成的教程,而且最好是视频,上来就看书一般都会晕,要看好几遍。所以韦东山老师的视频就成了不二选择!他领你整体走一遍,在了解整体架构和简单用法之后,如果你有兴趣再去看看宋宝华老师的书,说真的,他的书对架构啃得还是很细的,在有了视频的基础上,你再看他的书,就会轻松不少。但是如果连韦东山老师的视频都没消化,就别急着看架构中函数的实现!你先把整个框架捋清楚再说!
2、内核编程
在看驱动源码的过程中,总会蛋疼的看到类似于中断注册啊、锁啊、工作队列啊、tasklet啊、timer啊什么乱七八糟的东西。这些东西本质是属于内核编程的常用内核API。它们可以让你更出色的完成驱动程序的任务,从这个角度看,没有他们,驱动甚至都没法写,因此,它们的用法你必须学会。
但是!你要搞清楚的是用法而不是实现方法!他们只是你编写驱动工具而已!你只需要知道他们怎么用,没必要追到代码里!用途搞不清楚,你可以看LDD、看宋宝华老师的书;用法不清楚,你直接搜内核源码,看别人怎么用。但是千万别为了用法和用途追到代码里!那是没有结果的!
经常有铺天盖地的言论说“看内核”、“内核是最好的老师”。我承认,这话没错,但是你要搞清楚的是:当你有了问题,你让这个老师教你什么?在某公司实习那段时间,我见到的最大的误导言论就是:“内核API不知道是干什么用的,那就追进去看看!”这言论蒙了我很久,知道看了韦东山老师的视频才顿悟。我追你大爷个X!如果我有追到内核API里就能看出是干嘛的那种功力,我就不可能不知道这个API是干嘛的了!仔细分析一下啊,一个内核API里面要调用多少小函数,追到下面是多少个宏,内核里同名的宏函数少则一两个,多则几十、几百个。没有教材领着,我怎么追?你自己没有参考追个USB驱动架构我看看!打印log追代码?追你大爷!你有病吧!这不是忽悠新人、把我往歪道上指吗?
所以,对待现代Linux内核这种庞然大物,你做每一件事都要谨慎,都要搞清楚你在干嘛!你想知道内核API怎么用,最快的方法才是看内核代码(当然那是要看别人是怎么用这个API的,而不是追进去看实现),这比你现去翻LDD快得多。
如果,你真到了天外飞仙的境界(不过人家都说这至少是5~8年的道行,少于这个年限的,要么是天才要么是装X)或者真的是闲的蛋疼非要看内核API实现,那你也最好是有《Linux内核源代码情景分析》这种旷世奇书做指引,让人家领着你看。别跟水蛭似的,逮着皮就往里钻,你做死呢你?

3、调试方法
今天我是看了,不会写脚本连调试都费劲。因为工作/实验环境通常是三个平台,Windows PC、Linux Server和开发板。这三个地方倒来倒去一会儿你就晕了,有时候把新文件拷贝错了地方,你都不知道,还在那里一个劲儿地瞎调试,浑然不知道自己在调试一个没有更新的就文件,N小时过去之后。。。最后知道真相的我眼泪掉下来。。。。
为什么会出错?因为这些简单的拷贝命令都是机械重复操作,命令带的路径参数可能还很长,写着写着就没耐性了。那你就不能写个shell脚本么?哎!您这是说到点儿上了,shell脚本我不会啊,什么参数传递啊、变量设置啊就是不会,连for循环都弄不利索。。。。
闭嘴!还有脸说,赶紧学啊!

4、我的学习计划
现在呢,韦东山大神的视频看差不多了,各种架构都走马观花地了解了一遍。已经算是过了迷茫期了,觉得自己提升了不少,也有能力做下边的事情了。但是在这个过程里呢,发现各种蛋疼的小问题,比如内核API、比如shell脚本。所以,为了很好的进行框架学习并方便日后代码编写。
(1)我得先学学内核API,看看宋宝华的书,写写代码实验实验。这点儿破东西有个三四天肯定下来了,只图有个印象,以后回来现找也方便。坚决不看实现,书里讲不清楚的上网查,查不着拉到跳过。这些工具啊,用个差不多就行了。没必要扣得太深了。
(2)我得学shell脚本了,不是有本封面画着海归大王八的书么,不是有鸟哥私房菜么。都看看,看看文字处理工具awk啊什么的,调试时候用,真的很方便,也省得每次都机械地敲一大堆命令,不嫌烦还怕出错呢!
(3)打好底子就赶紧学架构!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 您可以通过以下步骤学习 Linux 驱动开发: 1. 熟悉 Linux 内核代码结构和 API 2. 学习 Linux 驱动模型和设备模型 3. 熟悉 I/O 内核子系统、中断处理和定时器等相关原理 4. 学习 Linux 驱动程序的编写和调试 5. 了解 Linux 内核模块的加载和卸载方式 如果您需要更深入的学习,请阅读相关书籍或在社区中寻求帮助。 ### 回答2: 学习Linux驱动的过程可以分为以下几个步骤: 1. 学习Linux系统基础知识:了解Linux操作系统的基本原理和架构,理解Linux内核的基本概念和组成部分,掌握Linux命令行的使用等。 2. 学习C编程语言和内核编程:C语言是Linux驱动开发的基础,需要学习C语言的基本语法、指针、内存管理等知识。还需要学习Linux内核编程的相关知识,掌握内核数据结构、内核模块的开发和加载等。 3. 学习设备驱动的基本概念:了解设备驱动的基本原理,包括字符设备驱动、块设备驱动和网络设备驱动等。学习设备和驱动程序的交互方式,了解设备文件和设备节点的关系。 4. 阅读和分析现有的驱动代码:通过阅读现有的驱动代码,了解驱动程序的实现方式,学习驱动开发的规范和约定。可以选择一些简单的驱动进行分析和修改,逐步提高自己的驱动开发能力。 5. 实践和调试:选择一个简单的设备进行驱动程序的开发,通过实践来巩固理论知识。在开发过程中,需要进行调试和测试,找出其中的问题并进行修复。 6. 参考资料和交流:可以参考一些经典的Linux驱动开发书籍、网上教程和文档,也可以参加相关的培训课程。此外,可以加入Linux驱动开发的社区,与其他开发者进行交流和分享经验。 总的来说,学习Linux驱动需要有坚实的基础知识和编程技能,还需要不断地实践和调试才能够提高自己的驱动开发能力。 ### 回答3: 学习Linux驱动的过程需要以下步骤: 1.了解Linux操作系统:首先要对Linux操作系统有基本的了解,理解其架构、内核以及相关的系统调用,熟悉Linux的文件系统、进程管理、内存管理等基本概念。 2.了解驱动的基本原理:学习驱动开发的前提是要了解驱动的基本原理,掌握设备驱动和内核的交互方式,包括设备的注册、数据传输、中断处理等。 3.学习Linux内核源代码:通过阅读Linux内核源代码,了解Linux内核的实现细节,掌握内核模块、设备驱动模型、字符设备模型等相关知识。 4.实践编写驱动程序:通过实践编写驱动程序来巩固所学知识。可以选择简单的设备进行驱动开发,例如字符设备驱动、网络设备驱动等,以便更好地理解和掌握驱动程序的编写过程。 5.调试和优化驱动程序:在编写驱动程序的过程中,可能会遇到各种问题,如设备无响应、系统崩溃等。学会使用调试工具和技巧,定位和解决问题。 6.参考文档和交流学习:Linux内核驱动开发有大量的参考文档和资源可供学习,如Linux Device Drivers、Linux内核文档等,可以通过阅读这些文档来提高自己的驱动开发水平。此外,还可以参与Linux驱动开发相关的社区或论坛,与其他开发者交流学习经验。 总结来说,学习Linux驱动需要理解Linux操作系统和驱动原理,阅读内核源代码,实践编写驱动程序,并通过调试和优化提升技能。持续学习和积累经验将有助于提高在Linux驱动开发领域的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值