Kernel .config opciones necesarias

16

Estoy interesado en compilar un kernel personalizado para el pi. Tengo la fuente del archivo github , que incluye un destino de creación para una configuración predeterminada:

make ARCH=arm bcmrpi_defconfig

Pero (como con los núcleos normales de distribución de Linux) esto incluye muchas cosas que nunca necesitaré, y algunas cosas que me gustaría cambiar.

¿Cuáles son las opciones que realmente se requieren para hacer que funcionen varias cosas comunes centradas en pi?

Ricitos de oro
fuente

Respuestas:

25

Comenzar con la configuración predeterminada, o una que ya sabe que funciona, es una buena idea. Tenga en cuenta que para el Pi 2 , debe usar:

make bcm2709_defconfig

En lugar de bcmrpi_defconfig.

Tenga en cuenta que si desea evitar bloquear una instalación de kernel existente de la misma versión, configure la Configuración general -> Versión local - agregue la cadena de liberación del kernel a un valor único.

He usado las etiquetas reales desde .configaquí, sin CONFIG_ ; si está utilizando, por ejemplo, make menuconfigpuede encontrar la opción relevante con la búsqueda (barra diagonal /). Estas etiquetas también se utilizan en la parte superior de la página de "Ayuda" para cada opción. Tenga en cuenta que el término habilitar (d) se refiere a algo que hace que aparezca una opción, distinta de seleccionar realmente la opción a construir.

Donde hay diferencias entre los tableros A / B / B + / A + y el Pi 2, esto se indica. En algunos lugares, esta es la diferencia entre las familias Broadcom 2708 y 2709, pero en otros lugares, el Pi 2 usa la misma opción 2708 (o 2835) que las otras placas.


Sistema

Para A / A + / B / B +:

  • ARCH_BCM2708 (Tipo de sistema -> Tipo de sistema de brazo -> Familia Broadcom BCM2708)

Para Pi 2:

  • ARCH_BCM2709 (Tipo de sistema -> Tipo de sistema de armado -> Familia Broadcom BCM2709) ... Esto se encuentra al final de la lista y no en orden alfabético.
  • SMP (Características del núcleo -> Procesamiento múltiple simétrico)
  • NEON (Emulación de punto flotante -> Soporte avanzado de extensión SIMD (Neon)) Y "Soporte para NEON en modo kernel".

Kernel Memory Split:

Debido a problemas con un par de piezas de software heredado , la configuración predeterminada puede usar 3G / 1G aquí, lo que dejará el 25% de la RAM de Pi 2 no disponible para el espacio del usuario. Si le preocupa esto, verifique las Características del núcleo -> División de memoria .


tarjeta SD

Estos no pueden ser módulos, obviamente, ya que son necesarios para acceder /lib/modules; deben estar incorporados. Están en la sección "Controladores de dispositivo" de menuconfig.

  • MMC (soporte de tarjeta MMC / SD / SDIO): necesario para obtener opciones para el controlador mmc, pero no suficiente. Dentro de esas opciones:
    • MMC_BCM2835 (soporte MMC en BCM2835).
    • MMC_BCM2835_DMA (soporte DMA en el controlador Arasan BCM2835): habilitado pero no seleccionado por MMC_BCM2835.
    • MMC_SDHCI (compatibilidad con la interfaz Secure Digital Host Controller)

Dado que la partición raíz generalmente tiene un formato ext, también desea que esté integrada:

  • EXT4_FS (El sistema de archivos extendido 4 (ext4)) en "Sistemas de archivos". Probablemente ext2 y ext3 también sean una buena idea.

La partición de arranque es vfat, entonces:

  • VFAT_FS (VFAT (Windows-95) fs support) está en "Sistemas de archivos -> Sistemas de archivos DOS / FAT / NT".

Diverso

Estas son varias cosas que (casi con toda seguridad) necesita, así que las he enumerado primero.

  • VFP (matemática de punto flotante en formato VFP) en "Emulación de punto flotante".
  • UNIX (zócalos de dominio Unix) en "Soporte de redes". El software del sistema básico requerirá esto incluso si no está haciendo ninguna red real.
  • BINFMT_ELF (soporte de kernel para binarios ELF) en "Formatos binarios de espacio de usuario".
  • TTY (Habilite TTY) en "Controladores de dispositivo -> Dispositivos de caracteres"; esto habilita VT (terminal virtual) y UNIX98_PTYS (soporte Unix98 PTY) que debe seleccionar. VT luego habilita VT_CONSOLE (Soporte para consola en terminal virtual) y CONSOLE_TRANSLATIONS (Habilita traducciones de caracteres en consola) que también deben seleccionarse.
  • PROC_FS , SYSFS y TMPFS en "Sistemas de archivos -> Pseudo sistemas de archivos".
  • SERIAL_AMBA_PL011 (soporte de puerto serie AMB PL011 de ARM) en "Controladores de dispositivo -> Dispositivos de caracteres -> Controladores de serie" y SERIAL_AMBA_PL011_CONSOLE (Soporte para consola en puerto serie AMBA). Los sistemas Raspbian se quejarán de "/ dev / ttyAMA0: No existe tal archivo o directorio" sin esto.
  • BUZÓN y BCM2708_MBOX (4.x en granos). Esto es Controladores de dispositivo-> Soporte de hardware de buzón y la opción BCM 2708 en el submenú. Ver la respuesta de zub .

USB

  • USB (Soporte para USB del lado del host), en "Controladores de dispositivo -> Soporte USB", habilitando USB_DWCOTG (Sinopsis de soporte del host DWC) en la página, que también debe seleccionarse.
  • USB_ANNOUNCE_NEW_DEVICES (Controladores de dispositivo -> Soporte USB -> USB anuncia nuevos dispositivos).
  • USB_DEFAULT_PERSIST (Controladores de dispositivo -> Soporte USB -> Activar persistencia USB por defecto).

Para teclados y ratones:

  • HID_GENERIC (controlador HID genérico) en "Controladores de dispositivo-> Soporte HID"
  • Luego, en "Soporte USB HID": USB_HID (capa de transporte USB HID)
  • INPUT_MOUSEDEV (interfaz del mouse) en "Controladores de dispositivo -> Soporte de dispositivo de entrada".

Para discos duros:

  • SCSI (soporte de dispositivo SCSI) y luego BLK_DEV_SD (soporte de disco SCSI) en "Controladores de dispositivo -> Soporte SCSI".
  • USB_STORAGE (soporte de almacenamiento masivo USB) en "Controladores de dispositivo -> Soporte USB".

Para conectar dispositivos Android, vea mi respuesta aquí .


Ethernet

El USB debe estar habilitado primero.

  • NET (soporte de red), una opción de nivel superior; dentro de eso están:

    • PAQUETE (zócalo de paquete).
    • INET (redes TCP / IP). Esto debería permitir una variedad de valores predeterminados relacionados con IP que puede dejar.
    • NETFILTER (marco de filtrado de paquetes de red), necesario para el cortafuegos del filtro de paquetes "tablas ip" del núcleo.
  • NETDEVICES (soporte de dispositivo de red) en "Controladores de dispositivo", luego:

    • NET_CORE (soporte de controlador de núcleo de red).
    • USB_NET_DRIVERS (adaptadores de red USB) ->
      • USB_USBNET (Marco de red USB multipropósito).
      • USB_NET_SMSC95XX (dispositivos Ethernet 2.0 10/100 basados ​​en SMSC LAN95XX)

Sonido

Para habilitar el sonido integrado:

  • SONIDO (en Controladores de dispositivo), luego:
    • SND (Advanced Linux Sound Architecture) y en eso:
    • SND_ARM (dispositivos de sonido ARM) y finalmente en ese SND_BCM2835 (controlador ALSA BCM2835)

Vídeo

  • CONFIG_BCM2708_VCHIQ (Controladores de dispositivo -> Varios dispositivos -> Videocore VCHIQ).

No se necesita nada más para el soporte del servidor X; no hay opciones de controlador DRI para el SoC del pi.

Si desea usar el framebuffer, que permite que aplicaciones como fbiy omxplayermuestren gráficos fuera de X:

  • FB (Controladores de dispositivo -> Soporte de gráficos -> Dispositivos de búfer de cuadro -> Soporte para dispositivos de búfer de cuadro), luego en el mismo menú, FB_BCM2708 ( Soporte de búfer de cuadro BCM2708).

Si hace esto y quiere el pingüino (o más bien, la frambuesa) en la consola de arranque, recuerde LOGO (logotipo de arranque) en Soporte de gráficos.

También es posible que desee ver las opciones en Tipo de sistema -> Implementaciones Broadcom2708 (o 9) .


GPIO / I 2 C

  • BCM2708_GPIO (Tipo de sistema -> Implementaciones Broadcom BCM2708) O para Pi 2, la opción BCM2709 correspondiente.
  • GPIO_SYSFS (Controladores de dispositivo -> Soporte GPIO) para la /sys/class/gpiointerfaz.
  • I2C (Controladores de dispositivo -> Soporte I2C), que habilita I2C_CHARDEV (interfaz de dispositivo I2C). Luego, en "Soporte de bus de hardware I2C":
    • I2C_BCM2708 (BCM2708 BSC).

Raspicam

  • MEDIA_CAMERA_SUPPORT (Controladores de dispositivo -> Soporte multimedia -> Soporte de cámaras / video grabbers).
  • V4L_PLATFORM_DRIVERS ( Controladores de dispositivo-> Soporte multimedia -> Dispositivos de plataforma V4L "). Esto habilita un submenú donde desea seleccionar:
    • CONFIG_SOC_CAMERA (SoC Camera Support).
    • CONFIG_VIDEO_BCM2835 (controlador de interfaz de cámara Broadcom BCM2835). Esto habilita el controlador de interfaz de cámara Broadcom BM2835 MMAL ( CONFIG_VIDEO_BCM2835_MMAL ) que también debe seleccionar.

Sensor termal

Tienes una opción aquí; si intenta elegir ambos, el primero se cancelará (aunque puede compilar uno como módulo, cambiar la configuración, compilar el otro y usarlos ambos si realmente lo desea).

  • SENSORS_BCM2835 ( Controladores de dispositivo-> Soporte de monitoreo de hardware-> Controlador Broadcom BCM2835 HWMON). Esto se encuentra al final de la lista si no selecciona "Controlador térmico BCM2835", a continuación. Le da acceso a material térmico en /sys/devices/platform/bcm2835_hwmon- temp1_inputy temp1_max. Lo primero es lo mismo /sys/devices/virtual/thermal/thermal_zone0/temp; este último es siempre 85000 (es decir, 85 ° C).
  • THERMAL_BCM2835 ( Controladores de dispositivo-> Controlador sysfs térmico genérico-> Controlador térmico BCM2835). También elija Controladores de dispositivo-> Soporte de monitoreo de hardware (pero no el controlador individual en ese menú) para que aparezca "Exponer sensores térmicos como dispositivo hwmon" aquí y puede elegir eso (4.0.y parece no tener esto). Al elegir esto, se elegirá SENSORS_BCM2835, arriba. Le da acceso a lo más fácil de recordar y encontrar, /sys/class/devices/virtual/thermal/thermal_zone0que incluye tempy trip_point_0_temp(lo mismo que temp1_maxarriba). Varios monitores de espacio de usuario probablemente preferirán esto y pueden no funcionar sin él.
Ricitos de oro
fuente
5

Un comentario a la gran publicación de goldilock:

Solo quería agregar una cosa que observo con la rama rpi-4.1.y (05376fce25aaab4f47182a5af04928bfa06f30d6): para que el USB funcione (esto incluye el ethernet conectado a USB), uno también debe habilitar BCM2708_MBOX (Controladores de dispositivo-> Soporte de hardware de buzón- > Buzón Broadcom BCM2708 (vcio)).

Sin esta opción, el USB comienza a inicializarse pero solo produce un montón de mensajes de miedo como:

[    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

Por cierto. BCM2708_MBOX también es un requisito previo para THERMAL_BCM2835 y para SND_BCM2835 .

zub
fuente
2

Video (framebuffer)

Además del soporte de video, parece que necesita habilitar:

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

Para cargar el controlador framebuffer correctamente. Puede habilitarlo sin DMA habilitado, pero no se cargará.

Inalámbrico integrado

Para tener Wireless integrado (RPi 3 y Pi Zero W), debe seleccionar lo siguiente:

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
fuente
0

Podría ser viejo, pero llegué aquí usando la búsqueda. Para la tarjeta SDHC, también necesita

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

de lo contrario, su núcleo detectará la tarjeta SDHC, pero no las particiones.

Walter Hüttenmeyer
fuente