Как пересобрать ядро Linux для увеличения количества одновременно используемых USB устройств в Linux
Проверить с каким количеством одновременно используемых USB устройств скомпилировано ваше ядро можно выполнив в консоли:
su –
uname –a
Видим:
Linux debian10-64-1 4.19.0-16-amd64 #1 SMP Debian 4.19.181-1 (2021-03-19) x86_64 GNU/Linux
modprobe vhci-hcd
modprobe usbip-core
modprobe usbip-host
cat /sys/devices/platform/vhci_hcd.0/status
Видим:
hub port sta spd dev sockfd local_busid
hs 0000 004 000 00000000 000000 0-0
hs 0001 004 000 00000000 000000 0-0
hs 0002 004 000 00000000 000000 0-0
hs 0003 004 000 00000000 000000 0-0
hs 0004 004 000 00000000 000000 0-0
hs 0005 004 000 00000000 000000 0-0
hs 0006 004 000 00000000 000000 0-0
hs 0007 004 000 00000000 000000 0-0
ss 0008 004 000 00000000 000000 0-0
ss 0009 004 000 00000000 000000 0-0
ss 0010 004 000 00000000 000000 0-0
ss 0011 004 000 00000000 000000 0-0
ss 0012 004 000 00000000 000000 0-0
ss 0013 004 000 00000000 000000 0-0
ss 0014 004 000 00000000 000000 0-0
ss 0015 004 000 00000000 000000 0-0
(Часть пути “…/vhci_hcd/… в вашей ОС может иметь вид “…/vhci_hcd.0/…” и т.п. в зависимости от количества хост контроллеров)
ls /sys/devices/platform/ | grep vh
Видим:
vhci_hcd.0
vhci_hcd.1
vhci_hcd.2
vhci_hcd.3
Это 4 виртуальных контроллера по 8 usb устройств => 32 usb устройства.
Подготовка к сборке ядра Linux
Для того что бы собрать ядро, нужно скачать его исходники на сайте https://www.kernel.org/.
Для этого переходим на сайт, находим нужное ядро, копируем ссылку на его закачку (будет использована для wget, см ниже).
На диске должно быть достаточно свободного места (от 30Г).
Далее:
apt install build-essential git gcc make bc fakeroot dpkg-dev libncurses5-dev libelf-dev libssl-dev bison flex bc rsync
mkdir ~/kernel; cd ~/kernel
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.10.41.tar.xz
tar -xaf ./linux-5.10.41.tar.xz
cp /boot/config-4.19.0-16-amd64 ~/kernel/linux-5.10.41/.config
cd ~/kernel/linux-5.10.41
nano .config
Меняем:
CONFIG_USBIP_VHCI_HC_PORTS=15
CONFIG_USBIP_VHCI_NR_HCS=8
Убрать из .config строки с
CONFIG_SYSTEM_TRUSTED_KEYRING
CONFIG_SYSTEM_TRUSTED_KEYS
(иначе будет ошибка: "Нет правила для сборки цели «debian/certs/debian-uefi-certs.pem»")
Компилируем (долго, 3 – 15 часов)
make deb-pkg LOCALVERSION=-usb120 KDEB_PKGVERSION=$(make kernelversion)-1
По завершении:
ls ../*.deb
Видим:
../linux-headers-5.10.41- usb120_4.19.181-1_amd64.deb
../linux-image-5.10.4 - usb120-dbg_4.19.181-1_amd64.deb
../linux-image-5.10.41- usb120_4.19.181-1_amd64.deb
../linux-libc-dev_5.10.41_amd64.deb
dpkg -i ../*.deb
reboot
Проверяем:
uname -a
Linux debian10-64-1 5.10.41-usb120#1 SMP Sat May 29 17:43:59 MSK 2021 x86_64 GNU/Linux
ls /sys/devices/platform/ | grep vh
modprobe vhci-hcd
modprobe usbip-core
modprobe usbip-host
cat /sys/devices/platform/vhci_hcd.0/status