linux驱动程序的编写和执行,linux驱动程序的编写.ppt

linux驱动程序的编写

linux驱动程序的编写 底层(硬件层):需要你自己对于硬件相当的了解,能够独立绘制PCB并进行焊接,之后调试板子,做好电路板。比如omap3530,你需要绘制至少四层PCB电路板,其中ARM核心板是最难掌握的部分,外围电路要注意各种走线技巧等等。绘制完PCB之后就需要你的焊接功夫。将元器件焊接在PCB上。最后调试电路板,这是这一层设计中的收尾工作,也是最具有挑战性的工作。调试电路需要大量的经验,对于初学者来说,需要很强的电路知识,对于硬件的性能以及应用要非常了解才行。? 中间层(驱动层):电路板已经有现成的。你需要编程使一个死的板子,活起来,就是把程序下载进去,能叫板子跑起来。这里需要你对于ARM芯片的结构有很好的掌握,要会读芯片资料(datasheet)通常都是英文的。了解其内部资源我们就可以进行驱动编程了。我们平时所使用单片机,一般都是写好的程序,各个管脚在什么时序下输出么信号(1或0),来操作实现相应借口的外围设备,比如液晶屏、LED灯等。单片机也可以叫做简单的嵌入式。原理相同。ARM也可以向单片机一样使用,但我们更多的是要对ARM加入操作系统的,这才是我们最常说的嵌入式。加入操作系统了以后,芯片对于个个资源的调度有了更系统的统筹规划,可以更充分的利用ARM芯片的系统资源,提高性能,使资源合理分配。而通常的驱动是在操作系统下工作的.比如基于LINUX或WINCE等等下的驱动程序。驱动程序是链接硬件平台和操作系统的纽带,当然编写驱动要同时兼顾操作系统特点和硬件接口的特点。做驱动的开发,需要对于软硬件都要有所了解,其中更偏重操作系统的理解。这部分工作也是最难做的。? 上层(应用层):应用层,即我们所说的软件编程了。就象我们手机里QQ和飞信一样,我们需要根据我们手机的操作系统来编写应用程序。对于各个开发板,我们同样需要根据它里边的系统进行应用开发。这部分,应该是几乎脱离硬件了,我们只需简单的了解硬件即可。我们只需深刻理解操作系统的中各个系统函数和接口函数,即可进行开发。需要很强的C++水平。 嵌入式应用对成本和实时性比较敏感,而对linux的应用主要体现在对硬件的驱动程序的编写和上层应用程序的开发上.嵌入式linux驱动程序的基本结构和标准Linux的结构基本一致,也支持模块化模式,所以,大部分驱动程序编成模块化形式,而且,要求可以在不同的体系结构上安装。linux是可以支持模块化模式的,但由于嵌入式应用是针对具体的应用,所以,一般不采用该模式,而是把驱动程序直接编译进内核之中。但是这种模式是调试驱动模块的极佳方法。 系统调用是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作。同时,设备驱动程序是内核的一部分,它完成以下的功能:对设备初始化和释放;把数据从内核传送到硬件和从硬件读取数据;读取应用程序传送给设备文件的数据和回送应用程序请求的数据;检测和处理设备出现的错误。在linux操作系统下有字符设备和块设备,网络设备三类主要的设备文件类型。 字符设备和块设备的主要区别是:在对字符设备发出读写请求时,实际的硬件I/O一般就紧接着发生了;块设备利用一块系统内存作为缓冲区,当用户进程对设备请求满足用户要求时,就返回请求的数据。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。 Linux字符设备驱动的关键数据结构是cdev和file_operations结构体。 1)cdev结构体 在linux2.6内核中,使用cdev结构体描述一个字符设备,cdev结构体的定义如下: struct cdev{ struct kobject kobj;/*内嵌的kobject对象*/ struct module *owner;/*所属模块*/ struct file_operations *ops;/*文件操作结构体*/ struct list_head list; dev_t dev;/*设备号*/ unsigned int count; }; cdev结构体的dev_t成员定义了设备号,为32位,其中12位主设备号,20位次设备号。使用下列宏可以从dev_t获得主设备号和次设备号。*dev_t这个不是structure,是简单变量,只用于保存一组major number和minor number.Linux提供一组mactor对其进行读写: MAJOR(dev_t dev);//读取设备的major number MINOR(dev_t dev);//读取设备的minor number 而使用下列宏则可以通过主设备号和次设备

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值