linux驅動程式一般較少從底層開發,有這樣幾種途徑可以有效協助我們較快地完成驅動開發:
借用demo板的驅動主要是求同存異,晶元一般是相同的,主要體現在片選的io、中斷和dma通道等方面。
因而在進行驅動開發時我們一般遵循這樣的設計理念:將硬體和平台相關(記憶體位址、片選的io、中斷號、dma通道和硬體設定等)的資訊放在bsp中,作為platform資訊、spiboard資訊、i2cboard資訊,而不直接放在驅動裡面,以備修改。
2.相似晶元的驅動程式
任何驅動工程師在面對新驅動程式的開發時,都沒有必要一切從頭開始。在核心源**/drivers中已經大量包含了類似晶元的驅動程式,這些都可以借鑑。
3.晶元廠商的範例程式
1)cpu_relax()函式,一般用在忙等待中,其作用降低cpu的消耗,同時也起到記憶體屏障的作用,同時,document/volatile_considered_harmful.txt中也提到,在忙等待中要避免使用volatile關鍵字;
2)bsp
a. bsp是什麼:
bsp是板級支援包,是介於主機板硬體和作業系統之間的一層,應該說是屬於作業系統的一部分,主要目的是為了支援作業系統,使之能更好的執行於硬體主機板。
b. pc機和嵌入式系統中的bsp
在pc機的windos系統或linux系統中也有bsp,只是pc機均採用統一的x86體系架構,所以其bsp是單一確定的,一般不需要做什麼修改。
在嵌入式系統中情況完全不同,目前市場上有多種結構的cpu(risc)並存(ppc、arm、mips),為了效能的需要,外圍裝置也會有不同 選擇和定義。因而,嵌入式系統針對不同的cpu會有不同的bsp,即使相同 的cpu,外圍裝置的差異(如外部擴充套件dram的大小,型別改變),bsp相應的部分也會有所不同。
所以,需要根據硬體設計編寫和修改bsp,以保證系統正常的執行。
c.bsp在嵌入式開發中的位置和作用
bsp開發處於整個嵌入式開發的前期,是後面系統上應用程式能正常執行的保證。
大致步驟如下:
a. 硬體主機板研製,測試;
b. 作業系統的選定,bsp程式設計;
c. 上層應用程式的開發。
bsp部分在硬體和作業系統,上層應用程式之間,所以,這就要求bsp程式設計師對硬體,軟體和作業系統都有一定 的了解,才能做好bsp程式設計。
需要熟悉的工具:電表、示波器、邏輯分析儀、硬體**器、**除錯環境。
程式語言:組合語言、c語言。
1.2. linux裝置驅動開發詳解 宋寶華著
bzoj3230 相似子串 SA lcp 二分
首先用字尾陣列處理出h陣列。因為要問子串的排名,所以我們再記乙個陣列num i 表示前i個字尾有幾個本質不同的子串。然後我們用二分查詢就可以找到排序後的第i個子串是誰了。然後就是求一下lcp了。還有反過來的lcp。算清角標就好了。還有很坑的一點 可能有超過int範圍個實質不同的字串 include ...
Linux裝置驅動 塊裝置(二)之相關結構體
上回最後面介紹了相關資料結構,下面再詳細介紹 核心用結構block device例項代表乙個塊裝置物件,如 整個硬碟或特定分割槽。如果該結構代表乙個分割槽,則其成員bd part指向裝置的分割槽結構。如果該結構代表裝置,則其成員bd disk指向裝置的通用硬碟結構gendisk 當使用者開啟塊裝置檔...
Linux裝置驅動 塊裝置(二)之相關結構體
上回最後面介紹了相關資料結構,下面再詳細介紹 核心用結構block device例項代表乙個塊裝置物件,如 整個硬碟或特定分割槽。如果該結構代表乙個分割槽,則其成員bd part指向裝置的分割槽結構。如果該結構代表裝置,則其成員bd disk指向裝置的通用硬碟結構gendisk 當使用者開啟塊裝置檔...