首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 维修教程知识 > 单片机栏
基于ARM+Linux 2.6内核的控制系统驱动设计
来源:本站整理  作者:佚名  2009-06-16 13:59:14




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命令。
    为方便调试,可以在适当使用printk打印信息,还可以通过点LED等以便于发现问题。


3 结 语
    通过对相关的Linux 2.6内核中驱动源码的深入研究与自我设计实践,不断调试,在此阐述的方法得到实际验证,并已成功使用到某仪器的控制系统中。Linux博大精深,其开源的特点必将吸引更多的开发者投入其中,使其更好发展,应用于更多领域。

上一页  [1] [2] [3]  下一页

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)

推荐阅读

图文阅读

热门阅读

Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:150,136.70000 毫秒