Opções necessárias do kernel .config

16

Estou interessado em compilar um kernel personalizado para o pi. Eu tenho a fonte do arquivo morto do github , que inclui um destino de make para uma configuração padrão:

make ARCH=arm bcmrpi_defconfig

Mas (como nos kernels de distribuição Linux normais), isso inclui muitas coisas de que nunca precisarei e algumas coisas que gostaria de mudar.

Quais são as opções realmente necessárias para que várias coisas comuns centradas em pi funcionem?

Cachinhos Dourados
fonte

Respostas:

25

Começar com a configuração padrão, ou uma que você já conhece, é uma boa ideia. Cuidado para o Pi 2 , você deve usar:

make bcm2709_defconfig

Em vez de bcmrpi_defconfig.

Observe que se você quiser evitar sobrecarregar uma instalação existente do kernel da mesma versão, defina a Configuração geral -> Versão local - anexa à cadeia de liberação do kernel com um valor único.

Eu usei os rótulos reais .configdaqui, sem CONFIG_ ; se você estiver usando, por exemplo, make menuconfigpoderá encontrar a opção relevante com a pesquisa (barra /). Esses rótulos também são usados ​​na parte superior da página "Ajuda" de cada opção. Observe que o termo enable (d) refere-se a algo que faz com que uma opção apareça, diferente de realmente selecionar a opção a ser construída.

Onde houver diferenças entre as placas A / B / B + / A + e o Pi 2, isso é indicado. Em alguns lugares, essa é a diferença entre as famílias Broadcom 2708 e 2709, mas em outros lugares, o Pi 2 usa a mesma opção 2708 (ou 2835) das outras placas.


Sistema

Para A / A + / B / B +:

  • ARCH_BCM2708 (Tipo de sistema -> Tipo de sistema de braço -> família Broadcom BCM2708)

Para o Pi 2:

  • ARCH_BCM2709 (Tipo de sistema -> Tipo de sistema de braço -> família Broadcom BCM2709) ... Está na parte inferior da lista e não em ordem alfabética.
  • SMP (Recursos do kernel -> Multiprocessamento simétrico)
  • NEON (Emulação de ponto flutuante -> Suporte avançado à extensão SIMD (Neon)) E "Suporte ao NEON no modo kernel".

Divisão de Memória do Kernel:

Devido a problemas com algumas partes do software legado , a configuração padrão pode usar 3G / 1G aqui, o que deixará 25% da RAM do Pi 2 indisponível para o espaço do usuário. Se você está preocupado com isso, consulte Recursos do Kernel -> Divisão de Memória .


cartão SD

Estes não podem ser módulos, obviamente, pois são necessários para acessar /lib/modules; eles devem estar embutidos. Eles estão na seção "Drivers de dispositivo" do menuconfig.

  • MMC (suporte ao cartão MMC / SD / SDIO): necessário para obter opções para o driver mmc, mas não suficiente. Dentro dessas opções:
    • MMC_BCM2835 (suporte ao MMC no BCM2835).
    • MMC_BCM2835_DMA (suporte ao DMA no controlador BCM2835 Arasan): Ativado, mas não selecionado por MMC_BCM2835.
    • MMC_SDHCI (suporte à interface do Secure Digital Host Controller Controller)

Como a partição raiz geralmente é formatada ext, você também deseja que ela seja incorporada:

  • EXT4_FS (o sistema de arquivos estendido 4 (ext4)) em "Sistemas de arquivos". Provavelmente ext2 e ext3 também são uma boa ideia.

A partição de inicialização é vfat, então:

  • O VFAT_FS ( suporte ao VFAT (Windows-95) fs) está em "Sistemas de Arquivos -> Sistemas de Arquivos DOS / FAT / NT".

Diversos

Essas são várias coisas que você (quase certamente) precisa, então as listei primeiro.

  • VFP (matemática de ponto flutuante no formato VFP) em "Emulação de ponto flutuante".
  • UNIX (soquetes de domínio Unix) em "Suporte de rede". O software básico do sistema exigirá isso, mesmo se você não estiver fazendo nenhuma rede real.
  • BINFMT_ELF (Suporte do kernel para binários ELF) em "Formatos binários do espaço do usuário".
  • TTY (Ative TTY) em "Drivers de dispositivo -> Dispositivos de caracteres"; isso habilita o VT (terminal virtual) e o UNIX98_PTYS (suporte ao Unix98 PTY) que você deve selecionar. O VT ativa o VT_CONSOLE (suporte para console no terminal virtual) e CONSOLE_TRANSLATIONS (ativar a conversão de caracteres no console) que também devem ser selecionados.
  • PROC_FS , SYSFS e TMPFS em "Sistemas de arquivos -> Pseudo sistemas de arquivos".
  • SERIAL_AMBA_PL011 (suporte à porta serial ARM AMBA PL011) em "Drivers de dispositivo -> Dispositivos de caracteres -> Drivers seriais" e SERIAL_AMBA_PL011_CONSOLE (suporte para console na porta serial AMBA). Os sistemas Raspbian reclamarão de "/ dev / ttyAMA0: Esse arquivo ou diretório não existe" sem isso.
  • MAILBOX e BCM2708_MBOX (nos kernels 4.x). Trata-se de Drivers de Dispositivo-> Suporte de Hardware da Caixa de Correio e a opção BCM 2708 no submenu. Veja a resposta do zub .

USB

  • USB (suporte para USB do host), em "Drivers de dispositivo -> suporte USB", ativando USB_DWCOTG (suporte ao host DWC de sinopse) na página, que também deve ser selecionada.
  • USB_ANNOUNCE_NEW_DEVICES (Drivers de dispositivo -> Suporte USB -> USB anunciam novos dispositivos).
  • USB_DEFAULT_PERSIST (Drivers de dispositivo -> Suporte USB -> Ativar USB persistir por padrão).

Para teclados e mouses:

  • HID_GENERIC (driver HID genérico) em "Drivers de dispositivo -> suporte HID"
  • Depois, em "Suporte USB HID": USB_HID (camada de transporte USB HID)
  • INPUT_MOUSEDEV (interface do mouse) em "Drivers de dispositivo -> Suporte ao dispositivo de entrada".

Para discos rígidos:

  • SCSI (suporte a dispositivo SCSI) e, em seguida, BLK_DEV_SD (suporte a disco SCSI) em "Drivers de dispositivo -> Suporte a SCSI".
  • USB_STORAGE (suporte a USB Mass Storage) em "Drivers de dispositivo -> Suporte USB".

Para amarrar dispositivos Android, veja minha resposta aqui .


Ethernet

O USB deve estar ativado primeiro.

  • NET (suporte de rede), uma opção de nível superior; dentro que são:

    • PACOTE (soquete do pacote).
    • INET (rede TCP / IP). Isso deve permitir uma variedade de padrões relacionados ao IP que você pode deixar.
    • NETFILTER (estrutura de filtragem de pacotes de rede), necessário para o firewall de filtro de pacotes "tabelas ip" do kernel.
  • NETDEVICES (suporte a dispositivo de rede) em "Drivers de dispositivo" e, em seguida:

    • NET_CORE (Suporte ao driver principal da rede).
    • USB_NET_DRIVERS (adaptadores de rede USB) ->
      • USB_USBNET (Estrutura de rede USB multifuncional).
      • USB_NET_SMSC95XX (dispositivos Ethernet USB 2.0 10/100 baseados em SMSC LAN95XX)

Som

Para ativar o som integrado:

  • SOUND (em Drivers de dispositivo), então:
    • SND (Advanced Linux Sound Architecture) e em que:
    • SND_ARM (dispositivos de som ARM) e, finalmente, nesse SND_BCM2835 (driver BCM2835 ALSA)

Vídeo

  • CONFIG_BCM2708_VCHIQ (Drivers de dispositivo -> Dispositivos diversos -> Videocore VCHIQ).

Não há mais nada necessário para o suporte ao servidor X; não há opções de driver DRI para o SoC do pi.

Se você deseja usar o framebuffer, que permite aplicativos como fbie omxplayerexibir gráficos fora do X:

  • FB (Drivers de dispositivo -> Suporte gráfico -> Dispositivos de buffer de quadro -> Suporte para dispositivos de buffer de quadro) e, em seguida, no mesmo menu, FB_BCM2708 (suporte ao buffer de quadro BCM2708).

Se você fizer isso e quiser o pinguim (ou melhor, a framboesa) no console de inicialização, lembre-se de LOGO (logotipo de inicialização ) em Suporte gráfico.

Você também pode consultar as opções em Tipo de Sistema -> Implementações Broadcom2708 (ou 9) .


GPIO / I 2 C

  • BCM2708_GPIO (Tipo de sistema -> Implementações do Broadcom BCM2708) Ou, para o Pi 2, a opção BCM2709 correspondente.
  • GPIO_SYSFS (Drivers de dispositivo -> Suporte GPIO) para a /sys/class/gpiointerface.
  • I2C (Drivers de dispositivo -> suporte ao I2C), que ativa o I2C_CHARDEV (interface do dispositivo I2C). Em "Suporte ao barramento de hardware I2C":
    • I2C_BCM2708 (BCM2708 BSC).

Raspicam

  • MEDIA_CAMERA_SUPPORT (Drivers de dispositivo -> Suporte multimídia -> Suporte de câmeras / captadores de vídeo).
  • V4L_PLATFORM_DRIVERS ( Drivers de dispositivo -> Suporte multimídia -> Dispositivos de plataforma V4L "). Isso habilita um submenu onde você deseja selecionar:
    • CONFIG_SOC_CAMERA (suporte à câmera SoC).
    • CONFIG_VIDEO_BCM2835 (driver de interface de câmera Broadcom BCM2835). Isso habilita o "driver de interface de câmera Broadcom BM2835 MMAL ( CONFIG_VIDEO_BCM2835_MMAL ) que você também deve selecionar.

Sensor térmico

Você tem uma escolha aqui; se você tentar escolher os dois, o primeiro será cancelado (embora você possa criar um como módulo, altere a configuração, construa o outro e use os dois se realmente quiser).

  • SENSORS_BCM2835 ( Drivers de dispositivo-> suporte ao Monitoramento de Hardware-> Driver Broadcom BCM2835 HWMON). Isso fica no final da lista, se você não selecionar "Driver térmico BCM2835" abaixo. Dá acesso a material térmico em /sys/devices/platform/bcm2835_hwmon- temp1_inpute temp1_max. O primeiro é o mesmo /sys/devices/virtual/thermal/thermal_zone0/temp; o último é sempre 85000 (ou seja, 85 ° C).
  • THERMAL_BCM2835 ( Drivers de dispositivo-> Driver sysfs térmico genérico-> Driver térmico BCM2835). Escolha também Drivers de dispositivo-> Suporte ao monitoramento de hardware (mas não o driver individual nesse menu) para que "Expor sensores térmicos como dispositivo hwmon" apareça aqui e você possa escolher isso (4.0.y parece não ter isso). A escolha dessa opção removerá SENSORS_BCM2835 acima. Dá acesso ao mais fácil de lembrar e encontrar o /sys/class/devices/virtual/thermal/thermal_zone0que inclui tempe trip_point_0_temp(o mesmo que temp1_max, acima). Vários monitores do espaço do usuário provavelmente preferem isso e podem não funcionar sem ele.
Cachinhos Dourados
fonte
5

Um comentário ao ótimo post de goldilock:

Só queria adicionar uma coisa que observo com o ramo rpi-4.1.y (05376fce25aaab4f47182a5af04928bfa06f30d6): Para que o USB funcione (isso inclui a Ethernet conectada por USB), é necessário também ativar o BCM2708_MBOX (Drivers de dispositivo-> Suporte de hardware de caixa de correio- > Caixa de correio Broadcom BCM2708 (vcio)).

Sem essa opção, o USB começa a inicializar, mas produz apenas várias mensagens assustadoras, 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

Btw. BCM2708_MBOX também é um pré-requisito para THERMAL_BCM2835 e SND_BCM2835 .

zub
fonte
2

Vídeo (framebuffer)

Além do suporte a vídeo, parece que você precisa ativar:

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

Para carregar o driver do framebuffer corretamente. Você pode habilitá-lo sem o DMA ativado, mas ele falhará ao carregar.

Wireless Integrado

Para ter o Wireless Integrado (RPi 3 e Pi Zero W), é necessário selecionar o seguinte:

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

Pode ser velho, mas cheguei aqui usando a pesquisa. Para o cartão SDHC, você precisa adicionalmente

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

caso contrário, seu kernel detectará o cartão SDHC, mas não haverá partições nele.

Walter Hüttenmeyer
fonte