• <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。注冊 register_blkdev(major,name,struct block_device_operation *p); 2.初始化隊列: 多隊列 blk_init_queue(request_queue_t *,request_fn); blk_dev[major]=sbull_find_queue; 無隊列 b
    簡單的介紹了安裝塊設備的幾個步驟,也算小結吧。

    一 。注冊模塊
      1。注冊 register_blkdev(major,name,struct block_device_operation *p);
      2.初始化隊列:
        
          多隊列  blk_init_queue(request_queue_t *,request_fn);
                    blk_dev[major]=sbull_find_queue;
         無隊列  blk_queue_make_request(BLK_DEFAULT_QUEUE(major),sbull_make_request);
         單隊列  blk_init_queue(BLK_DEFAULT_QUEUE(major),sbull_request);
      3.注冊分區設備  register_disk(NULL,MKDEV(major,i),1,&sbull_bdops,sbull_size<<1);
    二  。結構
       struct  block_device_operation  sbull_bdops={
              open:                sbull_open,
              release:             sbull_release,
              ioctl:               sbull_ioctl,
                check_media_change:  sbull_check_change,
               revalidate:         sbull_revalidate,
               }; 
         在linux/blk.h(MAJOR_NR,CURRENT等macro變量);linux/blkdev.h(blk_dev[MAX],blk_size,blksize_size,request_queue_t等結構申明);在drivers/block/ll_rw_blk.c(包含blk_init_queue等函數的實現);

    三 請求處理函數
          sbull_request(request_queue_t *p);
    四  支持常用的對快設備操作的命令
          fdisk mount mkfs
         例如  mount 的過程  1。open設備;2。調用request處理方法,傳輸數據塊。

    五  可分區設備
         1。在driver/block/genhd.c中的struct gendisk*gendisk_head 為static 所以雖然在linux/genhd.h中申明為extern struct gendisk*gendisk_head ;但在我們的程序中還是出現unresolved symbol ,所以在我們的程序中還得申明一下structgendisk *gendisk_head 。
        2。申明一個struct gendisk  spull_gendisk 并初始化各成員。
        3。在revalidate函數中重新調用register_disk(struct gendisk*gd,int driver,unsigned minors,struct block_device_operation *ops,longsize)注冊分區。
       4。模塊注冊過程和sbull一樣。
       5. 中斷處理過程,在請求處理函數中啟動定時器,然后在定時器函數中end_request(1);
           普通的請求處理函數是在本函數中直接調用end_request(1)的。
           如果驅動程序是中斷驅動的,request函數應該提交一次數據傳輸并立即返回,而無需調用 end_request。但是,在沒有調用end_request(或其組成部分)之前,不會認為請求已經       完成。因此,在設備告訴驅動程序已完成數據傳輸時,頂半或底半中斷處理程序需要調用end_request。

    原文轉自: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>