В настоящее время я пытаюсь перечислить все USB-устройства, которые подключены к системе Linux, код будет работать в ядре, как LSM. Код lsm известен как хороший.
Я смотрел на этот вопрос, но ему задавали шесть лет go.
Ответ на вопрос, предложенный с использованием следующий код:
struct usb_device udev;
struct usb_bus *bus;
ssize_t ret;
static int __init usb_fun_init (void)
{
int result;
__le16 idVendor = 0;
__le16 idProduct = 0;
__u8 iManufacturer = 0;
__u8 iSerialNumber = 0;
printk(KERN_INFO "\n************************************ in init\n");
list_for_each_entry(bus, &usb_bus_list, bus_list)
{
printk(KERN_INFO "***************** Begins ****************");
printk(KERN_INFO "Vendor ID = %x", bus->root_hub->descriptor.idVendor);
printk(KERN_INFO "Product ID = %x", bus->root_hub->descriptor.idProduct);
printk(KERN_INFO "Serial Number = %x", bus->root_hub->descriptor.iSerialNumber);
//printk(KERN_INFO "Manu = %s", bus->root_hub->descriptor.iManufacturer);
printk(KERN_INFO "Manu = %s", bus->root_hub->manufacturer);
printk(KERN_INFO "Product = %s", bus->root_hub->product);
printk(KERN_INFO "Serial Number = %s", bus->root_hub->serial);
printk(KERN_INFO "\nManufacturer = %s", udev.bus.iManufacturer);
}
return 0;
}
static void __exit usb_fun_exit (void)
{
printk(KERN_INFO "\n************************************ in exit\n");
}
module_init(usb_fun_init);
module_exit(usb_fun_exit);
MODULE_LICENSE("GPL");
Однако ошибки компиляции отсутствуют. Из того, что я вижу, структуры ядра изменились, я указал на файлы заголовков, и единственный вероятный кандидат, которого я вижу, это usb_bus_id
, поскольку он имеет ту же сигнатуру метода и тип возвращаемого значения. Однако это тоже не работает. Может ли кто-нибудь указать мне правильное направление?