Kompilacja kernela dla Raspberry Pi

 

Poniższy poradnik przedstawia kompilacje jądra w systemie Debian squeeze. Tak skompilowane jądro działa z obrazami Debiana oraz Arch Linux dla Raspberry Pi.

Przygotowanie systemu

Instalujemy klucze publiczne do repozytorium.

# apt-get install emdebian-archive-keyring

Dodajemy poniższy wpis do repozytorium Debiana ( /etc/apt/sources.list ).

deb http://www.emdebian.org/debian squeeze main

Instalujemy wymagane pakiety oraz biblioteki.

# apt-get install git-core g++-4.4-arm-linux-gnueabi xapt

Tworzymy katalog oraz ściągamy źródła i narzędzia z repozytorium git.

mkdir raspberrypi
cd raspberrypi
git clone https://github.com/raspberrypi/tools.git
git clone https://github.com/raspberrypi/linux.git
cd linux

Kompilacja jądra

Generujemy podstawowy plik konfiguracyjny kernela ( .config ).

make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- bcmrpi_cutdown_defconfig

Jeżeli chcemy wprowadzić swoje ustawienia w jądrze wykonujemy polecenie:

make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- menuconfig

Po dokonaniu odpowiednich zmian zapisujemy i wychodzimy z menu konfiguracyjnego. Teraz możemy rozpocząć budowę jądra. Aby przyspieszyć proces kompilacji możemy użyć flagi J. Zalecana wartość to ilość rdzeni + 1 ( np. wartość 5 jeśli masz procesor czterordzeniowy ).

make ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- -k -j5

Po pomyślnej kompilacji jądra musimy jeszcze zbudować moduły. Tworzymy katalog dla modułów.

mkdir ../modules

Następnie kompilujemy oraz „instalujemy” moduły do uprzednio utworzonego katalogu.

make modules_install ARCH=arm CROSS_COMPILE=/usr/bin/arm-linux-gnueabi- INSTALL_MOD_PATH=../modules/

Instalacja nowego jądra

Narzędziem imagetool-uncompressed.py przygotowujemy jądro dla Raspberry Pi.

cd ../tools/mkimage/
. / ImageTool-uncompressed.py .. /.. / linux / arch / arm / boot / Image
W przypadku gdy dostaniemy poniższy komunikat instalujemy paczkę python2.6 oraz linkujemy go.
/usr/bin/env: python2: Nie ma takiego pliku ani katalogu
sudo ln -s /usr/bin/python2.6 /usr/bin/python2

Usuwamy stare jądro na karcie SD i przenosimy nowe.

sudo rm /media/boot-partition-uuid/kernel.img
sudo mv kernel.img /media/boot-partition-uuid/

Usuwamy katalogi modules, firmware z całą ich zawartością. Znajdują się one na partycji systemowej Raspberry Pi.

sudo rm -rf /media/rootfs-partition-uuid/lib/modules/
sudo rm -rf /media/rootfs-partition-uuid/lib/firmware/

Kopiujemy nowe katalogi modules, firmware z całą ich zawartością w miejsce starych. Robimy zapis na karcie.

cd ../../modules/
sudo cp -a lib/modules/ /media/rootfs-partition-uuid/lib/
sudo cp -a lib/firmware/ /media/rootfs-partition-uuid/lib/
sync

Teraz mamy już gotowy system z nowym jądrem dla Raspberry Pi. Możemy uruchomić malinę i zobaczyć owoc naszej pracy 🙂