0

我需要将一些特定于板的代码添加到我正在构建的 Linux 内核中。

(我知道我应该已经在使用设备树了,但是我受到启发的驱动程序没有,而且我已经在早餐前学习了十几个新东西。添加设备树还将为调试添加另一组更改。一旦我的平台驱动程序/驱动程序使用板文件工作,我会将它们转换为设备树。)

我有一个名为arch/arm/myboard/myboard.c.

我在哪里可以找到现有的板文件make menuconfig?(如http://lxr.free-electrons.com/source/arch/arm/mach-imx/mach-mx31ads.c?v=4.4?)

我如何让我的董事会也出现在这里。

4

1 回答 1

3

看看在Makefile同一个目录下。对于mach-mx31ads.c,它有,

# i.MX31 based machines
 obj-$(CONFIG_MACH_MX31ADS) += mach-mx31ads.o

Kconfig 有对应的入口,

 config MACH_MX31ADS
         bool "Support MX31ADS platforms"
         default y
         select IMX_HAVE_PLATFORM_IMX_I2C
         select IMX_HAVE_PLATFORM_IMX_SSI
         select IMX_HAVE_PLATFORM_IMX_UART
         select SOC_IMX31
         help
           Include support for MX31ADS platform. This includes specific
           configurations for the board and its peripherals.

添加这些将为您的开发板提供一个 Kconfig 菜单项并构建文件。唯一缺少的其他部分是机器类型。您需要使用gen-mach-types脚本将其添加到由内核 makefile 处理的arm/tools/mach-type中,以创建生成的/mach-type.h。你在你的板文件中使用它来创建一个静态机器描述(放在一个特殊的部分)。

 MACHINE_START(MX31ADS, "Freescale MX31ADS")
         /* Maintainer: Freescale Semiconductor, Inc. */
         .atag_offset = 0x100,
         .map_io = mx31ads_map_io,
         .init_early = imx31_init_early,
         .init_irq = mx31ads_init_irq,
         .init_time      = mx31ads_timer_init,
         .init_machine = mx31ads_init,
         .restart        = mxc_restart,
 MACHINE_END

machine_desc结构位于arch.h中。您不需要添加所有元素,因为如果不存在它们将不会被调用。内核 init 看起来是机器 ATAG 并遍历这些部分以匹配引导加载程序传入的机器。machine_desc在 linux 引导的早期就在汇编程序中完成定位。

于 2016-12-28T15:30:42.687 回答