Как пересобрать ядро 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