乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      驅(qū)動(dòng)面試、筆試常見問題

       印度阿三17 2018-09-27

      以下內(nèi)容源于網(wǎng)絡(luò)資料的整理學(xué)習(xí)。

      參考博客

      https://blog.csdn.net/Mingrenjiuwei/article/details/52878012(推薦)

      https://blog.csdn.net/shxcodewarrior/article/details/20122321

      https://blog.csdn.net/tainjau/article/details/79430905

      https://blog.csdn.net/Cowena/article/details/48706297

      ?

      1、linux中內(nèi)核空間、用戶空間的區(qū)別?

      Linux系統(tǒng)采取兩級保護(hù)機(jī)制,對應(yīng)兩種不同的操作權(quán)限,內(nèi)核空間權(quán)限高于用戶空間權(quán)限。

      內(nèi)核空間和用戶空間都有屬于自己的虛擬空間。在32位系統(tǒng)中,cpu最高有32位尋址范圍,即對應(yīng)4G空間,內(nèi)核空間被劃分在高1G虛擬空間,用戶空間在低3G。

      普通應(yīng)用程序運(yùn)行在用戶空間,執(zhí)行一些貼近用戶的低權(quán)限操作;系統(tǒng)內(nèi)核程序、操作硬件的驅(qū)動(dòng)程序等一些要求高級權(quán)限的程序運(yùn)行在內(nèi)核空間。

      用戶空間程序不能直接訪問內(nèi)核空間的數(shù)據(jù),內(nèi)核空間程序也一樣不能直接訪問屬于用戶進(jìn)程空間的數(shù)據(jù),用戶空間和內(nèi)核空間之間的通信必須通過一些特定的方法。

      2、用戶空間與內(nèi)核通信方式

      常用的也就這幾種:

      (1)系統(tǒng)調(diào)用。用戶空間進(jìn)程通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,訪問指定的內(nèi)核空間數(shù)據(jù)。

      (2)驅(qū)動(dòng)程序。用戶空間進(jìn)程可以使用封裝后的系統(tǒng)調(diào)用接口訪問驅(qū)動(dòng)設(shè)備節(jié)點(diǎn),以和運(yùn)行在內(nèi)核空間的驅(qū)動(dòng)程序通信。

      (3)proc文件系統(tǒng)。proc文件系統(tǒng)的主要功能是在內(nèi)核空間提供一套機(jī)制為用戶空間方便的查詢,查看,設(shè)置內(nèi)核信息,多用于查詢類操作。

      (4)共享內(nèi)存mmap。在代碼中調(diào)用接口,實(shí)現(xiàn)內(nèi)核空間與用戶空間的地址映射,在實(shí)時(shí)性要求很高的項(xiàng)目中為首選,省去拷貝數(shù)據(jù)的時(shí)間等資源,但缺點(diǎn)是不好控制。

      (5)copy_to_user()、copy_from_user(),是在驅(qū)動(dòng)程序中調(diào)用接口,實(shí)現(xiàn)用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝操作,應(yīng)用于實(shí)時(shí)性要求不高的項(xiàng)目中。

      3、linux中內(nèi)存劃分及如何使用?虛擬地址及物理地址的概念及彼此之間的轉(zhuǎn)化?高端內(nèi)存概念?

      (1)內(nèi)存劃分

      以32位機(jī)器為例,cpu最大尋址范圍為4G,Linux系統(tǒng)將4G虛擬地址空間劃分為高1G,低3G。

      低3G虛擬空間屬于用戶空間,都是經(jīng)過映射的線性地址,供用戶進(jìn)程空間使用。

      高1G并非都是像用戶空間一樣都是映射過的線性空間,Linux系統(tǒng)將高1G劃分為三部分:DMA區(qū),常規(guī)區(qū),高端內(nèi)存,其中0-896都是映射過的線性空間,剩下的896-1024即高端內(nèi)存,這段高端內(nèi)存都是未經(jīng)過映射的虛擬地址,Linux系統(tǒng)利用這些有限的虛擬地址,臨時(shí)動(dòng)態(tài)的映射到大于896M的物理空間地址,實(shí)現(xiàn)了利用有限的虛擬地址訪問到物理內(nèi)存的所有地址。

      (2)內(nèi)存申請函數(shù)的對比

      malloc用于用戶空間進(jìn)程申請內(nèi)存空間,kmallc和vmalloc在內(nèi)核空間使用。

      kmalloc申請到的內(nèi)存空間,是線性連續(xù)的,可以用于dma。

      vmalloc申請的內(nèi)存是邏輯連續(xù)的,但是物理地址不連續(xù),常用與申請大的內(nèi)存,請注意vmalloc可能會(huì)睡眠,在中斷、阻塞的環(huán)境下不能使用。

      (3)內(nèi)存映射方式

      虛擬地址到物理地址的轉(zhuǎn)化,用戶空間和內(nèi)和空間采用不同的映射機(jī)制。用戶空間的地址映射經(jīng)過mmu(內(nèi)存管理單元)管理。而內(nèi)核空間的虛擬地址到物理地址的映射是一一對應(yīng)的,例如虛擬空間地址0xc0000004,對應(yīng)的物理地址空間地址為:0xc0000004 - 0xc0000000 = 0x04,以此類推。(待求證)。

      .4、inux中中斷的實(shí)現(xiàn)機(jī)制,tasklet與workqueue的區(qū)別及底層實(shí)現(xiàn)區(qū)別?為什么要區(qū)分上半部和下半部?

      https://blog.csdn.net/oqqHuTu12345678/article/details/78860065

      Linux中斷分為硬件中斷和內(nèi)部中斷(異常),調(diào)用過程:外部中斷產(chǎn)生->發(fā)送中斷信號(hào)到中斷控制器->通知處理器產(chǎn)生中斷的中斷號(hào),讓其進(jìn)一步處理。

      為了能夠在中斷處理過程中被新的中斷打斷,將中斷處理程序一分為二,上半部登記新的中斷,快速處理簡單的任務(wù),剩余復(fù)雜耗時(shí)的處理留給下半部處理。下半部處理過程中可以被中斷,上半部處理時(shí)不可被中斷。

      tasklet和workqueue,兩者都是中斷下半部的一種實(shí)現(xiàn)方法。區(qū)別在于tasklet屬于中斷上下文,支持smp、不可睡眠和阻塞;workqueue基于線程的封裝,屬于進(jìn)程上下文,因此支持睡眠、阻塞。

      5、Linux的同步機(jī)制

      常見的同步接口,包括進(jìn)程同步,信號(hào)量,自旋鎖,互斥鎖,條件變量,讀寫鎖。

      個(gè)人理解:多進(jìn)程并發(fā)一般考慮使用信號(hào)量機(jī)制,在線程并發(fā)時(shí)多采用互斥鎖,條件變量。

      個(gè)人覺得條件變量在某些角度就是線程版的信號(hào)量實(shí)現(xiàn),因?yàn)閮烧叨际窃诳紤]持有鎖時(shí)間較長情況下使用。

      互斥鎖,自旋鎖一般都是用在持有鎖時(shí)間不會(huì)很長的情況下,在自旋鎖有使用意義的前提下,如果持鎖時(shí)間會(huì)非常短則自旋鎖效率高于互斥鎖(否則應(yīng)該使用互斥鎖,因?yàn)榛コ怄i會(huì)持續(xù)占有cpu資源,不宜過長,而互斥鎖會(huì)導(dǎo)致?lián)尣坏芥i的線程睡眠,進(jìn)入等待隊(duì)列)。

      互斥鎖和自旋鎖都可以用在進(jìn)程上下文,而在中斷上下文只能使用自旋鎖,因?yàn)榛コ怄i會(huì)睡眠。

      7、/dev/下面的設(shè)備文件是怎么創(chuàng)建出來的?

      有三種方式:devfs機(jī)制、udev機(jī)制、手動(dòng)創(chuàng)建設(shè)備節(jié)點(diǎn)。

      談?wù)剛€(gè)人見解:

      devfs機(jī)制,從來沒用過,應(yīng)該是2.6以前的內(nèi)核使用的;

      udev機(jī)制,其實(shí)就是現(xiàn)在常用的device_create()、class_create()這一套接口,所謂udev是上層用戶空間程序,是基于驅(qū)動(dòng)中創(chuàng)建使用了這兩個(gè)接口而起作用的,但是udev在日常開發(fā)中幾乎接觸不到,我們只需在驅(qū)動(dòng)中調(diào)用創(chuàng)建節(jié)點(diǎn)的這兩個(gè)API就ok了,剩下的工作就交給udev去做。

      mknod ,新手最常用的一種創(chuàng)建設(shè)備節(jié)點(diǎn)方法,但并非入門后就再?zèng)]有用途。在某些情境下,或許有人不想使用udev機(jī)制,于是把節(jié)點(diǎn)創(chuàng)建工作寫在腳本里,這樣也是無可厚非的。

      8、原子操作該怎么理解?

      原子操作,就是開始執(zhí)行到執(zhí)行結(jié)束期間不會(huì)被打斷的操作單元。

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

      分別會(huì)執(zhí)行module_init()、module_exit()指定的init函數(shù)和exit函數(shù)。

      要注意的就是盡量使在init函數(shù)中出現(xiàn)的資源申請及使用有對應(yīng)的釋放操作在exit中,init申請,eixt釋放。

      卸載出現(xiàn)的異常?那很稀松平常了,大多數(shù)都是資源使用完沒釋放,但是模塊卻卸載了。

      10、在驅(qū)動(dòng)調(diào)試過程中遇到過oops沒?你是怎么處理的?

      遇到過,這種類似的段錯(cuò)誤其實(shí)最好處理,因?yàn)樗衏all trace,根據(jù)堆棧信息去代碼里面查看就行了。

      如果代碼中看不到明顯低級錯(cuò)誤,就需要printk聯(lián)機(jī)調(diào)試,然而這種很少。

      11、ioctl和unlock_ioctl有什么區(qū)別?

      ioctl是老的內(nèi)核版本中的驅(qū)動(dòng)API,unlock_ioctl是當(dāng)下常用的驅(qū)動(dòng)API。

      區(qū)別在于ioctl調(diào)用前后,使用了大內(nèi)核鎖,而unlock_ioctl顧名思義就是沒加大內(nèi)核鎖的新接口,改變的只是驅(qū)動(dòng)調(diào)的方法,用戶應(yīng)用程序調(diào)用的接口不變。

      大內(nèi)核鎖是Linux hacker在應(yīng)付多處理器初期提出的一種鎖,目的在于當(dāng)一個(gè)處理核心在運(yùn)行內(nèi)核時(shí),加上大內(nèi)核鎖,不讓其他cpu核心同時(shí)運(yùn)行內(nèi)核程序,顯然這樣是有用的,然而這樣大大降低了多處理器的存在意義,于是跟隨時(shí)代更迭,大內(nèi)核鎖被一步一步的剔除,ioctl接口的升級就是典范!我覺得這樣的問題太沒有意義了,對開發(fā)有多大用處?

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

      ioremp是內(nèi)核中用來將外設(shè)寄存器物理地址映射到主存上去的接口,即將io地址空間映射到虛擬地址空間上去,便于操作。為什么非要映射呢,因?yàn)楸Wo(hù)模式下的cpu只認(rèn)虛擬地址,不認(rèn)物理地址,給它物理地址它并不幫你做事,所以你要操作外設(shè)上的寄存器必須先映射到虛擬內(nèi)存空間,拿著虛擬地址去跟cpu對接,從而操作寄存器。

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

      (1)總線,設(shè)備,驅(qū)動(dòng)。

      (2)匹配規(guī)則:當(dāng)有一個(gè)新的設(shè)備掛起時(shí),總線被喚醒,match函數(shù)被調(diào)用,用device名字去跟本總線下的所有驅(qū)動(dòng)名字去比較,相反就是用驅(qū)動(dòng)的名字去device鏈表中和所有device的名字比較。如果匹配上,才會(huì)調(diào)用驅(qū)動(dòng)中的probe函數(shù),否則不調(diào)用。

      (3)至于先后順序,鑒于個(gè)人理解,不會(huì)有影響,不管誰先誰后,bus都會(huì)完成匹配工作。

      (4)談?wù)剬inux設(shè)備驅(qū)動(dòng)模型的認(rèn)識(shí):設(shè)備驅(qū)動(dòng)模型的出現(xiàn)主要有三個(gè)好處

      設(shè)備與驅(qū)動(dòng)分離,驅(qū)動(dòng)可移植性增強(qiáng);

      設(shè)備驅(qū)動(dòng)抽象結(jié)構(gòu)以總線結(jié)構(gòu)表示,看起來更加清晰明,誰是屬于哪一條bus的;

      最后,設(shè)備與驅(qū)動(dòng)分離,很好的奠定了熱插拔機(jī)制。

      12、linux中RCU原理?

      rcu是2.6出現(xiàn)的一種讀寫鎖,可以說是老的讀寫鎖的升級版,主要用在鏈表這種數(shù)據(jù)結(jié)構(gòu)上,經(jīng)典使用場景是多讀者少寫者的情況,rcu允許多個(gè)讀者一個(gè)寫者共同操作數(shù)據(jù)而不必加鎖,這是經(jīng)典用法,若出現(xiàn)多個(gè)寫者時(shí),寫者與寫者之間就得自己手動(dòng)同步。當(dāng)要?jiǎng)h除一個(gè)節(jié)點(diǎn)時(shí),刪除后并不會(huì)馬上釋放節(jié)點(diǎn),而是會(huì)等待在刪除動(dòng)作之前已經(jīng)開始讀該節(jié)點(diǎn)的讀者都完成讀操作之后才會(huì)釋放此節(jié)點(diǎn),這段時(shí)間被稱為寬限期。

      13、談?wù)凩inux軟中斷?

      Linux系統(tǒng)中的軟中斷,是專為一些不是特別要緊的耗時(shí)任務(wù)而產(chǎn)生的一種機(jī)制,多數(shù)用在中斷處理過程中,典型應(yīng)用就是用于中斷下半部,tasklet機(jī)制就是基于軟中斷的典型下半部應(yīng)用。

      軟中斷就是結(jié)合任務(wù)調(diào)度、延遲處理等讓守護(hù)進(jìn)程去處理一些不是特別緊急又耗時(shí)的任務(wù)。

      14、linux系統(tǒng)實(shí)現(xiàn)原子操作有哪些方法?

      答:提到原子操作,我首先想到的是針對整型的原子操作,atomic_t類型,這里面有一整套針對整型的原子操作API可以調(diào)用。既然整型能原子操作,那其他也應(yīng)該可以吧,結(jié)合原子操作的定義,要想對其他類型結(jié)構(gòu)實(shí)現(xiàn)原子操作,那就加鎖咯,將需要原子操作的部分放在臨界區(qū)。

      15、linux中系統(tǒng)調(diào)用過程?

      系統(tǒng)調(diào)用,比如open()函數(shù),它并不是真正的系統(tǒng)調(diào)用實(shí)現(xiàn)函數(shù),其實(shí)它只是一個(gè)c庫函數(shù)。

      內(nèi)部實(shí)現(xiàn)做了兩件事,先把系統(tǒng)調(diào)用號(hào)傳遞給內(nèi)核,最后拉起一次軟中斷,自此cpu進(jìn)入內(nèi)核態(tài)運(yùn)行。

      內(nèi)核在軟中斷向量表中找出對應(yīng)的中斷類型,根據(jù)中斷類型找到對應(yīng)的軟中斷執(zhí)行函數(shù),然后執(zhí)行函數(shù)根據(jù)系統(tǒng)調(diào)用號(hào),在系統(tǒng)調(diào)用號(hào)表里面找到對應(yīng)的系統(tǒng)調(diào)用函數(shù)。

      16、談?wù)刲inux內(nèi)核的啟動(dòng)過程(源代碼級)?

      首先,內(nèi)核鏡像自解壓,解壓完之后從head.s開始運(yùn)行,即引導(dǎo)內(nèi)核,在內(nèi)核引導(dǎo)期間將會(huì)設(shè)置內(nèi)核參數(shù)。

      隨后,跳轉(zhuǎn)到第一個(gè)c函數(shù)start_kernel(),進(jìn)入內(nèi)核啟動(dòng)階段,在內(nèi)核啟動(dòng)過程中進(jìn)行一些必要的硬件初始化工作。

      在內(nèi)核啟動(dòng)最后,掛載文件系統(tǒng),然后創(chuàng)建第一個(gè)用戶空間進(jìn)程,init進(jìn)程,進(jìn)一步完成驅(qū)動(dòng)掛載,用戶服務(wù)初始化工作。

      16.談?wù)凩inux調(diào)度原理?

      答:Linux將進(jìn)程按權(quán)限分為兩大類,常規(guī)進(jìn)程和實(shí)時(shí)進(jìn)程,常規(guī)進(jìn)程對應(yīng)一種調(diào)度算法,實(shí)時(shí)進(jìn)程有兩種對應(yīng)著兩種不同的調(diào)度算法。進(jìn)程按照狀態(tài)又可以分為幾種,常見的狀態(tài)有,運(yùn)行態(tài),可中斷睡眠態(tài),不可中斷睡眠態(tài),停止態(tài)。處于運(yùn)行態(tài)的進(jìn)程根據(jù)調(diào)度算法接受調(diào)度在cpu上運(yùn)行。

      17.談?wù)剬inux網(wǎng)絡(luò)子系統(tǒng)的認(rèn)識(shí)?

      答:網(wǎng)絡(luò)子系統(tǒng)可以概括描述為:應(yīng)用程序-》系統(tǒng)調(diào)用接口(主要是指socket接口)-》協(xié)議無關(guān)接口(有socket實(shí)現(xiàn),提供一套通用接口支持不同的協(xié)議)-》網(wǎng)絡(luò)協(xié)議(包括tcp、udp在內(nèi)的網(wǎng)絡(luò)協(xié)議)-》設(shè)備無關(guān)接口(有net_device接口組織的一組通用接口將網(wǎng)絡(luò)協(xié)議與各種網(wǎng)絡(luò)設(shè)備聯(lián)系起來)-》設(shè)備驅(qū)動(dòng)(即各種網(wǎng)絡(luò)設(shè)備的驅(qū)動(dòng)程序,負(fù)責(zé)管理具體的網(wǎng)絡(luò)設(shè)備)-》網(wǎng)絡(luò)設(shè)備(具體的網(wǎng)絡(luò)硬件設(shè)備)。

      18.內(nèi)核中申請內(nèi)存有哪幾個(gè)函數(shù)?有什么區(qū)別?

      答:只談?wù)劤R姷娜齻€(gè)接口,kmalloc(),vmalloc()和__get_free_pages()。kmalloc()操作的空間位于直接映射區(qū)(即4G空間中的896M區(qū)域),申請到空間物理地址多為連續(xù)地址,常用于操作頻繁的數(shù)據(jù)結(jié)構(gòu),連續(xù)地址利于提高訪問效率。而對于一些操作不頻繁的數(shù)據(jù)結(jié)構(gòu)可以用vmalloc()申請內(nèi)存,vmalloc()操作的空間優(yōu)先選擇高端內(nèi)存,這里申請出的內(nèi)存物理地址往往不是連續(xù)的,所以訪問效率不會(huì)很高。__get_free_pages()操作的區(qū)域跟kmalloc()相同,位于直接映射區(qū),不同的是它申請的是物理頁的整倍數(shù)大小的內(nèi)存。

      19.談?wù)剝?nèi)核函數(shù)mmap的實(shí)現(xiàn)機(jī)制?

      答:

      --------------------- 本文來自 zs_2016 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/bitch_____/article/details/70158067?utm_source=copy

      ?

      內(nèi)核、驅(qū)動(dòng)相關(guān)

      1、中斷和中斷的上半部分和下半部分的問題

      ???????中斷會(huì)打斷內(nèi)核中進(jìn)程的正常調(diào)度和運(yùn)行,當(dāng)中斷到來時(shí),要完成的工作往往并不會(huì)是短小的,它可能要進(jìn)行較大量的耗時(shí)處理。所以中斷處理程序中所有不要求立即完成的,在開中斷的環(huán)境下,由中斷后半段完成.

      ????? 中斷前半段主要完成盡可能少的比較緊急的功能,例如簡單地讀取寄存器中的中斷狀態(tài)并清除中斷標(biāo)志后就進(jìn)行“登記中斷”的工作。這樣,頂半部執(zhí)行的速度就會(huì)很快,可以服務(wù)更多的中斷請求。

      ????? ?復(fù)雜的內(nèi)容則交由中斷下半部來執(zhí)行,而且中斷下半部可以被新的中斷打斷,這也是底半部和頂半部的最大不同。

      ????? ?當(dāng)然, 如果中斷比較簡單,就不用區(qū)分上下半部了。

      ? ? ? ?Linux 系統(tǒng)實(shí)現(xiàn)底半部的機(jī)制主要有:

      ? ? ? ?三種:tasklet,工作隊(duì)列和軟中斷。??

      1.1、tasklet與workqueue的區(qū)別及底層實(shí)現(xiàn)區(qū)別

      ? ?? ? 1)softirq和tasklet都屬于軟中斷,tasklet是softirq的特殊實(shí)現(xiàn);workqueue是普通的工作隊(duì)列。 ?

      ?? ? ? 2)如果推后執(zhí)行的任務(wù)需要睡眠,那么就選擇工作隊(duì)列workqueue(工作隊(duì)列是基于線程的封裝)。

      ????????? ? 如果推后執(zhí)行的任務(wù)不需要睡眠,那么就選擇tasklet。

      參考

      ?

      http://blog.csdn.net/cupidove/article/details/49927259

      1.2、linux中斷的響應(yīng)執(zhí)行流程?

      ???????處理器收到來自中斷控制器的中斷處理請求,保存中斷上下文,跳轉(zhuǎn)到中斷對應(yīng)的處理處,(快速完成中斷中斷上半部,中斷上半部返回后執(zhí)行中斷下半部。如果做了上下半部處理的話),中斷處理函數(shù)返回時(shí)恢復(fù)現(xiàn)場。

      ?

      1.3、軟中斷的工作工程模擬了實(shí)際的中斷處理過程

      ???????1)當(dāng)某一軟中斷時(shí)間發(fā)生后,首先需要設(shè)置對應(yīng)的中斷標(biāo)記位,觸發(fā)中斷事務(wù)(raise_softirq()設(shè)置軟中斷狀態(tài)bitmap,觸發(fā)軟中斷事務(wù))
      ???????2)然后喚醒守護(hù)線程去檢測中斷狀態(tài)寄存器(在Linux中 軟中斷daemon線程函數(shù)為do_softirq())
      ???????3)如果通過查詢發(fā)現(xiàn)某一軟中斷事務(wù)發(fā)生之后,那么通過軟中斷向量表調(diào)用軟中斷服務(wù)程序action()。

      ???????一個(gè)軟中斷不會(huì)去搶占另一個(gè)軟中斷,只有硬件中斷才可以搶占軟中斷,所以軟中斷能夠保證對時(shí)間的嚴(yán)格要求。

      ???????這就是軟中斷的過程,與硬件中斷唯一不同 的地方是從中斷標(biāo)記到中斷服務(wù)程序的映射過程。在CPU的硬件中斷發(fā)生之后,CPU需要將硬件中斷請求通過向量表映射成具體的服務(wù)程序,這個(gè)過程是硬件自 動(dòng)完成的,但是軟中斷不是,其需要守護(hù)線程去實(shí)現(xiàn)這一過程,這也就是軟件模擬的中斷,故稱之為軟中斷。

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

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

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

      ???????使用自旋鎖的進(jìn)程不能睡眠,使用信號(hào)量的進(jìn)程可以睡眠。中斷服務(wù)例程中的互斥使用的是自旋鎖,原因是在中斷處理例程中,硬中斷是關(guān)閉的,這樣會(huì)丟失可能到來的中斷。

      4、內(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)浞?,?dāng)然,也可以把文件的內(nèi)容映射到內(nèi)存來恢復(fù)某些服務(wù)。另外,mmap實(shí)現(xiàn)共享內(nèi)存也是其主要應(yīng)用之一,mmap系統(tǒng)調(diào)用使得進(jìn)程之間通過映射同一個(gè)普通文件實(shí)現(xiàn)共享內(nèi)存。

      5、linux中內(nèi)核空間及用戶空間的區(qū)別?

      ???????區(qū)別有很多,簡言概之就是:Linux系統(tǒng)采取兩級保護(hù)機(jī)制,對應(yīng)兩種不同的操作權(quán)限,內(nèi)核空間權(quán)限高于用戶空間權(quán)限,內(nèi)核空間和用戶空間都有屬于自己的虛擬空間。

      ???????在32位系統(tǒng)中,cpu最高有32位尋址范圍,即對應(yīng)4G空間,內(nèi)核空間被劃分在高1G虛擬空間,用戶空間在低3G。

      ???????普通應(yīng)用程序運(yùn)行在用戶空間,執(zhí)行一些貼近用戶的低權(quán)限操作,系統(tǒng)內(nèi)核程序,操作硬件的驅(qū)動(dòng)程序等一些要求高級權(quán)限的程序運(yùn)行在內(nèi)核空間。

      ???????用戶空間程序不能直接訪問內(nèi)核空間的數(shù)據(jù),內(nèi)核空間程序也一樣不能直接訪問屬于用戶進(jìn)程空間的數(shù)據(jù),用戶空間和內(nèi)核空間之間的通信必須通過一些特定的方法。

      5.1、用戶空間與內(nèi)核通信方式有哪些?

      ????? 1)首先想到的是系統(tǒng)調(diào)用,用戶空間進(jìn)程通過系統(tǒng)調(diào)用進(jìn)入內(nèi)核空間,訪問指定的內(nèi)核空間數(shù)據(jù);
      ??????2).其次是驅(qū)動(dòng)程序,用戶空間進(jìn)程可以使用封裝后的系統(tǒng)調(diào)用接口訪問驅(qū)動(dòng)設(shè)備節(jié)點(diǎn),以和運(yùn)行在內(nèi)和空間的驅(qū)動(dòng)程序通信;
      ??????3).共享內(nèi)存mmap,在代碼中調(diào)用接口,實(shí)現(xiàn)內(nèi)核空間與用戶空間的地址映射,在實(shí)時(shí)性要求很高的項(xiàng)目中為首選,省去拷貝數(shù)據(jù)的時(shí)間等資源,但缺點(diǎn)是不好控制;

      ??????4).最后,copy_to_user()、copy_from_user(),是在驅(qū)動(dòng)程序中調(diào)用接口,實(shí)現(xiàn)用戶空間與內(nèi)核空間的數(shù)據(jù)拷貝操作,應(yīng)用于實(shí)時(shí)性要求不高的項(xiàng)目中。

      6、設(shè)備驅(qū)動(dòng)模型三個(gè)重要成員是?platfoem總線的匹配規(guī)則是?

      ????總線,設(shè)備,驅(qū)動(dòng)。匹配規(guī)則就是當(dāng)有一個(gè)新的設(shè)備掛起時(shí),總線被喚醒,match函數(shù)被調(diào)用,用device名字去跟本總線下的所有驅(qū)動(dòng)名字去比較。相反就是用驅(qū)動(dòng)的名字去device鏈表中和所有device的名字比較。如果匹配上,才會(huì)調(diào)用驅(qū)動(dòng)中的probe函數(shù),否則不調(diào)用。

      ?

      --------------------- 本文來自 爬坑的小蝸牛 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/tainjau/article/details/79430905?utm_source=copy

      ?

      1.什么是GPIO?
      ?

      general purpose input/output??

      GPIO是相對于芯片本身而言的,如某個(gè)管腳是芯片的GPIO腳,則該腳可作為輸入或輸出高或低電平使用,當(dāng)然某個(gè)腳具有復(fù)用的功能,即可做GPIO也可做其他用途。?

      也就是說你可以把這些引腳拿來用作任何一般用途的輸入輸出,例如用一根引腳連到led的一極來控制它的亮滅,也可以用一根(一些)引腳連到一個(gè)傳感器上以獲得該傳感器的狀態(tài),這給cpu提供了一個(gè)方便的控制周邊設(shè)備的途經(jīng)。如果沒有足夠多的gpio管腳,在控制一些外圍設(shè)備時(shí)就會(huì)力有不逮,這時(shí)可采取的方案是使用CPLD來幫助管理。

      ?

      2.觸摸屏的硬件原理?

      http://www./Article/Maintain/Technology/175945932.htm

      http://www./u2/78837/showart_1186312.html

      觸摸屏的主要三大種類是:電阻技術(shù)觸摸屏、 表面聲波技術(shù)觸摸屏、 電容技術(shù)觸摸屏。
      ?

      電阻觸摸屏的主要部分是一塊與顯示器表面非常配合的電阻薄膜屏, 這是一種多層的復(fù)合薄膜,它以一層玻璃或硬塑料平板作為基層,表面圖有一層透明氧化金屬 (ITO氧化銦,透明的導(dǎo)電電阻) 導(dǎo)電層,上面在蓋有一層外表面硬化處理、光滑防擦的塑料層 、它的內(nèi)表面也涂有一層ITO涂層 、在他們之間有許多細(xì)小的(小于1/1000英寸)的透明隔離點(diǎn)把兩層導(dǎo)電層隔開絕緣 。當(dāng)手指觸摸屏幕時(shí),兩層導(dǎo)電層在觸摸點(diǎn)位置就有了接觸,控制器偵測到這一接觸并計(jì)算出(X,Y )的位置,再根據(jù)模擬鼠標(biāo)的方式運(yùn)作。這就是電阻技術(shù)觸摸屏的最基本的原理。

      表面聲波技術(shù)是利用聲波在物體的表面進(jìn)行傳輸,當(dāng)有物體觸摸到表面時(shí),阻礙聲波的傳輸,換能器偵測到這個(gè)變化,反映給計(jì)算機(jī),進(jìn)而進(jìn)行鼠標(biāo)的模擬。

      電容技術(shù)觸摸屏利用人體的電流感應(yīng)進(jìn)行工作 。用戶觸摸屏幕時(shí) ,由于人體電場,用戶和觸摸屏表面形成以一個(gè)耦合電容, 對于高頻電流來說,電容是直接導(dǎo)體,于是手指從接觸點(diǎn)吸走一個(gè)很小的電流

      ?

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

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

      ?

      4.在一個(gè)只有128M內(nèi)存并且沒有交換分區(qū)的機(jī)器上,說說下面兩個(gè)程序的運(yùn)行結(jié)果
      1,
      #define MEMSIZE 1024*1024
      int count = 0;
      void *p = NULL;
      while(1) {
      ? p = (void *)malloc(MEMSIZE);
      ? if (!p) break;
      ? printf("Current allocation %d MB\n", count);
      }

      2,
      while(1) {
      ? p = (void *)malloc(MEMSIZE);
      ? if (!p) break;
      ? memset(p, 1, MEMSIZE);
      ? printf("Current allocation %d MB\n", count);
      }

      ?

      第一道程序分配內(nèi)存但沒有填充,編譯器可能會(huì)把內(nèi)存分配優(yōu)化掉,程序死循環(huán);第二道,程序分配內(nèi)存并進(jìn)行填充,系統(tǒng)會(huì)一直分配內(nèi)存,直到內(nèi)存不足,退出循環(huán)。

      ?

      5.請定義一個(gè)宏,比較兩個(gè)數(shù)a、b的大小,不能使用大于、小于、if語句

      搞的比較復(fù)雜。主要思想就是a-b的值的最高位是否為0;但是又得考慮整數(shù)溢出的問題,所以很復(fù)雜。不知道哪位大俠有更好的辦法,指點(diǎn)指點(diǎn)。
      ?

      1. #include <stdio.h>
      2. ?
      3. #define ZHENG(i) ((i >> 31) == 0)
      4. #define FU(i) ((i >> 31) != 0)
      5. #define COMPARE(a,b) ((ZHENG(a) && FU(b)) || (((ZHENG(a) && ZHENG(b)) || (FU(a) && FU(b))) && ((((a) - (b)) >> 31) == 0)))
      6. ?
      7. void main()
      8. {
      9. ?? ?int a = 0x80000001;
      10. ?? ?int b = 0x6FFFFFFF;
      11. ?
      12. ?? ?if(COMPARE(a,b))
      13. ?? ?{
      14. ?? ? ? ?printf("a >= b\n");
      15. ?? ?}
      16. ?? ?else
      17. ?? ?{
      18. ?? ? ? ?printf("a < b\n");
      19. ?? ?}
      20. }

      --------------------- 本文來自 代碼戰(zhàn)士 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/shxcodewarrior/article/details/20122321?utm_source=copy

      ?

      1、寫一段 C 代碼讓程序跳轉(zhuǎn)到地址是 0x8000 0000 的位置執(zhí)行

      答:(*(void(*)(void))0x100000)();或者((void(*)(void))0x100000)();

      ?

      2、簡述static 關(guān)鍵字的作用。

      答:1)在函數(shù)體內(nèi),static 變量的作用范圍為該函數(shù)體,不同于auto 變量,該變量的內(nèi)存只被分配一次,因此其值在下次調(diào)用時(shí)仍維持上次的值。

      2)在模塊內(nèi)的static 全部變量可以被模塊內(nèi)所有函數(shù)訪問,但不能被模塊外其他函數(shù)訪問。

      3)在模塊內(nèi)的static 函數(shù)只可被這一模塊內(nèi)的其他函數(shù)調(diào)用,這個(gè)函數(shù)的使用范圍被限制在聲明它的模塊內(nèi)。

      ?

      3、簡要敘述進(jìn)程和線程這兩個(gè)概念。

      答:進(jìn)程是指一個(gè)程序在一個(gè)數(shù)據(jù)集合上的一次運(yùn)行過程。

      線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和執(zhí)行的基本單位。

      進(jìn)程是程序的一次執(zhí)行。線程可以理解為進(jìn)程中執(zhí)行的一段程序片段。

      ?

      4、請簡述自旋鎖和信號(hào)量兩個(gè)概念并對他們作出比較。

      答:1)自旋鎖
      自旋鎖是專為防止多處理器并發(fā)而引入的一種鎖,它在內(nèi)核中大量應(yīng)用于中斷處理等部分(對于單處理器來說,防止中斷處理中的并發(fā)可簡單采用關(guān)閉中斷的方式,不需要自旋鎖)。
      自旋鎖最多只能被一個(gè)內(nèi)核任務(wù)持有,如果一個(gè)內(nèi)核任務(wù)試圖請求一個(gè)已被爭用(已經(jīng)被持有)的自旋鎖,那么這個(gè)任務(wù)就會(huì)一直進(jìn)行忙循環(huán)——旋轉(zhuǎn)——等待鎖重新可用。要是鎖未被爭用,請求它的內(nèi)核任務(wù)便能立刻得到它并且繼續(xù)進(jìn)行。自旋鎖可以在任何時(shí)刻防止多于一個(gè)的內(nèi)核任務(wù)同時(shí)進(jìn)入臨界區(qū),因此這種鎖可有效地避免多處理器上并發(fā)運(yùn)行的內(nèi)核任務(wù)競爭共享資源。
      事實(shí)上,自旋鎖的初衷就是:在短期間內(nèi)進(jìn)行輕量級的鎖定。一個(gè)被爭用的自旋鎖使得請求它的線程在等待鎖重新可用的期間進(jìn)行自旋(特別浪費(fèi)處理器時(shí)間),所以自旋鎖不應(yīng)該被持有時(shí)間過長。如果需要長時(shí)間鎖定的話, 最好使用信號(hào)量。
      自旋鎖的基本形式如下:
      spin_lock(&mr_lock);
      //臨界區(qū)
      spin_unlock(&mr_lock);
      因?yàn)樽孕i在同一時(shí)刻只能被最多一個(gè)內(nèi)核任務(wù)持有,所以一個(gè)時(shí)刻只有一個(gè)線程允許存在于臨界區(qū)中。這點(diǎn)很好地滿足了對稱多處理機(jī)器需要的鎖定服務(wù)。在單處理器上,自旋鎖僅僅當(dāng)作一個(gè)設(shè)置內(nèi)核搶占的開關(guān)。如果內(nèi)核搶占也不存在,那么自旋鎖會(huì)在編譯時(shí)被完全剔除出內(nèi)核。
      簡單的說,自旋鎖在內(nèi)核中主要用來防止多處理器中并發(fā)訪問臨界區(qū),防止內(nèi)核搶占造成的競爭。另外自旋鎖不允許任務(wù)睡眠(持有自旋鎖的任務(wù)睡眠會(huì)造成自死鎖——因?yàn)樗哂锌赡茉斐沙钟墟i的內(nèi)核任務(wù)被重新調(diào)度,而再次申請自己已持有的鎖),它能夠在中斷上下文中使用。
      死鎖:假設(shè)有一個(gè)或多個(gè)內(nèi)核任務(wù)和一個(gè)或多個(gè)資源,每個(gè)內(nèi)核都在等待其中的一個(gè)資源,但所有的資源都已經(jīng)被占用了。這便會(huì)發(fā)生所有內(nèi)核任務(wù)都在相互等待,但它們永遠(yuǎn)不會(huì)釋放已經(jīng)占有的資源,于是任何內(nèi)核任務(wù)都無法獲得所需要的資源,無法繼續(xù)運(yùn)行,這便意味著死鎖發(fā)生了。自死瑣是說自己占有了某個(gè)資源,然后自己又申請自己已占有的資源,顯然不可能再獲得該資源,因此就自縛手腳了。

      2)信號(hào)量
      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)量。
      信號(hào)量的睡眠特性,使得信號(hào)量適用于鎖會(huì)被長時(shí)間持有的情況;只能在進(jìn)程上下文中使用,因?yàn)橹袛嗌舷挛闹惺遣荒鼙徽{(diào)度的;另外當(dāng)代碼持有信號(hào)量時(shí),不可以再持有自旋鎖。
      信號(hào)量基本使用形式為:
      static DECLARE_MUTEX(mr_sem);//聲明互斥信號(hào)量
      if(down_interruptible(&mr_sem))
      //可被中斷的睡眠,當(dāng)信號(hào)來到,睡眠的任務(wù)被喚醒
      //臨界區(qū)
      up(&mr_sem);

      3)信號(hào)量和自旋鎖區(qū)別
      雖然聽起來兩者之間的使用條件復(fù)雜,其實(shí)在實(shí)際使用中信號(hào)量和自旋鎖并不易混淆。注意以下原則:
      如果代碼需要睡眠——這往往是發(fā)生在和用戶空間同步時(shí)——使用信號(hào)量是唯一的選擇。由于不受睡眠的限制,使用信號(hào)量通常來說更加簡單一些。如果需要在自旋鎖和信號(hào)量中作選擇,應(yīng)該取決于鎖被持有的時(shí)間長短。理想情況是所有的鎖都應(yīng)該盡可能短的被持有,但是如果鎖的持有時(shí)間較長的話,使用信號(hào)量是更好的選擇。另外,信號(hào)量不同于自旋鎖,它不會(huì)關(guān)閉內(nèi)核搶占,所以持有信號(hào)量的代碼可以被搶占。這意味者信號(hào)量不會(huì)對影響調(diào)度反應(yīng)時(shí)間帶來負(fù)面影響。

      --------------------- 本文來自 Cawen_Cao 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/Cowena/article/details/48706297?utm_source=copy

      ?

      面試簡述

      從9月份開始即吹響了找工作的號(hào)角,眾說紛紜,有老師說9月份的沒有必要,因?yàn)槊嫦驅(qū)W歷招聘(很抱歉啊,博主第一學(xué)歷太渣了,研究生學(xué)歷還可以把);有學(xué)生也因?yàn)閿?shù)次的碰壁而退居幕后,準(zhǔn)備這十月份的再次重來。但是殘酷的現(xiàn)實(shí)證明,沒有經(jīng)過9月分的洗禮,很難有10月份的騰飛,我也很慶幸自己能夠于9月付諸行動(dòng)。
      我第一家去的是浙江大華,之后也投了中船但是石沉大海。在蘇州園區(qū)中漫無目的地閑蕩,只要看到有軟件崗位的便遞一份簡歷,聊一聊,而后轉(zhuǎn)身離開。埃斯頓給我白眼,科士達(dá)和杭州富特科技嫌我專業(yè)不對口便隨意打發(fā)了我;科大訊飛的筆試題都做了出來卻杳無音訊,北京經(jīng)緯恒潤的面試頗水(雖然博主很水),隨后投了蘇州瑞晟微電子(節(jié)后給消息)。輾轉(zhuǎn)于江寧和明故宮以及南大東南等高校,沒有給我喘息的機(jī)會(huì),接踵而至的便是各種筆試和面試。
      匯頂科技筆試深難,有幸進(jìn)了二面和東大的一撥人同臺(tái)PK,然被干掉了,不過有幸能和高管聊天知道了自己的不足。有的時(shí)候真心覺著,你的堅(jiān)持即使失敗也會(huì)給你帶點(diǎn)驚喜。中科創(chuàng)達(dá)筆試還行,進(jìn)了HR面后,HR給我的印象尤為深刻,我敢說所有我接下來面試的HR都沒有它牛,問題精簡針對,不拖泥帶水,還好博主比較強(qiáng)大經(jīng)受住考驗(yàn)(因?yàn)橥低殿┝艘谎?,發(fā)現(xiàn)給我的打分都是A,最高的等級)
      經(jīng)過節(jié)前的考驗(yàn)和試練,你會(huì)發(fā)現(xiàn),無論你再怎么努力結(jié)果很可能還是被淘汰,因?yàn)槊嬖囍荒芙o你帶來應(yīng)對的經(jīng)驗(yàn)而非專業(yè)技能的提升。所以節(jié)間我選擇提升下自己的專業(yè)水平。
      節(jié)前的努力在節(jié)后便逐漸彰顯出來,各種面試通知以及即將到來的筆試給了自己莫大的動(dòng)力。人生都是選擇的產(chǎn)物,你的選擇決定了你將來成為什么樣的人,面試也是如此。
      節(jié)前的盲目選擇到節(jié)后的針對性選擇也是一個(gè)提升過程,因?yàn)?strong>精力有限,可以選擇自己感興趣或者把握比較大的。
      節(jié)后主要是中新賽克、格力、中興、瑞晟、全志科技、芯動(dòng)科技、深信服這幾家。我綜合前面的匯頂科技講一講面試內(nèi)容。其實(shí)各大公司面試環(huán)節(jié)都類似,具體可以加入493023412(TG微課堂①-求職不迷茫 )群,里面的老師講解的都挺好的,會(huì)總結(jié)面試前中后的注意事項(xiàng)以及如何套路面試官。主要環(huán)節(jié):自我介紹、專業(yè)面試(1-2面)、HR面,一般到了HR面基本上能定性你被錄取了(很大可能)。具體的面試問題稍后我會(huì)貼出。
      面試過程中你會(huì)發(fā)現(xiàn),你從無話可說到滔滔不絕、從手足不定到氣定神閑,若如此恭喜你成為面霸。這一個(gè)過程也是時(shí)間積淀的結(jié)果,因?yàn)槿f事萬物終究會(huì)開花結(jié)果,只是方式不同。廢話不多說了,上干貨。

      筆試面試題

      1. 二分查找
      2. 校驗(yàn)
      3. 關(guān)于字符串:
      4. 關(guān)于數(shù)據(jù)結(jié)構(gòu)
      5. 關(guān)于其他簡答題:
      6. 關(guān)于編程
        (一) 1.5n次比較,求出數(shù)組的最大值和最小值(數(shù)組亂序)
        (二) 環(huán)形緩沖區(qū),用數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)?
        (三) 鏈表的刪除,頭部插入,尾部插入實(shí)現(xiàn)?
        (四) 求出一個(gè)字符串的最長重復(fù)串,如“ababc”,返回“ab”
        (五) 求出一個(gè)周期字符串的最長周期,如“abcabc”,返回3
        (六) 使用C/C 實(shí)現(xiàn)一個(gè)單向鏈表,鏈表需要支持如下接口:
        (七) 網(wǎng)絡(luò)字節(jié)序轉(zhuǎn)換,大端小端。
        (八) 打開一個(gè)設(shè)備,讀取文件,打印輸出。
        (九) 給一個(gè)整數(shù),轉(zhuǎn)換為十六進(jìn)制字符輸出
        (十) 給在 32 位處理器上,將任一整數(shù)轉(zhuǎn)換為二進(jìn)制形式。
      7. C語言宏中”#”和”##”的用法
      8. 關(guān)于IPv6:
      9. Arm有多少32位寄存器?
      10. HAL層:硬件抽象層
      11. Arm2440和6410有什么區(qū)別?
      12. 開發(fā)板時(shí)鐘(2410和6410對比)什么是PLL(鎖相環(huán)):
      13. Arm開發(fā)板的資源,主頻多大?內(nèi)存多大?
      14. CPU,MPU,MCU,SOC,SOPC聯(lián)系與差別
      15. 線程池怎么設(shè)計(jì)
        (一) 什么是線程池?
        (二) 為什么要用線程池?
        (三) 線程的工作流程
        (四) 線程池設(shè)計(jì)
      16. free函數(shù)怎么知道釋放內(nèi)存大小
      17. 構(gòu)造函數(shù)和析構(gòu)函數(shù)拋出異常
      18. tcp/udp上層網(wǎng)絡(luò)協(xié)議舉例并說明原理
        (一) HTTP:
        (二) TFTP:
      19. 關(guān)于內(nèi)存泄漏
      20. 一個(gè)服務(wù)器對10000客戶端,服務(wù)器上的線程模型
      21. 代碼效率優(yōu)化怎么搞
      22. GPIO三種狀態(tài):輸入輸出和高阻態(tài)
      23. 上拉和下拉:
      24. GPIO外部有三種情況:1)直接接地2)直接接電源3)懸掛。請問在GPIO內(nèi)部可以實(shí)現(xiàn)上拉和下拉的情況下如何判斷這三種情況?
      25. 串口協(xié)議講一講?
      26. RS232和RS485通訊接口有什么區(qū)別?
      27. IIC時(shí)序圖畫一下,IIC有哪些狀態(tài),給一個(gè)字節(jié),將它發(fā)送出去。IIC有什么注意事項(xiàng)?有沒有用I/O模擬IIC,如果有需要注意什么?
      28. 講解一下IIC總線
      29. Bootloader的流程
      30. 為什么2440的內(nèi)存起始地址是3后面7個(gè)0呢?
      31. 為什么6410的內(nèi)存起始地址是5后面7個(gè)0呢?
      32. 三個(gè)字節(jié)char型,上電為隨機(jī)數(shù),求三者之和為零的概率
      33. VS中Debug和Release的區(qū)別
      34. Zigbee的傳輸速率多大?(智能家居)為什么用它,和其他傳輸有什么區(qū)別?WIFI安全嗎,為什么?
      35. 用戶和內(nèi)核如何通訊?(追問:驅(qū)動(dòng)程序中如何從用戶到內(nèi)核)
      36. 計(jì)算機(jī)訪問哪個(gè)最快?
      37. 線程和進(jìn)程的區(qū)別?
      38. 設(shè)計(jì)模式有哪些?
      39. 軟件的設(shè)計(jì)流程?
      40. 指針和引用的區(qū)別?
      41. 內(nèi)存管理有什么看法?(MMU)
      42. 鎖有哪些?有什么注意事項(xiàng)
      43. 信號(hào)量和自旋鎖區(qū)別
      44. 中斷能不能睡眠,為什么?下半部能不能睡眠?
      45. 上下文有哪些?怎么理解?
      46. 死鎖產(chǎn)生的原因及四個(gè)必要條件
      47. 驅(qū)動(dòng)中首先執(zhí)行什么?
      48. 觸摸屏和lCD驅(qū)動(dòng)中做了什么,流程是什么?
      49. 輸入子系統(tǒng)上報(bào)系統(tǒng)有什么函數(shù)?怎么知道有沒有上報(bào)成功?
      50. 總線設(shè)備驅(qū)動(dòng)模型之間是什么關(guān)系?設(shè)備和驅(qū)動(dòng)之間的如何匹配,匹配規(guī)則是否可變?
      51. 什么是交叉編譯?為什么需要交叉編譯?為什么還要主機(jī)編譯
      52. 簡述linux系統(tǒng)啟動(dòng)過程
      53. Linux設(shè)備中字符設(shè)備和塊設(shè)備有什么主要區(qū)別?分別舉例。
      54. 主設(shè)備號(hào)和次設(shè)備號(hào)的用途
      55. Linux下rs232和rs485編程有什么區(qū)別?
      56. Uart和IIC和SPI的區(qū)別(提示:關(guān)于異步和同步,電子器件上的)?
      57. 用串口發(fā)送十個(gè)字節(jié)就丟失一個(gè)兩個(gè)你會(huì)怎樣檢查;發(fā)送的時(shí)候?qū)Ψ皆O(shè)備不響應(yīng)你該怎么辦
      58. IIC,scl頻率多大
      59. 觸摸屏中斷做了什么,LCD中斷做了什么?
      60. zigbee用的哪家方案?zigbee端點(diǎn)類型有哪些,這些概念的區(qū)別?端點(diǎn)能夠中轉(zhuǎn)嗎?一個(gè)端點(diǎn)上有哪些設(shè)備?你做的項(xiàng)目或者實(shí)踐有多少節(jié)點(diǎn)?zigbee上有操作系統(tǒng)嗎?
      61. 客戶端是否單獨(dú)連接服務(wù)器(客戶端和客戶端直接是否點(diǎn)對點(diǎn)連接)?客戶端之間有沒有交互?有沒有考慮服務(wù)器進(jìn)程如果崩潰了,客戶端資源沒有得到釋放怎么做?那么如果服務(wù)器正常,客戶端中途斷開連接怎么辦?如果發(fā)送文件,是直接點(diǎn)對點(diǎn)嗎,也就是客戶端之間直接通訊?線程池中線程之間是分離的嗎?
      62. 沒有使用MySQL之類的嗎?sqlite是線程安全的嗎
      63. 視頻監(jiān)控系統(tǒng)這個(gè)項(xiàng)目能不能做圖像的簡單處理,比如截?。烤W(wǎng)頁中如果要打印換行符,怎么打???這個(gè)項(xiàng)目中做的驅(qū)動(dòng)中,你這個(gè)視頻子系統(tǒng)用的是不是內(nèi)核的?
      64. QT,用的熟嗎?做的驅(qū)動(dòng)有沒有編入內(nèi)核?既然沒有編入內(nèi)核,那是需要手動(dòng)去啟動(dòng)和裝載嗎?需不需要?jiǎng)?chuàng)建設(shè)備節(jié)點(diǎn)?用戶是如何訪問這些驅(qū)動(dòng)的?做的驅(qū)動(dòng)都是字符設(shè)備嗎?
      65. 你這個(gè)項(xiàng)目中zigbee用的是哪家的方案?控制設(shè)備有哪些?有多少節(jié)點(diǎn)?也就是說只是一對用于通訊是嗎?。
      66. 線程和進(jìn)程,為什么選擇線程?線程為什么占用更少的資源?線程共享進(jìn)程的哪些資源?線程池如何實(shí)現(xiàn)的?是不是什么都用線程比較好?
      67. 畫一下Arm的體系架構(gòu)
      68. 以下圖片是哪種語言
      69. typedef struct _MAD_SYS_CONFIG{ MAD_U32 smiBase,…}MAD_SYS_CONFIG_t;
        typedef struct {MAD_U32 smiBase,…} MAD_SYS_CONFIG; 這兩種寫法是一個(gè)意思嗎?
      70. 關(guān)注過哪些開源的東西?
      71. 內(nèi)核定時(shí)器如何實(shí)現(xiàn)(通過鏈表)?如何找到具體的鏈表?
      72. 內(nèi)核鏈表為什么具有通用性?
      73. 網(wǎng)盤妙傳功能如何實(shí)現(xiàn)?
      74. 用戶態(tài)和內(nèi)核態(tài)通信方式?
      75. 分配內(nèi)存哪些函數(shù)?kmalloc有兩個(gè)參數(shù),各個(gè)作用是什么?
      76. 有哪些鎖,各自的效率問題?自選鎖怎樣實(shí)現(xiàn)的?
      77. 孤兒進(jìn)程與僵尸進(jìn)程[總結(jié)]和守護(hù)進(jìn)程如何實(shí)現(xiàn)?
      78. 第三個(gè)項(xiàng)目是如何處理并發(fā)的,除了線程池還有更好的哪些方法?
      79. 主線程如何知道子線程的退出?
      80. 講解下內(nèi)核網(wǎng)絡(luò)體系?
      81. 軟中斷是如何實(shí)現(xiàn)的?
      82. 對內(nèi)存管理有什么看法和了解?
      83. 哈希表原理?針對字符串,如何確定key值(hash表存儲(chǔ)字符串時(shí),key怎么確定)?map怎樣實(shí)現(xiàn)的?map和哈西表不一樣吧?Hash和B樹的區(qū)別?
      84. 接觸過哪些STL容器?哪個(gè)效率最高?
      85. 寫驅(qū)動(dòng)的時(shí)候有沒有遇到問題,怎么檢查?有沒有遇到coredump?
      86. 應(yīng)用程序如果運(yùn)行時(shí)出現(xiàn)錯(cuò)誤該怎么排查;如果越界該怎么排查?
      87. open和fopen有什么區(qū)別?read/write和fread/fwrite區(qū)別?
      88. 線程池如何使用創(chuàng)建的?讓你自己寫一個(gè)線程池怎么實(shí)現(xiàn)?
      89. 主線程如何檢測一個(gè)子線程也就是客戶端的退出?如果現(xiàn)在讓你實(shí)現(xiàn)可以瀏覽文件夾里文件再傳輸,你會(huì)怎么做?

      我相信如果能搞懂以上問題,面試什么的便沒有問題。

      HR面試題

      正常的HR面試:
      平時(shí)喜歡干什么
      高考情況,成績,考研情況,成績

      特此列出部分我認(rèn)為具有挑戰(zhàn)性的問題:

      中科創(chuàng)達(dá)HR面
      1. 自我介紹下。被打斷【她說不好意思注意回說謝謝,同時(shí)還要記得自己說到哪里】然后再次打斷她沒有讓你繼續(xù)自我介紹。到此自我介紹便結(jié)束。
      2. 你家在哪,這些項(xiàng)目都是你做的嗎?有沒有讓自己感到很挫敗的事情?同學(xué)周圍的人對你是怎么評價(jià)的?你的缺點(diǎn)是什么?【老掉牙的問題】
      3. 分配任務(wù),你和另外一個(gè)人合作,主要都是你做的,但是上級不知道,把功勞主要分給了另個(gè)人,你會(huì)怎么想。我首先講了自己學(xué)習(xí)到的很多,并不會(huì)太在意!然后她追問:如果一直出現(xiàn)這個(gè)問題,你會(huì)怎么樣。【先軟后硬】
      4. 分配一個(gè)任務(wù),由你和另外一個(gè)人完成,你只能借助他完成,因?yàn)槠淠芰Ρ饶銖?qiáng),如果他和你格格不入,你會(huì)怎么辦?如果一直這樣你會(huì)怎么辦?【先自身后他人,結(jié)合團(tuán)體公司利益闡述,最后可上升到公司層面
      5. 我們公司有兩種,一個(gè)是個(gè)人負(fù)責(zé)項(xiàng)目,成就感更好,一個(gè)是和同事一起做項(xiàng)目,你傾向于哪種?我說:可以和能力高于我的一起合作,并沒有特定要求個(gè)人自己做。追問:如果有人能力不行怎么辦?我說:沒有關(guān)系,可以帶。追問:不是托你后腿嗎。我說:教同事,能提高自己,給予會(huì)帶來回報(bào),而且自己會(huì)的并不算真正會(huì),把別人教會(huì)了才算。【注意這里的陷阱,一定要選擇團(tuán)隊(duì)項(xiàng)目

      中興HR面
      1. 你是如何完成一個(gè)分配給你的任務(wù)的?
      2. 在你做的這些項(xiàng)目中有沒有很難忘的困難或者經(jīng)歷,那你有沒有想過,如果現(xiàn)在回想這個(gè)困難如何更好地去解決?【考察你的即時(shí)總結(jié)和部分記憶力的能力 真實(shí)性考察】
      3. 這些項(xiàng)目都比較閑散,和真正工作的時(shí)候不一樣,不能這塊沒有做好放一段時(shí)間,那你怎么辦?【實(shí)戰(zhàn)和訓(xùn)練的區(qū)別,可自由發(fā)揮】

      博客寫完,浙江大華和中興的offer還沒有消息,雖然手里有了9個(gè)offer,但是只有那幾個(gè)是比較中意的。最后祝大家能夠有博主的好運(yùn),愿都能找到自己的歸處。Best wishes to you!!

      PS:博主又來更新了,有幸再次斬獲中興和大華的offer,但是選擇公司很難,具體可以參考??臀恼?br/>http://mp.weixin.qq.com/s?__biz=MjM5NDYxMzk1Nw==&mid=2652260196&idx=3&sn=d44b136bfff82bc157db4c43b7477a17&chksm=bd67f8ce8a1071d8164fbb5a9ae5bc6e51d08286428fc86803c88ba7cf179e1716da1b017169&scene=4#wechat_redirect
      中的闡述,我覺著中肯有用。

      --------------------- 本文來自 BeyondTheBoundary 的CSDN 博客 ,全文地址請點(diǎn)擊:https://blog.csdn.net/Mingrenjiuwei/article/details/52878012?utm_source=copy

      ?

      來源:http://www./content-4-26921.html

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多