實驗要求 : 新增乙個類似於ext2,但對磁碟上的資料塊進行加密的檔案系統myext2。
環境 : vmware workstation 14 player + linux 4.6 (32bit)
具體步驟 :在核心模組myext2.ko中修改file.c的**,新增兩個函式new_sync_read_crypt和new_sync_write_crypt,將這兩個函式指標賦給myext2_file_operations結構中的read和write操作。在new_sync_write_crypt中增加對使用者傳入資料buf的加密,在new_sync_read_crypt中增加解密。
原文最後呼叫的系統函式是new_sync_read和new_sync_write,但linux 4.1版本後這兩個函式變成了靜態函式(見fs/read_write.c),無法直接在我們寫的file.c檔案中呼叫。
linux 4.1修改日誌:
解決方法 1 (失敗) :用read_write.c中的vfs_read代替new_sync_read 結果導致vmware虛擬機器崩潰,彈出cpu被禁用提示。
解決方法 2 (正確) :在read_write.c中寫兩個新函式my_read和my_write,重新編譯核心,間接呼叫到new_sync_read和new_sync_write。
** :
file.c
linux/fs/read_write.cextern ssize_t my_write(struct file *file, const char __user *p, size_t count, loff_t *pos);
extern ssize_t my_read(struct file *file, char __user *buf, size_t count, loff_t *pos);
// add for lab.3
ssize_t new_sync_write_crypt(struct file *filp, const char __user *buf, size_t len, loff_t *ppos)
printk("haha encrypt %u\n", len);
return my_write(filp, mybuf, len, ppos);
}// add for lab.3
ssize_t new_sync_read_crypt(struct file *filp, char __user *buf, size_t len, loff_t *ppos)
printk("haha encrypt %u\n", len);
return ret;
}
執行結果 :ssize_t my_read(struct file *file, char __user *buf, size_t count, loff_t *pos)
export_symbol(my_read);
ssize_t my_write(struct file *file, const char __user *p, size_t count, loff_t *pos)
export_symbol(my_write);
root@ubuntu:/home/linux/desktop/lab3# mount -t myext2 -o loop ./fs.new /mnt
root@ubuntu:/home/linux/desktop/lab3# cd /mnt
root@ubuntu:/mnt# ls -l
total 13
-rw-r--r-- 1 root root 8 jan 2 05:02 1.txt
drwx------ 2 root root 12288 jan 1 08:36 lost+found
root@ubuntu:/mnt# rm 1.txt
root@ubuntu:/mnt# touch 1.txt
root@ubuntu:/mnt# echo "1234567" > 1.txt
root@ubuntu:/mnt# cat 1.txt
1234567
root@ubuntu:/mnt# echo use gui copy/paste
use gui copy/paste
root@ubuntu:/mnt# cd /home/linux/desktop
root@ubuntu:/home/linux/desktop# cat 1.txt
jklmnop#root@ubuntu:/home/linux/desktop# cat 1.txt
jklmnop#root@ubuntu:/home/linux/desktop# cd /mnt
root@ubuntu:/mnt# echo use cp command
use cp command
root@ubuntu:/mnt# cp 1.txt /home/linux/desktop
root@ubuntu:/mnt# cd /home/linux/desktop
root@ubuntu:/home/linux/desktop# cat 1.txt
1234567
root@ubuntu:/home/linux/desktop#
作業系統 檔案系統
5.2開啟檔案 在作業系統中就是確定程序操作哪個檔案。這個確定過程由兩個事件構成 1.將使用者程序task struct中的 filp 20 與核心中的file table 64 進行掛接。2.將使用者程序需要開啟的檔案對應的i節點在file table 64 中進行登記。filp 20 掌控乙個程...
作業系統 檔案系統
通過設計乙個基於索引結構的檔案系統,了解檔案系統設計以及物理塊分配的基本概念。硬體環境 計算機一台,區域網環境 軟體環境 windows 作業系統 visual studio2019 1 設計乙個檔案系統的索引結構,描述邏輯結構與物理索引結構之間的關係 2 檔案建立等基本功能 段 問1 這個標頭檔案...
作業系統 虛擬檔案系統
乙個系統中應當可以支援多個檔案系統。但是由於每乙個檔案系統底層機制不同,作業系統如何相容各個檔案系統?這就是虛擬檔案系統vfs的功能了。vfs是作業系統檔案模組的乙個軟體層,對上面的使用者空間提供統一的操作介面,同時也對下層提供了一套必須實現的介面。這個思想其實在軟體工程中很常用,雖然檔案系統底層實...