您现在的位置:首页 > 科技成果科技成果

基于ARM+Linux 2.6内核的控制系统驱动设计

发布时间:2018-06-16 06:38:32  来源:大电流电感厂家   查看:


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


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


对于字符型设备还要定义一个cdev结差模电感器构体变量,并使用cdev_init()初始化,然后调用cdev_add()通知内核添加一个字符设备。同样在卸载时要使用cdev_del()移除,否则用户使用驱动时,有时不能打开设备。因为不使用cdev或者cdev在模块卸载时不删除会导致内核处在一个不稳定状态,在用户层可能无法打开设备文件。
1.3 I/O端口访问
在系统控制要求中,需要访问ARM的I/O端口,包括普通I/O口和复用为IRQO的PB29引脚,然而Linux中对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方法向内核发送各种命令,必要时传递参数,下面展示一个简单实例。


1.5 中断控制实现
当外部信号的到来时刻不可预测时,使用轮询方式将使得效率极低,需要使用阻塞型中断实现。即没有中断信号到来时阻塞读进程,使其处于睡眠状态,当中断到来唤醒读进程,执行预定处理操作。
首先,在open方法中使用request_irq()安装中断处理程序,在release方法中释放。函数原型如下:


其中:参数irq为中断号;handler为ISR指针;flags为与中断管理有关的各选项字节掩码;dev_name即设备名;dev_id为中断信号线。
其次,ISR为申请中断时使用的参数名,假设为irq0_handler,定义原型如下:


中断阻塞即在其内部调用void wake_up_inter-ruptible(wait_queue_head_t*queue)实现,然后返回IRQ_HANDLED;在read方法中调用wait_event_in-terruptible(queue,condition)来唤醒读进程,这样,当用户程序读设备时,如果没有中断到来,读进程将进入睡眠状态,中断发生一体成型电感被唤醒。
对于中断信号IRQO,因是PB29复用,要配置为外设A[4],同时还要配置中断源类型,函数分别在#in

2 编译和调试
驱动程序可静态编译进内核,也可编译成模块动态加载。为便于调试采用动态模块加载方式,Linux 2.6内核下驱动编译方式和Linux 2.4版明显不同,其建立的Makefile只需简单地写入obj-m:=devctl.O(假设源文件为devctl.c),然后执行命令:make-C/usr/lo-cal/arm/Linux-2.6.21.7 SUBDIRS=MYMPWDmodules,注意内核源文件目录因各自系统而异,然后将生成的.ko文件置于目标系统的/home目录下,使用insmod加载模块,并使用cat/proc/devices命令查看分配到的设备号,使用mknod创建设备节点,卸载模块使用rmmod命令。平面变压器厂家 | 平面电感厂家

美国线艺电感 SER2014-402ML可以生产美国线艺电感 SER2014-402ML。专业研发、生产、销售各种大电流扁平线电感。

基于STM32F100VBT6的32位MCU开发析设计方案STM32F100VBT6采用ARM Cortex -M3 32位RISC内核,工作频率24MHz,集成了高速嵌入式存储器(闪存高达128kB、SRAM高达8kB)以及各种增强外设和连接到两条APB总

基于ADI ADE7755的单相复费率电能表设计方案1.1 DDSF系列电能表设计方案概述DDSF系列电能表的硬件电路设计由电源电路设计、计量电路设计、通讯电路设计、MCU及其它部分电路设计四大部分组成。其中核心部分是计量电路的设计,它是电能表计量准确

CopyRight2014
大电流电感 | 大功率电感 | 扁平线圈电感 注塑加工厂