Att bygga en kärna

SysFS och udevinfo

Minnesinstickskort

Som exempel tas, ett Lexar SD Card, 512MB

För att ta reda på vilket device det är. Använd kommandot tail, som root.

Anslut sedan enheten.

# tail -f /var/log/messages
May 28 18:09:43 amilo -- MARK --
May 28 18:29:43 amilo -- MARK --
May 28 18:49:43 amilo -- MARK --
May 28 19:09:43 amilo -- MARK --
May 28 19:29:44 amilo -- MARK --
May 28 19:49:44 amilo -- MARK --
May 28 20:09:44 amilo -- MARK --
May 28 20:29:44 amilo -- MARK --
May 28 20:49:44 amilo -- MARK --
May 28 21:09:44 amilo -- MARK --

Här registreras enheten


May 28 21:27:40 amilo kernel: usb 5-3: new high speed USB device using ehci_hcd and address 6
May 28 21:27:40 amilo kernel: usb 5-3: configuration #1 chosen from 1 choice
May 28 21:27:40 amilo kernel: scsi6 : SCSI emulation for USB Mass Storage devices
May 28 21:27:45 amilo kernel:   Vendor: Generic   Model: STORAGE DEVICE    Rev: 9144
May 28 21:27:45 amilo kernel:   Type:   Direct-Access                      ANSI SCSI revision: 00
May 28 21:27:45 amilo kernel: SCSI device sdb: 1002496 512-byte hdwr sectors (513 MB)
May 28 21:27:45 amilo kernel: sdb: Write Protect is off
May 28 21:27:45 amilo kernel: SCSI device sdb: 1002496 512-byte hdwr sectors (513 MB)
May 28 21:27:45 amilo kernel: sdb: Write Protect is off
May 28 21:27:45 amilo kernel:  sdb: sdb1
May 28 21:27:45 amilo kernel: sd 6:0:0:0: Attached scsi removable disk sdb
May 28 21:27:45 amilo kernel: sd 6:0:0:0: Attached scsi generic sg1 type 0

Från det utfallet, kan vi utläsa. Att det registreras som ett, usb, scsidevice sdb.

Det finns då i /dev, som /dev/sdb. Med det som utgångspunkt. Kan vi gå vidare, med udevinfo och sysfs.

bash-3.00$ udevinfo -a -p /sys/block/sdb
udevinfo starts with the device the node belongs to and then walks up the
device chain, to print for every device found, all possibly useful attributes
in the udev key format.
Only attributes within one device section may be used together in one rule,
to match the device for which the node will be created.

  looking at device '/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    SYSFS{stat}=="      13      163      183       84        0        0        0        0        0       52       84"
    SYSFS{size}=="1002496"
    SYSFS{removable}=="1"
    SYSFS{range}=="16"
    SYSFS{dev}=="8:16"

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host9/target9:0:0/9:0:0:0':
    ID=="9:0:0:0"
    BUS=="scsi"
    DRIVER=="sd"
    SYSFS{ioerr_cnt}=="0x1"
    SYSFS{iodone_cnt}=="0x17"
    SYSFS{iorequest_cnt}=="0x17"
    SYSFS{iocounterbits}=="32"
    SYSFS{timeout}=="30"
    SYSFS{state}=="running"
    SYSFS{rev}=="9144"
    SYSFS{model}=="STORAGE DEVICE  "
    SYSFS{vendor}=="Generic "
    SYSFS{scsi_level}=="3"
    SYSFS{type}=="0"
    SYSFS{queue_type}=="none"
    SYSFS{queue_depth}=="1"
    SYSFS{device_blocked}=="0"
    SYSFS{max_sectors}=="64"

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host9/target9:0:0':
    ID=="target9:0:0"
    BUS==""
    DRIVER==""

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0/host9':
    ID=="host9"
    BUS==""
    DRIVER==""

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-3/1-3:1.0':
    ID=="1-3:1.0"
    BUS=="usb"
    DRIVER=="usb-storage"
    SYSFS{modalias}=="usb:v05E3p0711d9144dc00dsc00dp00ic08isc06ip50"
    SYSFS{bInterfaceProtocol}=="50"
    SYSFS{bInterfaceSubClass}=="06"
    SYSFS{bInterfaceClass}=="08"
    SYSFS{bNumEndpoints}=="02"
    SYSFS{bAlternateSetting}==" 0"
    SYSFS{bInterfaceNumber}=="00"

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1/1-3':
    ID=="1-3"
    BUS=="usb"
    DRIVER=="usb"
    SYSFS{configuration}==""
    SYSFS{serial}=="124206"
    SYSFS{product}=="USB Reader"
    SYSFS{manufacturer}=="Genesys "
    SYSFS{maxchild}=="0"
    SYSFS{version}==" 2.00"
    SYSFS{devnum}=="9"
    SYSFS{speed}=="480"
    SYSFS{bMaxPacketSize0}=="64"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bDeviceProtocol}=="00"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bDeviceClass}=="00"
    SYSFS{bcdDevice}=="9144"
    SYSFS{idProduct}=="0711"
    SYSFS{idVendor}=="05e3"
    SYSFS{bMaxPower}=="500mA"
    SYSFS{bmAttributes}=="80"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bNumInterfaces}==" 1"

  looking at device '/devices/pci0000:00/0000:00:1d.7/usb1':
    ID=="usb1"
    BUS=="usb"
    DRIVER=="usb"
    SYSFS{configuration}==""
    SYSFS{serial}=="0000:00:1d.7"
    SYSFS{product}=="EHCI Host Controller"
    SYSFS{manufacturer}=="Linux 2.6.16.18 ehci_hcd"
    SYSFS{maxchild}=="8"
    SYSFS{version}==" 2.00"
    SYSFS{devnum}=="1"
    SYSFS{speed}=="480"
    SYSFS{bMaxPacketSize0}=="64"
    SYSFS{bNumConfigurations}=="1"
    SYSFS{bDeviceProtocol}=="01"
    SYSFS{bDeviceSubClass}=="00"
    SYSFS{bDeviceClass}=="09"
    SYSFS{bcdDevice}=="0206"
    SYSFS{idProduct}=="0000"
    SYSFS{idVendor}=="0000"
    SYSFS{bMaxPower}=="  0mA"
    SYSFS{bmAttributes}=="c0"
    SYSFS{bConfigurationValue}=="1"
    SYSFS{bNumInterfaces}==" 1"

  looking at device '/devices/pci0000:00/0000:00:1d.7':
    ID=="0000:00:1d.7"
    BUS=="pci"
    DRIVER=="ehci_hcd"
    SYSFS{modalias}=="pci:v00008086d0000265Csv00001734sd0000107Cbc0Csc03i20"
    SYSFS{local_cpus}=="1"
    SYSFS{irq}=="19"
    SYSFS{class}=="0x0c0320"
    SYSFS{subsystem_device}=="0x107c"
    SYSFS{subsystem_vendor}=="0x1734"
    SYSFS{device}=="0x265c"
    SYSFS{vendor}=="0x8086"

  looking at device '/devices/pci0000:00':
    ID=="pci0000:00"
    BUS==""
    DRIVER==""

Nu har vi den information som behövs, för att göra den udevregel. Som underlättar arbetet, med enheten.

Ur det utfallet. Kan vi ta ut passande attribut: BUS usb, SYSFS{manufacturer} Genesys, SYSFS{product} USB Reader.

Den färdiga regeln, kommer att se ut så här:


#
## SD Card ##
BUS=="usb", SYSFS{manufacturer}=="Genesys", SYSFS{product}=="USB Reader", NAME="%k", SYMLINK+="sdcard", GROUP="disk", MODE="0660"

Resultatet blir nu. Att varge gång, som SD kortet, läses av minneskortsläsaren. Får den namnet sdcard, med grupptillhörighet och rättigheter. Oberoende av vilka andra, externa enheter som är anslutna.

Minneskortet kan sedan monteras: # mount -t vfat /dev/sdcard /mnt/sdcard

Om man har det som monteringspunkt.

För att visa, lite bildexempel. Från Slackware current linux-2.6.21.3. Det innebär även, att syntaxen ändras.

Något av det nya är, är att SYSFS bytts ut mot ATTRS. Så en rad kan se ut som:


# Sdcard rules 
KERNEL=="sdb[0-9]*", ATTRS{product}=="USB Reader", NAME="%k", SYMLINK+="sdcard", GROUP="plugdev", MODE="0660", OPTIONS="all_partitions"

Första bilden, visar en översikt, av /dev katalogen. Nästa visar skrivbordet, när minneskortet sätts i kortläsaren. HAL och dbus kommuniserar, med skrivbordsmiljön och en icon, visas på skrivbordet.

udev udev

Fler översiktsbilder, vilka visar aktiveringen och monteringen, av minneskortet.

udev udev

När minneskortet är monterat. Kan man nå innehĂ„llet, genom att klicka på iconen.

udev udev

Ytterligare ett exempel. Är en extern, USB floppydrive. Från Slackware 11.0.


## USB floppy drive ##
BUS=="usb", KERNEL=="sd*", SYSFS{product}=="USB Floppy Drive", NAME="%k", SYMLINK+="usbfloppy", GROUP="floppy", MODE="0660"

Tillbaka

Hem


copyleft   Valid XHTML 1.0!

Slackware® Linux is a Registered Trademark of Patrick J. Volkerding (Slackware inc.).
Linux® is a Registered Trademark of Linus Torvalds.
Copyright© 2006 GNU/fdl Jens Odsvall
(Legal Notice)