首页
|
新闻
|
新品
|
文库
|
方案
|
视频
|
下载
|
商城
|
开发板
|
数据中心
|
座谈新版
|
培训
|
工具
|
博客
|
论坛
|
百科
|
GEC
|
活动
|
主题月
|
电子展
注册
登录
论坛
博客
搜索
帮助
导航
默认风格
uchome
discuz6
GreenM
»
MCU 单片机技术
» Linux操作系统下的PCI驱动开发(2)
返回列表
回复
发帖
发新话题
发布投票
发布悬赏
发布辩论
发布活动
发布视频
发布商品
Linux操作系统下的PCI驱动开发(2)
发短消息
加为好友
我是MT
当前离线
UID
1023166
帖子
6651
精华
0
积分
3328
阅读权限
90
来自
燕山大学
在线时间
230 小时
注册时间
2013-12-19
最后登录
2016-1-5
论坛元老
UID
1023166
性别
男
来自
燕山大学
1
#
打印
字体大小:
t
T
我是MT
发表于 2015-11-27 09:35
|
只看该作者
Linux操作系统下的PCI驱动开发(2)
操作系统
,
Linux
,
开发
驱动程序在设备驱动对象数据结构中为中断处理定义了一个任务队列 Task_DpcForIsr,并将其rouTIne参数设置为负责底半部的函数,data参数设置为传递给底半部函数的参数,这样,当系统获得中断信号时,驱动程序就可将中断处理任务排进该任务队列中,以提供给底半部应用。
3.4 释放设备模块及卸载
释放设备模块主要负责释放对设备的控制权,同时释放所占用的内存和中断等。具体来说,首先是释放对设备的控制权。即对设备控制权的释放,这只需简单地将控制设备控制权的信号量释放即可。在Linux下可使用up,其调用形式是up(&sem),它可递增信号量的值,并换醒所有正在等待信号量转为可用状态的进程。其次是释放由open分配的、保存在filp->private_data中的所有内容,将其值设为NULL。接着释放中断。最后释放PCI设备I/O资源的占用权。对PCI设备的I/O端口资源而言,实现I/O端口资源占有权的释放是通过release_region函数来完成的,而对于I/O内存资源,则需要使用iounmap函数同时释放其内存映射。
4 Linux下驱动模块的加载
Linux下驱动程序模块的加载通常有静态加载和动态加载两种方式。动态加载是利用Linux的module特性,在系统启动后使用 insmode命令把驱动程序(.o文件)添加上去,然后通过rmmod命令卸载,这种加载方式有利于程序的调试,可以随时更改;静态加载就是把驱动程序直接编译到内核里,在系统启动后直接调用,显然这种方式对于调试阶段的程序比较麻烦,而且效率较低,因而只适用于最终版本的程序。因此,程序开发者通常先用动态加载方式来调试,调试完毕后,再编译到内核里使用。
静态加载时,通常先把驱动程序原文件放在内核驱动相应类型的文件夹下,这里的PCI驱动属于字符类型, 可拷贝到…\linux-2.4.x\drivers\char下。然后再更改…\linux-2.4.x\drivers\char\Makefile 文件,并添加如下语句:
这样做的目的是根据编译选项$( CON-FIG_PLX9054)来决定是否要添加设备驱动。
之后,再在…\linux-2.4.x\drivers\char\Config.in中添加语句tristate’PLX9054 Support’CONFIG_PLX9054,这样就可以在运行menuconfig时产生与设备对应的编译选项,图2所示是其编译选项界面图。图中,在前面的尖括号中点Y表示静态加载,点M表示作为模块动态加载。
最后,运行make menuconfig,剪切内核,并选中需要的模块所对应的编译选项,编译内核。
5 驱动程序的测试
由于所编写的驱动程序是在PLX官方驱动的基础上得来的,因此,在这里,为了方便测试起见,也应使用PLX公司的SDK包中的测试程序来查看PCI9054的配置情况,图3所示为五个基址寄存器的映射情况。图4所示为公共缓冲区的映射情况示意图。
6 结束语
本文首先介绍了在Linux下开发PCI驱动的方法,然后介绍了如何将驱动静态编译到内核,这种方法非常适用于开发以Linux作为
嵌入式
系统的驱动程序。可以看出,由于Linux系统完全开源,其驱动程序较Windows下的驱动程序简单易懂,框架感更强。此外,由于其具有丰富的开源资源,故其开发成本较低。因此,我们有理由相信,Linux在未来的操作系统市场中的地位会变得越来越重要。
收藏
分享
评分
回复
引用
订阅
TOP
返回列表
ARM
电商论坛
Pine A64
资料下载
方案分享
FAQ
行业应用
消费电子
便携式设备
医疗电子
汽车电子
工业控制
热门技术
智能可穿戴
3D打印
智能家居
综合设计
示波器技术
存储器
电子制造
计算机和外设
软件开发
分立器件
传感器技术
无源元件
资料共享
PCB综合技术
综合技术交流
EDA
MCU 单片机技术
ST MCU
Freescale MCU
NXP MCU
新唐 MCU
MIPS
X86
ARM
PowerPC
DSP技术
嵌入式技术
FPGA/CPLD可编程逻辑
模拟电路
数字电路
富士通半导体FRAM 铁电存储器“免费样片”使用心得
电源与功率管理
LED技术
测试测量
通信技术
3G
无线技术
微波在线
综合交流区
职场驿站
活动专区
在线座谈交流区
紧缺人才培训课程交流区
意见和建议