Как добавить файл платы в ядро ​​Linux и где его найти в "make menu config"?

Мне нужно добавить какой-то специфичный для платы код в ядро ​​Linux, которое я создаю.

(Я знаю, что уже должен использовать дерево устройств, но драйвер, которым я вдохновляюсь, этого не делает, и я уже изучаю дюжину новых вещей перед завтраком. Добавление дерева устройств также добавит еще один набор изменений в отладку. Как только у меня будут драйверы / драйверы платформы, использующие файл платы, я преобразую их в дерево устройств.)

У меня есть файл с именем arch/arm/myboard/myboard.c,

Где я могу найти существующие файлы доски в make menuconfig? (Например, http://lxr.free-electrons.com/source/arch/arm/mach-imx/mach-mx31ads.c?v=4.4?)

Как мне сделать так, чтобы моя доска появилась здесь?

1 ответ

Посмотрите на 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 и создаст файл. Единственный другой недостающий элемент - это тип машины. Вам необходимо добавить это в arm / tools / mach-type, который обрабатывается make-файлом ядра с помощью сценария gen-mach-types, чтобы создать сгенерированный файл / 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.

Другие вопросы по тегам