内核对新板子的支持

ARM 78浏览

arch目录下是不同的架构,比如arm、mips、x86架构等,在arm架构文件夹里,是当前内核已经支持的板子(是具体的板子,不是cpu,也不是soc),比如arm里面的mach-omap1文件夹、mach-omap2文件夹、mach-zynq文件夹、mach-imx文件夹都代表内核支持的一些板子,这些文件夹里定义了一个或者多个machine_desc的结构体(用宏DT_MACHINE_START创建),一个machine_desc对象在内核中表示一个板子(内核通过machine_desc结构体来控制系统体系架构相关部分的初始化,比如cpu的初始化、中断控制器的初始化等)。自己做了板子后,先从arch/arm/文件夹下查看当前内核已经支持的板子(即查找DT_MACHINE_START部分),看那个支持的板子和自己的板子相似、兼容(是否兼容,需要具体查看machine_desc结构体的成员),比如我的板子和内核已经支持的板子IMX6Q兼容(即io映射、中断初始化等操作相同),则我们的板子的machine_desc就选这个了,就不用自己重新添加一个machine_desc的定义了(IMX6Q的machine_desc的定义的代码位置是:DT_MACHINE_START(IMX6Q,
"Freescale i.MX6 Quad/DualLite (Device Tree)"))。自己做的板子的名字是在dts里描述的,即根节点的compatible属性里,根节点的compatible属性里包括自己板子的名字,以及这个板子兼容的板子的名称。比如我做的imx的板子兼容内核已经支持的板子IMX6Q的板子,在这个根节点的compatible属性里添加上"fsl,imx6q",这个名字是IMX6Q的machine_desc的结构体里的dt_compat这个成员包含的名字。内核启动的时候,通过把自己的板子的dts里的根节点的compatible属性和编进内核中多个machine_desc进行匹配,找到最兼容的machine_desc(我的板子最终会把IMX6Q的machine_desc作为自己的machine_desc),并根据machine_desc对板子进行初始化。