Usar lshw
para consultar meu adaptador USB WiFi mostra o seguinte:
$ lshw -C network
*-network
description: Wireless interface
physical id: 12
bus info: usb@3:7
logical name: ...
serial: ...
capabilities: ethernet physical wireless
configuration: broadcast=yes driver=rtw_8822bu driverversion=6.5.0-28-generic firmware=N/A ip=... link=yes multicast=yes wireless=IEEE 802.11
O adaptador funciona bem. No entanto, estou confuso com driver=rtw_8822bu
. Até onde eu sei, não há nenhum modelo de kernel chamado rtw_8822bu.ko
em meu sistema; em vez disso, eu tenho rtw88_8822bu.ko
,
/usr/lib/modules/6.5.0-28-generic/kernel/drivers/net/wireless/realtek/rtw88/rtw88_8822bu.ko
que também aparece usando lsmod
:
$ lsmod | grep rtw
rtw88_8822bu 12288 0
rtw88_usb 24576 1 rtw88_8822bu
rtw88_8822b 229376 1 rtw88_8822bu
rtw88_core 356352 2 rtw88_usb,rtw88_8822b
mac80211 1720320 3 rtw88_core,rtw88_usb,rtl8xxxu
cfg80211 1323008 3 rtw88_core,mac80211,rtl8xxxu
Pergunta : Por que lshw
aparece driver=rtw_8822bu
quando o módulo do kernel no sistema é nomeado rtw88_8822bu
. De onde vem o nome anterior?
Um módulo é uma biblioteca que contém funções que podem ser carregadas no kernel.
Ao escrever um módulo, você pode definir um
struct
arquivo de dados C que define o nome de um driver e as funções a serem chamadas para verificar se existe um dispositivo que pode ser manipulado pelo driver, qual função chamar quando o dispositivo for desconectado, entre outras coisas.Em seguida, você coloca uma macro que registra essa estrutura de dados como uma representação de um "driver". Portanto, "driver" é na verdade apenas uma ideia que engloba um nome e algumas funções para chamar em situações específicas (como quando você deseja configurar ou desativar a funcionalidade do dispositivo).
Então, aqui está a estrutura de dados do seu driver :
Veja o `.name = ' aí? É aí que o nome do driver é definido.
Veja como ele é registrado como driver dentro de um módulo:
Você pode ter quantos desses drivers desejar em um único módulo, desde que cada um deles tenha um nome diferente. E não há razão para que o nome do módulo precise ser igual ao nome do driver. Você poderia ter um módulo chamado
drivers_for_webcams.ko
e conterrealtek_ssd_controller_driver1
throughrealtek_ssd_controller_driver98
e nada estaria errado; a suposição de que nome do driver == nome do módulo está simplesmente errada.