No Linux, dado:
- um dispositivo, por exemplo
/dev/sda
, - e seus números maiores e menores, por exemplo
8, 0
,
como posso saber qual módulo / driver está "dirigindo" isso?
Posso cavar /sys
ou /proc
descobrir isso?
linux
drivers
kernel-modules
Totor
fonte
fonte
lsmod
,/proc/modules
emodinfo
?Respostas:
Para obter essas informações de
sysfs
um arquivo de dispositivo, primeiro determine o número principal / secundário observando a saída dels -l
, por exemploO
8, 0
nos diz que o número principal é8
e o menor é0
. Ob
no início da listagem também nos diz que é um dispositivo de bloco. Outros dispositivos podem ter umc
dispositivo para caracteres no início.Se você olhar para baixo
/sys/dev
, verá dois diretórios. Um chamadoblock
e um chamadochar
. O acéfalo aqui é que estes são para dispositivos de blocos e caracteres, respectivamente. Cada dispositivo é então acessível por seu número maior / menor neste diretório. Se houver um driver disponível para o dispositivo, ele pode ser encontrado lendo o destino dodriver
link neste ou nodevice
subdiretório. Por exemplo, para o meu/dev/sda
eu posso simplesmente fazer:Isso mostra que o
sd
driver é usado para o dispositivo. Se você não tiver certeza se o dispositivo é um dispositivo de bloco ou caractere, no shell, você pode simplesmente substituir esta peça por uma*
. Isso funciona tão bem:Os dispositivos de bloco também podem ser acessados diretamente por meio de seus nomes, por meio de
/sys/block
ou/sys/class/block
. Por exemplo:Observe que a existência de vários diretórios
/sys
pode mudar dependendo da configuração do kernel. Além disso, nem todos os dispositivos possuem umadevice
subpasta. Por exemplo, este é o caso de arquivos de dispositivos de partição como/dev/sda1
. Aqui você precisa acessar o dispositivo para todo o disco (infelizmente não hásys
links para isso).Uma coisa final que pode ser útil é listar os drivers de todos os dispositivos para os quais estão disponíveis. Para isso, você pode usar globs para selecionar todos os diretórios nos quais os links do driver estão presentes. Por exemplo:
Finalmente, para divergir um pouco da questão, adicionarei outro
/sys
truque global para obter uma perspectiva muito mais ampla sobre quais drivers estão sendo usados por quais dispositivos (embora não necessariamente aqueles com um arquivo de dispositivo):Atualizar
Observando com mais atenção a saída de
udevadm
, ele parece funcionar encontrando o/sys
diretório canônico (como você obteria se referenciasse os diretórios principais / secundários acima) e, em seguida, subindo na árvore de diretórios, imprimindo as informações que encontrar. Dessa forma, você obtém informações sobre os dispositivos pai e todos os drivers que eles usam.Para experimentar isso, escrevi o script abaixo para subir na árvore de diretórios e exibir informações em cada nível relevante.
udev
parece procurar arquivos legíveis em cada nível, com seus nomes e conteúdos incorporadosATTRS
. Em vez de fazer isso, eu mostro o conteúdo dosuevent
arquivos em cada nível (aparentemente a presença disso define um nível distinto em vez de apenas um subdiretório). Também mostro o nome base de todos os links do subsistema que encontro e isso mostra como o dispositivo se encaixa nessa hierarquia.udevadm
não exibe as mesmas informações, portanto, essa é uma boa ferramenta complementar. As informações do dispositivo pai (por exemplo,PCI
informações) também são úteis se você deseja corresponder a saída de outras ferramentas, comolshw
dispositivos de nível superior.fonte
udevadm
resposta lhe darásd
eahci
. Existe uma maneira de determinar seahci
está sendo usado também?device/device/
, então meureadlink
comando pareciareadlink /sys/dev/char/XX\:Y/device/device/driver
.Você pode usar a
udevadm
ferramenta para descobrir isso.O comando seria
udevadm info -a -n /dev/sda
e, em seguida, observe osDRIVER==
parâmetros.Isso mostra que existem 2 drivers envolvidos no fornecimento deste dispositivo
sd
eahci
. O primeiro,sd
é diretamente responsável pelo/dev/sda
dispositivo, mas usa oahci
driver de acordo.A saída do
udevadm
comando se parece com isso e inclui uma descrição de como ele funciona.fonte
udevadm
é removido (ou até recomendado)? Eu não consigo encontrar nada, mesmo dando uma dica nisso.Use o comando hwinfo e modelo e driver de saída. Se não houver driver, ele não será mostrado. Por exemplo, para discos:
Para placas de rede:
Para dispositivos USB:
Use hwinfo --help para descobrir quais outros tipos de dispositivos você pode consultar. O hwinfo é instalado por padrão, por exemplo, no SUSE Linux.
fonte
--only
opção. Por exemplohwinfo --block --only /dev/sda | grep ...
.lshw
é uma ferramenta incrível para listar o hardware encontrado em sua máquina. Você precisará instalá-lo primeiro antes de executar.Use
yum
ouapt-get
dependendo do sistema que você está usando. Em seguida, para listar especificamente o hardware de armazenamento:Você pode executá-lo
root
para obter todas as informações de volta.Caso contrário, você
lspci
também pode fornecer informações sobre o seu hardware:Para descobrir o número principal e o menor de um dispositivo, basta executá
ls
-lo.Nesta saída, o
b
inbrw-rw----.
significa que este é um dispositivo de bloco. Os dígitos8
e0
são, respectivamente, o número principal e o menor do dispositivo.fonte
lshw
elspci
você pode ver o módulo usado por um dispositivo: configuration: driver = ahci latency = 0 e o driver do Kernel em uso: ahci .