驅動筆記

FIQ和IRQ區別 
向量中斷控制器VIC具有32箇中斷請求輸入,可將其編程分爲3類,FIQ,向量IRQ和非向量IRQ。
FIQ快速中斷請求要求具有最高優先級。如果分配給FIQ的請求多於一個,VIC將中斷請求相或後向ARM處理器產生FIQ信號。當只有一箇中斷被分配爲FIQ時可實現最短的FIQ等待,但如果分配給FIQ級的中斷多於1個,FIQ服務程序需要讀取FIQ狀態寄存器來識別產生中斷請求的FIQ中斷源!向量IRQ具有中等優先級。該級別可分別32個請求中斷的16個。32個請求種的任意一個都可分配到16個向量IRQ slot中的任意一個,其中slot0具有最高優先級非向量IRQ的優先級最低

 

FIQ和IRQ是兩種不同類型的中斷,ARM爲了支持這兩種不同的中斷,提供了對應的叫做FIQ和IRQ處理器模式(ARM有7種處理模式)。一般的中斷控制器裏我們可以配置與控制器相連的某個中斷輸入是FIQ還是IRQ,所以一箇中斷是可以指定爲FIQ或者IRQ的,爲了合理,要求系統更快響應,自身處理所耗時間也很短的中斷設置爲FIQ,否則就設置了IRQ。如果該中斷設置爲了IRQ,那麼當該中斷產生的時候,中斷處理器通過IRQ請求線告訴ARM,ARM就知道有個IRQ中斷來了,然後ARM切換到IRQ模式運行。類似的如果該中斷設置爲FIQ,那麼當該中斷產生的時候,中斷處理器通過FIQ請求線告訴ARM,ARM就知道有個FIQ中斷來了,然後切換到FIQ模式運行。簡單的對比:

1、就是FIQ比IRQ快.

2、FIQ比IRQ有更高優先級,如果FIQ和IRQ同時產生,那麼FIQ先處理。在symbian系統裏,當CPU處於FIQ模式處理FIQ中斷的過程中,預取指令異常,未定義指令異常,軟件中斷全被禁止,所有的中斷被屏蔽。所以FIQ就會很快執行,不會被其他異常或者中斷打斷,所以它又比IRQ快了。而IRQ不一樣,當ARM處理IRQ模式處理IRQ中斷時,如果來了一個FIQ中斷請求,那正在執行的IRQ中斷處理程序會被搶斷,ARM切換到FIQ模式去執行這個FIQ,所以FIQ比IRQ快多了。

3、另外FIQ的入口地址是0x1c,IRQ的入口地址是0x18

 

Linux系統下.ko文件是什麼文件?.so文件是什麼文件?

.ko  -- kernel object,內核模塊,可以在Linux內核起來之後動態的加載和卸載。 

.so  -- shared object,用戶層的動態庫 (於.a 對應),使用同一個.so的程序在運行時 只需要該.so的同一份拷貝

 

5. 內核函數mmap的實現原理,機制?

mmap函數實現把一個文件映射到一個內存區域,從而我們可以像讀寫內存一樣讀寫文件,他比單純調用read/write也要快上許多。在某些時候我們可以把內存的內容拷貝到一個文件中實現內存備份,當然,也可以把文件的內容映射到內存來恢復某些服務。另外,mmap實現共享內存也是其主要應用之一,mmap系統調用使得進程之間通過映射同一個普通文件實現共享內存。

 

6. 驅動裏面爲什麼要有併發、互斥的控制?如何實現?講個例子?

      併發(concurrency)指的是多個執行單元同時、並行被執行,而併發的執行單元對共 享資源(硬件資源和軟件上的全局變量、靜態變量等)的訪問則很容易導致競態(race conditions)。

      解決競態問題的途徑是保證對共享資源的互斥訪問,所謂互斥訪問就是指一個執行單元 在訪問共享資源的時候,其他的執行單元都被禁止訪問。

 

訪問共享資源的代碼區域被稱爲臨界區,臨界區需要以某種互斥機 制加以保護,中斷屏蔽,原子操作,自旋鎖,和信號量都是linux設備驅動中可採用的互斥途徑。

7. spinlock自旋鎖是如何實現的?

自旋鎖在同一時刻只能被最多一個內核任務持有,所以一個時刻只有一個線程允許存在於臨界區中。這點可以應用在多處理機器、或運行在單處理器上的搶佔式內核中需要的鎖定服務。

  二、信號量簡介

  這裏也介紹下信號量的概念,因爲它的用法和自旋鎖有相似的地方。

  LinuxLinux

  Linux是一套免費使用和自由傳播的操作系統,它主要用於基於Intel系列CPU的計算機上。這個系統是由全世界各地的成千上萬的程序員設計和實現的,其目的是建立不受任何商品化軟件的版權制約的、全世界都能自由使用的Unix兼容產品。

中的信號量是一種睡眠鎖。如果有一個任務試圖獲得一個已被持有的信號量時,信號量會將其推入等待隊列,然後讓其睡眠。這時處理器獲得自由去執行其它代碼。當持有信號量的進程將信號量釋放後,在等待隊列中的一個任務將被喚醒,從而便可以獲得這個信號量。

 

8. 任務調度的機制?

 

9:framebuffer機制?

Linux抽象出FrameBuffer這個設備來供用戶態進程實現直接寫屏。Framebuffer機制模仿顯卡的功能,將顯卡硬件結構抽象掉,可以通過Framebuffer的讀寫直接對顯存進行操作。用戶可以將Framebuffer看成是顯示內存的一個映像,通過mmap將其映射到進程地址空間之後,就可以直接進行讀寫操作,而寫操作可以立即反應在屏幕上。這種操作是抽象的,統一的。用戶不必關心物理顯存的位置、換頁機制等等具體細節,這些都是由Framebuffer設備驅動來完成的。通過mmap調用把顯卡的物理內存空間映射到用戶空間

發佈了11 篇原創文章 · 獲贊 1 · 訪問量 7萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章