Это больше о том, что требует ваша «одна программа».
Вы все еще можете хорошо понять, как собрать все вместе, создав LFS (также известную как « Linux From Scratch ») . Тогда вы сможете добавьте вещи, необходимые для вашей программы, или перейдите к полному дистрибутиву, потому что создание такой тяжелой подсистемы, как Gnome или KDE на LFS, может быть настоящей головной болью.
Конечно, сначала может быть проще вернуться назад, но удаление чего-либо из полного дистрибутива может быть проблематичным: делайте это на виртуальной машине и копируйте эту виртуальную машину на каждом этапе.
(мои 2 цента)
Изменить :
Как указано в SecurityBeast вместо того, чтобы начинать с полного дистрибутива, такого как CentOS или Ubuntu , вы также можете ознакомиться с такими инструментами распространения, как:
Кажется, есть способ предотвратить попытки системы установить конфигурацию устройства, и он работает даже из пользовательского пространства. Я наткнулся на коммит , добавляющий эту функциональность в ядро , и, к счастью, он также включает пример кода.
Пользовательские -космические программы могут объявить владение определенным портом USB-концентратора через файловую систему устройства, в результате чего usb_device_is_owned()
возвращает значение true.
Хитрость, кажется,:
unsigned int port = 2; // Just as an example
// Send request 24 of type 'U' (USB), which returns an unsigned int
unsigned int ioctl_id = _IOR('U', 24, unsigned int);
// fd is a file descriptor to the hub's file in the devfs
ioctl(fd, ioctl_id, &port);
Информация о некоторых ioctl-запросах подсистемы USB описана в документации ядра . Полный список можно найти в исходном коде ядра . #определяет здесь .
Интересно, что система по-прежнему отправляет запросы установки конфигурации для конфигураций 0 (сброс конфигурации ).