


下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、有用標準文檔1、字符型驅動設備你是怎么創建設備文件的,就是/dev/下面的設備文件,供上層應用程序打開使用的文件?答:mknod 命令結合設備的主設備號和次設備號,可創建一個設備文件。評:這只是其中一種方式,也叫手動創建設備文件。還有 udev/mdev 自動創建設備文件的方式,udev/mdev 是運行在用戶態的程序,可以動態管理設備文件,包括創建和刪除設備文件,運行在用戶態意味著系統要運行之后。那么在系統啟動期間還有 devfs 創建了設備文件。一共有三種方式可以創建設備文件。答:中斷處理例程應當盡量短,把能放在后半段(tasklet,等待隊列等)的任務盡量放在后半段。評:寫一個中斷服務程
2、序要留意快進快出,在中斷服務程序里面盡量快速采集信息,包括硬件信息,然后推出中斷,要做其它事情可以使用工作隊列或者tasklet 方式。也就是中斷上半部和下半部。其次:中斷服務程序中不能有堵塞操作。為什么?大家可以爭辯。2、寫一個中斷服務需要留意哪些?假如中斷產生之后要做比較多的事情你是怎么做的?第三:中斷服務程序留意返回值,要用操作系統定義的宏做為返回值,而不是自己定義的ok,fail 之類的。答:使用自旋鎖的進程不能睡眠,使用信號量的進程可以睡眠。中斷服務例程中的互斥使用的是自旋鎖,緣由是在中斷處理例程中,硬中斷是關閉的,這樣會丟失可能到來的中斷。3、自旋鎖和信號量在互斥使用時需要留意哪些
3、?在中斷服務程序里面的互斥是使用自旋鎖還是信號量?還是兩者都能用?為什么?答:原子操作指的是無法被打斷的操作。我沒懂其次句是什么意思,自己定義一個變量怎么可能標記資源的使用狀況?其他進程又看不見這個變量評:其次句話的意思是:定義一個變量,比如 int flag =0; if(flag = 0)flag = 1;操作臨界區;flag = 0;4、原子操作你怎么理解?為了實現一個互斥,自己定義一個變量作為標記來作為一個資源只有一個使用者行不行?這樣可否?文案大全答:insmod 調用init 函數,rmmod 調用exit 函數。這兩個函數在設計時要留意什么?卸載模塊時曾消滅卸載失敗的情形,緣由是
4、存在進程正在使用模塊,檢查代碼后發覺產生了死鎖的問題。5、insmod 一個驅動模塊,會執行模塊中的哪個函數?rmmod 呢?這兩個函數在設計上要留意哪些?遇到過卸載驅動消滅特別沒?是什么問題引起的?評:要留意在 init 函數中申請的資源在exit 函數中要釋放,包括存儲,ioremap,定時器,工作隊列等等。也就是一個模塊注冊進內核,退出內核時要清理所帶來的影響,帶走一切不留下一點痕跡。6、在驅動調試過程中遇到過oops 沒?你是怎么處理的?7、ioctl 和 unlock_ioctl 有什么區分?答:由于內核沒有方法直接訪問物理內存地址,必需先通過ioremap 獲得對應的虛擬地址。8、
5、驅動中操作物理確定地址為什么要先ioremap?9、設備驅動模型三個重要成員是?platfoem 總線的匹配規章是?在具體應用上要不要先注冊驅動再注冊設備?有先后挨次沒?10、linux 中內核空間及用戶空間的區分?用戶空間與內核通信方式有哪些?11、linux 中內存劃分及如何使用?虛擬地址及物理地址的概念及彼此之間的轉化,高端內存概念?12、linux 中中斷的實現機制,tasklet 與 workqueue 的區分及底層實現區分?為什么要區分上半部和下半部?13、linux 中斷的響應執行流程?中斷的申請及何時執行(何時執行中斷處理函數)?14、linux 中的同步機制?spinlock
6、 與信號量的區分?15、linux 中 rcu 原理?16、linux 中軟中斷的實現原理?17、linux 系統實現原子操作有哪些方法?18、mips cpu 中空間地址是怎么劃分的?如在uboot 中如何操作設備的特定的寄存器?19、linux 中系統調用過程?如:應用程序中 read()在 linux 中執行過程即從用戶空間到內核空間?20、linux 內核的啟動過程(源代碼級)?21、linux 調度原理?22、linux 網絡子系統的生疏?kmalloc() get_free_page()mempool_create()23、linux 內核里面,內存申請有哪幾個函數,各自的區分?2
7、4. irq 和 fiq 有什么區分,在cpu 里面是是怎么做的?上半部分執行與硬件相關的處理要求快, 而有些驅動在中斷處理程序中又需要完成大量工作,這構成沖突,所以linux 有所謂的bottom half 機制,中斷處理程序中全部不要求馬上完成的,在開中斷的環境下,由底半程序隨后完成.linux 的底半處理實際上是建立在內核的軟中斷機制上的.linux 的底半 機制主要有tasklet 和 work queue 以及 softirq ( 2.4 內核則有bh , task queue , softirq , tasklet 沒有work queue),其實底半可以理解成一種工作的延遲。所以
8、實際使用時跟timer 機制基本上一個意思。25. 中斷的上半部分和下半部分的問題:講下分成上半部分和下半部分的緣由,為何要分? 講下如何實現?mmap 函數實現把一個文件映射到一個內存區域,從而我們可以像讀寫內存一樣讀寫文件, 他比單純調用read/write 也要快上很多。在某些時候我們可以把內存的內容拷貝到一個文件中實現內存備份,當然,也可以把文件的內容映射到內存來恢復某些服務。另外,mmap實現共享內存也是其主要應用之一,mmap 系統調用使得進程之間通過映射同一個一般文件26. 內核函數 mmap 的實現原理,機制?實現共享內存。27. 驅動里面為什么要有并發、互斥的把握?如何實現?
9、講個例子?自旋鎖在同一時刻只能被最多一個內核任務持有,所以一個時刻只有一個線程允許存在于臨 界區中。這點可以應用在多處理機器、或運行在單處理器上的搶占式內核中需要的鎖定服務。這里也介紹下信號量的概念,由于它的用法和自旋鎖有相像的地方。linux 中的信號量是一種睡眠鎖。假如有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然后讓其睡眠。這時處理器獲得自由去執行其它代碼。當持有信號量的進程將信號量釋放后,在等待隊列中的一個任務將被喚醒,從而便可以獲得這個信號量。28. spinlock 自旋鎖是如何實現的?29. 任務調度的機制?30. 嵌入式 linux 和 wince 操作
10、系統的特點和特性?31. 嵌入式 linux 中 tty 設備驅動的體系結構?32. 嵌入式設備,為加快啟動速度,可以做哪些方面的優化?33. usb 設備的枚舉過程?(1) get device descriptor。主機的第一個命令要求得到設備描述符,此setup 包為 8 個字節數據(80,06,00,01,00,00,40,00),發向地址 0,端口 0。“40”表示返回數據長度最大為 40h 個字節。實際上,只返回一個包,即數組 dev_desc 中的前 8 個字節, 用于說明設備的描述符的真實長度和設備的類型。(2) set address。接著是設置設備地址處理大事,主機發送一個
11、含有指定地址的數據包(00, 05,02,00,00,00,00,00),在主機只有一個usb 設備的時候,這個地址一般會是 2, 最大地址 127,usb 協議中可以連接 127 個設備。設置地址大事處理結束后,設備進入地址狀態,主機以后會在新的指定地址處訪問設備。(3) get device descriptor。主機再次發送懇求得到設備描述符的數據包(80,06,00, 01,00,00,12,00),與上次不同的是,要求的數據的長度是實際的數據長度,同時是發送到 set address 命令所設置的地址。(4) 讀取全部configuration descriptor。接著主機要求得到
12、設備全部的配置描述符、接口描述符和節點描述符(80,06,00,02,00,00,40,00),由于主機不知道設備描述符的真實長度,因此它要求得到 64 個字節。(5) set interface,主機發送數據包(01,0b,00,00,00,00,00,00),設置接口值為 0。(6) set conifguration,確定usb 設備工作在哪一個配置下。對于u 盤設備來說,一般只有 1 個配置值,其值為 01。主機發送數據包(00,09,01,00,00,00,00,00)。(7) 假如以上步驟都正確,主機將找到新設備,并且配置成功,該設備可以正常使用,可以進行后續的u 盤枚舉過程了。(
13、8) 用 bushound 觀看計算機對于u 盤的枚舉過程,發覺上述步驟后還有一個getmaxlun 的操作,但是實際上對于u 盤來說忽視該步驟也沒有問題。34. psram、sdram、ddr、ddr2 的時序特性?35. 什么是 gpio?general purpose input/outputgpio 是相對于芯片本身而言的,如某個管腳是芯片的gpio 腳,則該腳可作為輸入或輸出高或低電平使用,當然某個腳具有復用的功能,即可做gpio 也可做其他用途。也就是說你可以把這些引腳拿來用作任何一般用途的輸入輸出,例如用一根引腳連到led 的一極來把握它的亮滅,也可以用一根(一些)引腳連到一個傳
14、感器上以獲得該傳感器的狀態,這給cpu 供應了一個便利的把握周邊設備的途經。假如沒有足夠多的gpio 管腳,在控制一些外圍設備時就會力有不逮,這時可實行的方案是使用cpld 來掛念管理。觸摸屏的主要三大種類是:電阻技術觸摸屏、 表面聲波技術觸摸屏、 電容技術觸摸屏。電阻觸摸屏的主要部分是一塊與顯示器表面格外協作的電阻薄膜屏, 這是一種多層的復合薄膜,它以一層玻璃或硬塑料平板作為基層,表面圖有一層透亮氧化金屬 (ito 氧化銦, 透亮的導電電阻) 導電層,上面在蓋有一層外表面硬化處理、光滑防擦的塑料層 、它的內表面也涂有一層ito 涂層 、在他們之間有很多細小的(小于 1/1000 英寸)的透亮
15、隔離點把兩層導電層隔開絕緣 。當手指觸摸屏幕時,兩層導電層在觸摸點位置就有了接觸,把握器偵測到這一接觸并計算出(x,y )的位置,再依據模擬鼠標的方式運作。這就是電阻技術觸摸屏的最基本的原理。表面聲波技術是利用聲波在物體的表面進行傳輸,當有物體觸摸到表面時,阻礙聲波的傳輸, 換能器偵測到這個變化,反映給計算機,進而進行鼠標的模擬。電容技術觸摸屏利用人體的電流感應進行工作 。用戶觸摸屏幕時 ,由于人體電場,用戶和觸摸屏表面形成以一個耦合電容, 對于高頻電流來說,電容是直接導體,于是手指從接觸點吸走一個很小的電流36. 觸摸屏的硬件原理?使用 fork 創建一個進程或exec 函數族掩蓋原進程。3
16、7. 在 linux c 中,ls 這個命令是怎么被執行的?38. 在一個只有 128m 內存并且沒有交換分區的機器上,說說下面兩個程序的運行結果1#define memsize 1024*1024 int count = 0;void *p = null; while(1) p = (void *)malloc(memsize); if (!p) break;printf(“current allocation %d mbn“, +count); 2while(1) p = (void *)malloc(memsize);if (!p) break; memset(p, 1, memsize
17、);printf(“current allocation %d mbn“, +count);第一道程序安排內存但沒有填充,編譯器可能會把內存安排優化掉,程序死循環;其次道, 程序安排內存并進行填充,系統會始終安排內存,直到內存不足,退出循環。39. 請定義一個宏,比較兩個數a、b 的大小,不能使用大于、小于、if 語句搞的比較簡單。主要思想就是a-b 的值的最高位是否為 0;但是又得考慮整數溢出的問題, 所以很簡單。不知道哪位大俠有更好的方法,教導教導。#include<stdio.h>#define zheng(i)(i>> 31)= 0)#define fu(i)(
18、i>> 31)!= 0)#define compare(a,b)(zheng(a)&& fu(b)|(zheng(a)&& zheng(b)|(fu(a)&&fu(b)&&(a)-(b)>> 31)= 0)void main()int a = 0x80000001; int b = 0x6fffffff; if(compare(a,b)printf(“a >= bn“);elseprintf(“a < bn“);參考答案:第 1 題,答中一個得 5 分,答出其它正確答案的,也得 5 分。a) 都
19、基于tcp/ip 協議,都供應了面對連接的tcp sock 和無連接的udp sock。b) 都是一個sock 結構體。c) 都是使用sock 文件句柄進行訪問。d)都具有緩沖機制。40、linux 下的 socket 套接字和 windows 下的 winsock 有什么共同點?請從 c/c+語言開發的角度描述,至少說出兩點共同點。a、在linux 操作系統啟動的時候,自動加載/mnt/test/test 程序。b、當test 特別退出之后,自動重新啟動。c、當test 程序重啟次數超過 100 次,自動復位操作系統。假設你所擁有的資源:41、請編寫一個標準 shell 腳本 testd,實
20、現如下功能:a、目標機器是一臺具有標準shell 的嵌入式計算機,cpu 為 arm7 56mb,內存 16mb,軟件環境基于linux2.6.11 和busybox1.2 構建。b、當前已有 11 個用戶進程在運行,占用了大部分的 cpu 時間和內存,你可使用的內存只有2mb 左右,cpu 時間由系統分派。本題是考查linux 和嵌入式編程功底的,寫出程序來的不少,但是95%以上的人竟無視我假設的資源,不知道在重啟test 程序的時候需要加上一個適當的掩飾時間,以便資源緊急的操作系統有時間回收資源。85%的人不知道寫完testd 之后,要在init 里邊加載這個腳本, 才能實現啟動時自動加載
21、的功能。參考答案:#testd is a daemon script to start an watch the program test #!/bin/sh#load *.so that may needif -r /sbin/ldconfig ; then ldconfigfi#add the libs path that may need export ld_library_path=“/lib“#count is the counter of test started times count=0#main loop while 1 ;do#add execute property fo
22、r /mnt/test/test chmod +x /mnt/test/test#start test/mnt/test/test#the running times counter let count=count+1echo “test running times is $count“ #is test running too many times?if “$count“ -gt 100 ; thenecho “will reboot because of test running too many times“ rebootfi#wait for test stoping.sleep 3
23、done#42. 你平常是怎么用 c 寫嵌入式系統的死循環的?43. 寫一條命令,實現在 dir 以及其子名目下找出全部包含“hello world”字符串的文件a: unsigned short i; unsigned short index = 0; for(i = 0; i <index-1; i+)printf(“an”); b: unsigned short i; unsigned long index = 0; for(i = 0; i <index-1; i+)printf(“bn”); 44. 下面的兩段程序中,循環能否執行?為什么?45. 一個方案跑 linux
24、系統的 arm 系統把 bootloader 燒錄進去后,上電后串口上沒有任何輸出,硬件和軟件各應當去檢查什么?提示: 1.跑 linux 的系統一般都需要外擴dram,一般的系統也經常有nor 或nand flash476 列舉最少 3 種你所知道的嵌入式的體系結構,并請說明什么是arm 體系結構。47. 請簡述下面這段代碼的功能mov r12, #0x0ldr r13, =0x30100000mov r14, #4096loop:ldmiar12!, r0-r11stmiar13!, r0-r11cmpr12, r14blloop48. 嵌入式中常用的文件系統有哪些?說出它們的主要特點和應
25、用場合?49. 某外設寄存器 rgpiobase 的地址是 0x56000000,寄存器的 015 位有效,請寫出給外設寄存器高八位(815 位)設置成 0xc3 的代碼提示:主要說字符設備的編寫過程50. 如何編寫一個 linux 驅動?51. 簡述 linux 驅動中字符設備和塊設備的區分?52. 試總結單片機底層開發與linux 驅動開發有哪些異同?53. 請從網卡、usb host、lcd 驅動器、nand flash、wifi 、音頻芯片中選擇一個或者 2個(可以以具體的芯片為例),對下面的問題做答:1) 假如是外部擴展芯片,請說出你用的芯片的型號2) 畫出上題中你選定相應硬件模塊與
26、cpu 的主要引腳連線3) 編寫上題中你選定相應硬件模塊相應linux 驅動的流程?54、linux 驅動分類linux 設備驅動的分類(1) 字符設備。(2) 塊設備。(3) 網絡設備。字符設備指那些必需以串行挨次依次進行訪問的設備,如觸摸屏、磁帶驅動器、鼠標等。 塊設備可以用任意挨次進行訪問,以塊為單位進行操作,如硬盤、軟驅等。字符設備不經過系統的快速緩沖,而塊設備經過系統的快速緩沖。但是,字符設備和塊設備并沒有明顯的界限,如對于 flash 設備,符合塊設備的特點,但是我們仍舊可以把它作為一個字符設備來訪問。網絡設備在 linux 里做特地的處理。linux 的網絡系統主要是基于bsd
27、unix 的socket 機制。在系統和驅動程序之間定義有特地的數據結構(sk_buff)進行數據的傳遞。系統里支持對發送數據和接收數據的緩存,供應流量把握機制,供應對多協議的支持。55、信號量與自旋鎖自旋鎖自旋鎖是專為防止多處理器并發而引入的一種鎖,它應用于中斷處理等部分。對于單處理器來說,防止中斷處理中的并發可簡潔接受關閉中斷的方式,不需要自旋鎖。自旋鎖最多只能被一個內核任務持有,假如一個內核任務試圖懇求一個已被爭用(已經 被持有)的自旋鎖,那么這個任務就會始終進行忙循環旋轉等待鎖重新可用。要是鎖未被爭用,懇求它的內核任務便能馬上得到它并且連續進行。自旋鎖可以在任何時刻防止多于一個的內核任
28、務同時進入臨界區,因此這種鎖可有效地避開多處理器上并發運行的內核任務競爭共享資源。事實上,自旋鎖的初衷就是:在短期間內進行輕量級的鎖定。一個被爭用的自旋鎖使得懇求它的線程在等待鎖重新可用的期間進行自旋(特殊鋪張處理器時間),所以自旋鎖不應當被持有時間過長。假如需要長時間鎖定的話, 最好使用信號量。但是自旋鎖節省了上下文切換的開銷。自旋鎖的基本形式如下:spin_lock(&mr_lock);/臨界區spin_unlock(&mr_lock);由于自旋鎖在同一時刻只能被最多一個內核任務持有,所以一個時刻只有一個線程允許存在于臨界區中。這點很好地滿足了對稱多處理機器需要的鎖定服務。
29、在單處理器上,自旋鎖僅僅當作一個設置內核搶占的開關。假如內核搶占也不存在,那么自旋鎖會在編譯時被完全剔除出內核。簡潔的說,自旋鎖在內核中主要用來防止多處理器中并發訪問臨界區,防止內核搶占造成的競爭。另外自旋鎖不允許任務睡眠(持有自旋鎖的任務睡眠會造成自死鎖由于睡眠有可能造成持有鎖的內核任務被重新調度,而再次申請自己已持有的鎖),它能夠在中斷上下文中使用。死鎖:假設有一個或多個內核任務和一個或多個資源,每個內核都在等待其中的一個資源, 但全部的資源都已經被占用了。這便會發生全部內核任務都在相互等待,但它們永久不會釋 放已經占有的資源,于是任何內核任務都無法獲得所需要的資源,無法連續運行,這便意味
30、 著死鎖發生了。自死瑣是說自己占有了某個資源,然后自己又申請自己已占有的資源,明顯 不行能再獲得該資源,因此就自縛手腳了。遞歸使用一個自旋鎖就會消滅這種狀況。信號量信號量是一種睡眠鎖。假如有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然后讓其睡眠。這時處理器獲得自由去執行其它代碼。當持有信號量的進程將信號量釋放后,在等待隊列中的一個任務將被喚醒,從而便可以獲得這個信號量。信號量的睡眠特性,使得信號量適用于鎖會被長時間持有的狀況;只能在進程上下文中使用,由于中斷上下文中是不能被調度的;另外當代碼持有信號量時,不行以再持有自旋鎖。信號量基本使用形式為:static decla
31、re_mutex(mr_sem);/聲明互斥信號量if(down_interruptible(&mr_sem)/可被中斷的睡眠,當信號來到,睡眠的任務被喚醒/臨界區up(&mr_sem);信號量和自旋鎖區分從嚴格意義上講,信號量和自旋鎖屬于不同層次的互斥手段,前者的實現有賴于后者。留意以下原則:假如代碼需要睡眠這往往是發生在和用戶空間同步時使用信號量是唯一的選擇。由于不受睡眠的限制,使用信號量通常來說更加簡潔一些。假如需要在自旋鎖和信號量中作選擇,應當取決于鎖被持有的時間長短。抱負狀況是全部的鎖都應當盡可能短的被持有,但是假如鎖的持有時間較長的話,使用信號量是更好的選擇。另外,
32、信號量不同于自旋鎖,它不會關閉內核搶占,所以持有信號量的代碼可以被搶占。這意味者信號量不會對影響調度反應時間帶來負面影響。自旋鎖對信號量需求低開銷加鎖短期鎖定 長期加鎖中斷上下文中加鎖持有鎖是需要睡眠、調度建議的加鎖方法優先使用自旋鎖優先使用自旋鎖優先使用信號量使用自旋鎖使用信號量56、platform 總線設備及總線設備如何編寫57、kmalloc 和 vmalloc 的區分kmalloc()和 vmalloc()介紹kmalloc()用于申請較小的、連續的物理內存1. 以字節為單位進行安排,在<linux/slab.h>中2. void *kmalloc(size_t size
33、, int flags) 安排的內存物理地址上連續,虛擬地址上自然連續3. gfp_mask 標志:什么時候使用哪種標志?如下:-情形相應標志-進程上下文,可以睡眠 gfp_kernel 進程上下文,不行以睡眠 gfp_atomic 中斷處理程序 gfp_atomic軟中斷 gfp_atomic tasklet gfp_atomic用于 dma 的內存,可以睡眠 gfp_dma | gfp_kernel用于 dma 的內存,不行以睡眠 gfp_dma | gfp_atomic-4. void kfree(const void *ptr) 釋放由kmalloc()安排出來的內存塊vmalloc(
34、)用于申請較大的內存空間,虛擬內存是連續的1. 以字節為單位進行安排,在<linux/vmalloc.h>中2. void *vmalloc(unsigned long size) 安排的內存虛擬地址上連續,物理地址不連續3. 一般狀況下,只有硬件設備才需要物理地址連續的內存,由于硬件設備往往存在于mmu 之外,根本不了解虛擬地址;但為了性能上的考慮,內核中一般使用 kmalloc(),而只有在需要獲得大塊內存時才使用vmalloc(),例如當模塊被動態加載到內核當中時,就把模塊裝載到由vmalloc()安排 的內存上。*kmalloc 和 vmalloc 是安排的是內核的內存,m
35、alloc 安排的是用戶的內存*kmalloc 保證安排的內存在物理上是連續的,vmalloc 保證的是在虛擬地址空間上的連續,malloc 不保證任何東西(這點是自己猜想的,不肯定正確)*kmalloc 能安排的大小有限,vmalloc 和 malloc 能安排的大小相對較大*內存只有在要被dma 訪問的時候才需要物理上連續*vmalloc 比 kmalloc 要慢4. void vfree(void *addr),這個函數可以睡眠,因此不能從中斷上下文調用。malloc(), vmalloc()和 kmalloc()區分58、module_init 的級別59、添加驅動靜態加載和動態加載:
36、靜態加載是系統啟動的時候由內核自動加載的,這個要事先將驅動編譯進內核才行;動態加載,也就是模塊加載方式,這種方式下驅動以模塊的形式存放在文件系統中,需要時動態載入內核,這種主要用在調試的時候,比較便利機敏。insmod module.ko60、iic 原理,總線框架,設備編寫方法,i2c_msg61、kernel panic62、usb 總線,usb 傳輸種類,urb 等usb 總線:usb 總線屬于一種輪詢式總線,主機把握端口初始化全部的數據傳輸。每一總線動作最多傳送三個數據包,包括令牌(token)、數據(data)、聯絡(handshake)。依據傳輸前制定好的原則,在每次傳送開頭時,主
37、機送一個描述傳輸動作的種類、方向、usb 設備地址和終端號的usb 數據包,這個數據包通常被稱為令牌包(tokenpacket)。usb 設備從解碼后的數據包的適當位置取出屬于自己的數據。數據傳輸方向不是從主機到設備就是從設備到主機。在傳輸開 始時,由標志包來標志數據的傳輸方向,然后發送端開頭發送包含信息的數據包或表明沒有 數據傳送。接收端也要相應發送一個握手的數據包表明是否傳送成功。發送端和接收端之間 的 usb 數據傳輸,在主機和設備的端口之間,可視為一個通道。usb 中有一個特殊的通道一缺省把握通道,它屬于消息通道,設備一啟動即存在,從而為設備的設置、狀態查詢和輸入把握信息供應一個入口。
38、usb 總線的四種傳輸類型:1、中斷傳輸:由out 事務和in 事務構成,用于鍵盤、鼠標等hid 設備的數據傳輸中 2、批量傳輸:由out 事務和in 事務構成,用于大容量數據傳輸,沒有固定的傳輸速率,也不占用帶寬,當總線忙時,usb 會優先進行其他類型的數據傳輸,而臨時停止批量轉輸。 3、同 步傳輸:由out 事務和in 事務構成,有兩個特殊地方,第一,在同步傳輸的 in 和 out 事務中是沒有返回包階段的;其次,在數據包階段任何的數據包都為data0 4、把握傳輸:最重要的也是最簡單的傳輸,把握傳輸由三個階段構成(初始配置階段、可選數據階段、狀態信 息步驟),每一個階段能夠看成一個的傳輸
39、,也就是說把握傳輸其實是由三個傳輸構成的, 用來于usb 設備初次加接到主機之后,主機通過把握傳輸來交換信息,設備地址和讀取設備的描述符,使得主機識別設備,并安裝相應的驅動程式,這是每一個 usb 研發者都要關懷的問題。urb:usb 懇求塊(usb request block,urb)是 usb 設備驅動中用來描述與usb 設備通信所用的基本載體和核心數據結構,格外類似于網絡設備驅動中的 sk_buff 結構體,是 usb 主機與設備通信的“電波”。63、同步和互斥同步和互斥相交進程之間的關系主要有兩種,同步與互斥。所謂互斥,是指閑逛在不同進程之間的若干程序片斷,當某個進程運行其中一個程序片
40、段時,其它進程就不能運行它們之中的任一程序片段,只能等到該進程運行完這個程序片段后才可以運行。所謂同步,是指閑逛在不同進程之間的若干程序片斷,它們的運行必需嚴格依據規定的某種先后次序來運行,這種先后次序依靠于要完成的特定的任務。明顯,同步是一種更為簡單的互斥,而互斥是一種特殊的同步。也就是說互斥是兩個線 程之間不行以同時運行,他們會相互排斥,必需等待一個線程運行完畢,另一個才能運行, 而同步也是不能同時運行,但他是必需要安照某種次序來運行相應的線程(也是一種互斥)!總結:互斥:是指某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問挨次,即訪問是無序的
41、。同步:是指在互斥的基礎上(大多數狀況),通過其它機制實現訪問者對資源的有序訪問。在大多數狀況下,同步已經實現了互斥,特殊是全部寫入資源的狀況必定是互斥的。少數狀況是指可以允很多個訪問者同時訪問資源答:字符設備:字符設備是個能夠像字節流(類似文件)一樣被訪問的設備,由字符設備驅動程序來實現這種特性。字符設備驅動程序通常至少實現 open,close,read 和 write 系統調用。字符終端、串口、鼠標、鍵盤、攝像頭、聲卡和顯卡等就是典型的字符設備。塊設備:和字符設備類似,塊設備也是通過/dev 名目下的文件系統節點來訪問。塊設備上能夠容納文件系統,如:u 盤,sd 卡,磁盤等。字符設備和塊
42、設備的區分僅僅在于內核內部管理數據的方式,也就是內核及驅動程序之間的軟件接口,而這些不同對用戶來講是透亮的。在內核中,和字符驅動程序相比,塊驅動程序具有完全不同的接口64、 linux 設備中字符設備與塊設備有什么主要的區分?請分別列舉一些實際的設備說出它們是屬于哪一類設備。答:1) 查看驅動模塊中打印信息的命令:dmesg2) 查看字符設備信息可以用lsmod 和modprobe,lsmod 可以查看模塊的依靠關系, modprobe 在加載模塊時會加載其他依靠的模塊。3)顯示當前使用的中斷號cat /proc/interrupt65、查看驅動模塊中打印信息應當使用什么命令?如何查看內核中已
43、有的字符設備的信息? 如何查看正在使用的有哪些中斷號?66、linux 中引入模塊機制有什么好處?答:首先,模塊是預先注冊自己以便服務于將來的某個懇求,然后他的初始化函數就馬上結束。換句話說,模塊初始化函數的任務就是為以后調用函數預先作預備。好處:1) 應用程序在退出時,可以不管資源的釋放或者其他的清除工作,但是模塊的退出函數卻必需認真此撤銷初始化函數所作的一切。2) 該機制有助于縮短模塊的開發周期。即:注冊和卸載都很機敏便利。67、copy_to_user()和 copy_from_user()主要用于實現什么功能?一般用于file_operations 結構的哪些函數里面?答:由于內核空間
44、和用戶空間是不能相互訪問的,假如需要訪問就必需借助內核函數進行數據讀寫。copy_to_user():完成內核空間到用戶空間的復制,copy_from_user():是完成用戶空間到內核空間的復制。一般用于file_operations 結構里的read,write,ioctl 等內存數據交換作用的函數。當然,假如 ioctl 沒有用到內存數據復制,那么就不會用到這兩個函數。68、請簡述主設備號和次設備號的用途。假如執行mknod chartest c 4 64,創建 chartest答:1) 主設備號:主設備號標識設備對應的驅動程序。雖然現代的linux 內核允很多個驅動程序共享主設備號,但
45、我們看待的大多數設備仍舊依據“一個主設備對應一個驅動程序”的原則組織。次設備號:次設備號由內核使用,用于正確確定設備文件所指的設備。依靠于驅動程序的編寫方式,我們可以通過次設備號獲得一個指向內核設備的直接指針,也可將此設備號當作設備本地數組的索引。2) chartest 由驅動程序 4 管理,該文件所指的設備是 64 號設備。(感覺類似于串口終端或者字符設備終端)。設備。請分析 chartest 使用的是那一類設備驅動程序。69、設備驅動程序中如何注冊一個字符設備?分別解釋一下它的幾個參數的含義。答:注冊一個字符設備驅動有兩種方法:1) void cdev_init(struct cdev *
46、cdev, struct file_operations *fops)該注冊函數可以將cdev 結構嵌入到自己的設備特定的結構中。cdev 是一個指向結構體cdev 的指針,而 fops 是指向一個類似于file_operations 結構(可以是 file_operations 結構, 但不限于該結構)的指針.2) int register_chrdev(unsigned int major, const char *namem , struct file)operations *fopen);該注冊函數是早期的注冊函數,major 是設備的主設備號,name 是驅動程序的名稱,而 fops
47、 是默認的file_operations 結構(這是只限于file_operations 結構)。對于register_chrdev 的調用將為給定的主設備號注冊0255 作為次設備號,并為每個設備建立一個對應的默認cdev 結構。答:1)dma:是一種無須 cpu 的參與就可以讓外設與系統內存之間進行雙向數據傳輸的硬件機制,使用dma 可以使系統cpu 從實際的io 數據傳輸過程中擺脫出來,從而大大提高系統的吞吐率。中斷:是指cpu 在執行程序的過程中,消滅了某些突發大事時cpu 必需暫停執行當前的程序, 轉去處理突發大事,處理完畢后cpu 又返回源程序被中斷的位置并連續執行。所以中斷和mda 的區分就是mda 不需cpu 參
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司組織垂釣活動方案
- 公司清明節策劃方案
- 公司每周活動策劃方案
- 公司端午節策劃活動方案
- 公司涉外年會活動方案
- 2025年職業素養與道德考試試卷及答案
- 2025年無線通信與網絡技術考試卷及答案
- 2025年體育營養與健康指導考生能力測試卷及答案
- 2025年生鮮電商管理師資格考試試卷及答案
- 2025年汽車工程與設計基礎知識考試試卷及答案
- 計算機技術前沿總結課件
- 輸電線路風偏計算基本方法
- 馬鞍山市潔源環保有限公司馬鞍山市一般工業固廢填埋場項目重新報批環境影響報告書
- 通信線路投標文件
- 集結號觀后感 集結號觀后感500字(最全)
- (完整版)全國各省份城市明細表
- 《“將軍飲馬”問題》說課稿
- GB/T 6109.20-2008漆包圓繞組線第20部分:200級聚酰胺酰亞胺復合聚酯或聚酯亞胺漆包銅圓線
- 食品營養與健康-18中國居民平衡膳食寶塔
- 《社會主義核心價值觀》優秀課件
- 初中生物會考模擬試題
評論
0/150
提交評論