- 论坛徽章:
- 0
|
我最近在学习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设备驱动. |
|