Ядро .config необходимые опции

16

Я заинтересован в составлении собственного ядра для пи. У меня есть источник из архива github , который включает цель make для конфигурации по умолчанию:

make ARCH=arm bcmrpi_defconfig

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

Какие варианты необходимы для того, чтобы заставить работать разные обычные пи-центричные вещи?

Златовласка
источник

Ответы:

25

Хорошей идеей будет начать с конфигурации по умолчанию, которая уже работает. Помните, что для Pi 2 вы должны использовать:

make bcm2709_defconfig

Вместо bcmrpi_defconfig.

Обратите внимание, что если вы хотите избежать путаницы в существующей установке ядра той же версии, задайте для параметра Общие настройки -> Локальная версия - добавьте к строке выпуска ядра уникальное значение.

Я использовал настоящие ярлыки .configотсюда, без CONFIG_ ; если вы используете, например, make menuconfigвы можете найти соответствующую опцию с поиском (косая черта /). Эти ярлыки также используются в верхней части страницы «Справка» для каждого параметра. Обратите внимание, что термин enable (d) относится к чему-то, что вызывает появление опции, в отличие от фактического выбора опции для сборки.

Если есть различия между платами A / B / B + / A + и Pi 2, это указывается. В некоторых местах это разница между семействами Broadcom 2708 и 2709, но в других местах Pi 2 использует ту же опцию 2708 (или 2835), что и другие платы.


система

Для A / A + / B / B +:

  • ARCH_BCM2708 (Тип системы -> Тип системы охраны -> Семейство Broadcom BCM2708)

Для Pi 2:

  • ARCH_BCM2709 (Тип системы -> Тип системы охраны -> Семейство Broadcom BCM2709) ... Это находится в самом низу списка, а не в алфавитном порядке.
  • SMP (функции ядра -> симметричная многопроцессорная обработка)
  • NEON (эмуляция с плавающей точкой -> расширенная поддержка SIMD (Neon)) и «поддержка NEON в режиме ядра».

Разделение памяти ядра:

Из-за проблем с несколькими частями устаревшего программного обеспечения в конфигурации по умолчанию может использоваться 3G / 1G, в результате чего 25% оперативной памяти Pi 2 будут недоступны для пользовательского пространства. Если вас это беспокоит, проверьте Функции ядра -> Разделение памяти .


SD Card

Это не могут быть модули, очевидно, так как они необходимы для доступа /lib/modules; они должны быть встроены. Они находятся в разделе «Драйверы устройств» menuconfig.

  • MMC (поддержка карт MMC / SD / SDIO): необходимо получить параметры для драйвера mmc, но недостаточно. В рамках этих вариантов:
    • MMC_BCM2835 (поддержка MMC на BCM2835).
    • MMC_BCM2835_DMA (поддержка DMA на контроллере BCM2835 Arasan): включен, но не выбран MMC_BCM2835.
    • MMC_SDHCI (поддержка интерфейса защищенного цифрового хост-контроллера)

Поскольку корневой раздел обычно имеет формат ext, вы также хотите встроенный:

  • EXT4_FS (расширенная 4 (ext4) файловая система) в разделе «Файловые системы». Возможно, ext2 и ext3 тоже хорошая идея.

Загрузочный раздел vfat, поэтому:

  • VFAT_FS (поддержка fs VFAT (Windows-95)) находится в разделе «Файловые системы -> Файловые системы DOS / FAT / NT».

Разнообразный

Это разные вещи, которые вам (почти наверняка) нужны, поэтому я перечислил их в первую очередь.

  • VFP (математика с плавающей запятой в формате VFP) в разделе «Эмуляция с плавающей запятой».
  • UNIX (доменные сокеты Unix) в разделе «Поддержка сети». Базовое системное программное обеспечение будет требовать этого, даже если вы не работаете в реальных сетях.
  • BINFMT_ELF (поддержка ядра для двоичных файлов ELF) в разделе «Двоичные форматы пространства пользователя ».
  • TTY (Включить TTY) в разделе «Драйверы устройств -> Символьные устройства»; это включает VT (Виртуальный терминал) и UNIX98_PTYS (поддержка Unix98 PTY), которые вы должны выбрать. Затем VT активирует VT_CONSOLE (поддержка консоли на виртуальном терминале) и CONSOLE_TRANSLATIONS (включить перевод символов в консоли), которые также должны быть выбраны.
  • PROC_FS , SYSFS и TMPFS в разделе «Файловые системы -> Псевдо файловые системы».
  • SERIAL_AMBA_PL011 (поддержка последовательного порта ARM AMBA PL011) в разделе «Драйверы устройств -> Символьные устройства -> Последовательные драйверы» и SERIAL_AMBA_PL011_CONSOLE (Поддержка консоли на последовательном порту AMBA). Raspbian системы будут жаловаться на «/ dev / ttyAMA0: нет такого файла или каталога» без этого.
  • ЯЩИК и BCM2708_MBOX (на 4.х ядер). Это Драйверы устройств-> Поддержка оборудования почтового ящика и опция BCM 2708 в подменю. Смотрите ответ зуба .

USB

  • USB (поддержка USB на стороне хоста) в разделе «Драйверы устройств -> Поддержка USB», включив USB_DWCOTG (поддержка хоста Synopsis DWC) вниз по странице, которую также следует выбрать.
  • USB_ANNOUNCE_NEW_DEVICES (Драйверы устройств -> Поддержка USB -> USB объявляет о новых устройствах).
  • USB_DEFAULT_PERSIST (Драйверы устройств -> Поддержка USB -> Включить сохранение USB по умолчанию).

Для клавиатур и мышей:

  • HID_GENERIC (универсальный драйвер HID) в разделе «Драйверы устройств -> поддержка HID»
  • Затем в «Поддержка USB HID»: USB_HID (транспортный уровень USB HID)
  • INPUT_MOUSEDEV (интерфейс мыши) в разделе «Драйверы устройств -> Поддержка устройств ввода».

Для жестких дисков:

  • SCSI (поддержка устройств SCSI), а затем BLK_DEV_SD (поддержка дисков SCSI) в разделе «Драйверы устройств -> Поддержка SCSI».
  • USB_STORAGE (поддержка USB Mass Storage) в разделе «Драйверы устройств -> Поддержка USB».

Для привязки устройств Android, смотрите мой ответ здесь .


Ethernet

USB должен быть включен первым.

  • NET (поддержка сети), опция верхнего уровня; внутри это:

    • ПАКЕТ (Пакетная розетка).
    • INET (сеть TCP / IP). Это должно включить различные значения по умолчанию, связанные с IP, которые вы можете оставить.
    • NETFILTER ( Фреймворк сетевой фильтрации пакетов), необходимый для брандмауэра фильтра пакетов ядра ip tables.
  • NETDEVICES (поддержка сетевых устройств) в разделе «Драйверы устройств», затем:

    • NET_CORE (поддержка драйвера сетевого ядра).
    • USB_NET_DRIVERS (сетевые адаптеры USB) ->
      • USB_USBNET (многоцелевой сетевой интерфейс USB).
      • USB_NET_SMSC95XX (основанные на SMSC LAN95XX устройства USB 2.0 10/100 Ethernet)

Звук

Чтобы включить встроенный звук:

  • SOUND (в драйверах устройств), затем:
    • SND (Advanced Linux Sound Architecture) и в этом:
    • SND_ARM (звуковые устройства ARM) и, наконец, SND_BCM2835 (драйвер ALSA BCM2835)

видео

  • CONFIG_BCM2708_VCHIQ (Драйверы устройств -> Разные устройства -> Videocore VCHIQ).

Больше ничего не требуется для поддержки X-сервера; для SoC пи нет опций драйвера DRI.

Если вы хотите использовать кадровый буфер, который позволяет таким приложениям, как fbiи omxplayerотображать графику вне X:

  • FB (Драйверы устройств -> Поддержка графики -> Устройства с буфером кадров -> Поддержка устройств с буфером кадров), затем в том же меню FB_BCM2708 (поддержка кадрового буфера BCM2708).

Если вы делаете это и хотите, чтобы пингвин (или, скорее, малина) на загрузочной консоли, помните LOGO (логотип загрузки) в разделе «Поддержка графики».

Вы также можете посмотреть опции в Тип системы -> Broadcom2708 (или 9) Реализации .


GPIO / I 2 C

  • BCM2708_GPIO (Тип системы -> Реализация Broadcom BCM2708) Или для Pi 2 соответствующая опция BCM2709.
  • GPIO_SYSFS (Драйверы устройств -> Поддержка GPIO) для /sys/class/gpioинтерфейса.
  • I2C (драйверы устройств -> поддержка I2C), который включает I2C_CHARDEV (интерфейс устройства I2C). Затем в разделе «Поддержка аппаратной шины I2C»:
    • I2C_BCM2708 (BCM2708 BSC).

Raspicam

  • MEDIA_CAMERA_SUPPORT (Драйверы устройств -> Поддержка мультимедиа -> Поддержка камер / видеозахвата).
  • V4L_PLATFORM_DRIVERS (Драйверы устройств-> Поддержка мультимедиа -> Устройства на платформе V4L "). Это открывает подменю, в котором вы хотите выбрать:
    • CONFIG_SOC_CAMERA (поддержка камеры SoC).
    • CONFIG_VIDEO_BCM2835 (драйвер интерфейса камеры Broadcom BCM2835). Это активирует драйвер интерфейса камеры Broadcom BM2835 MMAL ( CONFIG_VIDEO_BCM2835_MMAL ), который также следует выбрать.

Термодатчик

У вас есть выбор здесь; если вы попытаетесь выбрать оба, первый будет отменен (хотя вы можете собрать один как модуль, изменить конфигурацию, собрать другой и использовать их оба, если вы действительно этого хотите).

  • SENSORS_BCM2835 (Драйверы устройств-> Поддержка мониторинга оборудования-> Драйвер Broadcom BCM2835 HWMON). Это внизу списка, если вы не выбрали «BCM2835 Thermal Driver», ниже. Это дает вам доступ к тепловому материалу в /sys/devices/platform/bcm2835_hwmon- temp1_inputи temp1_max. Первое то же самое /sys/devices/virtual/thermal/thermal_zone0/temp; последний всегда 85000 (т.е. 85 ° C).
  • THERMAL_BCM2835 (Драйверы устройств -> Общий драйвер Thermal sysfs-> BCM2835 Thermal Driver). Также выберите «Драйверы устройств» - «Поддержка аппаратного мониторинга» (но не отдельный драйвер в этом меню), чтобы здесь отображалось сообщение «Выставлять термодатчики как устройство hwmon», и вы можете выбрать его (в версии 4.0.y этого нет). При выборе этого варианта будет выбран SENSORS_BCM2835 выше. Это дает вам доступ к легче запомнить и найти, /sys/class/devices/virtual/thermal/thermal_zone0что включает в себя tempи trip_point_0_temp(так же, как temp1_maxи выше). Различные мониторы пользовательского пространства, вероятно, предпочтут это и могут не работать без него.
Златовласка
источник
5

Комментарий к великому сообщению Златовласки:

Я просто хотел добавить одну вещь, которую я наблюдаю в ветке rpi-4.1.y (05376fce25aaab4f47182a5af04928bfa06f30d6): Для того, чтобы USB работал (включая Ethernet-соединение с USB), необходимо также включить BCM2708_MBOX (Драйверы устройств-> Поддержка оборудования почтовых ящиков- > Broadcom BCM2708 Почтовый ящик (vcio)).

Без этой опции USB начинает инициализацию, но выдает только несколько страшных сообщений, таких как:

[    1.193854] WARN::dwc_otg_core_reset:5109: dwc_otg_core_reset() HANG! Soft Reset GRSTCTL=80000001
[    1.441137] WARN::dwc_otg_hcd_init:1047: FIQ DMA bounce buffers: virt = 0x9fc0c000 dma = 0x5d5e4000 len=9024

Btw. BCM2708_MBOX также является предварительным условием для THERMAL_BCM2835 и для SND_BCM2835 .

Зуб
источник
2

Видео (фреймбуфер)

В дополнение к поддержке видео, похоже, вам нужно включить:

Device Drivers ->
  DMA Engine support ->
    BCM2835 DMA engine support (CONFIG_DMA_BCM2835)

Для правильной загрузки драйвера фреймбуфера. Вы можете включить его без DMA, но он не загрузится.

Встроенный беспроводной

Для того, чтобы иметь встроенный беспроводной (RPi 3 и Pi Zero W), вам необходимо выбрать следующее:

Networking support ->
  Wireless ->
    cfg80211 - wireless configuration API (CONFIG_CFG80211)

Device Drivers ->
  Network device support ->
    Wireless LAN ->
      Broadcom IEEE802.11n embedded FullMAC WLAN driver (CONFIG_BRCMFMAC)
Maxux
источник
0

Может быть, старый, но я попал сюда с помощью поиска. Для карты SDHC вам дополнительно понадобится

Device Drivers -> -> MMC block device driver )CONFIG_MMC_BLOCK)

в противном случае ваше ядро ​​обнаружит SDHC-карту, но на ней нет разделов.

Вальтер Хюттенмейер
источник