Machine type的匹配

在文章《ARM linux kernel从入口到start_kernel代码分析 -- 只到machine type选中为止》中,bootloader将machine type(是一个数字)放在了R5寄存器里面,然后linux kernel枚举所有machine type数字,找到匹配的,然后执行machine_desc结构中的一系列初始化函数。

那在编写kernel driver的时候,如何给板子申明一个machine type的数字?

这个数字就是machine_desc结构中nr这个member的值。当使用MACHINE_START宏定义自己板子的machine_desc结构的时候,假设给自己的板子起名为AAA,那么会自动生成一个常量宏定义MACH_TYPE_AAA,付给nr这个member。

所以问题就是这个MACH_TYPE_AAA是在哪里定义的。grep一下代码就可以发现是在目录:include/generated/mach-types.h文件中定义的。从目录名字就可以看到这个文件是自动生成的,我们需要填写的配置文件位于:arch/arm/tools/mach-types。

在这个目录下有个脚本叫gen-mach-types,运行这个就会更新include/generated/mach-types.h了。

BTW:bootloader中有一些内容需要保证和kernel中的一致,比如这个machine type的数字,还有bootparam在内存中的地址等。

你可能感兴趣的:(type)