博客首页 注册 建议与交流 排行榜 加入友情链接         宝宝相册的专门空间
推荐 投诉 搜索: 帮助

Tekkaman Ninja

Linux我的梦想,我的未来! 专注linux内核和驱动!本博客的原创文章的内容会不定期更新或修正错误! 转载文章都会注明出处,若有侵权,请即时同我联系,我一定马上删除!! 原创文章版权所有!如需转载,请注明出处: tekkman.cublog.cn ,谢谢合作!!!!!
  tekkman.cublog.cn

关于作者
姓名:Tekkaman  Ninja
职业:ARM9+Linux
年龄:25
位置:福建龙岩
个性介绍:钻研嵌入式Linux技术
E-Mail:tekkamanninja@163.com
|| << >> ||
我的分类


Linux设备驱动程序学习
Linux设备驱动程序学习
 前言:
    接触ARM-Linux已经有9个多月了,经历了毕业设计和公司的练习设计,对ARM-Linux有了一定的了解,也让我爱上了ARM-Linux,决心以后从事Linux的工作。
    8月份开始,我算是从头认认真真,一步一个脚印地学习ARM-Linux。先后对博创UP-NETARM2410-S和友善之臂SBC2440V4进行了系统移植,包括U-Boot1.2.0、Linux2.6.22.2,并针对3个网卡芯片进行了U-Boot和Linux的驱动移植,制作了一个cramfs和nfs文件系统。可以说已经很好地构建了一个以网络为基础的ARM-Linux开发平台。这些工作不仅是以后开发必须的,我也在这些过程中进一步地加深了对ARM-Linux系统的认识。由于工作的需要,两个平台上的其他外设的驱动移植已经基本停滞了,现在开始完全投入到Linux设备驱动程序的学习中。
    我早在7月底开始就在看《Linux设备驱动程序(第3版)》但是发现效果不明显。究其原因:缺乏实践。学编程就和学游泳是一样的,只是纸上谈兵是学不会的。没有在实践中学习,很快就忘了所学的知识,到头来只学了个大概。从今天开始我将跟随《Linux设备驱动程序(第3版)》的路线,边学习边编程,同时写这份记录,来巩固学习的效果。
    首先,因为我是在学习ARM-Linux,所以我所做的编译都是交叉编译,然后在ARM9开发板上运行。至于内核版本,我使用的是从 http://www.kernel.org/  上下载的主线标准内核Linux2.6.22.2。引用《Linux设备驱动程序(第3版)》的原话:“如果想要学习驱动程序的编写,则标准内核是最好的。


·Linux设备驱动程序学习(1)-字符设备驱动程序
·Linux设备驱动程序学习(0)-Hello, world!模块
·Linux设备驱动程序学习(2)-调试技术
·Linux设备驱动程序学习(3)-并发和竞态
·Linux设备驱动程序学习(4)-高级字符驱动程序操作[(1)ioctl and llseek]
·Linux设备驱动程序学习(5)-高级字符驱动程序操作[(2)阻塞型I/O和休眠]
·Linux设备驱动程序学习(6)-高级字符驱动程序操作[(3)设备文件的访问控制]
·Linux设备驱动程序学习(7)-内核的数据类型
·Linux设备驱动程序学习(9)-与硬件通信
·Linux设备驱动程序学习(8)-分配内存
·Linux设备驱动程序学习(10)-时间、延迟及延缓操作
·Linux设备驱动程序学习(11)-中断处理
·Linux设备驱动程序学习(3-补)-Linux中的循环缓冲区
·Linux设备驱动程序学习(12)-Linux设备模型(底层原理简介)
·Linux设备驱动程序学习(13)-Linux设备模型(总线、设备、驱动程序和类)
·Linux设备驱动程序学习(14)-Linux设备模型(各环节的整合)
·Linux设备驱动程序学习(15)-Linux设备模型(热插拔、mdev 与 firmware)

发表于: 2007-10-20,修改于: 2007-12-11 13:28,已浏览3757次,有评论19条 推荐 投诉


网友评论
网友: 本站网友 时间:2007-11-09 15:14:42 IP地址:124.130.130.★
好文章,我是从你的第一章开始看的,今天9号看到你又有新内容,学不少东西,请坚持下去,加油啊

网友: 本站网友 时间:2007-11-14 16:40:21 IP地址:124.130.130.★
很不错啊,我几乎每天都来学习你的经验,感觉收益非浅,加油啊!

网友: 本站网友 时间:2007-11-14 17:24:21 IP地址:124.130.130.★
我觉得最好的方式就是有人交流^_^我很想与你交流,我的QQ32313055

网友: 本站网友 时间:2007-12-07 13:16:52 IP地址:220.181.54.★
我学arm一年多了,可是水平比阁下差远了。看完文章,收获良多,非常感谢!

网友: 本站网友 时间:2007-12-20 09:47:55 IP地址:202.119.113.★
向Tekkaman  Ninja致敬,你的学习态度和学习方式都值得我们借鉴!

网友: 本站网友 时间:2007-12-25 11:58:13 IP地址:61.146.40.★
圣诞快乐!
让我学到了很多东西,

网友: 本站网友 时间:2007-12-25 13:58:12 IP地址:221.15.9.★
很好的文章啊,我正在学习驱动开发,刚刚入门,谢谢啊

网友: bxfqing 时间:2008-01-03 16:56:27 IP地址:61.152.238.★
我才开始接触ARM-`入门中.........
期待与你交流下,
e-mail : aravarav@sina.com

网友: 本站网友 时间:2008-01-04 11:19:07 IP地址:58.45.191.★
好 期待

网友: 本站网友 时间:2008-01-04 12:00:28 IP地址:59.40.39.★
write error! code=-1 
write ok! code=21 
read ok! code=20 
[0]=0 [1]=0 [2]=1 [3]=2 [4]=3
[5]=4 [6]=5 [7]=6 [8]=7 [9]=8
[10]=9 [11]=10 [12]=11 [13]=12 [14]=13
[15]=14 [16]=15 [17]=16 [18]=17 [19]=18

网友: 本站网友 时间:2008-01-04 12:09:57 IP地址:59.40.39.★
我改了一下makefile在pc上运行是这个结果

Blog作者的回复:
所有的源码都在友善之臂SBC2440V4上反复测试过(内核为2.6.22.2)。所以基本上只要改Makefile就好(除了硬件相关的部分)。如果有问题可以将详细的情况发邮件给我,有空我会回复的。


网友: 本站网友 时间:2008-01-30 11:09:31 IP地址:218.79.242.★
不错,支持

网友: 本站网友 时间:2008-02-29 17:11:19 IP地址:202.114.212.★
写的真的很好
我们老师就让写一个字符设备驱动程序,我都是通过在你的网页上学会的所有的东西。

网友: sailor 时间:2008-03-16 15:07:25 IP地址:219.239.31.★
赞一个,总结的很好

曾经研究过ldd3,没有认真写下读书笔记,以后还得好好再看下了

网友: 本站网友 时间:2008-03-28 16:21:18 IP地址:218.88.106.★
请问怎么使用drivers/spi/atmel_spi.c提供的驱动呢?在/dev下没有相应的设备节点,怎么才能在用户空间访问设备?如果自己写一个驱动注册一个spi驱动可以使用其中哪些函数接口?诚请帮忙

Blog作者的回复:
你好,atmel的芯片我还没移植过,里面的设置我也不熟,
至于SPI,推荐你参考以下两个帖子看看:
http://www.linuxforum.net/forum/showflat.php?Cat=&Board=embedded&Number=665008&page=7&view=collapsed&sb=5&o=0&fpart=

http://www.linuxforum.net/forum/gshowflat.php?Cat=&Board=embedded&Number=646262&page=1&view=collapsed&sb=5&o=all&fpart=


网友: 本站网友 时间:2008-04-14 20:02:47 IP地址:61.157.97.★
今天看了你的文章很感慨,希望能共同学习。有个问题想问,
请问当insmod scull.ko scull_quantum=6 scull_qset=2
数据已经溢出了,为什么20个数据还能写进去。谢谢了

Blog作者的回复:
这个和scull的数据结构有关,你认真看看《Linux设备驱动程序学习(1)-字符设备驱动程序》,中的图,你可能对scull的数据结构还没有理解透,scull_quantum代表了一个quantum的字节数,scull_qset代表一个qset包含几个quantum,但是还有qset没有限制,也就是说我写20个字节进去,一个scull中有2个qset。


网友: 本站网友 时间:2008-05-22 14:53:06 IP地址:211.100.22.★
总结的太好了。
有一个问题想请教一下。看模块中定义了一个char *whom = "world"
这是一个字符串常量,如果按照标准C的话,指针指向的是一个常量字符串才对,其中的内容不能修改。比如whom[2]='a';这样会有段错误,为什么在内核中这样操作是合法的呢? 

网友: nighteblis 时间:2008-05-29 11:08:30 IP地址:65.113.40.★
 lz的经验和态度值得我们学习,向你致敬!

网友: 本站网友 时间:2008-06-03 20:59:00 IP地址:123.115.206.★
很不错,尤其是有源码和测试程序。

 发表评论