Armbian – kompilace jádra a chybějících modulů

Autor: | 12. 5. 2020 | IT, Linux

Během připojování sdílených složek (SAMBA) na mikropočítači Espressobin jsem narazil na problém s kódováním složek s Českými znaky. Při hledání řešení jsem zjistil, že mi v jádře schází modul nls_utf8.ko. K získání modulu jsem musel zkompilovat jádro. Není to nikterak složitá záležitost, nicméně pár tipů může ušetřit dost času. Pro kompilaci kernelu ve Virtualboxu počítejte s volným místem na disku kolem 25-30 GB.

MOUNT ERROR: Can not access shared library

Vše začalo při mountování síťového disku, ve chvíli, kdy jsem zadal kódování znaků v utf-8.

root@espressobin:/mnt# mount -t cifs -o iocharset=utf8 //cubieboard/movies /movies
Password for root@//cubieboard/movies:  
mount error(79): Can not access a needed shared library
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

Příčina problému spočívala v neexistenci modulu nls_utf8.ko v jádře. To jsem si vzápětí potvrdil výpisem o zkompilovaných modulech v jádře:

root@espressobin:/home/user# grep -i nls_utf8 /boot/config*
# CONFIG_NLS_UTF8 is not set

Pro úplnost ještě uvádím výpis s verzí mého aktuálního jádra:

root@espressobin:~# 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 jádra distribuce debian

Abych si nezaplnil systém nepotřebnými balíčky, provedl jsem kompilaci ve VirtualBoxu na image Ubuntu 20.04. Použil jsem serverovou verzi, na kompilaci je dostačující. Následně jsem postupoval podle příručky.

git clone --depth 1 https://github.com/armbian/build
cd build

 

Když jsem pokračoval v kompilaci, zjistil jsem, že se zkompilovala jiná větev jádra než jsem měl aktuálně použitou. A tomu jsem se chtěl vyhnout, protože bych musel vyměnit i celé jádro. Mým záměrem byla pouze kompilaci modulu pro existující jádro. Pro kompilace mojí větve jádra bylo nutné udělat mezikrok a zadat, kterou větev chci kompilovat.

echo "KERNELBRANCH='tag:v4.19.113'" > build/userpatches/lib.config

Pak už stačilo pokračovat podle návodu a spustit kompilaci pro espressobin.

V rámci postupu jsem zvolil, které moduly chci dále kompilovat. Kompilací mě provedlo grafické rozhraní, nicméně pro kompilaci jádra lze použít i příkazovou řádku.

./compile.sh  BOARD=espressobin BRANCH=current BUILD_DESKTOP=no KERNEL_ONLY=yes KERNEL_CONFIGURE=yes

 

Instalace vybraného zkompilovaného modulu

Balíčky jsou po kompilaci ve složce build/output/debs. Zajímal mě konkrétně tento: ​linux-image-current-mvebu64_20.05.0-trunk_arm64.deb. Po rozbalení jsem zkopíroval soubor nls_utf8.ko (/lib/modules/4.19.113-mvebu64/kernel/fs/nls) do součaného souborového systému. Posledním krokem je aktualizace databáze modulů a připojení síťového disku opět mohlo začít fungovat. Příkaz na aktualizaci modulů:

depmod -a

Další články