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驱动开发学习笔记(1):LINUX驱动版本的hello world
1.关于目录 /lib/modules/2.6.9-42.ELsmp/build/ 这个是内核源码所在的目录 一般使用这样的命令进入这个目录:cd /lib/modules/$(una ...
- linux驱动开发学习一:创建一个字符设备
首先是内核初始化函数.代码如下.主要是三个步骤.1 生成设备号. 2 注册设备号.3 创建设备. #include <linux/module.h> #include <linux/ ...
- linux驱动开发学习二:创建一个阻塞型的字符设备
在Linux 驱动程序中,可以使用等待队列来实现阻塞进程的唤醒.等待队列的头部定义如下,是一个双向列表. struct list_head { struct list_head *next, *pre ...
- Linux内核(17) - 高效学习Linux驱动开发
这本<Linux内核修炼之道>已经开卖(网上的链接为: 卓越.当当.china-pub ),虽然是严肃文学,但为了保证流畅性,大部分文字我还都是斟词灼句,反复的念几遍才写上去的,尽量考虑到 ...
- Hasen的linux设备驱动开发学习之旅--时钟
/** * Author:hasen * 參考 :<linux设备驱动开发具体解释> * 简单介绍:android小菜鸟的linux * 设备驱动开发学习之旅 * 主题:时钟 * Date ...
- Linux 驱动开发
linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...
- 嵌入式linux驱动开发之点亮led(驱动编程思想之初体验)
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
- 【转】linux驱动开发的经典书籍
原文网址:http://www.cnblogs.com/xmphoenix/archive/2012/03/27/2420044.html Linux驱动学习的最大困惑在于书籍的缺乏,市面上最常见的书 ...
- 驱动编程思想之初体验 --------------- 嵌入式linux驱动开发之点亮LED
这节我们就开始开始进行实战啦!这里顺便说一下啊,出来做开发的基础很重要啊,基础不好,迟早是要恶补的.个人深刻觉得像这种嵌入式的开发对C语言和微机接口与原理是非常依赖的,必须要有深厚的基础才能hold的 ...
随机推荐
- windows7 64 位 mysql 5.6.12 安装
1.修改 my-default.ini 改名为 my.ini 内容修改为 [mysqld] loose-default-character-set = utf8 basedir = D:/mys ...
- Canvas实现文字粒子化,并且绕轴旋转(完善)
1. 之前有放过一个初始版本,但是因为在旋转的时候,有比较大的瑕疵,造成每个点运动到端点后,出现类似撞击的感觉. 2. 所以本文对旋转作了些调整,运用类似水平方向的圆周运动 a. HTML代码,定义c ...
- IOS开发备忘
1. ios 真机调试时出现CopyPngFile error解决方法 说是读取的时候没有找到这张图片,检查了一下图片路径,没有问题,于是google之,找到两种解决方法 : 方法一:在build s ...
- MAC OSX使用篇
前述: 从windows平台切换到osx平台,的确没能一下子适应过来,在使用过程当中遇到了很多问题. link1:osx卸载应用程序的四种方法 link2:(推荐看)开始使用Mac OS X——写给M ...
- Github博客地址
欢迎访问我的Github博客: J.R.Smith_blog
- Sumdiv(各种数学)
http://poj.org/problem?id=1845 题意:求A^B的所有约数的和再对9901取模: 做了这个学到了N多数学知识: 一:任意一个整数都可以唯一分解成素因子的乘积:A = p1^ ...
- phpMyAdmin 完整路径泄露漏洞2
漏洞名称: phpMyAdmin 完整路径泄露漏洞 CNNVD编号: CNNVD-201307-651 发布时间: 2013-08-09 更新时间: 2013-08-09 危害等级: 中危 漏洞类 ...
- 「Poetize6」Candle
描述 蜡烛商店中有10种蜡烛,形状分别是0~9这10个数字,不过对于每种蜡烛,商店的存货量仅有一根.另外,忘川沧月已经有了一个"+"形状的蜡烛.忘川沧月想购买一些蜡烛,使得他的家族 ...
- -_-#【jQuery插件】Spinner 数字选择器
Spinner (jQuery UI)
- Light OJ 1021 - Painful Bases(状态压缩DP)
题目大意: 给你一个base 进制的数字,把这个数字的每一位进行全排列,问有多少个数字是可以整除k的. 题目解析: #include<cstdio> #include<cstring ...