Linux,支持稍有不同的板变体,相同的SOC

Linux,支持稍有不同的板变体,相同的SOC,linux,embedded-linux,Linux,Embedded Linux,我目前使用的是飞思卡尔的I.MX6和linux版本。我们有稍微不同的主板,我想找到一个好的例子,或者是关于如何在linux内核中轻松支持主板的一些不同变体的想法 我要做的一件事就是尽可能避免大量的if语句。很糟糕(外包之后),我们的整个board init基本上都在一个文件中。看着真是太好了。但再看一看,这似乎是相当正常的 我的第一个想法是借用我们以前的WinCE构建,我们使用一个结构来保存关于平台的所有信息(gpio映射、特殊/不同硬件),因此当board init运行时,它将读取平台ID,然

我目前使用的是飞思卡尔的I.MX6和linux版本。我们有稍微不同的主板,我想找到一个好的例子,或者是关于如何在linux内核中轻松支持主板的一些不同变体的想法

我要做的一件事就是尽可能避免大量的if语句。很糟糕(外包之后),我们的整个board init基本上都在一个文件中。看着真是太好了。但再看一看,这似乎是相当正常的

我的第一个想法是借用我们以前的WinCE构建,我们使用一个结构来保存关于平台的所有信息(gpio映射、特殊/不同硬件),因此当board init运行时,它将读取平台ID,然后动态初始化所有信息。这原来是。。。很难,因为所有东西都是作为静态设备数据预先烘焙的[]。因为它都是预烘焙的,所以很难在另一个init中访问。它也觉得。。。从文件中导出所有内容有点奇怪

我的第二个想法是将board init复制到两个单独的init中。从主板初始化我可以调用任何我需要的,但。。。看起来有很多重复,而且很难维护

我想首先要问的是。。。linux是否提供了一种智能的方式来管理小型的电路板变化。我知道我们的产品将经历许多小的迭代,能够采用一个内核是很重要的

如果没有一个聪明的方法去做,那么什么是最不痛苦的呢?如果我们的上一款产品在其使用寿命内经历了大约20种不同的变化(这些变化得到了长期的支持,并且经常出现寿命终止的情况),那么您应该看看:

设备树是用于描述硬件的数据结构。 给定正确的设备树,相同的编译内核可以在更广泛的体系结构系列中支持不同的硬件配置。Linux内核可以读取ARM、x86、MicroBlaze、PowerPC和SPARC体系结构中的设备树信息。对于ARM,所有新SOC都必须使用设备树

一些链接:


我想这就是我们所做的for@Kevin看看不同的臂板是如何做到这一点的。board dream和board halibut使用相同的芯片组,但布局不同。FWIW,这些是Android应用程序处理器板。我是否能够传入平台设备数据?例如,我的键盘在我们当前的两个系统上使用相同的控制器设备。但其中一个有不同数量的关键点,并且它们的映射方式略有不同。所以我要做的是一个if(plat)寄存器\平台\缺陷(&keys\ plata)否则…我发现了这个。它已经有几年历史了,但似乎我们必须修改所有驱动程序才能使用设备树?