Niezbędne opcje jądra .config

16

Jestem zainteresowany skompilowaniem niestandardowego jądra dla pi. Mam źródło z archiwum github , które zawiera make target dla domyślnej konfiguracji:

make ARCH=arm bcmrpi_defconfig

Ale (podobnie jak w przypadku zwykłych jąder Linuksa) zawiera wiele rzeczy, których nigdy nie będę potrzebował, i kilka rzeczy, które chciałbym zmienić.

Jakie są opcje, które są rzeczywiście wymagane, aby różne popularne rzeczy pi-centryczne działały?

Złotowłosa
źródło

Odpowiedzi:

25

Rozpoczęcie od domyślnej konfiguracji lub takiej, o której wiesz, że już działa, jest dobrym pomysłem. Uwaga, w przypadku Pi 2 należy użyć:

make bcm2709_defconfig

Zamiast bcmrpi_defconfig.

Zauważ, że jeśli chcesz uniknąć blokowania istniejącej instalacji jądra tej samej wersji, ustaw Ogólne ustawienia -> Wersja lokalna - dołącz do ciągu wydania jądra na unikalną wartość.

Użyłem .configstąd właściwych etykiet , sans CONFIG_ ; jeśli używasz np., make menuconfigmożesz znaleźć odpowiednią opcję za pomocą wyszukiwania (ukośnik /). Etykiety te są również używane u góry strony „Pomoc” dla każdej opcji. Zauważ, że termin enable (d) odnosi się do czegoś, co powoduje pojawienie się opcji, w odróżnieniu od faktycznego wyboru opcji do zbudowania.

Jeżeli istnieją różnice między płytami A / B / B + / A + a Pi 2, jest to zaznaczone. W niektórych miejscach jest to różnica między rodzinami Broadcom 2708 i 2709, ale w innych miejscach Pi 2 używa tej samej opcji 2708 (lub 2835) jak inne płyty.


System

W przypadku A / A + / B / B +:

  • ARCH_BCM2708 (typ systemu -> typ systemu uzbrojenia -> rodzina Broadcom BCM2708)

W przypadku Pi 2:

  • ARCH_BCM2709 (Typ systemu -> Typ uzbrojenia -> Rodzina Broadcom BCM2709) ... To jest na samym dole listy, a nie w kolejności alfabetycznej.
  • SMP (Funkcje jądra -> Symetryczne przetwarzanie wieloprocesowe)
  • NEON (Emulacja zmiennoprzecinkowa -> Zaawansowana obsługa rozszerzenia SIMD (Neon)) oraz „Obsługa NEON w trybie jądra”.

Podział pamięci jądra:

Z powodu problemów z kilkoma starszymi programami , domyślna konfiguracja może korzystać z 3G / 1G tutaj, co pozostawia 25% pamięci RAM Pi 2 niedostępne dla przestrzeni użytkownika. Jeśli martwisz się tym, sprawdź Funkcje jądra -> Podział pamięci .


karta SD

Oczywiście nie mogą to być moduły, ponieważ są potrzebne do uzyskania dostępu /lib/modules; muszą być wbudowane. Znajdują się one w sekcji „Sterowniki urządzeń” w menuconfig.

  • MMC (obsługa kart MMC / SD / SDIO): Niezbędne, aby uzyskać opcje dla sterownika mmc, ale niewystarczające. W ramach tych opcji:
    • MMC_BCM2835 (obsługa MMC w BCM2835).
    • MMC_BCM2835_DMA (obsługa DMA w kontrolerze Arasan BCM2835): Włączone, ale nie wybrane przez MMC_BCM2835.
    • MMC_SDHCI (obsługa interfejsu Secure Digital Host Controller Interface)

Ponieważ partycja główna jest zwykle sformatowana na zewnątrz, potrzebujesz również wbudowanej:

  • EXT4_FS (system plików Extended 4 (ext4)) w sekcji „Systemy plików”. Prawdopodobnie ext2 i ext3 też są dobrym pomysłem.

Partycja rozruchowa to vfat, więc:

  • VFAT_FS (obsługa fs VFAT (Windows-95)) znajduje się w „Systemach plików -> Systemy plików DOS / FAT / NT”.

Różne

Są to różne rzeczy, których (prawie na pewno) potrzebujesz, więc wymieniłem je najpierw.

  • VFP (matematyczne zmiennoprzecinkowe w formacie VFP) w części „Emulacja zmiennoprzecinkowa”.
  • UNIX (gniazda domeny Unix) w sekcji „Obsługa sieci”. Będzie to wymagało podstawowego oprogramowania systemowego, nawet jeśli nie wykonujesz prawdziwej pracy w sieci.
  • BINFMT_ELF (Wsparcie jądra dla plików binarnych ELF) w „Formatach binarnych przestrzeni użytkownika”.
  • TTY (Włącz TTY) w sekcji „Sterowniki urządzeń -> Urządzenia znaków”; włącza to VT (terminal wirtualny) i UNIX98_PTYS (obsługa PTY w Uniksie98), które należy wybrać. VT następnie włącza VT_CONSOLE (obsługa konsoli na terminalu wirtualnym) i CONSOLE_TRANSLATIONS (Włącz tłumaczenie znaków w konsoli), które również powinny zostać wybrane.
  • PROC_FS , SYSFS i TMPFS w sekcji „Systemy plików -> Pseudo systemy plików”.
  • SERIAL_AMBA_PL011 (obsługa portu szeregowego ARM AMBA PL011) w sekcji „Sterowniki urządzeń -> Urządzenia znaków -> Sterowniki szeregowe” i SERIAL_AMBA_PL011_CONSOLE (Obsługa konsoli na porcie szeregowym AMBA). Systemy Raspbian będą narzekać na „/ dev / ttyAMA0: Brak takiego pliku lub katalogu” bez tego.
  • MAILBOX i BCM2708_MBOX (w jądrach 4.x). Jest to Sterowniki urządzeń-> Obsługa sprzętu skrzynki pocztowej i opcja BCM 2708 w podmenu. Zobacz odpowiedź Zuba .

USB

  • USB (obsługa USB po stronie hosta), w „Sterownikach urządzeń -> Obsługa USB”, umożliwiając USB_DWCOTG (obsługa hosta DWC Synopsis) w dół strony, którą również należy wybrać.
  • USB_ANNOUNCE_NEW_DEVICES (Sterowniki urządzeń -> Obsługa USB -> USB ogłaszają nowe urządzenia).
  • USB_DEFAULT_PERSIST (Sterowniki urządzeń -> Obsługa USB -> Domyślnie włącz USB trwa ).

W przypadku klawiatur i myszy:

  • HID_GENERIC (Ogólny sterownik HID) w „Sterownikach urządzeń-> Obsługa HID”
  • Następnie w „Obsługa USB HID”: USB_HID (warstwa transportowa USB HID)
  • INPUT_MOUSEDEV (interfejs myszy) w „Sterownikach urządzeń -> Obsługa urządzeń wejściowych”.

W przypadku dysków twardych:

  • SCSI (obsługa urządzeń SCSI), a następnie BLK_DEV_SD (obsługa dysków SCSI) w „Sterownikach urządzeń -> Obsługa SCSI”.
  • USB_STORAGE (obsługa pamięci masowej USB) w „Sterownikach urządzeń -> Obsługa USB”.

W przypadku tetheringu urządzeń z Androidem zobacz moją odpowiedź tutaj .


Ethernet

Najpierw należy włączyć USB.

  • NET (obsługa sieci), opcja najwyższego poziomu; wewnątrz które są:

    • PAKIET (gniazdo pakietu).
    • INET (sieci TCP / IP). Powinno to umożliwić szereg domyślnych ustawień związanych z adresem IP, które można pozostawić.
    • NETFILTER ( Framework filtrowania pakietów sieciowych), niezbędny do zapory ogniowej filtru pakietów "tabel IP" w jądrze.
  • NETDEVICES (obsługa urządzeń sieciowych) w „Sterownikach urządzeń”, a następnie:

    • NET_CORE (obsługa podstawowych sterowników sieciowych).
    • USB_NET_DRIVERS (Adaptery sieciowe USB) ->
      • USB_USBNET (Multi-purpose USB Networking Framework).
      • USB_NET_SMSC95XX (urządzenia Ethernet 2.0 oparte na SMSC LAN95XX USB 2.0 10/100)

Dźwięk

Aby włączyć dźwięk na pokładzie:

  • DŹWIĘK (w sterownikach urządzeń), a następnie:
    • SND (Advanced Linux Sound Architecture) i tym, że:
    • SND_ARM (urządzenia dźwiękowe ARM) i wreszcie w tym SND_BCM2835 (sterownik ALSA BCM2835)

Wideo

  • CONFIG_BCM2708_VCHIQ (Sterowniki urządzeń -> Różne urządzenia -> Videocore VCHIQ).

Do obsługi serwera X nie trzeba nic więcej; nie ma opcji sterownika DRI dla SoC pi.

Jeśli chcesz korzystać z bufora ramki, która umożliwia takie aplikacje jak fbii omxplayerdo wyświetlania grafiki zewnętrznej X:

  • FB (Sterowniki urządzeń -> Obsługa grafiki -> Urządzenia bufora ramki -> Obsługa urządzeń buforujących ramki), a następnie w tym samym menu, FB_BCM2708 (obsługa bufora ramki BCM2708).

Jeśli to zrobisz i chcesz pingwina (a raczej maliny) na konsoli rozruchowej, pamiętaj LOGO (logo rozruchowe ) w obszarze Obsługa grafiki.

Możesz także spojrzeć na opcje w obszarze Typ systemu -> Implementacje Broadcom2708 (lub 9) .


GPIO / I 2 C.

  • BCM2708_GPIO (Typ systemu -> Implementacje Broadcom BCM2708) Lub dla Pi 2, odpowiednia opcja BCM2709.
  • GPIO_SYSFS (Sterowniki urządzeń -> Obsługa GPIO) dla /sys/class/gpiointerfejsu.
  • I2C (sterowniki urządzeń -> obsługa I2C), która włącza I2C_CHARDEV (interfejs urządzenia I2C). Następnie w sekcji „Obsługa magistrali sprzętowej I2C”:
    • I2C_BCM2708 (BCM2708 BSC).

Raspicam

  • MEDIA_CAMERA_SUPPORT (Sterowniki urządzeń -> Obsługa multimediów -> Obsługa kamer / grabberów wideo).
  • V4L_PLATFORM_DRIVERS ( Sterowniki urządzeń -> Obsługa multimediów -> Urządzenia platformy V4L "). To umożliwia podmenu, w którym chcesz wybrać:
    • CONFIG_SOC_CAMERA (obsługa kamery SoC).
    • CONFIG_VIDEO_BCM2835 (sterownik interfejsu kamery Broadcom BCM2835). Umożliwia to „sterownik interfejsu kamery Broadcom BM2835 MMAL ( CONFIG_VIDEO_BCM2835_MMAL ), który należy również wybrać.

Czujnik termiczny

Masz tutaj wybór; jeśli spróbujesz wybrać oba, pierwszy zostanie anulowany (chociaż możesz zbudować jeden jako moduł, zmienić konfigurację, zbudować drugi i użyć ich obu, jeśli naprawdę chcesz).

  • SENSORS_BCM2835 ( Sterowniki urządzeń-> Wsparcie monitorowania sprzętu-> Sterownik Broadcom BCM2835 HWMON). Znajduje się na dole listy, jeśli nie wybierzesz poniżej „BCM2835 Thermal Driver”. Daje dostęp do materiałów termicznych w /sys/devices/platform/bcm2835_hwmon- temp1_inputi temp1_max. Pierwsza jest taka sama /sys/devices/virtual/thermal/thermal_zone0/temp; ta ostatnia wynosi zawsze 85000 (tj. 85 ° C).
  • THERMAL_BCM2835 ( Sterowniki urządzeń-> Ogólny sterownik sysfs termiczny-> Sterownik termiczny BCM2835). Wybierz także Sterowniki urządzeń-> Wsparcie monitorowania sprzętu (ale nie indywidualny sterownik w tym menu), aby pojawiło się tutaj „Ujawnij czujniki termiczne jako urządzenie hwmon” i możesz to wybrać (4.0.y nie ma tego). Wybranie tego spowoduje odznaczenie SENSORS_BCM2835 powyżej. Daje dostęp do łatwiejszego do zapamiętania i znalezienia, /sys/class/devices/virtual/thermal/thermal_zone0które zawiera tempi trip_point_0_temp(to samo, co temp1_maxpowyżej). Różne monitory przestrzeni użytkownika prawdopodobnie wolą to i mogą bez niego nie działać.
Złotowłosa
źródło
5

Komentarz do świetnego postu goldilock:

Chciałem tylko dodać jedną rzecz, którą obserwuję w gałęzi rpi-4.1.y (05376fce25aaab4f47182a5af04928bfa06f30d6): Aby USB działało (w tym Ethernet podłączony do USB), należy również włączyć BCM2708_MBOX ( Sterowniki urządzeń-> Obsługa sprzętu skrzynki pocztowej- > Skrzynka pocztowa Broadcom BCM2708 (vcio)).

Bez tej opcji USB zaczyna się inicjować, ale generuje tylko kilka przerażających wiadomości, takich jak:

[    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 jest również warunkiem wstępnym dla THERMAL_BCM2835 i dla SND_BCM2835 .

zub
źródło
2

Wideo (bufor ramki)

Oprócz obsługi wideo wygląda na to, że musisz włączyć:

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

Aby poprawnie załadować sterownik bufora ramki. Możesz włączyć tę funkcję bez włączonej DMA, ale ładowanie się nie powiedzie.

Zintegrowany bezprzewodowy

Aby mieć zintegrowane połączenie bezprzewodowe (RPi 3 i Pi Zero W), musisz wybrać:

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
źródło
0

Może być stary, ale dotarłem tutaj za pomocą wyszukiwania. Do karty SDHC potrzebujesz dodatkowo

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

w przeciwnym razie twoje jądro wykryje kartę SDHC, ale nie będzie na niej żadnych partycji.

Walter Hüttenmeyer
źródło