版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、嵌入式驅(qū)動(dòng)開發(fā)實(shí)驗(yàn)實(shí)驗(yàn)一實(shí)驗(yàn)題目:Linux計(jì)算器應(yīng)用程序及hello驅(qū)動(dòng)程序?qū)嶒?yàn)?zāi)康模赫莆誏inux常用操作命令、熟悉使用vi編程、掌握gcc/makefile編譯基本方法實(shí)驗(yàn)類型:設(shè)計(jì)實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:一、編寫一個(gè)計(jì)算器程序,實(shí)現(xiàn)菜單顯示、加減乘除功能。要求:1)基于Linux平臺(tái)開發(fā)2)使用vi編輯器編寫3)使用gcc編譯一.課搭建samba服務(wù)器二c編程練習(xí)(將10個(gè)數(shù)放入數(shù)組,找出最大的一個(gè)數(shù),并輸出)二、 編寫hello驅(qū)動(dòng)程序,編譯后,進(jìn)行加載、卸載驅(qū)動(dòng)模塊以對(duì)驅(qū)動(dòng)進(jìn)行測(cè)試。一hello.c驅(qū)動(dòng)程序?qū)嶒?yàn)二實(shí)驗(yàn)題目:簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序?qū)嶒?yàn)?zāi)康模?/p>
2、掌握Makefile文件編寫方法;熟悉字符設(shè)備驅(qū)動(dòng)程序設(shè)計(jì)、開發(fā)和使用流程;實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:編寫一個(gè)簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序,完成下列功能,并寫出運(yùn)行程序后輸出的結(jié)果。1) 編寫簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序,能夠?qū)崿F(xiàn)對(duì)虛擬設(shè)備int類型變量的讀寫操作;2) 編寫Makefile文件,對(duì)驅(qū)動(dòng)程序進(jìn)行編譯;3) 采用動(dòng)態(tài)模塊加載方式對(duì)驅(qū)動(dòng)程序進(jìn)行加載,并查看加載前后效果;4) 編寫測(cè)試程序,對(duì)虛擬設(shè)備進(jìn)行讀寫操作,對(duì)驅(qū)動(dòng)程序功能進(jìn)行驗(yàn)證。實(shí)驗(yàn)步驟:1) 使用如下命令創(chuàng)建驅(qū)動(dòng)源程序文件進(jìn)行編寫。vim globalvar.c2) 編寫相應(yīng)的Makefile文
3、件。vim Makefile3)對(duì)驅(qū)動(dòng)程序進(jìn)行編譯、調(diào)試,生成globalvar.o目標(biāo)文件。make(make clean)4)加載驅(qū)動(dòng)程序,并查看是否加載成功。insmod globalvar.ocat /proc/devices(卸載模塊命令 rmmod globalvar)(注意:無后綴名)5)編寫測(cè)試文件globalvartest.c,并進(jìn)行編譯,生成globalvartest.o可執(zhí)行文件。6)創(chuàng)建虛擬設(shè)備文件。mknod /dev/globalvar c 253 07)運(yùn)行g(shù)lobalvartest.o,查看、記錄并提交結(jié)果。./globalvartest.o提交代碼:1) gl
4、obalvar.c/globalvar.o2) Makefile3) globalvartest.c/globalvartest.o4) 測(cè)試結(jié)果(.jpg文件)一globalvar.c驅(qū)動(dòng)程序測(cè)試程序makefile文件測(cè)試結(jié)果實(shí)驗(yàn)三實(shí)驗(yàn)題目:并發(fā)控制及中斷程序?qū)嶒?yàn)?zāi)康模海?)掌握linux內(nèi)核中并發(fā)控制的方法,學(xué)會(huì)運(yùn)用信號(hào)量/隊(duì)列/自旋鎖進(jìn)行內(nèi)核驅(qū)動(dòng)程序中的并發(fā)控制;(2)掌握中斷處理機(jī)制原理,學(xué)會(huì)使用tasklet進(jìn)行軟中斷處理。實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:以簡(jiǎn)單的字符設(shè)備驅(qū)動(dòng)程序globalvar為基礎(chǔ),編寫程序完成下列功能,并寫出運(yùn)行程序后輸出的
5、結(jié)果。1) 在globalvar驅(qū)動(dòng)程序中,使用自旋鎖功能,進(jìn)行設(shè)備打開操作控制。實(shí)現(xiàn)已打開的設(shè)備不能再被其他用戶和進(jìn)程打開;并編寫測(cè)試程序進(jìn)行測(cè)試;2) 在globalvar驅(qū)動(dòng)程序中,使用信號(hào)量和隊(duì)列功能,進(jìn)行設(shè)備讀寫操作控制。實(shí)現(xiàn):a) 設(shè)備不能同時(shí)被兩個(gè)及以上用戶和進(jìn)程打開; b) 且僅能先寫入設(shè)備,才能進(jìn)行讀取設(shè)備操作;c) 編程測(cè)試程序進(jìn)行功能測(cè)試;3) 在globalvar驅(qū)動(dòng)程序中,使用tasklet功能,進(jìn)行中斷處理操作。實(shí)現(xiàn)在對(duì)設(shè)備進(jìn)行寫入操作后,通過中斷處理方式,打印信息;并編寫測(cè)試程序進(jìn)行測(cè)試;實(shí)驗(yàn)步驟:一,基本操作1) 使用如下命令創(chuàng)建驅(qū)動(dòng)源程序文件進(jìn)行編寫。vim
6、globalvar.c2)編寫相應(yīng)的Makefile文件。vim Makefile3)對(duì)驅(qū)動(dòng)程序進(jìn)行編譯、調(diào)試,生成globalvar.o目標(biāo)文件。make(make clean)4)加載驅(qū)動(dòng)程序,并查看是否加載成功。insmod globalvar.ocat /proc/devices(卸載模塊命令 rmmod globalvar)(注意:無后綴名)5)編寫測(cè)試文件globalvartest.c,并進(jìn)行編譯,生成globalvartest.o可執(zhí)行文件。6)創(chuàng)建虛擬設(shè)備文件。mknod /dev/globalvar c 253 07)運(yùn)行g(shù)lobalvartest.o,查看、記錄并提交結(jié)果。
7、./globalvartest.o二,自旋鎖功能1)定義及初始化:包括頭文件/asm/semaphore.hstatic spinlock_t spin = SPIN_LOCK_UNLOCKED;static int count = 0;2)獲取自旋鎖在globalvar_open()中獲取自旋鎖, spin_lock(&spin);3)釋放自旋鎖在globalvar_open()中釋放自旋鎖, if(count)spin_unlock(&spin);return EBUSY;count+;spin_unlock(&spin);4) 在globalvar_release()中, count-;
8、5) 測(cè)試MOD_INC_USE_COUNT/ MOD_DEC_USE_COUNT功能。6)編寫應(yīng)用測(cè)試進(jìn)行測(cè)試。7)提交代碼和測(cè)試結(jié)果(參照實(shí)驗(yàn)2方式)。一. spin.c驅(qū)動(dòng)程序測(cè)試程序運(yùn)行結(jié)果解釋代碼三,信號(hào)量和隊(duì)列功能1)定義及初始化:包括頭文件/asm/semaphore.h 以及 /linux/wait.hstatic struct semaphore sem;static wait_queue_head_t outq;static int flag = 0;初始化:在globalvar_init(void)中if(ret).else init_MUTEX(&sem);init_w
9、aitqueue_head(&outq);2)獲取信號(hào)量和并判斷是否加入隊(duì)列在globalvar_read()中獲取if(wait_event_interruptible(outq,flag != 0)return ERESTARTSYS;if(down_interruptible(&sem)return ERESTARTSYS;flag = 0;up(&sem);3)在globalvar_write()中喚醒隊(duì)列if(down_interruptible(&sem)return ERESTARTSYS; up(&sem);flag = 1; wake_up_interruptible(&ou
10、tq);4)編寫應(yīng)用test1.c test2.c進(jìn)行測(cè)試。5)提交代碼和測(cè)試結(jié)果(參照實(shí)驗(yàn)2方式)。四,中斷練習(xí)1)void tast_tasklet_action(unsigned long t) printk(tasklet is runningn);2)DECLARE_TASKLET(test_tasklet,test_tasklet_action, 0);3) tasklet_schedule(&test_tasklet);4)編寫應(yīng)用test1.c test2.c進(jìn)行測(cè)試。5)提交代碼和測(cè)試結(jié)果(參照實(shí)驗(yàn)2方式)。二waitqueue.c驅(qū)動(dòng)程序makefile文件解釋代碼實(shí)驗(yàn)五實(shí)
11、驗(yàn)題目:ADC設(shè)備驅(qū)動(dòng)開發(fā)實(shí)驗(yàn)?zāi)康模毫私鈙3c2410 ADC 芯片相關(guān)寄存器功能;編寫驅(qū)動(dòng)和應(yīng)用程序?qū)DC進(jìn)行配置及讀取數(shù)據(jù)。學(xué)會(huì)交叉編譯環(huán)境的搭建。實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:編寫一個(gè)ADC設(shè)備驅(qū)動(dòng)程序,能夠?qū)DC設(shè)備配置及讀取數(shù)據(jù)。將設(shè)備驅(qū)動(dòng)程序和應(yīng)用程序下載到實(shí)驗(yàn)箱,測(cè)試并寫出運(yùn)行程序后輸出的結(jié)果。1) 交叉編譯環(huán)境的搭建。a) 將armv4l復(fù)制到根目錄cp armv4l-tools-2.95.2.tar.bz2 /b) 解壓工具包tar jxvf armv4lc) 配置環(huán)境變量vim /root/.bashrc輸入:export PATH
12、= $PATH:/opt/host/armv4l/binsource /root/.bashrcd) 測(cè)試在任意終端下輸入arm4v后,按tab鍵,如能出現(xiàn)arm編譯命令armv4l-unknown-linux-gcc即為成功交叉編譯環(huán)境搭建成功。2) 下載s3c2410實(shí)驗(yàn)箱內(nèi)核源碼從百度云盤下載,下載后搭建samba服務(wù)器,拷貝到/root目錄下。則Makefile中 KERNELDIR = /root/kernel-2410s3) 編寫驅(qū)動(dòng)程序myadc.c編寫Makefile,并對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試,成功后,編寫用戶程序。4) 編寫測(cè)試程序test.c在Makefile中增加編譯語句,對(duì)
13、test.c進(jìn)行編譯。5) 運(yùn)行、測(cè)試將編譯后的驅(qū)動(dòng)程序和測(cè)試程序,拷貝到實(shí)驗(yàn)箱所連接的上位機(jī)。通過超級(jí)終端將程序下載到實(shí)驗(yàn)箱,進(jìn)行測(cè)試。觀察結(jié)果。6) 按照之前實(shí)驗(yàn)提交方式,提交源程序、目標(biāo)程序及測(cè)試結(jié)果一myadc1、預(yù)分頻使能位,1為使能,0為禁止啟動(dòng)adc控制位,1為啟動(dòng),0為不啟動(dòng)預(yù)分頻值定義通道等待隊(duì)列讀寫中斷的入口函數(shù)2、配置ADC啟動(dòng)指定的通道進(jìn)入睡眠從ADCDATA0讀數(shù)據(jù)取0-9這10位ADC轉(zhuǎn)換數(shù)據(jù)4、將預(yù)分頻值轉(zhuǎn)換成ADCCON可接收形式5、將ADC的通道號(hào)轉(zhuǎn)換成ADCCON可接收形式6、初始化等待隊(duì)列計(jì)數(shù)器加17、計(jì)數(shù)器減18、在/dev中建立設(shè)備文件,指明它是字符驅(qū)
14、動(dòng)設(shè)備,可讀寫9、注銷ADC設(shè)備釋放中斷實(shí)驗(yàn)六實(shí)驗(yàn)題目:Linux內(nèi)核編譯實(shí)驗(yàn)?zāi)康模毫私釲inux內(nèi)核編譯步驟;學(xué)會(huì)如何將驅(qū)動(dòng)加入到內(nèi)核,通過內(nèi)核編譯,實(shí)現(xiàn)驅(qū)動(dòng)靜態(tài)加載。實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:對(duì)編寫的globalvar或chrdemo等設(shè)備驅(qū)動(dòng)程序,通過內(nèi)核編譯,實(shí)現(xiàn)靜態(tài)加載。內(nèi)核編譯后,重啟機(jī)器,對(duì)驅(qū)動(dòng)功能進(jìn)行測(cè)試,比較靜態(tài)與動(dòng)態(tài)加載的不同。測(cè)試后,寫出內(nèi)核編譯步驟及運(yùn)行程序后的結(jié)果。具體步驟如下:1) 將驅(qū)動(dòng)源程序加入到linux系統(tǒng)內(nèi)核源碼中a) 將驅(qū)動(dòng)源程序拷貝到內(nèi)核源碼相應(yīng)路徑。cp globalvar.c /usr/src/linux/d
15、river/charb) 修改/usr/src/linux/driver/char下配置文件Config.in,在文件最后一行endmenu前,加入一行tristate globalvar support CONFIG_GLOBALVARc) 修改/usr/src/linux/driver/char下Makefile文件,在適當(dāng)位置加入一行obj-$(CONFIG_GLOBALVAR) += globalvar.o2) 內(nèi)核編譯(在內(nèi)核編譯過程中,工作路徑始終為:/usr/src/linux)a) make mrproper (清除已編譯文件、配置文件及備份文件等);b) make menuc
16、onfig (配置內(nèi)核選項(xiàng),選中g(shù)lobalvar項(xiàng))c) make clean (再次清除不必要的文件)d) make dep (建立文件依賴關(guān)系)e) make bzImage (編譯內(nèi)核,編譯后在/usr/src/linux/arch/i386/boot下生成新內(nèi)核鏡像文件bzImagef) make modules (編譯模塊)g) make modules_install (安裝模塊)h) make install (安裝內(nèi)核)3) reboot,測(cè)試新內(nèi)核及靜態(tài)加載的globalvar驅(qū)動(dòng)程序。a) rebootb) cat /proc/devicesc) mknod /dev/g
17、lobalvar c 253 0d) ./test.o4) 按照之前實(shí)驗(yàn)提交方式,提交源程序、目標(biāo)程序及測(cè)試結(jié)果一Chrdemo定義設(shè)備號(hào)定義設(shè)備名指定內(nèi)核內(nèi)存地址從用戶空間復(fù)制數(shù)據(jù)到內(nèi)核空間寫數(shù)據(jù)到設(shè)備從設(shè)備讀數(shù)據(jù)從內(nèi)核空間復(fù)制到用戶空間對(duì)設(shè)備進(jìn)行初始化計(jì)數(shù)器加1關(guān)閉設(shè)備計(jì)數(shù)器減一命令為1時(shí)的處理代碼命令為2時(shí)的處理代碼錯(cuò)誤命令的處理代碼定義與文件關(guān)聯(lián)的結(jié)構(gòu)體,并對(duì)功能函數(shù)初始化 是與文件關(guān)聯(lián)的接口驅(qū)動(dòng)注冊(cè)函數(shù)的代碼驅(qū)動(dòng)注銷函數(shù)的代碼指定加載函數(shù)和卸載函數(shù)的代碼打開字符設(shè)備chrdemo將buf1寫到chrdemo中從chrdemo讀出到buf2對(duì)chrdemo發(fā)控制碼1對(duì)chrdemo發(fā)控
18、制碼4關(guān)閉字符設(shè)備chrdemo二內(nèi)核編譯實(shí)驗(yàn)七實(shí)驗(yàn)題目:塊設(shè)備驅(qū)動(dòng)程序?qū)嶒?yàn)實(shí)驗(yàn)?zāi)康模壕帉懱摂M塊設(shè)備驅(qū)動(dòng)程序,了解塊設(shè)備驅(qū)動(dòng)程序的工作機(jī)制,及與字符設(shè)備驅(qū)動(dòng)程序工作原理的不同之處;學(xué)會(huì)如何編寫塊設(shè)備驅(qū)動(dòng)程序,熟悉塊設(shè)備驅(qū)動(dòng)程序的程序結(jié)構(gòu),了解塊設(shè)備驅(qū)動(dòng)程序中各函數(shù)模塊的功能及涉及的主要內(nèi)核函數(shù)的用法,并對(duì)實(shí)現(xiàn)的虛擬塊設(shè)備驅(qū)動(dòng)程序進(jìn)行功能測(cè)試。實(shí)驗(yàn)類型:綜合實(shí)驗(yàn)要求:必修儀器設(shè)備:計(jì)算機(jī)實(shí)驗(yàn)內(nèi)容、方法、步驟:編寫blkdemo虛擬塊設(shè)備驅(qū)動(dòng)程序。實(shí)現(xiàn)相應(yīng)功能,并對(duì)驅(qū)動(dòng)程序進(jìn)行測(cè)試。具體步驟如下:1) 編譯blkdemo.c虛擬塊設(shè)備驅(qū)動(dòng)程序2) 編寫Makefile文件,編譯驅(qū)動(dòng),生成可執(zhí)行驅(qū)動(dòng)
19、程序blkdemo.o3) 測(cè)試塊設(shè)備功能,方法1:a) 加載塊設(shè)備insmod blkdemo.ob) 創(chuàng)建塊設(shè)備文件mknod /dev/blkdemoa b 200 0mknod /dev/blkdemob b 200 1c) 編寫測(cè)試文件test;dd if=file1 of=/dev/blkdemoa bs=512 count=2dd if=file1 of=/dev/blkdemob bs=512 count=2dd if=/dev/blkdemoa of=file2 bs=512 count=2dd if=/dev/blkdemob of=file3 bs=512 count=1d) 更改test權(quán)限chmod 777 teste) 制作file1文件cp blkdemo.c file1f) 運(yùn)行test文件./testg) 觀察、記錄并提交實(shí)驗(yàn)結(jié)果4) 測(cè)試塊設(shè)備功能,方法2:a) 格式化塊設(shè)備文件mke2f
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 物流費(fèi)合同范例
- 溫州購房合同范例
- 圍墻繪畫服務(wù)合同范例
- 設(shè)施維修合同范例
- 房場(chǎng)地租賃合同范例
- 泉州?;坟涍\(yùn)合同范例
- 委托育苗合同協(xié)議書書3篇
- 景觀鋪裝工程勞務(wù)合同范例
- 北辰區(qū)運(yùn)輸?;泛贤独?/a>
- 交通事故自行協(xié)商的協(xié)議書3篇
- 抖音快手短視頻創(chuàng)業(yè)項(xiàng)目融資商業(yè)策劃書
- 滬教版英語八年級(jí)上冊(cè)知識(shí)點(diǎn)歸納匯總
- 裝飾裝修工程售后服務(wù)具體措施
- 軟件設(shè)計(jì)說明書通用模板
- 酒店治安安全培訓(xùn)
- 糖皮質(zhì)激素類藥物臨床應(yīng)用指導(dǎo)原則(2023年)
- 我的家鄉(xiāng)-東營
- 世界的海陸分布、世界的地形復(fù)習(xí)提綱
- SMT電子物料損耗率標(biāo)準(zhǔn) 貼片物料損耗標(biāo)準(zhǔn)
- NFPA-2010 固定式氣溶膠滅火系統(tǒng)標(biāo)準(zhǔn)(譯文)
- 釣魚郵件專項(xiàng)安全意識(shí)隨堂測(cè)試
評(píng)論
0/150
提交評(píng)論