关 闭

新闻中心

EEPW首页>工控自动化>设计应用> 基于ARM+Linux 的仪器控制系统设计

基于ARM+Linux 的仪器控制系统设计

作者: 时间:2012-07-21 来源:网络 收藏

在初始化函数中,首先进行设备的注册。主设备号表示对应的驱动程序,次设备号由内核使用,用于正确确定设备文件所指的设备。可以动态申请或者静态申请设备号。动态申请使用下面的函数:

本文引用地址: //m.amcfsurvey.com/article/160288.htm

程序

  dev是一个只输出的参数,它在函数成功完成时持有分配范围的第一个数;firstminor是请求的第一个要用的次编号;count是请求的连续设备编号的总数;name为设备名,返回值小于0表示分配失败。然后通过major=MMOR(dev)获取主设备号。如果注册不成功或者卸载驱动时需要取消设备的注册,使用下面的函数实现(其参数含义同上):

程序

  对于字符型设备还要定义一个cdev结构体变量,并使用cdev_init()初始化,然后调用cdev_add()通知内核添加一个字符设备。同样在卸载时要使用cdev_del()移除,否则用户使用驱动时,有时不能打开设备。因为不使用cdev或者cdev在模块卸载时不删除会导致内核处在一个不稳定状态,在用户层可能无法打开设备文件。  1.3 I/O端口访问

  在系统控制要求中,需要访问的I/O端口,包括普通I/O口和复用为IRQO的PB29引脚,然而中对I/O端12和I/0内存的读写指令中使用的都是虚拟地址,所以在访问前要先将物理寄存器地址映射到I/O内存。有两种方法实现地址映射,一种是使用ioremap为I/O内存区域分配虚拟地址,用iounmap取消,另一种是使用内核已经定义好的虚拟地址。这里主要介绍第二种方式。

  对于AT91RM9200利用如下转换函数获取虚拟地址,其中宏AT91_VA_BASE_SYS是系统虚拟基地址:

程序

  读写端口对于AT91RM9200还可使用专门函数

  int at9 1_set_gpio_value(unsigned pin,int value),并包含头文件asm-arm/arch-at91/gpio.h。一般端口的访问在驱动模块初始化时申请资源,在卸载时释放资源,而对于I/O口的使能则在open方法中实现,相应的禁用在release方法中实现。

  1.4 ioctl方法的实现

  用户可以通过ioctl方法向内核发送各种命令,必要时传递参数,下面展示一个简单实例。

程序

linux操作系统文章专题:linux操作系统详解(linux不再难懂)


评论


相关推荐

技术专区

关闭