Konfiguracja Linux Kernela na Raspberry Pi


Linux Kernel to w wielkim skrócie jest to najważniejsza część systemu operacyjnego – zajmuje się ochroną pamięci, zarządza sprzętem oraz schedulingiem czyli ustala kiedy jaki proces może się wykonywać.

Z tego poradnika dowiesz się:

  • Jak ściągnąć źródła kernela dla RPi
  • Co można zmienić w konfiguracji i jak ją odpalić
  • W jaki sposób przetestować zmiany

Wstęp

Ten wpis jest materiałem uzupełniającym dla poradnika video – znajdziesz go pod tym linkiem:

Nie musimy zaczynać od zera – możemy wgrać na kartę SD software przygotowany przez RPi foundation. Dzięki temu będziemy mieli od razu gotowy firmware oraz rootfs. Będziemy mogli się skupić tylko na konfiguracji kernela.

Przed kompilacją musimy zainstalować kilka programów niezbędnych do kompilacji oraz cross compilation toolchain. Cross compilation albo kompilacja skrośna, oznacza, że będziemy kompilować software na inną architekturę niż komputer na którym pracujemy. Mój laptop jest na x86 a raspbery na ARM. Taki sposób działania jest znacznie wygodniejszy niż kompilacja natywna na raspberry.

Skrypt sprawdzający czy programy są zainstalowane:

#!/bin/bash

# List of required programs
REQUIRED_PROGRAMS=(bc bison flex libssl-dev make libncurses5-dev crossbuild-essential-arm64)

# Track missing programs
MISSING_PROGRAMS=()

# Check if each program is installed
for program in "${REQUIRED_PROGRAMS[@]}"; do
    if ! dpkg -s "$program" &> /dev/null; then
        MISSING_PROGRAMS+=("$program")
    fi
done

# Output results
if [ ${#MISSING_PROGRAMS[@]} -eq 0 ]; then
    echo "All required programs are installed."
else
    echo "Missing programs: ${MISSING_PROGRAMS[*]}"
    echo "You can install them using:"
    echo "sudo apt update && sudo apt install -y ${MISSING_PROGRAMS[*]}"
fi

Jeśli jakikolwiek z nich nie jest zainstalowany – możesz posłużyć się następującymi komendami (działają na Ubuntu):

sudo apt install bc bison flex libssl-dev make libc6-dev libncurses5-dev
sudo apt install crossbuild-essential-arm6

crossbuild-essential-arm6 to nazwa toolchaina, za pomocą którego można kompilować i budować programy na architekturę ARM64 (czyli nasze Raspberry Pi).

Kompilacja i konfiguracja

Zaczynamy od ściągnięcia repozytorium ze źródłami kernela i wstępnej konfiguracji:

git clone --depth=1 https://github.com/raspberrypi/linux

cd linux

KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs 

Zmiany w konfiguracji można wprowadzić za pomocą narzędzia menuconfig:

make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig

Wgranie obrazu

Poniższe komendy wgrywają skompilowane pliki na kartę SD

lsblk # sprawdzamy gdzie podmontowała się partycja karty SD

KERNEL=kernel8

mkdir -p ~/mnt
mkdir -p ~/mnt/boot
mkdir -p ~/mnt/root
sudo mount /dev/SDX1 ~/mnt/boot
sudo mount /dev/SDX2 ~/mnt/root

#instalacja modułów
sudo env PATH=$PATH make -j12 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=~/mnt/root modules_install

# kopiujemy pliki wynikowe
sudo cp arch/arm64/boot/Image ~/mnt/boot/$KERNEL-test.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb ~/mnt/boot/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* ~/mnt/boot/overlays/
sudo cp arch/arm64/boot/dts/overlays/README ~/mnt/boot/overlays/
sudo umount ~/mnt/boot
sudo umount ~/mnt/root

dopisujemy zmianę w config.txt:
echo "kernel=$KERNEL-test.img" >> config.txt 

Należy podmienić wartości SDX1 i SDX2 na odczytane z polecenia lsblk. W moim przypadku były to sda1 oraz sda2

Oficjalna dokumentacja

https://www.raspberrypi.com/documentation/computers/linux_kernel.html


Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *