資源描述:
《linux實驗報告(編譯內(nèi)核)》由會員上傳分享,免費在線閱讀,更多相關內(nèi)容在應用文檔-天天文庫。
1、湖北大學學生實驗報告實驗課程網(wǎng)絡實用技術開課學院計算機與信息工程學院任課教師徐婕學生姓名駱婧學生學號2011221104210070專業(yè)班級計科一班學生年級2011級2013-2014學年第二學期一.實驗目的通過實驗,熟悉Linux操作系統(tǒng)的使用,掌握構建與啟動Linux內(nèi)核的方法;掌握用戶程序如何利用系統(tǒng)調用與操作系統(tǒng)內(nèi)核實現(xiàn)通信的方法,加深對系統(tǒng)調用機制的理解;進一步掌握如何向操作系統(tǒng)內(nèi)核增加新的系統(tǒng)調用的方法,以擴展操作系統(tǒng)的功能。二.實驗內(nèi)容1.Linux環(huán)境下的C或者C++編譯和調試工具的使用2.
2、向Linux內(nèi)核增加新的系統(tǒng)調用,系統(tǒng)調用的功能為打印出自己的學號和姓名信息。3.Linux新內(nèi)核的編譯、安裝和配置。4.編寫應用程序以測試新的系統(tǒng)調用并輸出測試結果。三、實驗步驟第一步:解壓文件1.下載linux-3.13.3.tar.xz壓縮包。2.在Ubantu系統(tǒng)下,解壓該文件,解壓之后得到linux-3.13.3文件包#tar–xflinux-3.13.3.tar.xz3.將解壓后的文件包復制到/usr/src#cplinux3.13.3/usr/src第二步:修改源程序,增加系統(tǒng)調用1.gedi
3、t/usr/src/linux-3-13.3/kernel/sys.c(增加系統(tǒng)調用,使用面向內(nèi)核的打印函數(shù)printk打印姓名學號)使用gedit命令,可以直接在文檔編輯器中直接修改。修改好后按保存關閉文檔編輯器。在開頭加入頭文件:#include在末尾加入函數(shù)asmlinkageintsys_mycall(void){printk(KERN_ALERT"MynameisXXXX!MystudentidisXXXXXXX");return1;}2.gedit/usr/s
4、rc/linux-3-13.3/arch/x86/include/asm/syscalls.h在倒數(shù)第二行后插入asmlinkageintsys_mycall(void);1.gedit/usr/src/linux-3-13.3/arch/x86/syscalls/syscall_32.tbl最后一行添加一個系統(tǒng)調用的ID351i386mycallsys_mycall第三步:編譯安裝內(nèi)核首先進到/usr/src/linux-3.13.3文件夾下#cd/usr/src/linux-3.13.31.makemr
5、proper(清除內(nèi)核中不穩(wěn)定的目標文件,附屬文件及內(nèi)核配置文件)2.#makemenuconfig保存設置Save并退出Exit3.#makebzImage(編譯內(nèi)核,大概需要20分鐘,最后會出現(xiàn)提示:bzImageisready。)4.#makemodules(編譯模塊,大概需要一個多小時)5.#makemodules_install(安裝模塊)6.#makeinstall7#sudoupdate-grub(修改啟動配置文件)8.#reboot(重啟系統(tǒng))重啟進入系統(tǒng)后查看當前內(nèi)核版本#uname–r會
6、顯示已經(jīng)編譯成功的內(nèi)核版本號第四步:編寫測試程序并測試1.新建一個空白文檔,并重新命名為test.c,寫入以下函數(shù),并保存#includeintmain(){syscall(354);return0;}2測試用gcc命令編譯測試文件#gcc-otesttest.c#./test#dmesg(將信息打印在日志文件)一.實驗體會在沒有編譯內(nèi)核系統(tǒng)調用之前,我感覺老師布置的這個題目是什么意思都木有搞清楚,總感覺無從下手,也怕自己弄不好造成最后系統(tǒng)永不了的悲劇。但是我還是選擇硬著頭皮去做,通過在網(wǎng)
7、上查找很多資料和教程,才對這個任務要怎么去完成才有了比較清晰的概念。當然實現(xiàn)的過程中也遇到了不少麻煩。1.版本選擇問題首先我擔心在3.13.3的版本上直接改動的話如果最后系統(tǒng)調用不成功,會檢查不出是內(nèi)核沒有編譯好還是測試文件有問題,所以我在網(wǎng)上下了好幾個2.6的版本進行試驗??墒亲詈蟀l(fā)現(xiàn)每個內(nèi)核版本里面的那幾個需要修改的文件并不在同樣的目錄下面,依據(jù)版本而定。有點版本解壓后甚至缺失很多子文件夾,這就讓我非常零亂,但是最后通過仔詢問其他同學找到了文件包完整的版本。最后的最后決定用3.13.3的版本直接做。2修
8、改源文件問題在2.6的版本里面應該要更改kernel下的entry.S,結果改成了其他的地方的entry.S。最后導致在編譯內(nèi)核的過程中,在makebzImage的時候,系統(tǒng)報錯。類似這樣的問題犯了好幾次,都是文件木有找對位置就匆忙地進行修改。導致最后每次到makebzImage的時候就會報錯。在3.13的版本修改源文件是也因為不仔細,把sys_mycall寫成了sys_mycalls等等,最后編譯過程中出現(xiàn)了函