Как добавить файл платы в ядро 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.