HAL/SYSFS/UDEV/DBUS

Nesta vídeo aula de meia hora, vamos conhecer como gerenciar os dispositivos, utilizando um pendrive como exemplo, verifico como é carregado no kernel (com o dmesg), já com o lshal solicito a exibição dos itens que estão listados no HAL (banco de dados de dispositivos), em seguida é verificado as regras do udev, automaticamente o dbus se encarrega de se comunicar com o gerenciador de janelas Gnome e por último é aberto o Nautilus que é o gerenciador de arquivos padrão. Para a criação desta vídeo aula utilizei o Ubuntu Desktop 10.04, Kdenlive (edição do vídeo e criação da introdução ao estilo Tokusatsu) e Gimp para edição das imagens. Se alguém quiser enviar alguma configuração em particular ou comentário técnico, será de grande ajuda, isto servirá para fazer outras vídeo aulas mais profundas sobre este assunto.

DICA: AGUARDE O VÍDEO CARREGAR

ENTRAR COMO SUPER USUÁRIO ROOT

sudo su

COLOCAR PENDRIVE

AUTOMATICAMENTE É MONTADO O DISPOSITIVO NO GNOME

VERIFICAR

dmesg

[262012.344036] usb 1-8: new high speed USB device using ehci_hcd and address 2

[262012.576160] usb 1-8: configuration #1 chosen from 1 choice

[262012.631432] Initializing USB Mass Storage driver...

[262012.632670] scsi4 : SCSI emulation for USB Mass Storage devices

[262012.632932] usbcore: registered new interface driver usb-storage

[262012.632936] USB Mass Storage support registered.

[262012.635015] usb-storage: device found at 2

[262012.635019] usb-storage: waiting for device to settle before scanning

[262017.632242] usb-storage: device scan complete

[262017.632742] scsi 4:0:0:0: Direct-Access Kingston DT 101 G2 1.00 PQ: 0 ANSI: 2

[262017.634944] sd 4:0:0:0: Attached scsi generic sg2 type 0

[262017.635723] sd 4:0:0:0: [sdb] 7818184 512-byte logical blocks: (4.00 GB/3.72 GiB)

[262017.636597] sd 4:0:0:0: [sdb] Write Protect is off

[262017.636602] sd 4:0:0:0: [sdb] Mode Sense: 03 00 00 00

[262017.636605] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[262017.641096] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[262017.641162] sdb: sdb1

[262017.646104] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[262017.646165] sd 4:0:0:0: [sdb] Attached SCSI removable disk

COLETAR INFORMAÇÕES

udevadm info -a -p $(udevadm info -q path -n /dev/sdb)

Obs.: O Ubuntu utiliza udevadm, em outras distribuições é usado udevinfo

udevadm info -q all -n /dev/sdb

BUS

udevadm info -q all -n /dev/sdb|grep BUS

KERNEL

udevadm info -a -p $(udevadm info -q path -n /dev/sdc)|grep KERNEL

ATTR PRODUCT

udevadm info -a -p `udevadm info -q path -n /dev/sdb`|grep product

CRIAR REGRA UDEV

cd /etc/udev/rules.d/

vi 1.rules

########### VOLUME NO KERNEL

KERNEL=="sd[c-z]", NAME="%k", SYMLINK+="cicero%n"

########### ADICIONA VOLUME

ACTION=="add", KERNEL=="sd[c-z][0-9]", SYMLINK+="cicero%n", NAME="%k"

########### CRIA DIRETÓRIO

ACTION=="add", KERNEL=="sd[c-z][0-9]", RUN+="/bin/mkdir -p /mnt/cicero%n"

########### VFAT

ACTION=="add", KERNEL=="sd[c-z][0-9]", PROGRAM=="/lib/udev/vol_id -t %N", RESULT=="vfat", RUN+="/bin/mount -t vfat -o rw,noauto,flush,quiet,nodev,nosuid,noexec,noatime,dmask=000,fmask=111 /dev/%k /mnt/cicero%n"

########### DESMONTAR

ACTION=="remove", KERNEL=="sd[c-z][0-9]", RUN+="/bin/umount -l /mnt/cicero%n"

########### REMOVER DIRETÓRIO

ACTION=="remove", KERNEL=="sd[c-z][0-9]", RUN+="/bin/rmdir /mnt/cicero%n"

OU

########### VOLUME NO KERNEL

KERNEL=="sd[c-z]", NAME="%k", SYMLINK+="cicero%n"

########### ADICIONA VOLUME

ACTION=="add", KERNEL=="sd[c-z][0-9]", SYMLINK+="cicero%n", NAME="%k"

########### CRIA DIRETÓRIO

ACTION=="add", KERNEL=="sd[c-z][0-9]", RUN+="/bin/mkdir -p /mnt/cicero%n"

########### QUALQUER COISA / OU VAI OU RACHA

ACTION=="add", KERNEL=="sd[c-z][0-9]", RUN+="/bin/mount -t auto -o rw,noauto,sync,dirsync,noexec,nodev,noatime /dev/%k /mnt/cicero%n"

# ABRIR

ACTION=="add", KERNEL=="sd[c-z][0-9]", RUN+="/usr/bin/nautilus /mnt/cicero%n"

########### DESMONTAR

ACTION=="remove", KERNEL=="sd[c-z][0-9]", RUN+="/bin/umount -l /mnt/cicero%n"

########### REMOVER DIRETÓRIO

ACTION=="remove", KERNEL=="sd[c-z][0-9]", RUN+="/bin/rmdir /mnt/cicero%n"

OBS.:

Caso dê algum problema, recomendo que altere a permissão do arquivo:

chmod 777 1.rules

DEMONTAR PENDRIVE E REMOVA-O

umount /dev/sdc1

REINICIAR SERVIÇO

etc/init.d/udev restart

SERÁ QUE FUNCIONA?

Coloque o PENDRIVE no USB NOVAMENTE

Digite:

cd /mnt/TAB 2 vezes

RESUMO

Coloquei o pendrive, o kernel detecta este dispositivo e o udev cria um nó para este dispositivo, com o script que criamos será montado

HAL

COLETAR INFORMAÇÕES

COLOCAR PENDRIVE (KINGSTON)

lsusb

Bus 001 Device 024: ID 0951:1642 Kingston Technology

lshal |more>listagem

hal-device

hal-device > listagem

lshal -m

Start monitoring devicelist:

-------------------------------------------------

07:54:54.247: usb_device_951_1642_001CC05FE92BF090B91F12F7 added

07:54:54.252: usb_device_951_1642_001CC05FE92BF090B91F12F7_if0 added

07:54:54.254: usb_device_951_1642_001CC05FE92BF090B91F12F7_if0_scsi_host added

07:54:58.775: usb_device_951_1642_001CC05FE92BF090B91F12F7_if0_scsi_host_0 added

07:54:58.779: usb_device_951_1642_001CC05FE92BF090B91F12F7_if0_scsi_host_0_scsi_device_lun0 added

07:54:58.789: usb_device_951_1642_001CC05FE92BF090B91F12F7_if0_scsi_host_0_scsi_device_lun0_scsi_generic added

07:54:59.043: storage_serial_Kingston_DT_101_G2_001CC05FE92BF090B91F12F7_0_0 added

07:54:59.043: storage_serial_Kingston_DT_101_G2_001CC05FE92BF090B91F12F7_0_0 property info.interfaces =

{'org.freedesktop.Hal.Device.Storage.Removable'} (new)

07:54:59.104: volume_label_CMS3XXX added

07:54:59.450: volume_label_CMS3XXX property volume.mount_point = '/media/CMS3XXX'

07:54:59.463: volume_label_CMS3XXX property volume.is_mounted = true

DBUS

COLETAR INFORMAÇÕES

ls -l /dev/disk/by-uuid/sdd

lshal -u `hal-find-by-property --key block.device --string /dev/sdd1`

VERSÃO

dbus-daemon --version

MONITOR

dbus-monitor --system