如何在Linux虚拟器里新建跟目录,虚拟机linux 6 增加根目录
《操作系統》課程設計報告課程設計題目:操作系統課程設計 設計時間:2016/1/10一、 課程設計目的與要求需要完成的內容:(1) 安裝虛擬機:Vmware、Vmware palyer (free)(推薦)、Virtualbox(推薦)、VMLite、Xen、Virtuozzo、KVM(2) 安裝和使用Linux(推薦SUSE)(注意包含內核源碼和內核開發工具等)(3) Linux內核源代碼配置和重編(4) 找到VFS和一個具體文件系統的源代碼(ext3或ext4)(5) 讀懂VFS和具體文件系統如何關聯(如何體現virtual file switch)(6) 找到具體文件系統的read或write函數,使用printk(使用方法和printf一樣)向后臺打印文件讀寫信息。(read或write函數選一個即可)(7) 使用dmesg –c查看后臺的輸出。可以附加的功能(8) 復制ext3或ext4的源代碼(注意與當前使用的文件系統有區別),修改Makefile文件,使用模塊編譯方式(9) 修改ext3或ext4的源代碼,實現新的文件系統。(至少需要修改文件系統的名稱,最好能對文件寫操作向系統后臺打印出信息。)(10) 動態加載和卸載新的文件系統。二、 課程設計內容(1) 安裝虛擬機(2) 安裝和使用Linux(3) Linux內核源代碼配置和重編(4) 提取并動態加載和卸載新的文件系統三、 課程設計設備與環境設備信息:PC
虛擬機:VM11
四、 設計正文(包括分析與設計思路、各模塊流程圖、帶注釋的主要算法源碼、內核編譯過程以及動態模塊加載過程等,如有改進或者拓展,請重點用一小節進行說明)(1) 安裝虛擬機(2) 安裝和使用Linux(推薦SUSE)(注意包含內核源碼和內核開發工具等)安裝OpenSUSE,并下載相近版本的內核源碼
初始內核版本
下載的源代碼包
(3) Linux內核源代碼配置和重編利用vmtools(虛擬機提供的可以在宿主機和虛擬機之間自由復制文件的工具)將內核源碼包復制進虛擬機,解壓到/home/a123/linux-3.12.51
*因為分配的磁盤空間比較小,所以沒有按照慣例把內核源碼放在/usr/src目錄下(如果放在這里,會出現空間不足的情況)附:磁盤分配情況/swap(交換分區) 2.4G/(根目錄) 11G/home(用戶目錄) 13G
解壓好的內核源碼文件在編譯前需要稍作修改(6),并且缺乏一個config文件告訴編譯器編譯哪些功能。Config文件可以用make menuconfig命令生成,但是需要自己選擇相應的功能,太過復雜,這里有一個簡便的方法因為下載的內核源碼是相近的版本,所以可以使用現有版本的config文件,該文件在/boot目錄下使用cp /boot/config-3.11.6-4-desktop .config命令將此文件復制過來
注意:應當在內核所在的文件目錄下使用此命令復制成功
執行 make menuconfig命令,進入選擇界面,直接保存退出即可雖然新版本的Linux可以直接執行make一步完成所有的編譯工作,但此次課程設計仍然采用以前的編譯的方式
執行 make bzImage命令——編譯壓縮的內核編譯完成
執行 make modules命令——編譯模塊
執行 make modules_install命令——安裝模塊
注:
在make menuconfig時我在General setup中把版本號改過
執行 make install命令——安裝新內核
Reboot重啟
說明內核修改安裝完畢,成功(4) 找到VFS和一個具體文件系統的源代碼(ext3或ext4)VFS:虛擬文件系統,顧名思義。它為應用程序員提供一層抽象,屏蔽底層各種文件系統的差異。Linux的文件系統采用面向對象的方式設計,這使得Linux的文件系統非常容易擴展,我們可以非常容易將一個新的文件系統添加到Linux中。在此主要對象之一super_block位于中
代碼量巨大,此為部分代碼Ext4在fs文件夾下的ext4文件夾內
此處打開file.c用vim打開file.c部分代碼如下
(5) 讀懂VFS和具體文件系統如何關聯(如何體現virtual file switch)在(4)中已經提到,VFS是C語言寫的一個面向對象的設計,比如我們要調用alloc_inode方法:sb->s_op->alloc_inode(sb)。這里與面向對象語言的差別是,面向對象語言里實例方法可以訪問到this,這樣就可以訪問到自身的所有成員,但是在C里卻做不到,所以需要將自身作為參數傳入到函數中、圖一表示了對文件寫操作的調用過程
(6) 找到具體文件系統的read或write函數,使用printk(使用方法和printf一樣)向后臺打印文件讀寫信息。(read或write函數選一個即可)因為Linux系統對文件的操作是通過函數調用來實現的,所以在此我修改的是vfs這一層,找到fs,目錄下的read_write.c并打開找到do_sync_read函數,在其返回前加入printk語句
(7) 使用dmesg –c查看后臺的輸出。
(8) 復制ext3或ext4的源代碼(注意與當前使用的文件系統有區別),修改Makefile文件,使用模塊編譯方式
(9) 修改ext3或ext4的源代碼,實現新的文件系統。(至少需要修改文件系統的名稱,最好能對文件寫操作向系統后臺打印出信息。)
使其在加載和卸載的時候能夠printk到buffer緩沖中(10) 動態加載和卸載新的文件系統。使用insmod語句加載使用lsmod語句加載
加載成功接下來使用dmesg 查看緩沖區內容
成功接下來使用rmmod語句卸載模塊
成功五、 課程設計結果及分析課程設計結果:成功分析:Linux文件系統使用了面向對象的設計方法,保證了其對用戶的透明,VFS層實現了系統與文件系統的無關性,增加了系統對不同文件系統的兼容性。六、 總結與進一步改進設想總結:1.編譯內核的時候,可以使用make XXX –j8這樣可以開啟多線程編譯(我的虛擬機分配的是8核心),加快編譯速度2.printk語句我寫的是printk(”””DoingRead”);本意是利用printk的優先級,將其輸出到用戶態的控制臺,結果語法錯誤,并沒有輸出到控制臺改進設想:修改的文件前加上語句,實現對控制臺的輸出
define KERN_EMERG 0(因為缺少這個宏,導致系統并沒有理解我的0是什么意思)
七、 答辯(或匯報)記錄(包括問題和答案,每個人不少于3個)
顯示內核版本
使用dmesg –c命令
加載新模塊
八、 參考文獻
鳥哥的Linux私房菜
百度百科:printk概述http://baike.baidu.com/link?url=Kv5e2xb9thGENkIvSQmjpkYb8kbKoNvEhmt2oICTmDAn0wj2YADVf8dsrzBtz2fRt0uwa_3joQ-o40wKwwL68a
Linux虛擬文件系統(VFS)http://www.cnblogs.com/yuyijq/archive/2013/02/24/2923855.html
LinuxEXT4文件系統分析http://wenku.baidu.com/link?url=Wi-vyrROUIJqRk4eSsuwOwRe0Sf-ydXamWNR0H2HCrN9CPHJg80lXpu0Gi_ZGT-X5yKnknl86ooHdckHhJxybmyBR2szWsPDOV0IPJ6fJXO
總結
以上是生活随笔為你收集整理的如何在Linux虚拟器里新建跟目录,虚拟机linux 6 增加根目录的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: js下载跨域的文件
- 下一篇: 去掉右键烦人的多余菜单项