我目前正在使用freescale的i.MX6和linux版本。我们的电路板略有不同,我很想找到一个很好的例子,或者想知道如何在linux内核中轻松支持电路板的几种不同版本。
我要做的一件事就是尽可能多地避免成堆的if语句。它很糟糕(在外包之后)我们的整个电路板初始化基本上都在一个文件中。它看起来很棒。但看了一下之后,看起来这是相当正常的......
我的第一个想法是借用我们以前的WinCE构建,我们使用一个结构来保存有关平台的所有信息(gpio映射,特殊/不同的硬件),所以当电路板初始化时它会读取一个平台ID,然后动态初始化所有信息。事实证明这很难......因为所有事情都是以静态some_device_data data []的形式预先制作出来的。因为它所有预先烘焙很难在另一个init中访问。它也感觉......从文件中导出所有内容有点奇怪。
我的第二个想法是将电路板初始化为两个单独的部分。从主板init我可以打电话给我需要的但是......似乎有很多重复,而且很难维护。
我想首先要问的是...... linux是否提供了一种管理小型电路板的智能方法。我知道我们的产品将经历许多小的迭代,并且能够为所有人提供一个内核非常重要。
如果没有聪明的方法去做,那最痛苦的是什么?如果陈述似乎是最痛苦的,因为我们的最后一个产品在其生命周期中经历了大约20种不同的变化(这些变化在很长一段时间内得到支持,并且经常会有生命结束)
答案 0 :(得分:3)
您应该查看device tree:
设备树是用于描述硬件的数据结构。 给定正确的设备树,相同的编译内核可以支持更广泛的架构系列中的不同硬件配置。 Linux内核可以读取ARM,x86,MicroBlaze,PowerPC和SPARC体系结构中的设备树信息。对于ARM,所有新SoC都必须使用设备树。
一些链接: