====== Armbian: kompilace jádra a chybějících modulů ======
//Vytvořeno: **12.5.2020**//
> **Poznámka k aktuálnosti:** Toto je dobový článek. Postup odpovídá tehdejší větvi Armbianu a kernelu 4.19 pro Espressobin a dnes už nemusí být potřeba nebo může fungovat jinak.
Na [[hardware:jednodeskove-pocitace:espressobin:uvod|Espressobinu]] jsem při připojování CIFS sdílení narazil na problém s českými znaky. Chyběl mi modul ''nls_utf8.ko'', takže jsem musel zkompilovat jádro nebo aspoň jeho moduly pro existující verzi kernelu.
===== Jak se problém projevil =====
Při mountování síťového disku s ''iocharset=utf8'' jsem dostal chybu:
mount -t cifs -o iocharset=utf8 //cubieboard/movies /movies
mount error(79): Can not access a needed shared library
Příčina byla v tom, že v jádře chyběl modul ''nls_utf8.ko''. Ověření přes konfiguraci jádra:
grep -i nls_utf8 /boot/config*
Výstup:
# CONFIG_NLS_UTF8 is not set
Pro úplnost jsem si zkontroloval i běžící verzi jádra:
uname -a
Linux espressobin 4.19.113-mvebu64 #20.02.7 SMP PREEMPT Sat Mar 28 16:42:32 CET 2020 aarch64 GNU/Linux
===== Kompilace Armbian jádra mimo cílový stroj =====
Abych si nezaplnil samotný Espressobin balíčky pro build, dělal jsem kompilaci ve [[https://www.virtualbox.org/|VirtualBoxu]] na [[https://ubuntu.com/|Ubuntu 20.04]]. Pro build bylo rozumné počítat s 25–30 GB volného místa.
Základní příprava podle [[https://docs.armbian.com/Developer-Guide_Build-Preparation/|Developer Guide Build Preparation]]:
git clone --depth 1 https://github.com/armbian/build
cd build
Nejdřív jsem zjistil, že build bere jinou větev jádra, než jakou jsem měl na zařízení. Chtěl jsem ale zůstat u existující verze a jen do ní dopočítat chybějící modul. Proto bylo potřeba vynutit konkrétní větev:
echo "KERNELBRANCH='tag:v4.19.113'" > userpatches/lib.config
Pak už šla spustit kompilace pro Espressobin:
./compile.sh BOARD=espressobin BRANCH=current BUILD_DESKTOP=no KERNEL_ONLY=yes KERNEL_CONFIGURE=yes
Ukázky z build procesu:
{{hardware:jednodeskove-pocitace:espressobin:pasted:armbian-kernel-compilation1.png}}
{{hardware:jednodeskove-pocitace:espressobin:pasted:armbian-kernel-compilation2.png}}
{{hardware:jednodeskove-pocitace:espressobin:pasted:armbian-kernel-compilation3.png}}
{{hardware:jednodeskove-pocitace:espressobin:pasted:armbian-kernel-compilation4.png}}
===== Instalace jen vybraného modulu =====
Po kompilaci vznikly balíčky ve složce ''build/output/debs''. Zajímal mě hlavně balíček ''linux-image-current-mvebu64_20.05.0-trunk_arm64.deb''. Po rozbalení jsem z něj vytáhl soubor ''nls_utf8.ko'' z cesty:
/lib/modules/4.19.113-mvebu64/kernel/fs/nls
Ten jsem zkopíroval do aktuálního systému na Espressobinu a pak aktualizoval databázi modulů:
depmod -a
Tím znovu začalo fungovat mountování CIFS sdílení s UTF-8 kódováním.
===== Zdroje =====
* [[https://docs.armbian.com/Developer-Guide_Build-Preparation/|Developer Guide Build Preparation]]
* [[https://github.com/armbian/build/issues/1941|Module nls_utf8 linux-mvebu64]]
* [[https://forum.armbian.com/topic/6-how-to-build-my-own-image-or-kernel/|How to build my own image or kernel?]]
* [[https://forum.armbian.com/topic/7798-how-to-build-specific-kernel/|How to build specific kernel]]
* [[https://forum.openmediavault.org/index.php?thread/21466-solved-remote-mount-plugin-how-to-mount-an-hdd-that-is-connected-to-a-fritz-box/|How to mount HDD that is connected to a Fritz]]