Linux中LonWorks现场总线设备驱动设计
http://tech.ddvip.com 2007年03月12日 社区交流
本文详细介绍Linux中LonWorks现场总线设备驱动设计
2.2 LonWorks现场总线网卡的工作过程
计算机与微控制器之间数据交换接口的应用程序框图如图2、3所示。在程序框图中,主要实现了计算机与微控制器之间读写数据、置标志位和清除标志位的功能。CPLD内部实现了存储数据和标志位的寄存器。


3 LonWorks现场总线网卡设备驱动实现
我们在Linux平台上开发和设计了LonWorks现场总线网卡的软件。软件部分由应用程序和设备驱动程序两部分构成,这里首先主要讨论的是设备驱动程序部分。在Linux平台上实现对硬件的驱动支持可以有两种方式:一种是直接在用户空间来实现;另一种是使用Linux内核中提供的机制来实现。考虑到用户空间驱动程序的局限性,比如为了访问特权指令(I/O指令)必须做一些影响系统安全的设置等等,我们在开发中采用了第二种方式。
3.1 Linux的可加载模块机制
Linux内核提供了两种机制来开发设备驱动程序:一种是直接把驱动程序链接到内核中:另一种则是通过称为Linux可加载模块的机制来开发可动态加载和卸载的驱动模块。而第一种方式可以在后一种方式成功后,采用与内核一起提供的配置工具和接口来完成。所以,我们只研究可加载模块机制。
Linux作为单核结构其效率比较高,但是系统灵活性不足,为了平衡这两者的关系,它提供了可动态加载机制。利用这种机制我们可以开发Linux内核模块,并且可以动态的对它加载和卸载。Linux下的设备驱动程序一般都支持这种方式,且模块被加载到内核后,它就可以任意的利用核心提供的各种资源和服务了。为了让模块利用核心提供的资源,Linux内核维护了一张所有内核资源的符号表(在接下来的部分我们称它为内核资源符号表),用于在模块载入时解决对相应资源的引用问题。并且,Linux允许模块的堆栈操作,由此一个模块可以使用其他模块所提供的资源。也就是说:一个模块对另一个模块的资源的使用与其对内核资源的使用非常相似,不同的只是这些服务的资源从属于另一个模块而已。每当一个模块被加载Linux就会有一个修改内核资源符号表的过程,将该模块所提供的服务和资源加入进去,这样另一个模块载入时,如果需要就可以引用这个模块的资源了。而卸载一个模块时,就要知道当前模块是否正在被使用。如果没有被使用,在卸载时要能够通知该模块它将被卸载,以便由它自己释放已被它占用的系统资源。然后,Linux还要从内核资源符号表中删除所有该模块提供的资源和服务。
作者:刘 广 石婷婷 责编:豆豆技术应用
- Linux/Unix 新闻
- Linux/Unix 入门
- Linux/Unix 命令
- Linux/Unix 安装
- Linux 嵌入式系统
- Linux/Unix 编程
- Linux/Unix 管理
- Linux/Unix 桌面
- Linux/Unix 内核
- Linux/Unix 软件
- SCO Unix
- NetBSD
- OpenBSD
- Redhat/Fedora Linux
- 手机
- Linux/Unix find 搜索命令
- Linux/Unix vi 命令
- Linux/Unix kde 桌面环境
- Linux/Unix GNOME 桌面环境
- Linux/Unix Make 命令
- Linux/Unix crontab 命令
- Linux/Unix ext3 文件系统
- Linux/Unix 文件系统详解
- Linux/Unix ADSL 拨号设置
- Linux/Unix GRUB 配置及应用
- Linux/Unix nfs配置
- Linux/Unix 硬件信息查看及管理
- Linux/Unix 优化
- Linux/Unix 交换分区Swap管理及应用
- Linux/Unix 用户管理
- Linux/Unix Ramdisk
- Linux/Unix 密码恢复管理
- Linux/Unix 文件删除恢复
- Linux/Unix fdisk分区
- Linux/Unix lvs负载均衡管理
- Linux/Unix root用户
- Linux/Unix 集群
- Linux/Unix 日志
- 更多Linux/Unix专题……