• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 并口

    發表于:2007-07-04來源:作者:點擊數: 標簽:
    兩種方式 一 驅動程序執行方式 1.申請I/O端口 A 直接端口方式 check_region request_region B內存映射方式 check_mem_region request_mem_retion 然后隊端口地址映射 ioremap 2.注冊驅動 register_chrdev 申請主設備號,注冊驅動名,相關的操作. 3.探測中斷 A
    兩種方式

    一  驅動程序執行方式
      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 中出現

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>