日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > linux >内容正文

linux

Linux 驱动面试题总结

發(fā)布時(shí)間:2023/12/9 linux 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux 驱动面试题总结 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

1、 Linux設(shè)備中字符設(shè)備與塊設(shè)備有什么主要的區(qū)別?請(qǐng)分別列舉一些實(shí)際的設(shè)備說(shuō)出它們是屬于哪一類設(shè)備。

? ??字符設(shè)備:字符設(shè)備是個(gè)能夠像字節(jié)流(類似文件)一樣被訪問(wèn)的設(shè)備,由字符設(shè)備驅(qū)動(dòng)程序來(lái)實(shí)現(xiàn)這種特性。字符設(shè)備驅(qū)動(dòng)程序通常至少實(shí)現(xiàn)open,close,read和write系統(tǒng)調(diào)用。字符終端、串口、鼠標(biāo)、鍵盤、攝像頭、聲卡和顯卡等就是典型的字符設(shè)備。

? ??塊設(shè)備:和字符設(shè)備類似,塊設(shè)備也是通過(guò)/dev目錄下的文件系統(tǒng)節(jié)點(diǎn)來(lái)訪問(wèn)。塊設(shè)備上能夠容納文件系統(tǒng),如:u盤,SD卡,磁盤等。

? ??字符設(shè)備和塊設(shè)備的區(qū)別僅僅在于內(nèi)核內(nèi)部管理數(shù)據(jù)的方式,也就是內(nèi)核及驅(qū)動(dòng)程序之間的軟件接口,而這些不同對(duì)用戶來(lái)講是透明的。在內(nèi)核中,和字符驅(qū)動(dòng)程序相比,塊驅(qū)動(dòng)程序具有完全不同的接口。


2、查看驅(qū)動(dòng)模塊中打印信息應(yīng)該使用什么命令?如何查看內(nèi)核中已有的字符設(shè)備的信息?如何查看正在使用的有哪些中斷號(hào)?

1) 查看驅(qū)動(dòng)模塊中打印信息的命令:dmesg

2) 查看字符設(shè)備信息可以用lsmod?modprobe,lsmod可以查看模塊的依賴關(guān)系,modprobe在加載模塊時(shí)會(huì)加載其他依賴的模塊。

3) 顯示當(dāng)前使用的中斷號(hào)cat /proc/interrupt


3、Linux中引入模塊機(jī)制有什么好處?

? ? ? ?首先,模塊是預(yù)先注冊(cè)自己以便服務(wù)于將來(lái)的某個(gè)請(qǐng)求,然后他的初始化函數(shù)就立即結(jié)束。換句話說(shuō),模塊初始化函數(shù)的任務(wù)就是為以后調(diào)用函數(shù)預(yù)先作準(zhǔn)備

好處:

1) 應(yīng)用程序在退出時(shí),可以不管資源的釋放或者其他的清除工作,但是模塊的退出函數(shù)卻必須仔細(xì)此撤銷初始化函數(shù)所作的一切。

2) 該機(jī)制有助于縮短模塊的開發(fā)周期。即:注冊(cè)和卸載都很靈活方便。


4、copy_to_user()和copy_from_user()主要用于實(shí)現(xiàn)什么功能?一般用于file_operations結(jié)構(gòu)的哪些函數(shù)里面?

? ? ??由于內(nèi)核空間和用戶空間是不能互相訪問(wèn)的,如果需要訪問(wèn)就必須借助內(nèi)核函數(shù)進(jìn)行數(shù)據(jù)讀寫。copy_to_user():完成內(nèi)核空間到用戶空間的復(fù)制,copy_from_user():是完成用戶空間到內(nèi)核空間的復(fù)制。一般用于file_operations結(jié)構(gòu)里的read,write,ioctl等內(nèi)存數(shù)據(jù)交換作用的函數(shù)。當(dāng)然,如果ioctl沒(méi)有用到內(nèi)存數(shù)據(jù)復(fù)制,那么就不會(huì)用到這兩個(gè)函數(shù)。


5、請(qǐng)簡(jiǎn)述主設(shè)備號(hào)和次設(shè)備號(hào)的用途。如果執(zhí)行mknod chartest c 4 64,創(chuàng)建chartest設(shè)備。請(qǐng)分析chartest使用的是那一類設(shè)備驅(qū)動(dòng)程序。

1)主設(shè)備號(hào):主設(shè)備號(hào)標(biāo)識(shí)設(shè)備對(duì)應(yīng)的驅(qū)動(dòng)程序。雖然現(xiàn)代的linux內(nèi)核允許多個(gè)驅(qū)動(dòng)程序共享主設(shè)備號(hào),但我們看待的大多數(shù)設(shè)備仍然按照“一個(gè)主設(shè)備對(duì)應(yīng)一個(gè)驅(qū)動(dòng)程序”的原則組織。

? ?次設(shè)備號(hào):次設(shè)備號(hào)由內(nèi)核使用,用于正確確定設(shè)備文件所指的設(shè)備。依賴于驅(qū)動(dòng)程序的編寫方式,我們可以通過(guò)次設(shè)備號(hào)獲得一個(gè)指向內(nèi)核設(shè)備的直接指針,也可將此設(shè)備號(hào)當(dāng)作設(shè)備本地?cái)?shù)組的索引。

2)chartest 由驅(qū)動(dòng)程序4管理,該文件所指的設(shè)備是64號(hào)設(shè)備。(感覺(jué)類似于串口終端或者字符設(shè)備終端)。


6、設(shè)備驅(qū)動(dòng)程序中如何注冊(cè)一個(gè)字符設(shè)備?分別解釋一下它的幾個(gè)參數(shù)的含義。

注冊(cè)一個(gè)字符設(shè)備驅(qū)動(dòng)有兩種方法:

1) void cdev_init(struct cdev *cdev, struct file_operations *fops)

該注冊(cè)函數(shù)可以將cdev結(jié)構(gòu)嵌入到自己的設(shè)備特定的結(jié)構(gòu)中。cdev是一個(gè)指向結(jié)構(gòu)體cdev的指針,而fops是指向一個(gè)類似于file_operations結(jié)構(gòu)(可以是file_operations結(jié)構(gòu),但不限于該結(jié)構(gòu))的指針.

2) int register_chrdev(unsigned int major, const char *namem , struct file)operations *fopen);

該注冊(cè)函數(shù)是早期的注冊(cè)函數(shù),major是設(shè)備的主設(shè)備號(hào),name是驅(qū)動(dòng)程序的名稱,而fops是默認(rèn)的file_operations結(jié)構(gòu)(這是只限于file_operations結(jié)構(gòu))。對(duì)于register_chrdev的調(diào)用將為給定的主設(shè)備號(hào)注冊(cè)0-255作為次設(shè)備號(hào),并為每個(gè)設(shè)備建立一個(gè)對(duì)應(yīng)的默認(rèn)cdev結(jié)構(gòu)


7、請(qǐng)簡(jiǎn)述中斷于DMA的區(qū)別。Linux設(shè)備驅(qū)動(dòng)程序中,使用哪個(gè)函數(shù)注冊(cè)和注銷中斷處理程序?

1)DMA:是一種無(wú)須CPU的參與就可以讓外設(shè)與系統(tǒng)內(nèi)存之間進(jìn)行雙向數(shù)據(jù)傳輸?shù)挠布C(jī)制,使用DMA可以使系統(tǒng)CPU從實(shí)際的I/O數(shù)據(jù)傳輸過(guò)程中擺脫出來(lái),從而大大提高系統(tǒng)的吞吐率.

? ? ??中斷:是指CPU在執(zhí)行程序的過(guò)程中,出現(xiàn)了某些突發(fā)事件時(shí)CPU必須暫停執(zhí)行當(dāng)前的程序,轉(zhuǎn)去處理突發(fā)事件,處理完畢后CPU又返回源程序被中斷的位置并繼續(xù)執(zhí)行。

? ? ?所以中斷和DMA的區(qū)別就是DMA不需CPU參與而中斷是需要CPU參與的


2)中斷注冊(cè)函數(shù)和中斷注銷函數(shù)

注冊(cè)中斷:

int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigned long flags, const char *dev_name, void *dev_id);

參數(shù)意義依次是:中斷號(hào),中斷處理函數(shù),中斷管理有關(guān)的掩碼,中斷請(qǐng)求設(shè)備名,中斷信號(hào)線。

過(guò)程是:dev_name設(shè)備請(qǐng)求中斷->cpu分配中斷號(hào)->設(shè)置中斷管理的掩碼->分配中斷信號(hào)線->處理中斷函數(shù)->完成之后再根據(jù)設(shè)置情況返回原處理程序處繼續(xù)處理程序

注銷中斷

Void free_irq(unsigned int irq, void *dev_id);

釋放中斷和中斷信號(hào)線


8、中斷和輪詢哪個(gè)效率高?怎樣決定是采用中斷方式還是采用輪詢方式去實(shí)現(xiàn)驅(qū)動(dòng)?

? ? ?中斷是CPU處于被動(dòng)狀態(tài)下來(lái)接受設(shè)備的信號(hào),而輪詢是CPU主動(dòng)去查詢?cè)撛O(shè)備是否有請(qǐng)求。凡事都是兩面性,所以,看效率不能簡(jiǎn)單的說(shuō)那個(gè)效率高。如果是請(qǐng)求設(shè)備是一個(gè)頻繁請(qǐng)求cpu的設(shè)備,或者有大量數(shù)據(jù)請(qǐng)求的網(wǎng)絡(luò)設(shè)備,那么輪詢的效率是比中斷高。如果是一般設(shè)備,并且該設(shè)備請(qǐng)求cpu的頻率比較底,則用中斷效率要高一些。主要是看請(qǐng)求頻率


9、簡(jiǎn)單描述在cs8900的驅(qū)動(dòng)設(shè)計(jì)中, 發(fā)送數(shù)據(jù)frame和接收數(shù)據(jù)frame的過(guò)程。

1)發(fā)送流程如下:

(1) 網(wǎng)絡(luò)設(shè)備驅(qū)動(dòng)程序從上層協(xié)議傳遞過(guò)來(lái)的sk_buff參數(shù)獲得數(shù)據(jù)包的有效數(shù)據(jù)和長(zhǎng)度,將有效數(shù)據(jù)放入臨時(shí)緩沖區(qū)。
(2) 對(duì)于以太網(wǎng),如果有效數(shù)據(jù)的長(zhǎng)度小于以太網(wǎng)沖突檢測(cè)所要求的數(shù)據(jù)楨的最小長(zhǎng)度,則給臨時(shí)緩沖區(qū)的末尾填充0
(3) 設(shè)置硬件寄存器,驅(qū)使網(wǎng)絡(luò)設(shè)備進(jìn)行數(shù)據(jù)發(fā)送操作。

2)接收流程

? ?網(wǎng)絡(luò)設(shè)備接收數(shù)據(jù)主要是由中斷引發(fā)設(shè)備的中斷處理函數(shù),中斷處理函數(shù)判斷中斷類型,如果為接收中斷,則讀取接受到的數(shù)據(jù),分配sk_buff數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)緩沖區(qū),將接收到的數(shù)據(jù)復(fù)制到數(shù)據(jù)緩沖區(qū),并調(diào)用netif_rx()函數(shù)將sk_buff傳遞給上層協(xié)議。


10、Cs8900.c的驅(qū)動(dòng)中,發(fā)送數(shù)據(jù)frame的過(guò)程為什么需要關(guān)中斷?接收數(shù)據(jù)frame的過(guò)程為什么不需要關(guān)中斷?

? ? ? ?在發(fā)送過(guò)程中是不能被打斷的,在發(fā)送的過(guò)程中,不關(guān)中斷,這時(shí)候如果有一個(gè)中斷到來(lái),那么cpu有可能會(huì)去相應(yīng)該中斷,如果該中斷需要改寫的數(shù)據(jù)是發(fā)送數(shù)據(jù)的緩沖區(qū),那么緩沖區(qū)將被改寫,這樣即使cpu相應(yīng)完畢該中斷,再發(fā)送數(shù)據(jù),接收方也不認(rèn)識(shí)該數(shù)據(jù)不能接收。

? ? ??在接收數(shù)據(jù)的時(shí)候,需要打開中斷,是因?yàn)橐皶r(shí)的相應(yīng)接收到的數(shù)據(jù)。如果關(guān)閉該中斷,那么接收方有可能因?yàn)橄鄳?yīng)優(yōu)先級(jí)高的中斷而接收不到該數(shù)據(jù)。


11、簡(jiǎn)單描述skbuff這個(gè)數(shù)據(jù)結(jié)構(gòu)在網(wǎng)絡(luò)結(jié)構(gòu)中所起到的作用,為什么需要一個(gè)skbuff,它的分配和釋放主要都在什么部位

? ? ? ? sk_buff結(jié)構(gòu)非常重要,它的含義為“套接字緩沖區(qū)”,用于在linux網(wǎng)絡(luò)子系統(tǒng)中的蓋層之間傳遞數(shù)據(jù)。

當(dāng)發(fā)送數(shù)據(jù)包時(shí),linux內(nèi)核的網(wǎng)絡(luò)處理模塊必須建立一個(gè)包含要傳輸?shù)臄?shù)據(jù)包的sk_buff,然后將sk_buff遞交給下層,各層在sk_buff中添加不同的協(xié)議頭直至交給網(wǎng)絡(luò)設(shè)備發(fā)送。同樣的,當(dāng)網(wǎng)絡(luò)設(shè)備從網(wǎng)絡(luò)媒介上接受到數(shù)據(jù)包后,它必須將接受到的數(shù)據(jù)轉(zhuǎn)換為sk_buff數(shù)據(jù)結(jié)構(gòu)并傳遞給上層,蓋層不拋去相應(yīng)的協(xié)議頭直至交給用戶。分配sk_buff在接受一開始就應(yīng)該分配,在發(fā)送完畢數(shù)據(jù)之后可以釋放sk_buff


12、字符型驅(qū)動(dòng)設(shè)備怎么創(chuàng)建設(shè)備文件

? ? ? ??手動(dòng)創(chuàng)建:mknod /dev/led c 250 0?? ?其中dev/led 為設(shè)備節(jié)點(diǎn) c 代表字符設(shè)備 250代表主設(shè)備號(hào) 0代表次設(shè)備號(hào)

? ? ? ?還有UDEV/MDEV自動(dòng)創(chuàng)建設(shè)備文件的方式,UDEV/MDEV是運(yùn)行在用戶態(tài)的程序,可以動(dòng)態(tài)管理設(shè)備文件,包括創(chuàng)建和刪除設(shè)備文件,運(yùn)行在用戶態(tài)意味著系統(tǒng)要運(yùn)行之后。在 ?/etc/init.d/rcS 腳本文件中會(huì)執(zhí)行?mdev -s?自動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)


13、寫一個(gè)中斷服務(wù)需要注意哪些?如果中斷產(chǎn)生之后要做比較多的事情你是怎么做的?

? ? ??中斷處理例程應(yīng)該盡量短,把能放在后半段(tasklet,等待隊(duì)列等)的任務(wù)盡量放在后半段。

? ? ?寫一個(gè)中斷服務(wù)程序要注意快進(jìn)快出,在中斷服務(wù)程序里面盡量快速采集信息,包括硬件信息,然后退出中斷,要做其它事情可以使用工作隊(duì)列或者tasklet方式。也就是中斷上半部和下半部。

第二:中斷服務(wù)程序中不能有阻塞操作。應(yīng)為中斷期間是完全占用CPU的(即不存在內(nèi)核調(diào)度),中斷被阻塞住,其他進(jìn)程將無(wú)法操作;

第三:中斷服務(wù)程序注意返回值,要用操作系統(tǒng)定義的宏做為返回值,而不是自己定義的OK,FAIL之類的。


14、自旋鎖和信號(hào)量在互斥使用時(shí)需要注意哪些?在中斷服務(wù)程序里面的互斥是使用自旋鎖還是信號(hào)量?還是兩者都能用?為什么?

? ? ??使用自旋鎖的進(jìn)程不能睡眠,使用信號(hào)量的進(jìn)程可以睡眠

? ? ? 中斷服務(wù)例程中的互斥使用的是自旋鎖,原因是在中斷處理例程中,硬中斷是關(guān)閉的;但是要注意這樣會(huì)丟失可能到來(lái)的中斷。


15、原子操作你怎么理解?為了實(shí)現(xiàn)一個(gè)互斥,自己定義一個(gè)變量作為標(biāo)記來(lái)作為一個(gè)資源只有一個(gè)使用者行不行?

? ? ? ? 原子操作指的是無(wú)法被打斷的操作。

? ? ? ? 第二句話的意思是:

? 定義一個(gè)變量,比如 int flag =0;

? ?if(flag == 0)
? {
? ? ? ?flag = 1;


? ? ? ?操作臨界區(qū);
? ? ? flag = 0;
? ?}


16、insmod 一個(gè)驅(qū)動(dòng)模塊,會(huì)執(zhí)行模塊中的哪個(gè)函數(shù)?rmmod呢?這兩個(gè)函數(shù)在設(shè)計(jì)上要注意哪些?遇到過(guò)卸載驅(qū)動(dòng)出現(xiàn)異常沒(méi)?是什么問(wèn)題引起的?

? ? ? ? insmod調(diào)用init函數(shù),rmmod調(diào)用exit函數(shù)。這兩個(gè)函數(shù)在設(shè)計(jì)時(shí)要注意什么?卸載模塊時(shí)曾出現(xiàn)卸載失敗的情形,原因是存在進(jìn)程正在使用模塊,檢查代碼后發(fā)現(xiàn)產(chǎn)生了死鎖的問(wèn)題。

? ? ??要注意在init函數(shù)中申請(qǐng)的資源在exit函數(shù)中要釋放,包括存儲(chǔ),ioremap,定時(shí)器,工作隊(duì)列等等。也就是一個(gè)模塊注冊(cè)進(jìn)內(nèi)核,退出內(nèi)核時(shí)要清理所帶來(lái)的影響,帶走一切不留下一點(diǎn)痕跡。


17、驅(qū)動(dòng)中操作物理絕對(duì)地址為什么要先ioremap?

? ? ? ? 因?yàn)閮?nèi)核沒(méi)有辦法直接訪問(wèn)物理內(nèi)存地址,必須先通過(guò)ioremap獲得對(duì)應(yīng)的虛擬地址


18、設(shè)備驅(qū)動(dòng)模型三個(gè)重要成員是?platfoem總線的匹配規(guī)則是?在具體應(yīng)用上要不要先注冊(cè)驅(qū)動(dòng)再注冊(cè)設(shè)備?有先后順序沒(méi)?

? ? ? ? ?設(shè)備驅(qū)動(dòng)模型三個(gè)重要成員是 總線、設(shè)備、驅(qū)動(dòng);

? ? ? ???platfoem總線的匹配規(guī)則是:要匹配的設(shè)備和驅(qū)動(dòng)都要注冊(cè);


19、linux內(nèi)核里面,內(nèi)存申請(qǐng)有哪幾個(gè)函數(shù),各自的區(qū)別?

? ? ? ? ?Kmalloc() ? __get_free_page() ?mempool_create() ?


20、 IRQ和FIQ有什么區(qū)別,在CPU里面是是怎么做的


21

int *a;
char *b;

a 和 b本身是什么類型?

a、b里面本身存放的只是一個(gè)地址,難道是這兩個(gè)地址有不同么?


22、 中斷的上半部分和下半部分的問(wèn)題:講下分成上半部分和下半部分的原因,為何要分?講下如何實(shí)現(xiàn)?

? ? ? ? ?上半部分執(zhí)行與硬件相關(guān)的處理要求快, 而有些驅(qū)動(dòng)在中斷處理程序中又需要完成大量工作,這構(gòu)成矛盾,所以Linux有所謂的bottom half機(jī)制,中斷處理程序中所有不要求立即完成的,在開中斷的環(huán)境下,由底半程序隨后完成.

? ? ? ? ?Linux的底半處理實(shí)際上是建立在內(nèi)核的軟中斷機(jī)制上的.如何實(shí)現(xiàn)該機(jī)制?

兩種方式

【tasklet ?工作隊(duì)列】

1.定義和初始化

struct tasklet_struct tlet;

tasklet_init(&tlet, jit_tasklet_fn, (unsigned long) data);
參數(shù)
第一個(gè):定義的tasklet變量
第二個(gè):函數(shù)
第三個(gè):數(shù)據(jù) ?傳遞給回調(diào)函數(shù)的數(shù)據(jù)

2. 定義函數(shù)

void jit_tasklet_fn(unsigned long arg)
{
//中斷的底半部 ?執(zhí)行該函數(shù)的時(shí)候,已經(jīng)出中斷了
printk("in jit_tasklet_fn ?jiffies=%ld\n",jiffies);
}

3. 在需要調(diào)度的地方調(diào)用以下函數(shù)

tasklet_schedule(&tlet);

? ?一般在中斷函數(shù)當(dāng)中調(diào)度在不晚于下一個(gè)時(shí)鐘滴答之前執(zhí)行


【tasklet 和定期器的區(qū)別】

1. 執(zhí)行時(shí)間

定時(shí)器的執(zhí)行:時(shí)間是確定的
tasklet ? ? ? :不確定的

2.tasklet 執(zhí)行耗時(shí)的操作的


23、內(nèi)核函數(shù)mmap的實(shí)現(xiàn)原理,機(jī)制?

? ? ? ? ?mmap函數(shù)實(shí)現(xiàn)把一個(gè)文件映射到一個(gè)內(nèi)存區(qū)域,從而我們可以像讀寫內(nèi)存一樣讀寫文件,他比單純調(diào)用read/write也要快上許多。在某些時(shí)候我們可以把內(nèi)存的內(nèi)容拷貝到一個(gè)文件中實(shí)現(xiàn)內(nèi)存?zhèn)浞?#xff0c;當(dāng)然,也可以把文件的內(nèi)容映射到內(nèi)存來(lái)恢復(fù)某些服務(wù)。另外,mmap實(shí)現(xiàn)共享內(nèi)存也是其主要應(yīng)用之一,mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過(guò)映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存


24、驅(qū)動(dòng)里面為什么要有并發(fā)、互斥的控制?如何實(shí)現(xiàn)?講個(gè)例子?


25、spinlock自旋鎖是如何實(shí)現(xiàn)的?

? ? ? ?自旋鎖在同一時(shí)刻只能被最多一個(gè)內(nèi)核任務(wù)持有,所以一個(gè)時(shí)刻只有一個(gè)線程允許存在于臨界區(qū)中。這點(diǎn)可以應(yīng)用在多處理機(jī)器、或運(yùn)行在單處理器上的搶占式內(nèi)核中需要的鎖定服務(wù)。



26、信號(hào)量簡(jiǎn)介

? ? ? ? 這里也介紹下信號(hào)量的概念,因?yàn)樗挠梅ê妥孕i有相似的地方。

? ? ? ?Linux中的信號(hào)量是一種睡眠鎖。如果有一個(gè)任務(wù)試圖獲得一個(gè)已被持有的信號(hào)量時(shí),信號(hào)量會(huì)將其推入等待隊(duì)列,然后讓其睡眠。這時(shí)處理器獲得自由去執(zhí)行其它代碼。當(dāng)持有信號(hào)量的進(jìn)程將信號(hào)量釋放后,在等待隊(duì)列中的一個(gè)任務(wù)將被喚醒,從而便可以獲得這個(gè)信號(hào)量。


27、 任務(wù)調(diào)度的機(jī)制?


28、什么是GPIO?

? ? ? ? ?general purpose input/output ?

? ? ? ? ?GPIO是相對(duì)于芯片本身而言的,如某個(gè)管腳是芯片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當(dāng)然某個(gè)腳具有復(fù)用的功能,即可做GPIO也可做其他用途。?也就是說(shuō)你可以把這些引腳拿來(lái)用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來(lái)控制它的亮滅,也可以用一根(一些)引腳連到一個(gè)傳感器上以獲得該傳感器的狀態(tài),這給cpu提供了一個(gè)方便的控制周邊設(shè)備的途經(jīng)。如果沒(méi)有足夠多的gpio管腳,在控制一些外圍設(shè)備時(shí)就會(huì)力有不逮,這時(shí)可采取的方案是使用CPLD來(lái)幫助管理。

29、在Linux C中,ls這個(gè)命令是怎么被執(zhí)行的?

? ? ? ??使用fork創(chuàng)建一個(gè)進(jìn)程或exec函數(shù)族覆蓋原進(jìn)程。


30、LINUX下的Socket套接字和Windows下的WinSock有什么共同點(diǎn)?請(qǐng)從C/C++語(yǔ)言

a)都基于TCP/IP協(xié)議,都提供了面向連接的TCP SOCK和無(wú)連接的UDP SOCK。

b)都是一個(gè)sock結(jié)構(gòu)體。

c)都是使用sock文件句柄進(jìn)行訪問(wèn)。

d)都具有緩沖機(jī)制。

? ? ? ? ? ? ? ??
31、一個(gè)計(jì)劃跑LINUX系統(tǒng)的ARM系統(tǒng)把bootloader燒錄進(jìn)去后,上電后串口上沒(méi)有任何輸出,硬件和軟件各應(yīng)該去檢查什么? ?
?

?提示: 1.跑LINUX的系統(tǒng)一般都需要外擴(kuò)DRAM,一般的系統(tǒng)也經(jīng)常有NOR或NAND FLASH ? ? ? ? ?

? ? ? ? bootloader一般是由匯編和C編寫的裸奔程序[5分]?

創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)

總結(jié)

以上是生活随笔為你收集整理的Linux 驱动面试题总结的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。