驅(qū)動程序開發(fā)期末抽題題庫.doc
《驅(qū)動程序開發(fā)期末抽題題庫.doc》由會員分享,可在線閱讀,更多相關《驅(qū)動程序開發(fā)期末抽題題庫.doc(8頁珍藏版)》請在裝配圖網(wǎng)上搜索。
嵌入式系統(tǒng)驅(qū)動開發(fā)題庫(35題)硬件(8題):1. 請闡述下圖Fig1中蜂鳴器電路的工作原理;如果將Q1變成PNP型三極管如何設計,有什么缺點?當GPB0引腳為低電平時,三極管Q1飽和導通,蜂鳴器通電鳴響。若GPB0引腳為高電平時,三極管Q1截止,蜂鳴器沒有電流就不鳴響1)GPB0輸出高電平時NPN型三極管導通,蜂鳴器接電發(fā)聲。2)變成PNP型三極管:3)改為PNP設計的話上電即響。2. 請根據(jù)Fig2闡述課程中鍵盤驅(qū)動的原理。Fig2.鍵盤掃描電路如果有按鍵按下去,對應的行輸出掃描脈沖就會在對應的列信號線產(chǎn)生變化,就會觸發(fā)鍵盤中斷。鍵盤中斷服務程序就會將鍵盤的按鍵鍵碼寄存器讀出來,判斷是那個按鍵按下去。 如果沒有按鍵按下,列信號線不會產(chǎn)生中斷,沒有對按鍵的處理矩陣鍵盤由行信號和列信號組成矩陣。每個按鍵連接到行信號和列信號的交叉點。通過矩陣鍵盤控制器行信號線順序逐行輸出掃描脈沖,列信號線作為輸入信號線。3、請說出Fig3電路的原理,R38-R41電阻值的計算方法。Fig3.LED發(fā)光二極管驅(qū)動電路由于發(fā)光二極管是向?qū)щ姡筁ED亮,X引腳低電平即可。R=(VDD電源電壓-LED電壓)/I電流4、如何配置4412的GPIOX3_2到X3_5口作為輸入口?先聲明變量GPX3CON聲明變量GPX3CON=iomap(地址)Writel(readl(x)&(152*4)|(153*4)|(154*4),GPX3CON);5、如何配置4412的GPIOX3_2到X3_5口作為中斷觸發(fā)口?GPFCON=0x00;6、如何配置4412的GPIOX3_2到X3_5口作為輸出口?7、如何使4412的GPIOX3_2到X3_3口輸出低電平,GPIOX3_4到X3_5口輸出高電平。8、4412端口有GPXCON、GPXDAT、GPXPUD三個寄存器,分別代表什么?GPXCON為控制寄存器,GPXDAT為數(shù)據(jù)寄存器,GPXUP為上拉電阻寄存器,GPXPUD為下拉電阻寄存器。Drivers:(27)9、在驅(qū)動程序代碼中module_init(func1),module_exit(func2)兩個宏的作用是什么?在linux下,運行什么命令會調(diào)用func1?運行什么命令會調(diào)用func2?moudle_init 和 module_exit 是比較特別的內(nèi)核宏來指出這兩個函數(shù)的角色, 一個在模塊加載到內(nèi)核時被調(diào)用(func1)以及一個在模塊被去除時被調(diào)用(func2).10、請敘述下面的makefile中各個字段的含義11、驅(qū)動代碼中都會涉及到兩個結(jié)構(gòu)體,分別是struct file和struct inode,他們分別代表什么含義,而且在什么時候被創(chuàng)建?1)struct file表示一個打開的文件(文件的描述符)主要供與文件系統(tǒng)對應的設備文件驅(qū)動程序使用。2)struct inode表示文件結(jié)點,因為對于單個文件而言可能會有許多個表示打開的文件的描述符,因而就可能會有多個個file對應一個inode。3)由內(nèi)核在open()時創(chuàng)建,并(將該文件描述符)傳遞給該文件上進行操作的所有函數(shù),直到最后的close函數(shù),在文件的所有實例都被關閉后,內(nèi)核會釋放這個數(shù)據(jù)結(jié)構(gòu)。12、 class_create(); device_create();起什么作用?class_create();為自動創(chuàng)建設備文件,device_create();為自動創(chuàng)建設備節(jié)點。13、 file_operations結(jié)構(gòu)體一般都有那幾個成員,舉三個成員例子,它們的作用都是什么?l open:打開設備,如果這個項是 NULL, 設備打開一直成功, 但是你的驅(qū)動不會得到通知。 l ioctl:控制命令,系統(tǒng)調(diào)用提供了發(fā)出設備特定命令的方法 。l write:寫,發(fā)送數(shù)據(jù)給設備。 l read:讀,用來從設備中獲取數(shù)據(jù)。 l release:釋放設備,可以為 NULL。14、 驅(qū)動程序中主次設備號分別代表什么?如果事先已經(jīng)分配主次設備號,那么用什么宏取得dev_t類型的設備編號?反過來又如何取得主次設備號?主設備號被系統(tǒng)用來確定驅(qū)動程序,次設備號被驅(qū)動程序用來確定具體的設備。用MKDEV(int major,int minor)取得設備編號用MAJOR(dev_t dev)取得主設備號,MINOR(dev_t dev)取得次設備號。15、 創(chuàng)建設備號的方式有哪幾種,我們常采用哪種?各種方法都通過什么函數(shù)或命令實現(xiàn)?有靜態(tài)與動態(tài)兩種申請方式。1) 靜態(tài)申請:使用 register_ chrdev_region 函數(shù)注冊設備號例:int register_ chrdev_region( dev_t from , unsigned count , const char * name )2)動態(tài)申請:使用alloc_chrdev_region 分配設備號例:int alloc_chrdev_region( dev_t *dev , unsigned baseminor , unsigned count , const char * name )16、 創(chuàng)建設備文件的方式有哪幾種?分別是如何創(chuàng)建的?有兩種方法,一是使用 mknod 命令手工創(chuàng)建,二是自動創(chuàng)建(驅(qū)動程序來實現(xiàn))。注:手動用這個mknod filename type major minor自動用這倆函數(shù)class_create(); device_create();17、 驅(qū)動代碼中申請內(nèi)存和釋放內(nèi)存的函數(shù)分別是那幾種?寫出聲明一個設備結(jié)構(gòu)及申請對應內(nèi)存的步驟。申請內(nèi)存Kmalloc()和vmalloc(),釋放內(nèi)存Kfree()和vfree()。注:以I2C為例:18、 驅(qū)動代碼中數(shù)據(jù)在用戶空間和內(nèi)核空間進行傳輸?shù)暮瘮?shù)分別是那些?應用程序向設備寫入數(shù)據(jù)用什么函數(shù)?copy_to_user()和copy_from_user()FILE *fp = open(“/dev/ttyS0”, O_RDWR);19、 驅(qū)動模塊加載,卸載,查看的命令分別是什么?分別調(diào)用驅(qū)動程序中哪些函數(shù)?insmod:加載模塊,rmmod:卸載模塊,modinfo:獲得模塊的信息lsmod:查看系統(tǒng)中所有已經(jīng)被加載了的所有的模塊以及模塊間的依賴關系init_module函數(shù)是加載模塊時會被調(diào)用的,一般作一些初始化的工作;cleanup_module函數(shù)是卸載模塊時會被調(diào)用的,做一些清理的工作。注:在使用init_module和cleanup_module時要用module_init(初始化函數(shù)名),module_exit(卸載時函數(shù)名)這兩個宏來聲明一下。20、 驅(qū)動程序中訪問端口的方式有哪兩種?這兩種方式都采用哪種編址方式?IOPORT、IOMEM,一種是I/O映射方式(I/Omapped),另一種是內(nèi)存映射方式(Memorymapped)。21、 IOPORT形式訪問端口,程序代碼應如何編寫?答:struct resource *request_region(unsigned long first, unsigned long n, const char *name); /申請使用first開始的n個端口,name為設備名 void release_region(unsigned long start, unsigned long n); /釋放端口int check_region(unsigned long first, unsigned long n);/檢查端口是否可用unsigned inb(unsigned port);/讀字節(jié)端口void outb(unsigned char byte, unsigned port);/寫字節(jié)端口22、 IOMEM形式訪問端口,程序代碼應如何編寫?答:struct resource *request_mem_region(unsigned long start, unsigned long len, char *name); /申請使用first開始的n個端口,name為設備名 void release_mem_region(unsigned long start, unsigned long len); /釋放端口 int check_mem_region(unsigned long start, unsigned long len); /檢查端口是否可用unsigned int ioread8(void *addr); /讀字節(jié)端口 void iowrite8(u8 value, void *addr); /寫字節(jié)端口23、 請列舉你熟悉的幾個讀寫端口的linux內(nèi)核提供的函數(shù)。讀寫字節(jié)端口(8位寬)unsigned inb(unsigned port);【讀】voi outb(unsigned char byte, unsigned port);【寫】讀寫字端口(16位寬)unsigned inw(unsigned port);【讀】voi outw(unsigned short word, unsigned port);【寫】讀寫長字端口(32位寬)unsigned inl(unsigned port);【讀】voi outl(unsigned longword, unsigned port);【寫】讀寫一串字節(jié)unsigned insb(unsigned port, void *addr, unsigned long count);【讀】voi outsb(unsigned port, void *addr, unsigned long count);【寫】讀寫一串字unsigned insw(unsigned port, void *addr,unsigned long count);【讀】voi outsb(unsigned port, void *addr, unsigned long count);【寫】讀寫一串長字unsigned insl(unsigned port, void * addr, unsigned long count);【讀】voi outsb(unsigned port, void *addr, unsigned long count);【寫】注:撿自己喜歡的背吧(_)。24、 信號量的獲取、釋放用什么函數(shù)?在什么情形下被使用?答:獲?。簐oid down(struct semaphore *sem);釋放:void up(struct semaphore *sem);對某個互斥資源的訪問會收到信號量的保護,在訪問之前需要獲得信號量。25、 什么是阻塞,如何用等待隊列解決阻塞問題?答:阻塞操作是指,在執(zhí)行設備操作時,若不能獲得資源,則進程掛起直到滿足可操作的條件再進行操作。18、應用程序的select()系統(tǒng)調(diào)用,內(nèi)核空間對應的函數(shù)是什么?我們學過的驅(qū)動程序中哪個使用了此方法?答:1.polling();2.struct file_operation結(jié)構(gòu)體的poll函數(shù)。19、我們在LED驅(qū)動程序中用ioctl()傳遞哪些參數(shù),分別起什么作用?答:int ioctl(int fd, ind cmd, );其中 fd 文件設備 open 函數(shù)返回的文件標示符,cmd 是設備的控制命令,后面是一些補充參數(shù),和 cmd 的意義相關的。20、在用戶空間fd=open(DEVICE_NAME,0);其中fd在哪兒用?兩個參數(shù)分別什么含義?答:1.fd是文件讀寫指針,在執(zhí)行 read 操作和 write 操作時使用。2.DEVICE_NAME是設備地址和設備名稱。3.0是讀寫權(quán)限為只讀。注:O_RDONLY:以只讀方式打開文件 O_WRONLY:以只寫方式打開文件 O_RDWR:以讀寫方式打開文件21、請說明fd = open(DEVICE_NAME, O_RDWR);與fd=open(DEVICE_NAME,0);的差異.答:額(;),請看上題注釋。22、 請分別說明tasklet與workqueue的應用場合。答:如果中斷的下半部分需要執(zhí)行獲得大量內(nèi)存、需要獲取信號量、需要執(zhí)行阻塞式的IO操作等需要休眠的動作時,需要使用工作隊列,否則,使用tasklet26、 Misc設備的主設備號是多少?Linux如何識別雜散設備?主設備號是10,相對于普通字符設備驅(qū)動,它不需要自己去生成設備文件。27、 請問如果某個設備控制寄存器的物理地址是0x11000036,那么在linux驅(qū)動程序中如何在不改變其他位的情況下將寄存器中第12、13位改變成0和1?28、 如何將某個驅(qū)動程序misc.c編譯進linux kernel中?1.將編寫的源代碼復制到 Linux 內(nèi)核源代碼的相應目錄;2. 打開Kconfig在DeviceDrivers菜單下面找到misc的選項,然后使用空格更改選擇*。注:*表示將該模塊編譯進內(nèi)核3.編譯目錄條目。然后使用imsmod 命令手動加載驅(qū)動。29、 Linux的設備文件(/dev下)用什么與驅(qū)動程序關聯(lián)?應用程序與設備相關的系統(tǒng)調(diào)用憑什么指向此設備?1.struct file結(jié)構(gòu)體2.在結(jié)構(gòu)file_operations里,指出了設備驅(qū)動程序所提供的入口點位置。30、 如何將屏幕圖像保存在一個文件中,用什么命令?copy文件到目錄/dev/fb0(隨意)下,然后執(zhí)行dd if=/dev/fb0 of=./tmp_fb_data。- 配套講稿:
如PPT文件的首頁顯示word圖標,表示該PPT已包含配套word講稿。雙擊word圖標可打開word文檔。
- 特殊限制:
部分文檔作品中含有的國旗、國徽等圖片,僅作為作品整體效果示例展示,禁止商用。設計者僅對作品中獨創(chuàng)性部分享有著作權(quán)。
- 關 鍵 詞:
- 驅(qū)動程序 開發(fā) 期末 題庫
裝配圖網(wǎng)所有資源均是用戶自行上傳分享,僅供網(wǎng)友學習交流,未經(jīng)上傳用戶書面授權(quán),請勿作他用。
鏈接地址:http://ioszen.com/p-13053375.html