免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2276 | 回复: 2
打印 上一主题 下一主题

如何学习linux设备驱动?? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2010-06-06 15:18 |只看该作者 |倒序浏览
我最近在学习arm和linux设备驱动,不过那本<<linux设备驱动>>的书我看着一直很迷糊.想问问各位.对于linux驱动.各位是一个怎么样的理解?

我是学电子信息工程的,毕业后一直在单片机行业.对于51系列单片机应该说很熟练了,对于纯linux方面,我接触linux有三年了.对于基本操作和 shell编程等都很熟悉.linux中C编程,工具使用等都还是很熟练的.希望这个对于我产生迷糊的原因好让各位能有针对的方法指点吧~~

在我的理解里面,如果要驱动一个硬件,哪怕是串行模式的(usb不知道).那么都需要给添加的硬件模块首先执行片选使能.比如有的芯片有使能引脚,或者在串行片选时候有片选地址发送(I2C)等方式.可以理解的.至少都是对某些引脚进行一个纯2进制的设定.

但是我在看linux设备驱动时候,发现设备驱动的制作依旧是运用函数库,只是这个函数库没有写上层应用程序时候多了,然后如同unix环境高级编程一样,只是告诉你运用一些函数的方法(比如printk. register_chrdev等).

但是在看教学视频中了解,驱动层位于硬件层和内核层的中间,它起到的作用是执行上层(内核层)命令给硬件层.或者返回数据从底层到内核层.这个就非常让我觉得迷惑.因为在驱动中没有纯2进制的设定,那么如果我要给系统添加一个串行接口的硬件模块,没有使能引导(针对使能引脚的启动或者发送片选信号),如何使他驱动起来呢?

比如用led跑马灯吧.在单片机方面,并行方式中应该是针对硬件连接的端口(假定P1口)进行传输控制比如
MOV A, #FEH.
RLC A
MOV P1, A
=====================
但是在linux设备驱动中,(比如阿南的linux笔记).对于led的驱动没有涉及一个硬件的纯2进制的定义.而只是说注册设备号,然后初始化等.并且依然是一些函数的运用就可以了.这让我觉得很奇怪.仅这样如何能驱动一个硬件,因为甚至连硬件的接口和硬件芯片都没有考虑进去,就可以算驱动了.

希望有朋友能帮助我,我该如何理解和学习linux设备驱动.

论坛徽章:
0
2 [报告]
发表于 2011-11-23 16:05 |只看该作者
是啊,只看到函数调来调去,注册卸载,涉及硬件的好像蛮少,我想应该是内核已经帮我们完成了吧!

论坛徽章:
22
丑牛
日期:2014-08-15 14:32:0015-16赛季CBA联赛之同曦
日期:2017-12-14 15:28:14黑曼巴
日期:2017-08-10 08:14:342017金鸡报晓
日期:2017-02-08 10:39:42黑曼巴
日期:2016-11-15 15:48:38CU十四周年纪念徽章
日期:2016-11-09 13:19:1015-16赛季CBA联赛之同曦
日期:2016-04-08 18:00:03平安夜徽章
日期:2015-12-26 00:06:30程序设计版块每日发帖之星
日期:2015-12-03 06:20:002015七夕节徽章
日期:2015-08-21 11:06:17IT运维版块每日发帖之星
日期:2015-08-09 06:20:002015亚冠之吉达阿赫利
日期:2015-07-03 08:39:42
3 [报告]
发表于 2011-11-23 22:47 |只看该作者
简单的设备是直接写io口,一般用ioremap后直接操作
简单的字符设备如看门狗之类的就是基本都是一些IO操作

写操作系统下的驱动不像写裸机驱动,至少你的设备是被系统管理的吧?所以要把你设备的信息给操作系统。
学习linux的驱动可以先看看内核,不求精通,知道个大概。这样理解的更快。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP