Zynq裝置樹教程(三)

2021-08-19 20:15:02 字數 2074 閱讀 6336

定義外設

可能你讀本文是為了給你的裝置寫乙個linux驅動,在這方面要推薦著名的《linux device driver》。但是在寫乙個裝置驅動之前,允許我分享寫linux驅動的第一誡:永遠不要為linux寫裝置驅動。

更好的辦法是找乙個維護狀態良好的類似功能的裝置驅動,然後修改它。這不僅僅意味著更容易,更可能幫我們避免我們一些未意識到的問題。從其他驅動移植過來可以讓這份驅動更容易被理解,可移植,更可能被核心樹接受。

所以現在的重點變為理解其他驅動,然後做一點調整。有疑問的地方就照著別人的做法做。創新和個人風格在這裡沒什麼用。

現在,回到裝置樹。讓我們來看看第二部分省略的內容:

ps7_axi_interconnect_0: axi@0 ;

pl310: pl310-controller@f8f02000 ;

[ … more items … ]

xillybus_0: xillybus@50000000 ;

} ;這裡只列出原始dts檔案中的兩個裝置。

第乙個條目:zynq處理器的中斷控制器。這個條目確保中斷控制器被載入。注意它的標籤是「gic」。這個標籤被每個使用中斷的裝置引用。

終於可以講述最有趣的部分了:以上說的這些如何與核心**配合工作。

關於核心驅動

裝置驅動載入和解除安裝時有四件事情會發生:

. 硬體存在時(比如在裝置樹中宣告),核心**載入相應驅動

. 驅動需要了解裝置的實體地址

. 驅動需要了解裝置觸發的中斷號,用來註冊中斷處理函式。

. 一些特殊資訊需要被獲取

核心中有直接訪問裝置樹的api,但是裝置驅動使用專用介面更方便,這些專用介面受pci/pcie驅動的api影響。來看下xillybus_0條目,這是乙個掛載於axi匯流排上的典型邏輯裝置。

標籤和節點名

首先,標籤(「xillybus」)和條目名()。標籤可以省略,條目節點名的格式為(),最後在/sys下產生乙個標準的條目(/sys/devices/axi.0/50000000.xillybus/)。,不過核心肯定不是從這裡訪問裝置樹的。

驅動自動載入

節點中的第乙個賦值語句compatible = 「xlnx,xillybus-1.00.a」是最重要的一句:它連線硬體和驅動。當核心在匯流排上掃瞄裝置時(裝置節點在裝置樹里掛在乙個匯流排節點下),核心檢索」compatible」字段,然後將其字串與一些已知的字串比較。這個過程會在啟動時自動發生兩次:

. 核心啟動時,編譯進核心的驅動與裝置樹中某個」compatible」條目匹配

. 之後載入核心模組時,再觸發一次匹配操作

核心驅動和」compatible」條目的連線由驅動**中的一小段完成:

static struct of_device_id xillybus_of_match __devinitdata = ,

{}};

module_device_table(of, xillybus_of_match);

這段**使得驅動與某乙個」compatible」條目匹配。注意上面的id表中有乙個空結構,用這個空意緒標誌id表的結束。

在上段**之後,一定有類似如下的一段**:

static struct platform_driver xillybus_platform_driver = ,

};platform_driver_register(&xillybus_platform_driver)在模組初始化裡被呼叫。這個結構告訴核心,當驅動與某個硬體匹配時,xilly_drv_probe 被呼叫。

對核心來說,」compatible」字串需要與某個驅動名相同。」xlnx」字首用於防止名字衝突。

另外,乙個裝置可以有多個」compatible」。因為乙個裝置可以有多個模組對應多個驅動。

可能會需要匹配硬體的名字和型別,但這不常用。

寫核心模組時需要特別注意,自動載入機制依賴於/lib/modules檔案中的」compatible」字串,其他定義檔案也在這個目錄下。正確的方式是把*.ko檔案複製到/lib/modules//kernel/drivers/下的相關目錄中,然後:

depmod -a

Zynq裝置樹教程(一)

此教程的目的 本教程是針對xilinx zynq 7000 epp裝置 乙個整合了fpga的arm cotex a9 寫的,但其中的概念適用於所有使用了裝置樹的linux核心。本文使用xillinux發行版為例,該發行版執行於zedboard硬體上。裝置樹有什麼好處 設想一下 bootloader剛...

linux裝置樹(裝置驅動)

一 裝置樹的簡單概念 裝置樹 由一系列的節點,屬性組成,節點本身包含子節點 屬性 成對出現的名稱和值 裝置樹可描述的資訊 原先大多數被編碼在核心中 它是電路板上cpu,匯流排,裝置組成的樹,bootloader會將這棵樹傳遞給核心,並根據它展開linux核心中的platform device等裝置。...

裝置樹學習(二)(裝置樹的規範)

dts v1 memory reservations 格式為 memreserve 從上面檔案布局我們能看到大概分為以下幾部分,我們依次介紹 1 dts v1 表示dts檔案的版本 2 memory reservations 格式為 memreserve 表示留給自己使用的記憶體。即核心不能使用這部...