2016-10-24 2 views
0

Мне нужно добавить какой-то конкретный код для ядра Linux, который я создаю.Как добавить файл доски в ядро ​​Linux и где его найти на «make menu config»?

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

У меня есть файл под названием arch/arm/myboard/myboard.c.

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

Как я могу сделать свою доску также здесь.

+1

Взгляните на Kconfig и Makefile в http://lxr.free-electrons.com/source/arch/arm/mach-imx/?v=4.4. Например, Kconfig объявляет переменную MACH_MX31MOBOARD, и эта переменная используется в Makefile для создания конкретного кода платы. – alexander

+1

На самом деле вы можете просто скорректировать информацию о платформе в драйвере устройства и использовать DT, когда хотите, чтобы они были настроены. – user3528438

+0

@ user3528438 Отличная идея, это сэкономит мне много времени. Сделайте это ответом, и я приму это. – fadedbee

ответ

2

Посмотрите на Makefile in the same directory. Для маха-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 kernel, используя сценарий 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.

Смежные вопросы