Linux驱动学习步骤(转载)
1. 学会写简单的makefile
2. 编一应用程序,可以用makefile跑起来
3. 学会写驱动的makefile
4. 写一简单char驱动,makefile编译通过,可以insmod, lsmod, rmmod. 在驱动的init函数里打印hello world, insmod后应该能够通过dmesg看到输出。
5. 写一完整驱动, 加上read, write, ioctl, polling等各种函数的驱动实现。 在ioctl里完成从用户空间向内核空间传递结构体的实现。
6. 写一block驱动, 加上read,write,ioctl,poll等各种函数实现。
7. 简单学习下内存管理, 这个是最难的,明白各种memory alloc的函数实现细节。这是Linux开发的基本功。
8. 学习锁机制的应用,这个不是最难的但是最容易犯错的,涉及到很多同步和并发的问题。
9. 看内核中实际应用的驱动代码。 你会发现最基本的你已经知道了, 大的框架都是一样的, 无非是read, write, ioctl等函数的实现, 但里面包含了很多很多细小的实现细节是之前不知道的。 这时候就要考虑到很多别的问题而不仅仅是基本功能的实现。 推荐您看2.6.20中integrated的一个驱动 kvm, 记得是在driver/lguest下,很好玩的, 就是Linux下的虚拟机驱动, 代码不长,但功能强大。有能力的可以自己写一操作系统按照要求做成磁盘镜像加载到虚拟机中, 然后客户机可以有自己的4G虚拟地址空间。
10. 看完驱动欢迎您进入Linux kernel学习中来。 最简单的方法,跟着ldd(Linux devive driver)做一遍。
学习linux驱动开发是一个很漫长的过程,有的人能迎风破浪,有的人却只能知难而退,我也不知道自己是哪一种人,只是知道我现在从事的工作就是linux驱动的工作,而且工作不是很轻松,而且不是向我以前想象的那么简单,而我的理想与目标,可能会向后延期。但是我也很庆幸,因为我还来得及,知道自己以后的路应该怎么走。
对于我个人能力,自认为还不是一个合格的工程师,就好像现在的人把工程师当作司机一样,满大街的都是工程师,没有几个能够和自己的称呼真正的对称,所以我也明白自己现在在做什么,应该做什么,我是一个一旦确定了目标,就会一直走下去,所以我现在唯一能做的就是努力,努力,再努力。好了,废话也不多说了。为了避免一些刚刚接触的人走弯路,我就把如何才能走入这样行业,而你应该具备什么知识,你应该怎样一步一步的走,等等介绍给大家,
首先学习linux驱动开发(2.4和2.6),真本身就是一个非常笼统的概念,那好我们应该怎样去学习呢。
1,首先你应该是一个计算机专业出身的学生,因为在上大学的时候,有好多基础课程(我们所说的垃圾课),都是驱动学习的非常重要的课程,所以我们要把那些基础学好,就是说我们在大学学习的每门课程都是有用的,想成为一个真正的高手,必须具备那些基础知识。比如说:C语言,汇编语言,数据结构,计算机系统结构,操作系统,微机原理,数点,模电,等等,总之要把这些学好,只有这样你才能迈进驱动的大门,而不是只是当一个修修补补的人(这句话只有做过驱动开发的人,能明白我说的意思)如果不是计算机专业的话,那你就慢慢补吧......
2 接下来,我们应该把C语言学习到精通在精通。那应该怎样才能把C学习到精通在精通呢,好,你只要把这五本书搞懂了,就没有问题了。
1 The.C.Programming.Language.2nd.Edition
2 C语言接口与实现--创建可重用软件的技术
3 C陷阱与缺陷
4 C语言参考手册第五版
5 C专家编程
3当你具备了以上内容,那你就可以学习linux了。好我也就把怎样去学习linux的过程介绍一下。首先你应该利用一段时间把基础学习一下,包括基本命令,服务的配置,文件系统的介绍。还有就是linux的操作,要达到熟练,简单的说就是把会用linux系统了。当然这只是一个开始,前段的学习不要超过两个月的时间,快的话一个月就够了。好了,重点学习的东西,vi,gcc,gdb,shell,makefile的学习和使用,编译一个简单的C程序。要知道C在不同环境下使用也是不一样的,所以我们不要在windows下练习,要一直在linux去做这些事情。这个学习的过程也得2个月的时间,我们要多学习一下makefile和shell,在这之前的学习要学的慢一点,打基础要牢靠一点。
4 以上的内容你都掌握了,接下来就是真正的进入应用层的开发了。由于本人是从事网络开发的,所以我也只能给大家介绍一个怎么才能进入网络开发的行列。首先你应该好好的学习一下网络基础的东西,这也是非常重要的哦。包括,计算机网络基础,tcp/ip的学习等等,接下来你应该去买两本书,就是有关linux进程开发的和socket开发的书籍。这些学习的过程就漫长了。至少也得个半年的时间吧。
好了,由于时间关系,今天先写在这里,下次会把驱动的真正学习介绍一下。不用急哦,因为这些也够你学一段时间咯。
Linux驱动学习步骤(转载)的更多相关文章
- linux驱动学习(二) Makefile高级【转】
转自:http://blog.csdn.net/ghostyu/article/details/6866863 版权声明:本文为博主原创文章,未经博主允许不得转载. 在我前一篇写的[ linux驱动学 ...
- linux 驱动学习笔记01--Linux 内核的编译
由于用的学习材料是<linux设备驱动开发详解(第二版)>,所以linux驱动学习笔记大部分文字描述来自于这本书,学习笔记系列用于自己学习理解的一种查阅和复习方式. #make confi ...
- 【Linux驱动学习】SD卡规范学习
摘要: 学习SD卡的相关规范,包括定义,硬件特性,数据传输,命令系统等.不涉及代码. 文章针对Linux驱动开发而写,以助于理解SD卡驱动,不会涉及过多硬件内容. 纲要: 1. SD卡介绍 2. SD ...
- 树莓派linux驱动学习之hello world
最近想学习一下linux驱动,看了一些书和教学视频,大概了解了一下,不过要想深入,肯定需要实践.手上有几块linux的板子,最终选择了树莓派作为我的实验平台,资料比较丰富,接口也比较简单. 程序员的入 ...
- Linux驱动学习之驱动开发准备工作
一.开启驱动开发之路 1.驱动开发的准备工作 (1)正常运行linux系统的开发板.要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的.原因在于在安装模块的时候会进行安全性校验 ...
- linux驱动学习之Input输入子系统
以前,看过国嵌关于input子系统的视频课程,说实话,我看完后脑子里很乱,给我的印象好像是input子系统驱动是一个全新的驱动架构,疑惑相当多.前几天在网上,看到有很多人介绍韦东山老师的linux驱动 ...
- Linux驱动学习1.hello world;
最近项目需要使用Linux系统开发,借此机会学习一下Linux驱动开发 hello word代码hello.c #include <linux/module.h> #include < ...
- linux驱动学习(八) i2c驱动架构(史上最全) davinc dm368 i2c驱动分析【转】
转自:http://blog.csdn.net/ghostyu/article/details/8094049 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 预备知识 lin ...
- linux驱动学习_1
目前项目需要,需要做linux驱动了,记录一下 学习驱动,大家一定都会写一个hello world代码,网上也有很多范例,但是记录一下遇到的问题. 1.make之后,使用insmod加载,终端没有打印 ...
随机推荐
- Lua __index元方法
[Lua __index元方法] 当你通过键来访问 table 的时候,如果这个键没有值,那么Lua就会寻找该table的metatable(假定有metatable)中的__index 键.如果__ ...
- AESwithJCE http://www.coderanch.com/how-to/content/AES_v1.html
Using AES with Java Technology By Rags SrinivasJune 2003 In September 2000, the National Institute o ...
- MATLAB - 运算符
1.关系运算符用来比较两个数之间的大小关系,在Matlab中的关系运算符包括: < 小于 <= 小于或等于 > 大于 >= 大于或等于 == ...
- GridView中实现CheckBox的全选
GridView中实现CheckBox的全选 用服务器端的方法: 在页面上放一个gridview控件,配置好数据源,编辑列, <asp:GridView ID="GridView1&q ...
- AjaxControlToolkit MaskedEdit Unspecified error 未指定错误
使用AjaxControlToolkit 里面的 MaskedEditValidator控件,IE里面在如下的js中出现未指定(Unspecified error)错误, if (document.a ...
- 数据字典和动态性能视图<五>
数据字典和动态性能视图 介绍:数据字典是什么 数据字典是 oracle 数据库中最重要的组成部分,它提供了数据库的一些系统信息. 动态性能视图记载了例程启动后的相关信息. 数据字典 数据字典记录了 ...
- SQL分页查询结果不一致
今天遇到了SQL分页查询结果不一致的情况,一看代码,原来是没加排序查询!!分页查询最好加排序,且以唯一性高的字段进行排序,如ID,时间等,以保持每页查询结果的准确! PS:又帮别人擦屁股!!
- windows 硬盘格式不一样的文件移动 导致拒绝访问 权限丢失 0字节解决办法
解决此问题,必须关闭“简单文件共享”,然后获取文件夹的所有权: 1. 关闭“简单文件共享”: a. 单击“开始”,然后单击“我的电脑”. b. 在“工具”菜单上,单击“文件夹选项”,然后单击“查看”选 ...
- NSArray其中的方法--遍历,
1. ForLoop, For - in, enumerateObjects这个三个方法的区别: 遍历一个数组用For-in最快. 通过Value查询index的时候, 面对大量的数组推荐使用 enu ...
- VMware12 安装 CentOS 6.5 64位
前言:本人在配置Hadoop的过程中,需要搭建Cent OS 64 环境,借此,顺便将Cent OS 64 的安装在此记录,方便自己,也方便大家学习.本次是在VM12虚拟机中实现Cent OS 64 ...