• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

并口

发布: 2007-7-04 12:06 | 作者: admin | 来源:  网友评论 | 查看: 216次 | 进入软件测试论坛讨论

领测软件测试网 两种方式

一  驱动程序执行方式
  1.申请I/O端口
     A 直接端口方式
        check_region
        request_region
     B内存映射方式
        check_mem_region
        request_mem_retion
       然后队端口地址映射
        ioremap
  2.注册驱动
    register_chrdev  申请主设备号,注册驱动名,相关的操作.
  3.探测中断
      A 内核探测
      B 定制探测
      C 直接根据I/O地址,分配相应的IRQ号
  4.安装中断相应处理函数
       request_irq(irq,(*)Handler()...)
      A 共享中断的处理函数
           端口有中断到,则判断时不时本端口的中断.若是.则填充缓冲区.同时wake_up_interruptible,唤起等待序列.
          在read操作中的队列由signal_pending唤醒,拷贝数据到用户空间.
      B 下半部中断的处理函数
           通过queue_task,执行队列处理函数唤起中断.
      C  小任务中断处理函数
          通过tasklet_schedule执行小任务处理函数唤起中断.
二   应用程序执行方式. 

  • 通过 ioperm 命令,例如,ioperm ( BASE, range , 1),调用内核,得到 I/O 地址空间的使用权;
  • 通过一个发送请求指令,例如, outb(1, BASE )
  • 等待足够的时间让咖啡煮好,让时间参数在命令行中被读取是一件很好的事情
  • 然后发送 out(0, BASE) 指令关掉咖啡机
  • 在结束之前还应归还并口 I/O 地址的使用权, ioperm(BASE,range,0) .
     程序:/* coffee.c */
#include <asm/io.h> /* linux-specific */
#ifdef __GLIBC__
#  include <sys/perm.h>
#endif
int main(int argc, char **argv)
{   
    setuid(0); /* if we're setuid, force it on */

   if(ioperm(0x378,1,1))
      printf("error,we can't  ioperm our ox378 port\n");
   outb(0xff,0x378);

   sleep(5);
   outb(0,0x378);
   if(ioperm(0x378,1,0))
      printf("error,we can't  ioperm our ox378 port\n"); 

    exit(1);
}

三   在驱动程序中如何取得被其它驱动程序使用的并口
     首先   cat   /proc/ioports  看端口地址是分配给谁了.
             然后看该名字的 ls -l  /dev/port_name
              找到主设备号和次设备号
     然后  cat   /proc/devices 看主设备好对应的驱动
             然后rmmod 该驱动.
     如果是编译到了内核的驱动则只需在/lib/module/`uname   -r`/kernel/drivers/ 删除该名字的驱动,
            则重起后,该驱动就不会暂用该端口了,但这个驱动的名字不一定在/proc/devices 中出现

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备10010545号-5
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网