2016-03-26 49 views
2

我是linux驅動程序開發的新手。我不知道相同的Linux驅動程序在不同的芯片上工作。例如,同一個uart司機工作在所有的人和sitara socs?所有的人和sitara社會有相同的uart周邊?不同芯片上的相同Linux驅動程序

回答

5

基本上,事情的工作原理是基於圖層中所示的分層概念。

內核源代碼是分層的,因此我們不必爲每個系統一遍又一遍地寫它,並提高其可用性。

這裏的方法是,架構師在底層依賴代碼,然後出現總線驅動程序層(SPI,I2C等),然後出現適配器或設備驅動程序。因此,假設如果一個電路板通過SPI或任何類似接口使用A公司的NAND閃存,我們可以在任何給定的電路板上爲該公司使用相同的設備驅動程序A - NAND閃存,而不管SPI apapter目前是什麼,需要關注的是SPI總線驅動程序應該作爲平臺驅動程序存在。

在此探測時,SPI將使用NAND閃存地址訪問設備驅動程序。這裏,SPI驅動程序知道如何與SPI設備進行通信,NAND Flash驅動程序持續告訴SPI驅動程序要傳輸到NAND閃存的內容,SPI負責傳輸。在此SPI平臺驅動程序可能會因不同平臺而有所不同,但NAND Flash驅動程序保持不變

通過這種方法,設備的相同設備驅動程序可以用於不同的系統,而不依賴硬件規範。

Linux Kernel Map

+0

好的。我明白你想告訴nand司機。但是spi驅動程序呢?因爲內核中有一個spi驅動程序,但它可以在不同的平臺上運行。 – overlord

+0

NAND驅動程序可以重複使用,並且獨立於電路板,但即使在不同的電路板中使用相同的SPI適配器,相同的SPI驅動程序可能會也可能不會被重用,但SPI適配器的內存映射可能會也可能不會相同。因此,可以重新利用驅動程序,只需根據電路板的內存映射進行一些地址更改即可。 –

+0

在Linux內核源代碼中有大量的SPI驅動程序支持不同的適配器,並且有一個幫助驅動程序成爲平臺驅動程序的核心驅動程序。在驅動程序需要用於我們的電路板的一堆SPI驅動程序中,我們必須在'make menuconfig'和設備樹時對其進行配置。 –

0

那麼,起初,SoC是什麼或誰是供應商並不重要。重要的是UART外設。因此,如果外設在SoC A上有一些寄存器並且在SoC B上有完全相同的寄存器,則它們都可以使用相同的驅動器。驅動程序只會告訴底層總線(通常由不同的子系統管理)將一些配置位寫入指定的寄存器以執行不同的操作。另外,通常如果芯片是從一些舊型號衍生出來的,像UART這樣簡單的外設幾乎保持不變。

Next ..如果所有Allwiner SoC具有相同的UART?不確定所有這些,但這裏[https://github.com/allwinner-zh/linux-3.4-sunxi/blob/master/drivers/tty/serial/Kconfig]表明大多數SoC使用相同的UART。

而關於Sitara Soc,他們已經轉移到8250司機[http://processors.wiki.ti.com/index.php/Sitara_Linux_UART_-_Switching_to_8250_Driver],這已經使用了很多年了。所以是的,因爲他們(TI)決定這樣做,他們將不得不在UART方面保持向後兼容性。

相關問題