實驗七 增加新的系統(tǒng)調(diào)用_第1頁
實驗七 增加新的系統(tǒng)調(diào)用_第2頁
實驗七 增加新的系統(tǒng)調(diào)用_第3頁
實驗七 增加新的系統(tǒng)調(diào)用_第4頁
實驗七 增加新的系統(tǒng)調(diào)用_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、實驗七增加新的系統(tǒng)調(diào)用實驗七 增加新的系統(tǒng)調(diào)用v預(yù)備知識Linux內(nèi)核結(jié)構(gòu)Linux內(nèi)核源碼Linux系統(tǒng)調(diào)用v實驗指導(dǎo)系統(tǒng)調(diào)用的添加Linux內(nèi)核編譯v實驗?zāi)康摹?nèi)容1.1 Linux內(nèi)核結(jié)構(gòu)Linux分為用戶空間和內(nèi)核空間兩個層次1.1 Linux內(nèi)核結(jié)構(gòu)內(nèi)核的組成vLinux內(nèi)核的組成v進(jìn)程調(diào)度(SCHED):控制進(jìn)程對CPU的訪問v內(nèi)存管理(MM):允許多個進(jìn)程安全的共享內(nèi)存區(qū)域v虛擬文件系統(tǒng)(VFS):隱藏各種硬件的具體細(xì)節(jié),為所有設(shè)備提供統(tǒng)一的接口v網(wǎng)絡(luò)接口(NET):提供對各種網(wǎng)絡(luò)標(biāo)準(zhǔn)的存取和各種網(wǎng)絡(luò)硬件的支持v進(jìn)程間通訊(IPC):支持進(jìn)程間各種通信機(jī)制1.2 Linux內(nèi)核源

2、碼1.3 Linux系統(tǒng)調(diào)用(1)vLinux系統(tǒng)調(diào)用機(jī)制vLinux內(nèi)核中設(shè)置了一組用于實現(xiàn)各種系統(tǒng)功能的子程序,稱為系統(tǒng)調(diào)用v用戶通過系統(tǒng)調(diào)用命令在自己的應(yīng)用程序中調(diào)用它們v系統(tǒng)調(diào)用與普通函數(shù)調(diào)用的區(qū)別v系統(tǒng)調(diào)用 核心態(tài) 操作系統(tǒng)核心提供v普通的函數(shù)調(diào)用 用戶態(tài) 函數(shù)庫或用戶自己提供1.3 Linux系統(tǒng)調(diào)用(2)v系統(tǒng)調(diào)用靠一些宏,一張系統(tǒng)調(diào)用表,一個系統(tǒng)調(diào)用入口來完成系統(tǒng)調(diào)用的函數(shù)名以“sys_”開頭,后跟該系統(tǒng)調(diào)用的名字(如sys_mycall)根據(jù)系統(tǒng)調(diào)用號(_NR_mycall) 可找到對應(yīng)的系統(tǒng)調(diào)用函數(shù)入口地址int 0 x80:跳轉(zhuǎn)到系統(tǒng)調(diào)用的總?cè)肟趕ystem_call,檢

3、查系統(tǒng)調(diào)用號,再查找系統(tǒng)調(diào)用表sys_call_table,調(diào)用內(nèi)核函數(shù),最后返回實驗七 增加新的系統(tǒng)調(diào)用v預(yù)備知識Linux內(nèi)核結(jié)構(gòu)Linux內(nèi)核源碼Linux系統(tǒng)調(diào)用v實驗指導(dǎo)系統(tǒng)調(diào)用的添加Linux內(nèi)核編譯v實驗?zāi)康?、?nèi)容2.1 系統(tǒng)調(diào)用的添加(1)(1)完成系統(tǒng)調(diào)用函數(shù)編寫待添加的系統(tǒng)調(diào)用函數(shù),函數(shù)名以sys_開頭 如:mycall(int num),在/usr/src/linux/kernel/sys.c文件中添加代碼:asmlinkage int sys_mycall(int number) return number; /僅返回一個整型值 (2)在系統(tǒng)函數(shù)表中添加表項 讓內(nèi)核的其

4、余部分知道該系統(tǒng)調(diào)用的存在:如:在/usr/src/linux/arch/x86/kernel/syscall_table_32.S的最后一行增加新的系統(tǒng)調(diào)用內(nèi)核函數(shù)指針 .long sys_mycall2.1 系統(tǒng)調(diào)用的添加(2)(3)添加系統(tǒng)調(diào)用號文件unistd_32.h包含系統(tǒng)調(diào)用清單,給每個系統(tǒng)調(diào)用分配一個唯一的號碼,格式為:#define _NR_name NNN如在/usr/src/linux/include/arch/x86/include/asm/unistd32.h的結(jié)尾分配號碼序列中下一個可用的系統(tǒng)調(diào)用號(不能與其它號碼相同):define _NR_mycall nnn

5、(4)編寫系統(tǒng)調(diào)用的測試代碼應(yīng)用程序app.c中調(diào)用新添加的系統(tǒng)調(diào)用mycall: int syscall(int nnn, );2.2 Linux內(nèi)核編譯(1)(1)下載內(nèi)核到下載新內(nèi)核解壓到/usr/src目錄下(2)清除內(nèi)核及之前編譯的內(nèi)容make clean/清除原有不需要的模塊和文件make mrproper /刪除原來編譯產(chǎn)生的垃圾(3)配置內(nèi)核 make oldconfig / 與當(dāng)前配置相同make config / 基于文本的、最為傳統(tǒng)的配置界面make menuconfig / 基于文本的菜單形式,字符終端下使用make xconfig / 基于

6、圖形窗口模式,Xwindow下使用2.2 Linux內(nèi)核編譯(2)(4)編譯內(nèi)核make 或make zImage /編譯內(nèi)核, make zImage編譯壓縮 /形式的大內(nèi)核make modules / 編譯選擇的模塊make modules_install / 編譯后的模塊移到系統(tǒng)標(biāo)準(zhǔn)位置make install / 把壓縮內(nèi)核映象拷貝到/boot目錄 / 下, 創(chuàng)建System.map符號鏈接 (5)啟動項配置mkinitramfs o /boot/initrd.img- /創(chuàng)建內(nèi)核的initrd映象 在/boot/grub/grub.cfg中設(shè)置啟動項的配置 實驗七 增加新的系統(tǒng)調(diào)用v預(yù)備知識Linux內(nèi)核結(jié)構(gòu)Linux內(nèi)核源碼Linux系統(tǒng)調(diào)用v實驗指導(dǎo)系統(tǒng)調(diào)用的添加Linux內(nèi)核編譯v實驗?zāi)康?、?nèi)容3.1 實驗?zāi)康膙加深對系統(tǒng)調(diào)用的理解,掌握增加與調(diào)用系統(tǒng)調(diào)用的方法v掌握內(nèi)核編譯方法3.2 實驗內(nèi)容v增加新的系統(tǒng)調(diào)用 新增的系統(tǒng)調(diào)用名為get_proc_run_time,其功能是根據(jù)指定的進(jìn)程pid,從該進(jìn)程的進(jìn)程描述符task_struct結(jié)構(gòu)中提取出它的系統(tǒng)時間stime

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論