不同芯片上的相同Linux驱动程序

时间:2016-03-26 07:39:18

标签: linux linux-kernel linux-device-driver

我是Linux驱动程序开发的新手。我想知道Linux驱动程序在不同芯片上的工作原理。例如,同样的uart司机在allwinner和sitara socs工作吗?allwinner和sitara socs是否有相同的uart外围设备?

2 个答案:

答案 0 :(得分:6)

基本上,事情的运作方式是基于分层概念,如下图所示。

内核源是分层的,因此我们不必为每个系统反复写入它并增加其可用性。

这背后的方法是,架构师在底层依赖代码,然后是总线驱动程序层(SPI,I2C等),然后是适配器或设备驱动程序。

因此,假设一块电路板使用公司A的NAND闪存而不是SPI或任何类似的接口,我们可以在任何给定的电路板上使用相同的设备驱动程序A-NAND Flash,无论SPI存在什么,但只需要需要关注的是SPI总线驱动程序应作为平台驱动程序出现。

在探测时,SPI将通过NAND Flash的地址访问设备驱动程序。这里SPI驱动程序知道如何与SPI设备进行通信,NAND闪存驱动程序继续告诉SPI驱动程序要转移到NAND闪存,SPI负责如何传输。在这个SPI平台驱动程序可能因平台不同而不同,但NAND闪存驱动程序保持不变。

使用这种方法,设备的相同设备驱动程序可以在不同的系统中使用,而不依赖于硬件规范。

Linux Kernel Map

答案 1 :(得分:1)

嗯,首先,SoC是什么,或者谁是供应商并不重要。重要的是UART外设。因此,如果外设在SoC A上有一些寄存器,并且在SoC B上有相同的寄存器,那么它们都可以使用相同的驱动程序。驱动程序只是告诉底层总线(通常由不同的子系统管理)将一些配置位写入指定的寄存器以进行不同的操作。 此外,通常如果芯片来自某些旧型号,像UART这样的简单外设几乎保持不变。

下一步..如果所有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方面的向后兼容性。