用記憶體代替塊裝置的總結,相對來簡單得多,對記憶體操作想必大家都很熟悉,直接分配一塊記憶體就可以直接讀寫操作了
/* 參考:
* 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...