操作系統(tǒng)-Linux課程實驗報告.doc
《操作系統(tǒng)-Linux課程實驗報告.doc》由會員分享,可在線閱讀,更多相關(guān)《操作系統(tǒng)-Linux課程實驗報告.doc(37頁珍藏版)》請在匯文網(wǎng)上搜索。
1、. .實驗1.1、1.2 Linux Ubuntu的安裝、創(chuàng)立新的虛擬機(jī)VMWare實驗1.3 Shell編程1.實驗?zāi)康呐c內(nèi)容通過本實驗,了解Linux系統(tǒng)的shell機(jī)制,掌握簡單的shell編程技巧。編制簡單的Shell程序,該程序在用戶登錄時自動執(zhí)行,顯示某些提示信息,如“Wele to Linux, 并在命令提示符中包含當(dāng)前時間、當(dāng)前目錄和當(dāng)前用戶名等根本信息。2.程序源代碼清單#include#include int main()printf(Hello Linuxn);int pid;int state;int pfd2;pipe(pfd);if (fork()=0)printf
2、(In the grep progressn);dup2(pfd0,0);close(pfd0);close(pfd1);execlp(grep,grep,sh,0);perror(exelp grep error);esle if(fork()=0) printf(In the ps progressn);dup2(pfd1,1);close(pfd0);close(pfd1);execlp(ps,ps,-ef,0);perror(execlp ps -ef);close(pfd1);close(pfd0);wait(&state);wait(&state);實驗2.3 內(nèi)核模塊實驗步驟:(
3、1).編寫內(nèi)核模塊 文件中主要包含init_clock(),exit_clock(),read_clock()三個函數(shù)。其 中init_clock(),exit_clock()負(fù)責(zé)將模塊從系統(tǒng)中加載或卸載,以及增加或刪除模塊在/proc中的入口。read_clock()負(fù)責(zé)產(chǎn)生/proc/clock被讀時的動作。(2).編譯內(nèi)核模塊Makefile文件# Makefile under 2.6.25 ifneq ($(KERNELRELEASE),) #kbuild syntax. dependency relationshsip of files and target modules are
4、listed here. obj-m := proc_clock.o else PWD := $(shell pwd) KVER ?= $(shell uname -r) KDIR := /lib/modules/$(KVER)/build all: $(MAKE) -C $(KDIR) M=$(PWD) modules clean: rm -rf .* d *.o *.mod.c *.ko .tmp_versions *.symvers *.order endif 編譯完成之后生成proc_clock.ko模塊文件。(3).內(nèi)核模塊源代碼clock.c#include #include #i
5、nclude #include #include #include #define MODULE #define MODULE_VERSION 1.0 #define MODULE_NAME clock struct proc_dir_entry* my_clock; int read_clock(char* page, char* start, off_t off, int count, int* eof, void* data) int len; struct timeval xtime; do_gettimeofday(&xtime); len = sprintf(page, %d %d
6、n, xtime.tv_sec, xtime.tv_usec); printk(clock: read_func()n); return len; struct proc_dir_entry *clock_proc_file; int init_clock(void) clock_proc_file =create_proc_read_entry(clock,0,NULL,read_clock,NULL); return 0; void exit_clock(void) remove_proc_entry(clock,clock_proc_file); module_init(init_clo
7、ck) module_exit(exit_clock) MODULE_LICENSE(GPL);(4).編譯內(nèi)核模塊# make (5) .加載內(nèi)核模塊 在系統(tǒng)root用戶下運行用戶態(tài)模塊命令裝載內(nèi)核模塊 # insmod proc_clock.ko(6).測試在終端中輸入以下命令: cat /proc/clock (7).卸載內(nèi)核模塊在系統(tǒng)root用戶下運行用戶態(tài)模塊命令卸載內(nèi)核模塊#rmmod proc_clock.ko 實驗2.4 系統(tǒng)調(diào)用實驗步驟:(1). 添加新調(diào)用的源代碼 在./linux-2.6.33.7/arch/x86/kernel/sys_i386_32.c中添加相應(yīng)的調(diào)用
8、代碼asmlinkage int sys_xwlcall(struct timeval *tv) struct timeval ktv; do_gettimeofday(&ktv); copy_to_user(tv,&ktv,sizeof(ktv); printk(KERN_ALERTPID %ld called sys_xwlcall()./n,(long)current-pid); return 0; (2). 連接系統(tǒng)調(diào)用 a、修改./linux-2.6.33.7/arch/x86/include/asm/unistd_32.h,在系統(tǒng)調(diào)用列表后面相應(yīng)位置添加一行,這樣在用戶空間做系統(tǒng)調(diào)
9、用時就不需要知道系統(tǒng)調(diào)用號了,如果在用戶空間指明了調(diào)用號,就可以省略這一步,實際上我就沒寫:#define _NR_xwlcall338 新增加的調(diào)用號位338 b、修改./linux-2.6.33.7/arch/x86/kernel/syscall_table_32.S 在ENTRY(sys_call_table)清單最后添加一行,這步至關(guān)重要,338就是這里來的: .long sys_xwlcall (3). 重建新的Linux內(nèi)核先安裝好編譯內(nèi)核必要的軟件包:# sudo apt-get install build-essential kernel-package libncurses5
10、-dev 復(fù)制當(dāng)前內(nèi)核的配置文件 # cp /boot/config-uname -r ./.config 保存配置文件# sudo make menuconfig 使用debian的的內(nèi)核編譯方法,要簡單很多# sudo make-kpkg-initrd-initrd-append-to-version=xwlcallkernel_image kernel-headers 運行以下deb包,安裝內(nèi)核鏡像和模塊:linux-image-2.6.33.7xwlcall_2.6.33.7xwlcall-10.00.Custom_i386.deb運行以下deb包,安裝內(nèi)核頭文件:linux-head
11、ers-2.6.33.7xwlcall_2.6.33.7xwlcall-10.00.Custom_i386.deb 運行以下命令,使內(nèi)核啟動時能調(diào)用模塊,比方硬件驅(qū)動:# sudo update-initramfs -c -k 2.6.33.7xwlcall此次編譯的內(nèi)核采用ubuntu默認(rèn)配置文件,通用性非常好,可以拷貝到大局部x86機(jī)器上安裝。安裝后系統(tǒng)自動會修改grub啟動選單。4. 重建引導(dǎo)信息 a、安裝deb包就自動重建引導(dǎo)信息了,無須另行處理。 b、如果仍然不放心,可以運行# update-grub5. 重新引導(dǎo)從新的內(nèi)核進(jìn)入6. 修改系統(tǒng)調(diào)用表 7. 測試實驗3.3 Shell編
12、程實驗進(jìn)程管理實驗1、實驗?zāi)康耐ㄟ^編寫shell程序,了解子進(jìn)程的創(chuàng)立和父進(jìn)程與子進(jìn)程間的協(xié)同,獲得多進(jìn)程程序的編程經(jīng)歷。2、實驗內(nèi)容1設(shè)計一個簡單的shell解釋程序,能實現(xiàn)根本的bsh功能。3、實驗原理 將每一條命令分子段壓入argv棧。然后再子進(jìn)程中調(diào)用execvp()來實現(xiàn)該命令的功能。4、代碼源代碼清單#include #include #include #define BUFFERSIZE 256 /最簡單的shell,只是簡單的執(zhí)行命令調(diào)用,沒有任何的其他功能 int main() char bufBUFFERSIZE,*cmd,*argv100; char inchar; in
13、t n,sv,buflength; int result; buflength = 0;for(;) printf(= ); /處理過長的命令; inchar = getchar();/讀取命令 while (inchar != n & buflength BUFFERSIZE) printf(mand too long,please enter again!n); buflength = 0; continue; else bufbuflength = 0; /解析命令行,分成一個個的標(biāo)記 /char *strtok(char *s,char *delim) /分解字符串為一組字符串。s為要
- 1.請仔細(xì)閱讀文檔,確保文檔完整性,對于不預(yù)覽、不比對內(nèi)容而直接下載帶來的問題本站不予受理。
- 2.下載的文檔,不會出現(xiàn)我們的網(wǎng)址水印。
- 3、該文檔所得收入(下載+內(nèi)容+預(yù)覽)歸上傳者、原創(chuàng)作者;如果您是本文檔原作者,請點此認(rèn)領(lǐng)!既往收益都?xì)w您。
下載文檔到電腦,查找使用更方便
14.9 積分
下載 | 加入VIP,下載共享資源 |
- 配套講稿:
如PPT文件的首頁顯示word圖標(biāo),表示該PPT已包含配套word講稿。雙擊word圖標(biāo)可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設(shè)計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關(guān) 鍵 詞:
- 操作系統(tǒng) Linux 課程 實驗 報告