应用程序 驱动 内核的关系

老猿的春天 2011-08-21 07:42:13
被一个问题困扰了,嵌入式下,应用程序不和硬件直接打交道,是通过驱动,这个过程到底是什么,比如收音机,在开发板上有个收音机芯片,我现在想让它工作,然后有个收音机应用程序,应用程序有个按钮:搜台,我点击搜台按钮就能使收音机模块工作,要想实现这些具体的步骤是什么?

我现在理解的是:首先收音机芯片和处理器连接,处理器发指令让它工作,搜台有自己的指令,问题是应用程序中怎样发指令?
是通过驱动吗? createfile打开串口发送指令这样没通过驱动吧?应用程序中使用Createfile打开串口,writefile向串口写数据,这样不就是控制收音机芯片了吗?驱动的作用体现在哪?很是头痛,一直只做应用层的东西,现在想明白以下这些逻辑,望大家帮忙解答一下!
...全文
191 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
老猿的春天 2011-08-22
  • 打赏
  • 举报
回复
thanks[Quote=引用 10 楼 bjtea 的回复:]

引用 7 楼 mfc5158 的回复:
好像明白了,我感觉主要是我们板子使我迷糊了,它是用51和DZ60通信,而DZ60通过I2C连接收音机芯片,所以就没再另写驱动,只是51通过串口发给DZ60数据,DZ60内核是根据收到的数据来通过I2c控制收音机芯片读写数据,然后DZ60又把数据发给51,DZ60一直在执行监控51发来的数据控制收音机,而如果是收音机通过I2C直接连接51,那就要写I2C驱……
[/Quote]
bjtea 2011-08-22
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 mfc5158 的回复:]
好像明白了,我感觉主要是我们板子使我迷糊了,它是用51和DZ60通信,而DZ60通过I2C连接收音机芯片,所以就没再另写驱动,只是51通过串口发给DZ60数据,DZ60内核是根据收到的数据来通过I2c控制收音机芯片读写数据,然后DZ60又把数据发给51,DZ60一直在执行监控51发来的数据控制收音机,而如果是收音机通过I2C直接连接51,那就要写I2C驱动,驱动来控制收音机芯片,不知我这样理解对吗……
[/Quote]
如果是51直接访问收音机,那么也许就叫做写接口函数或功能程序,不一定叫做驱动。驱动是在有操作系统时而言的,有相应的格式要求。
武汉华嵌科技 2011-08-21
  • 打赏
  • 举报
回复
为什么要有驱动,这个问题我也想过很久,打个比方吧。你去一家餐厅吃饭,你只需要点菜,至于这菜是哪里买来的,怎样做出来的。就不是你的事情了,你所要做的事情就是点菜,其他的事情自会有人把你解决。这里的你就好比应用层序,店里的服务员、厨师就好比驱动程序。如果你去一家餐厅吃饭,而餐厅里面什么都没有,什么都要你自己去弄,这样的场景怎样可以想象。所以为什么要有驱动程序,就可以理解了

更多技术文章敬请关注:武汉华嵌-嵌入式培训专家,国内领先的嵌入式服务机构

http://www.embedhq.org
老猿的春天 2011-08-21
  • 打赏
  • 举报
回复
led不是直接I/O口操作吗[Quote=引用 5 楼 wswwxk 的回复:]

引用 4 楼 mfc5158 的回复:

是不是这个收音机,有个收音机驱动程序,驱动程序里面有个read方法,read方法读取收音机芯片,read方法的实现通过I2C发送数据和收音机芯片通信,还是通过一般com串口和收音机芯片通信,我现在不明白,应用层通过驱动访问硬件,那这个驱动是直接和硬件通信的吗?驱动怎样实现对硬件读数据,写数据?引用 3 楼 bjtea 的回复:

在裸机的情况下,……
[/Quote]
老猿的春天 2011-08-21
  • 打赏
  • 举报
回复
好像明白了,我感觉主要是我们板子使我迷糊了,它是用51和DZ60通信,而DZ60通过I2C连接收音机芯片,所以就没再另写驱动,只是51通过串口发给DZ60数据,DZ60内核是根据收到的数据来通过I2c控制收音机芯片读写数据,然后DZ60又把数据发给51,DZ60一直在执行监控51发来的数据控制收音机,而如果是收音机通过I2C直接连接51,那就要写I2C驱动,驱动来控制收音机芯片,不知我这样理解对吗?[Quote=引用 6 楼 bjtea 的回复:]

引用 4 楼 mfc5158 的回复:
是不是这个收音机,有个收音机驱动程序,驱动程序里面有个read方法,read方法读取收音机芯片,read方法的实现通过I2C发送数据和收音机芯片通信,还是通过一般com串口和收音机芯片通信,我现在不明白,应用层通过驱动访问硬件,那这个驱动是直接和硬件通信的吗?驱动怎样实现对硬件读数据,写数据?

驱动是直接访问硬件的,通信或I2C指令等是其中的……
[/Quote]
bjtea 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mfc5158 的回复:]
是不是这个收音机,有个收音机驱动程序,驱动程序里面有个read方法,read方法读取收音机芯片,read方法的实现通过I2C发送数据和收音机芯片通信,还是通过一般com串口和收音机芯片通信,我现在不明白,应用层通过驱动访问硬件,那这个驱动是直接和硬件通信的吗?驱动怎样实现对硬件读数据,写数据?
[/Quote]
驱动是直接访问硬件的,通信或I2C指令等是其中的形式之一,还有的是直接初始化芯片的寄存器,直接写端口等等。如果,内核缺少某个设备的驱动,那么你可以仿照其他驱动的形式,自己来写。就是自己定义readfile, writefile这些函数。
当我遇上-你 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 mfc5158 的回复:]

是不是这个收音机,有个收音机驱动程序,驱动程序里面有个read方法,read方法读取收音机芯片,read方法的实现通过I2C发送数据和收音机芯片通信,还是通过一般com串口和收音机芯片通信,我现在不明白,应用层通过驱动访问硬件,那这个驱动是直接和硬件通信的吗?驱动怎样实现对硬件读数据,写数据?引用 3 楼 bjtea 的回复:

在裸机的情况下,你可以直接访问硬件。在有操作系统的情况下,操作……
[/Quote]
看下最简单的LED流水灯控制
老猿的春天 2011-08-21
  • 打赏
  • 举报
回复
是不是这个收音机,有个收音机驱动程序,驱动程序里面有个read方法,read方法读取收音机芯片,read方法的实现通过I2C发送数据和收音机芯片通信,还是通过一般com串口和收音机芯片通信,我现在不明白,应用层通过驱动访问硬件,那这个驱动是直接和硬件通信的吗?驱动怎样实现对硬件读数据,写数据?[Quote=引用 3 楼 bjtea 的回复:]

在裸机的情况下,你可以直接访问硬件。在有操作系统的情况下,操作系统对应用层屏蔽了硬件。应用层希望访问硬件,就要通过内核的驱动程序(又称为硬件接口)来访问。
就像在C++语言中,类的私有数据你是不能访问的,只能通过类自身的成员函数(也称为接口)来访问。对外而言,私有数据就被屏蔽了。
屏蔽的好处之一是,避免用户自己去写不熟悉的底层代码。
[/Quote]
bjtea 2011-08-21
  • 打赏
  • 举报
回复
在裸机的情况下,你可以直接访问硬件。在有操作系统的情况下,操作系统对应用层屏蔽了硬件。应用层希望访问硬件,就要通过内核的驱动程序(又称为硬件接口)来访问。
就像在C++语言中,类的私有数据你是不能访问的,只能通过类自身的成员函数(也称为接口)来访问。对外而言,私有数据就被屏蔽了。
屏蔽的好处之一是,避免用户自己去写不熟悉的底层代码。
老猿的春天 2011-08-21
  • 打赏
  • 举报
回复
驱动是针对收音机的吗?那驱动是怎样实现的和收音机通信?是不是驱动里的XXX_Open起的作用,如果我想从收音机里读数据:某个台的频率,怎样做的?是不是通过readFile,那驱动里又怎么实现读收音机芯片的?[Quote=引用 1 楼 chenkui456 的回复:]

createfile已经通过驱动了,如果你没写驱动createfile肯定失败的,楼主
[/Quote]
小小白桦树 2011-08-21
  • 打赏
  • 举报
回复
createfile已经通过驱动了,如果你没写驱动createfile肯定失败的,楼主

19,502

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 嵌入开发(WinCE)
社区管理员
  • 嵌入开发(WinCE)社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧