




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
計算機科學(xué)與技術(shù)學(xué)院操作系統(tǒng)課程設(shè)計實驗報告U201014281__________________________第2頁/共11頁計算機科學(xué)與技術(shù)學(xué)院操作系統(tǒng)課程設(shè)計實驗報告U201114491__________________________第9頁/共11頁華中科技大學(xué)嵌入式操作系統(tǒng)課程設(shè)計實驗報告院系:計算機科學(xué)與技術(shù)學(xué)院專業(yè): 物聯(lián)網(wǎng)班級: 1102姓名: 吳斌 報告時間: 2014-06-25計算機科學(xué)與技術(shù)學(xué)院目錄1.課程設(shè)計目的…………32.課程設(shè)計環(huán)境搭建……………………33.內(nèi)容一:熟悉和理解Linux編程環(huán)境 (1)內(nèi)容要求……………………4 (2)計過程及實現(xiàn)………………44.內(nèi)容三:掌握添加設(shè)備驅(qū)動程序的方法 (1)內(nèi)容要求…………………7(2)設(shè)計過程及實現(xiàn)…………75.課設(shè)感想………………………12實驗內(nèi)容1.課程設(shè)計目的(1)掌握Linux操作系統(tǒng)的使用方法;(2)了解Linux系統(tǒng)內(nèi)核代碼結(jié)構(gòu);(3)掌握實例操作系統(tǒng)的實現(xiàn)方法。2.課程設(shè)計環(huán)境搭建(1)安裝linux(2)更改root登錄: 在現(xiàn)階段Ubuntu的系統(tǒng)中,是不允許直接以root身份登錄系統(tǒng)的,但是在做課設(shè)的過程中,需要大量的使用root權(quán)限來進行命令的操作。如果以普通用戶登錄ubuntu,會連編輯一個文件都非常周折。為此,我找到了一種修改系統(tǒng)文件,以達(dá)到直接使用root身份登錄的方法: ◎開始的時候,只能以普通用戶登錄,用Ctrl+Alt+T打開終端: 初始化/修改root密碼 sudopasswdroot 用vi編輯器修改這個文件: sudovi/etc/lightdm/lightdm.conf 在文件最后加入這么一行代碼: greeter-show-manual-login=true 然后保存退出,sudoreboot重啟系統(tǒng)。之后就可以輸入root用戶登錄。(3)在添加系統(tǒng)調(diào)用中用到的其他內(nèi)核包: ◎下載和當(dāng)前實驗環(huán)境最為接近的系統(tǒng)版本(這點很重要) 使用apt-getinstalllinux-source-3.0.0命令, ◎下載結(jié)果是linux-source-3.0.0.tar.bz2 ◎解壓命令:tar–xjvflinux-source-3.0.0.tar.bz2–C/usr/src ◎解壓后,在/usr/src目錄下得到內(nèi)核文件夾linux-source-3.0.0(4)在調(diào)用linux圖形庫時需要安裝GTK環(huán)境: ◎安裝gcc/g++/gdb/make等基本編程工具
apt-getinstallbuild-essential Tip:如果提示由于依賴項不能安裝,需要使用apt的強化版aptitude,這個工具可以自動分析軟件包依賴,系統(tǒng)一般不自帶,需要先安裝,具體過程是: apt-getinstallaptitude aptitudeinstallbuild-essential aptitude這個工具很強大,對于解決軟件包安裝時的依賴問題很有幫助。 ◎安裝libgtk2.0-devlibglib2.0-dev等開發(fā)相關(guān)的庫文件: apt-getinstallgnome-core-devel ◎安裝GTK核心組件:
apt-getinstalllibgtk2.0-dev這個安裝完成后,GTK環(huán)境就基本搭建成功,網(wǎng)上有些教程說要安裝其他配置文件,經(jīng)我親測,發(fā)現(xiàn)只要安裝libgtk2.0-dev這個包就能搞定。3.熟悉和理解Linux編程環(huán)境(1)實驗內(nèi)容:實現(xiàn)三個進程之間的并發(fā)程序:(2)計過程及實現(xiàn):這里需要用到課程實驗時的fork()程序以及GTK的圖形顯示。①基本fork()程序,調(diào)用顯三個進程的結(jié)構(gòu)如下:#include<stdio.h>#include<unistd.h>#include<sys/types.h>#include<sys/wait.h>voidmain(intargc,charargv[]){pid_tp1,p2,p3;pid_tt1,t2,t3;intstatus;if((p1=fork())==0){/*創(chuàng)建第一個子進程*/execv("./pa",argv);}elseif((p2=fork())==0){/*創(chuàng)建第二個子進程*/execv("./pb",argv);}elseif((p3=fork())==0){/*創(chuàng)建第三個子進程*/execv("./pc",argv); }else{t1=waitpid(p1,&status,0);t2=waitpid(p2,&status,0);t3=waitpid(p3,&status,0);}}②調(diào)用GTK顯示窗體函數(shù)模塊的結(jié)構(gòu):voidshow(intargc,char*argv[],char*title){gtk_init(&argc,&argv); //初始化工具包并且獲取命令行參數(shù);window=gtk_window_new(GTK_WINDOW_TOPLEVEL);//創(chuàng)建新的窗口; //設(shè)定窗口的位置;gtk_window_set_position(GTK_WINDOW(window),GTK_WIN_POS_CENTER); //監(jiān)聽窗口的destroy事件;g_signal_connect(G_OBJECT(window), "destroy",G_CALLBACK(destroy_progress),NULL);gtk_window_set_title(GTK_WINDOW(window),title);//用來設(shè)定更改窗口標(biāo)題;gtk_container_set_border_width(GTK_CONTAINER(window),20);//設(shè)定寬度; //使用gtk_vbox_new函數(shù)建立縱向組裝盒; //為了顯示構(gòu)件,必須將構(gòu)件放入組裝盒中,并將組裝盒放在窗口內(nèi);vbox=gtk_vbox_new(FALSE,10);gtk_container_set_border_width(GTK_CONTAINER(vbox),100);//設(shè)定寬度;gtk_container_add(GTK_CONTAINER(window),vbox);gtk_widget_show(vbox); //使用gtk_box_pack_start函數(shù)將構(gòu)件放到組裝盒中;sprintf(id_char,"%s,MyID:%d",title,getpid()); //顯示PID號label=gtk_label_new(id_char);gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,10);gtk_widget_show(label);sprintf(id_char,"父進程ID:%d",getppid()); //顯示PPID號label=gtk_label_new(id_char);gtk_box_pack_start(GTK_BOX(vbox),label,FALSE,FALSE,10);gtk_widget_show(label);button=gtk_button_new_with_label("close"); //關(guān)閉窗口按鈕 //信號登記函數(shù),監(jiān)聽按鈕的clicked事件。 //當(dāng)窗口clicked時,gtk_widget_destroy就會被調(diào)用。 //而gtk_widget_destroy函數(shù)又調(diào)用gtk_main_quit()結(jié)束程序運行。g_signal_connect_swapped(G_OBJECT(button),"clicked",G_CALLBACK(gtk_widget_destroy),window);gtk_box_pack_start(GTK_BOX(vbox),button,FALSE,FALSE,10);GTK_WIDGET_SET_FLAGS(button,GTK_CAN_DEFAULT);gtk_widget_grab_default(button); //函數(shù)顯示窗口中的組件gtk_widget_show(button);gtk_widget_show(window); //準(zhǔn)備將窗口和所有的組件顯示在屏幕上,函數(shù)必須在GTK程序的最后調(diào)用.gtk_main();}③編譯代碼main.c,運行; 編譯命令為:gcc-oamain.c`pkg-config--cflags--libsgtk+-2.0` 程序運行結(jié)果如下圖3-3所示:4.內(nèi)容三:掌握添加設(shè)備驅(qū)動程序的方法1內(nèi)容要求(1)采用模塊方法,添加一個新的設(shè)備驅(qū)動程序。(2)要求添加字符設(shè)備的驅(qū)動。(3)編寫一個應(yīng)用程序,測試添加的驅(qū)動程序2設(shè)計過程及實現(xiàn)(1)Linux內(nèi)核中的設(shè)備驅(qū)動程序是一組常駐內(nèi)存的具有特權(quán)的共享庫,是低級硬件處理例程。對用戶程序而言,設(shè)備驅(qū)動程序隱藏了設(shè)備的具體細(xì)節(jié),對各種不同設(shè)備提供了一致的接口,一般來說是把設(shè)備映射為一個特殊的設(shè)備文件,用戶程序可以象對其它文件一樣對此設(shè)備文件進行操作。 Linux支持3種設(shè)備:字符設(shè)備、塊設(shè)備和網(wǎng)絡(luò)設(shè)備。 設(shè)備由一個主設(shè)備號和一個次設(shè)備號標(biāo)識。主設(shè)備號唯一標(biāo)識了設(shè)備類型,即設(shè)備驅(qū)動程序類型,它是塊設(shè)備表或字符設(shè)備表中設(shè)備表項的索引。次設(shè)備號僅由設(shè)備驅(qū)動程序解釋,一般用于識別在若干可能的硬件設(shè)備中,I/O請求所涉及到的那個設(shè)備。 一個典型的驅(qū)動程序,大體上可以分為這么幾個部分: ①注冊設(shè)備: 在系統(tǒng)初啟,或者模塊加載時候,必須將設(shè)備登記到相應(yīng)的設(shè)備數(shù)組,并返回設(shè)備的主設(shè)備號; ②定義功能函數(shù): 對于每一個驅(qū)動函數(shù)來說,都有一些和此設(shè)備密切相關(guān)的功能函數(shù)。以最常用的塊設(shè)備或者字符設(shè)備來說,都存在著諸如open()、read()這一類的操作。當(dāng)系統(tǒng)調(diào)用這些調(diào)用時,將自動的使用驅(qū)動函數(shù)中特定的模塊。來實現(xiàn)具體的操作; ③卸載設(shè)備: 在不用這個設(shè)備時,可以將它卸載,主要是從/proc中取消這個設(shè)備的特殊文件。(2)編寫Makefile文件如下:#IfKERNELRELEASEisdefined,we'vebeeninvokedfromthe#kernelbuildsystemandcanuseitslanguage.ifeq($(KERNELRELEASE),)#Assumethesourcetreeiswheretherunningkernelwasbuilt#YoushouldsetKERNELDIRintheenvironmentifit'selsewhereKERNELDIR?=/lib/modules/$(shelluname-r)/build#Thecurrentdirectoryispassedtosub-makesasargumentPWD:=$(shellpwd)modules: $(MAKE)-C$(KERNELDIR)M=$(PWD)modulesmodules_install: $(MAKE)-C$(KERNELDIR)M=$(PWD)modules_installclean: rm-rf*.o*~core.depend.*.cmd*.ko*.mod.c.tmp_versions.PHONY:modulesmodules_installcleanelse#calledfromkernelbuildsystem:justdeclarewhatourmodulesareobj-m:=devDrv.oendif 調(diào)用Makefile文件之后,其具體過程如下: ①KERNELRELEASE是在內(nèi)核源碼的頂層Makefile中定義的一個變量,在第一次讀取執(zhí)行此Makefile時,KERNELRELEASE沒有被定義,所以make將讀取執(zhí)行else之后的內(nèi)容; ②如果make的目標(biāo)是clean,直接執(zhí)行clean操作,然后結(jié)束。 ③當(dāng)make的目標(biāo)為all時,-C$(KDIR)指明跳轉(zhuǎn)到內(nèi)核源碼目錄下讀取那里的Makefile;M=$(PWD)表明然后返回到當(dāng)前目錄繼續(xù)讀入、執(zhí)行當(dāng)前的Makefile。 ④當(dāng)從內(nèi)核源碼目錄返回時,KERNELRELEASE已被定義,內(nèi)核的build程序Kbuild也被啟動去解析kbuild語法的語句,make將繼續(xù)讀取else之前的內(nèi)容。 ⑤else之前的內(nèi)容為kbuild語法的語句,指明模塊源碼中各文件的依賴關(guān)系,以及要生成的目標(biāo)模塊名(3)編寫設(shè)備功能函數(shù):(devDrv.mod.c) 函數(shù)框架如下所示:#include<linux/module.h>#include<linux/vermagic.h>#include<linux/compiler.h>MODULE_INFO(vermagic,VERMAGIC_STRING);__visiblestructmodule__this_module__attribute__((section(".gnu.linkonce.this_module")))={ .name=KBUILD_MODNAME, .init=init_module,#ifdefCONFIG_MODULE_UNLOAD .exit=cleanup_module,#endif .arch=MODULE_ARCH_INIT,};staticconststructmodversion_info____versions[]__used__attribute__((section("__versions")))={ {0x59caa4c3,__VMLINUX_SYMBOL_STR(module_layout)}, {0x6bc3fbc0,__VMLINUX_SYMBOL_STR(__unregister_chrdev)}, {0xbb2c2e33,__VMLINUX_SYMBOL_STR(__register_chrdev)}, {0x839fb39,__VMLINUX_SYMBOL_STR(try_module_get)}, {0x4f8b5ddb,__VMLINUX_SYMBOL_STR(_copy_to_user)}, {0x4f6b400b,__VMLINUX_SYMBOL_STR(_copy_from_user)}, {0x6d9da20b,__VMLINUX_SYMBOL_STR(module_put)}, {0x27e1a049,__VMLINUX_SYMBOL_STR(printk)}, {0xbdfb6dbb,__VMLINUX_SYMBOL_STR(__fentry__)},};staticconstchar__module_depends[]__used__attribute__((section(".modinfo")))="depends=";MODULE_INFO(srcversion,"EC04EE455AF92F2C3E445E0");(4)設(shè)備加載,安裝過程如下: ①進入Makefile文件和devDrv.mod.
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教學(xué)進度管理規(guī)定
- 2025年采購師(初級)考試試卷:采購談判與議價技巧
- 雨中情感抒寫作文(4篇)
- 2025公共英語三級考試試卷閱讀理解策略與高分技巧
- 2025年法語DELFC2級口語表達(dá)試卷:環(huán)境保護政策
- 2025年電梯安裝改造維修作業(yè)特種作業(yè)操作證考試試卷(電梯操作培訓(xùn)篇)
- 建筑設(shè)計風(fēng)格與元素應(yīng)用案例分析題
- 2025年工業(yè)互聯(lián)網(wǎng)平臺5G通信模組在智能工廠數(shù)據(jù)采集與分析系統(tǒng)的適配性評估報告
- 金融機構(gòu)2025年風(fēng)險管理數(shù)字化轉(zhuǎn)型中的風(fēng)險控制策略優(yōu)化與實踐
- 從課本中看到的世界讀后感結(jié)合課本內(nèi)容創(chuàng)作(4篇)
- 肢體離斷傷的護理
- 2024年中國黑龍江省農(nóng)藥市場調(diào)查報告
- LINE6效果器HD300中文說明書
- 浙江省強基聯(lián)盟學(xué)考模擬2024-2025學(xué)年高二下學(xué)期6月學(xué)考模擬地理試題(含答案)
- 中國美術(shù)學(xué)院非教學(xué)崗位招聘筆試真題2024
- 外賣餐飲平臺管理制度
- 人形機器人深度研究系列八:諧波減速器:差齒傳動持續(xù)進化
- 公立醫(yī)院風(fēng)險評估報告
- 腫瘤婦科進修匯報
- 麻醉意外與并發(fā)癥處理規(guī)范與流程
- 供應(yīng)商入庫協(xié)議
評論
0/150
提交評論