Kernel .config opsi yang diperlukan

16

Saya tertarik mengkompilasi kernel khusus untuk pi. Saya memiliki sumber dari arsip github , yang mencakup target make untuk konfigurasi default:

make ARCH=arm bcmrpi_defconfig

Tetapi (seperti kernel distro linux normal) ini termasuk banyak hal yang tidak akan saya perlukan, dan beberapa hal yang ingin saya ubah.

Apa saja pilihan yang benar-benar diperlukan untuk membuat berbagai hal pi-sentris yang umum berfungsi?

goldilocks
sumber

Jawaban:

25

Memulai dengan konfigurasi default, atau yang Anda tahu sudah berfungsi, adalah ide yang bagus. Waspadalah bahwa untuk Pi 2 , Anda harus menggunakan:

make bcm2709_defconfig

Alih-alih bcmrpi_defconfig.

Perhatikan bahwa jika Anda ingin menghindari penginstalan instalasi kernel yang ada dari versi yang sama, atur Setup umum -> Versi lokal - tambahkan ke string rilis kernel ke nilai unik.

Saya telah menggunakan label aktual dari .configsini, sans CONFIG_ ; jika Anda menggunakan misalnya,, make menuconfigAnda dapat menemukan opsi yang relevan dengan pencarian (garis miring /). Label ini juga digunakan di bagian atas halaman "Bantuan" untuk setiap opsi. Perhatikan bahwa istilah enable (d) mengacu pada sesuatu yang menyebabkan opsi muncul, berbeda dengan memilih opsi yang akan dibangun.

Jika ada perbedaan antara papan A / B / B + / A + dan Pi 2, ini ditunjukkan. Di beberapa tempat ini adalah perbedaan antara keluarga Broadcom 2708 dan 2709, tetapi di tempat lain, Pi 2 menggunakan opsi 2708 (atau 2835) yang sama dengan papan lainnya.


Sistem

Untuk A / A + / B / B +:

  • ARCH_BCM2708 (Tipe Sistem -> Tipe Sistem Arm -> keluarga Broadcom BCM2708)

Untuk Pi 2:

  • ARCH_BCM2709 (Tipe Sistem -> Tipe Sistem Arm -> keluarga Broadcom BCM2709) ... Ini ada di bagian paling bawah dari daftar dan bukan dalam urutan abjad.
  • SMP (Fitur Kernel -> Symmetric Multi-Processing)
  • NEON (Floating Point Emulation -> Dukungan Ekstensi SIMD (Neon) Lanjut) Dan "Dukungan untuk NEON dalam mode kernel".

Pemecahan Memori Kernel:

Karena masalah dengan beberapa perangkat lunak warisan , konfigurasi default dapat menggunakan 3G / 1G di sini yang akan membuat 25% dari RAM Pi 2 tidak tersedia untuk ruang pengguna. Jika Anda khawatir tentang ini, periksa Fitur Kernel -> Memory Split .


kartu SD

Ini tidak bisa berupa modul, karena mereka diperlukan untuk mengakses /lib/modules; mereka harus built-in. Mereka ada di bagian "Device Drivers" di menuconfig.

  • MMC (dukungan kartu MMC / SD / SDIO): Diperlukan untuk mendapatkan opsi untuk driver mmc, tetapi tidak cukup. Di dalam opsi-opsi itu:
    • MMC_BCM2835 (dukungan MMC pada BCM2835).
    • MMC_BCM2835_DMA (dukungan DMA pada kontroler Arasan BCM2835): Diaktifkan tetapi tidak dipilih oleh MMC_BCM2835.
    • MMC_SDHCI (dukungan Antarmuka Pengendali Host Digital Aman)

Karena partisi root biasanya diformat ekst, Anda juga menginginkan itu dibangun di:

  • EXT4_FS (Sistem file Extended 4 (ext4)) di bawah "Sistem File". Mungkin ext2 dan ext3 juga merupakan ide bagus.

Partisi boot adalah vfat, jadi:

  • VFAT_FS (VFAT (Windows-95) dukungan fs) berada di bawah "Sistem File -> Sistem File DOS / FAT / NT".

Lain-lain

Ini adalah berbagai hal yang Anda (hampir pasti) butuhkan, jadi saya telah mendaftarkannya terlebih dahulu.

  • VFP (matematika floating point format-VFP) di bawah "Emulasi titik mengambang".
  • UNIX (soket domain Unix) di bawah "Dukungan jaringan". Perangkat lunak sistem dasar akan memerlukan ini bahkan jika Anda tidak melakukan jaringan nyata.
  • BINFMT_ELF (Dukungan kernel untuk binari ELF) dalam "format biner Userspace".
  • TTY (Aktifkan TTY) di bawah "Device Drivers -> Character Devices"; ini memungkinkan VT (terminal Virtual) dan UNIX98_PTYS (dukungan Unix98 PTY) yang harus Anda pilih. VT kemudian mengaktifkan VT_CONSOLE (Dukungan untuk konsol pada terminal virtual) dan CONSOLE_TRANSLATIONS (Aktifkan terjemahan karakter di konsol) yang juga harus dipilih.
  • PROC_FS , SYSFS , dan TMPFS di bawah "Sistem File -> Sistem File Pseudo".
  • SERIAL_AMBA_PL011 (dukungan port serial ARM AMBA PL011) di bawah "Device Drivers -> Device Character -> Serial Drivers" dan SERIAL_AMBA_PL011_CONSOLE (Dukungan untuk konsol pada port serial AMBA). Sistem raspbian akan mengeluh tentang "/ dev / ttyAMA0: Tidak ada file atau direktori" tanpa ini.
  • MAILBOX dan BCM2708_MBOX (pada kernel 4.x). Ini adalah Device Drivers-> Dukungan Perangkat Keras Kotak Surat dan opsi BCM 2708 di submenu. Lihat jawaban zub .

USB

  • USB (Dukungan untuk USB sisi Host), dalam "Device Drivers -> USB Support", mengaktifkan USB_DWCOTG (dukungan host DWC Sinopsis) di bawah halaman, yang juga harus dipilih.
  • USB_ANNOUNCE_NEW_DEVICES (Driver Perangkat -> Dukungan USB -> USB mengumumkan perangkat baru).
  • USB_DEFAULT_PERSIST (Driver Perangkat -> Dukungan USB -> Aktifkan USB tetap ada secara default).

Untuk keyboard dan mouse:

  • HID_GENERIC (Generic HID driver) di "Device Drivers-> HID support"
  • Kemudian di "Dukungan USB HID": USB_HID (lapisan transport USB HID)
  • INPUT_MOUSEDEV (Antarmuka tetikus) di "Driver Perangkat -> Dukungan Perangkat Input".

Untuk hard drive:

  • SCSI (dukungan perangkat SCSI) dan kemudian BLK_DEV_SD (dukungan disk SCSI) di "Device Drivers -> SCSI Support".
  • USB_STORAGE (dukungan Penyimpanan Massal USB) di "Driver Perangkat -> Dukungan USB".

Untuk tethering perangkat Android, lihat jawaban saya di sini .


Ethernet

USB harus diaktifkan terlebih dahulu.

  • NET (Dukungan jaringan), opsi tingkat atas; di dalamnya adalah:

    • PAKET (Soket paket).
    • INET (jaringan TCP / IP). Ini harus memungkinkan berbagai standar terkait IP yang dapat Anda tinggalkan.
    • NETFILTER (Kerangka pemfilteran paket jaringan), diperlukan untuk firewall filter paket kernel "ip tables".
  • NETDEVICES (Dukungan perangkat jaringan) di "Device Drivers", lalu:

    • NET_CORE (Dukungan driver inti jaringan).
    • USB_NET_DRIVERS (Adaptor Jaringan USB) ->
      • USB_USBNET (Kerangka Jaringan USB Multiguna).
      • USB_NET_SMSC95XX (perangkat USB 2.0 10/100 ethernet berbasis SMSC LAN95XX)

Suara

Untuk mengaktifkan suara onboard:

  • SUARA (dalam Driver Perangkat), maka:
    • SND (Advanced Linux Sound Architecture) dan dalam hal itu:
    • SND_ARM (perangkat suara ARM) dan akhirnya dalam SND_BCM2835 (driver BCM2835 ALSA)

Video

  • CONFIG_BCM2708_VCHIQ (Driver Perangkat -> Perangkat Lain-lain -> Videocore VCHIQ).

Tidak ada lagi yang diperlukan untuk dukungan server X; tidak ada opsi driver DRI untuk pi SoC.

Jika Anda ingin menggunakan framebuffer, yang memungkinkan aplikasi seperti fbidan omxplayeruntuk menampilkan grafik di luar X:

  • FB (Driver Perangkat -> Dukungan Grafik -> Perangkat penyangga bingkai -> Dukungan untuk perangkat penyangga bingkai), kemudian dalam menu yang sama, FB_BCM2708 (BCM2708 dukungan framebuffer).

Jika Anda melakukan ini dan Anda ingin penguin (atau lebih tepatnya, raspberry) di konsol boot, ingat LOGO (logo Bootup) di bawah Dukungan Grafik.

Anda mungkin juga ingin melihat opsi di bawah Jenis Sistem -> Broadcom2708 (atau 9) Implementasi .


GPIO / I 2 C

  • BCM2708_GPIO (Jenis Sistem -> Broadcom Implementasi BCM2708) Atau untuk Pi 2, opsi BCM2709 yang sesuai.
  • GPIO_SYSFS (Driver Perangkat -> Dukungan GPIO) untuk /sys/class/gpioantarmuka.
  • I2C (Device Drivers -> I2C support), yang memungkinkan I2C_CHARDEV (antarmuka perangkat I2C). Kemudian di bawah "dukungan I2C Hardware Bus":
    • I2C_BCM2708 (BCM2708 BSC).

Raspicam

  • MEDIA_CAMERA_SUPPORT (Driver perangkat -> Dukungan Multimedia -> Dukungan kamera / penyambar video).
  • V4L_PLATFORM_DRIVERS ( Driver perangkat-> Dukungan Multimedia -> Perangkat Platform V4L "). Ini memungkinkan submenu tempat Anda ingin memilih:
    • CONFIG_SOC_CAMERA (Dukungan SoC Camera).
    • CONFIG_VIDEO_BCM2835 (driver antarmuka kamera Broadcom BCM2835). Ini mengaktifkan "driver antarmuka kamera Broadcom BM2835 MMAL ( CONFIG_VIDEO_BCM2835_MMAL ) yang juga harus Anda pilih.

Sensor termal

Anda punya pilihan di sini; jika Anda mencoba memilih keduanya, yang pertama akan dibatalkan (meskipun Anda dapat membangun satu sebagai modul, mengubah konfigurasi, membangun yang lain, dan menggunakannya keduanya jika Anda benar-benar ingin).

  • SENSORS_BCM2835 ( Driver Perangkat-> Dukungan Pemantauan Perangkat Keras-> Broadcom BCM2835 HWMON Driver). Ini di bagian bawah daftar jika Anda tidak memilih "Driver Thermal BCM2835", di bawah ini. Ini memberi Anda akses ke hal-hal termal di /sys/devices/platform/bcm2835_hwmon- temp1_inputdan temp1_max. Yang pertama adalah sama /sys/devices/virtual/thermal/thermal_zone0/temp; yang terakhir selalu 85000 (yaitu 85 ° C).
  • THERMAL_BCM2835 (Device Drivers-> Generic Thermal sysfs driver-> BCM2835 Thermal Driver). Juga pilih Device Drivers-> Hardware Monitoring support (tetapi bukan driver individual di menu itu) sehingga "Ekspos sensor termal sebagai perangkat hwmon" muncul di sini dan Anda dapat memilih itu (4.0.y tampaknya tidak memiliki ini). Memilih ini akan membatalkan pilihan SENSORS_BCM2835, di atas. Ini memberi Anda akses ke yang lebih mudah diingat dan menemukan /sys/class/devices/virtual/thermal/thermal_zone0yang termasuk tempdan trip_point_0_temp(sama seperti temp1_max, di atas). Berbagai pemantau userspace mungkin akan memilih ini dan mungkin tidak akan berfungsi tanpanya.
goldilocks
sumber
5

Komentar untuk posting bagus goldilock:

Hanya ingin menambahkan satu hal yang saya amati dengan rpi-4.1.y cabang (05376fce25aaab4f47182a5af04928bfa06f30d6): Untuk memiliki kerja USB (ini termasuk ethernet yang terhubung dengan USB), kita juga harus mengaktifkan BCM2708_MBOX (Device Drivers-> Mailbox Hardware Support- > Broadcom BCM2708 Mailbox (vcio)).

Tanpa opsi ini USB mulai diinisialisasi tetapi hanya menghasilkan banyak pesan menakutkan seperti:

[    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 juga merupakan prasyarat untuk THERMAL_BCM2835 dan untuk SND_BCM2835 .

zub
sumber
2

Video (framebuffer)

Selain dukungan video, sepertinya Anda harus mengaktifkan:

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

Untuk memuat driver framebuffer dengan benar. Anda dapat mengaktifkannya tanpa DMA diaktifkan, tetapi gagal memuat.

Nirkabel Terpadu

Untuk memiliki Wireless Terpadu (RPi 3 dan Pi Zero W), Anda harus memilih yang berikut ini:

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

Mungkin sudah tua, tapi saya sampai di sini menggunakan pencarian. Untuk kartu SDHC Anda juga perlu

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

jika tidak, kernel Anda akan mendeteksi kartu SDHC, tetapi tidak ada partisi di dalamnya.

Walter Hüttenmeyer
sumber