Linux塊裝置驅動之記憶體模擬塊裝置

2021-09-23 22:46:01 字數 1228 閱讀 8049

用記憶體代替塊裝置的總結,相對來簡單得多,對記憶體操作想必大家都很熟悉,直接分配一塊記憶體就可以直接讀寫操作了

/* 參考:

* drivers\block\xd.c

* drivers\block\z2ram.c

*/#define ramblock_size (1024*1024)//乙個扇區是512位元組

static struct gendisk *ramblock_disk;

static struct request_queue *ramblock_queue;

static define_spinlock(ramblock_lock);//定義乙個自旋鎖

static unsigned char *ramblock_buf;

static struct block_device_operations ramblock_fops = ;

static int ramblock_getgeo(struct block_device *bdev, struct hd_geometry *geo)

static int ramblock_init(void)

static void do_ramblock_request(struct request_queue * q)//當讀寫的時候呼叫這個函式

else

end_request(req, 1);//表示讀寫完成,必須寫,不然會卡在那裡,只有重新開關機}}

}static void ramblock_exit(void)

測試如下:

在開發板上:

1. insmod ramblock.ko

2. 格式化: mkdosfs /dev/ramblock

3. 掛接: mount /dev/ramblock /tmp/

4. 讀寫檔案: cd /tmp, 在裡面vi檔案

5. cd /; umount /tmp/

6. cat /dev/ramblock > /mnt/ramblock.bin

7. 在pc上檢視ramblock.bin

sudo mount -o loop ramblock.bin /mnt

測試5th:

1. insmod ramblock.ko

2. ls /dev/ramblock*

3. fdisk /dev/ramblock

塊裝置常用的幾個命令:

m:尋求幫助  n:增加乙個新的分割槽  w:儲存分割槽

塊裝置驅動之記憶體模擬硬碟

一.塊裝置驅動框架 與字元裝置相比什麼差別 1.塊裝置僅僅能以塊為單位接受輸入和返回輸出。而字元裝置則以位元組為單位。大多數裝置是字元裝置,由於它們不須要緩衝並且不以固定塊大小進行操作。2.塊裝置對於i o請求有相應的緩衝區。因此它們能夠選擇以什麼順序進行響應,字元裝置無需緩衝且被直接讀寫。對於儲存...

編寫塊裝置驅動之記憶體模擬磁碟

可以參考一下核心裡面的檔案 在核心裡面收索blk init queue 然後就會發現xd.c和z2ram.c 大概看一眼,看乙個去驅動程式從入口開始看,這裡有個register blkdev註冊塊裝置驅動,跟我們字元裝置相比少了乙個fops,註冊塊裝置已經退化了,它只不過是cat prok devi...

塊裝置驅動程式分析之記憶體模擬磁碟

include include include include include include include include include include include include include include include include include include includ...