# SD/MMC CardReader i automont

## m1k0

Jak zrobić aby wkładana karta SD do laptopa była automatycznie montowana, tak jak to się dzieje po włożeniu CD-ROM-a lub jakiegoś urzędzenia masowego na USB (np. USB stick)?

Mam KDE 3.5.7

Po włożeniu karty dmesg raportuje

```
mmc0: new SD card at address 0b9e

mmcblk0: mmc0:0b9e SD02G 2011136KiB (ro)

```

Oczywiście ręczny monut działa

mount /dev/mmcblk0p1 /mnt/mmc

----------

## znal

hal zainstalowany ?

----------

## m1k0

oczywiście HAL jest, działa sprawnie automont na USB

```
laptok ~ # equery uses hal

[ Searching for packages matching hal... ]

[ Colour Code : set unset ]

[ Legend : Left column  (U) - USE flags from make.conf              ]

[        : Right column (I) - USE flags packages was installed with ]

[ Found these USE variables for sys-apps/hal-0.5.9-r1 ]

 U I

 + + acpi           : Adds support for Advanced Configuration and Power Interface

 + + crypt          : Add support for encryption -- using mcrypt or gpg where applicable

 + + debug          : Enable extra debug codepaths, like asserts and extra output. If you want to get meaningful backtraces see http://www.gentoo.org/proj/en/qa/backtraces.xml .

 - - dell           : Adds support for Dell laptop smbios via libsmbios

 - - disk-partition : Add support for partition editing via libparted

 + + doc            : Adds extra documentation (API, Javadoc, etc)

 - - kernel_FreeBSD : <unknown>

 + + kernel_linux   : <unknown>

 + + pcmcia         : Adds support for PCMCIA slots/devices found on laptop computers

 - - selinux        : !!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur

```

----------

## m1k0

temat wrzuciłem na świat

https://forums.gentoo.org/viewtopic-p-4416107.html#4416107

----------

## le_mon

Żaden problem, tylko musisz w kernelu mieć: 

Device Drivers  --->

    SCSI device support  --->

              [*]   Probe all LUNs on each SCSI device

I wszystko gra i buczy.

Tu masz więcej:http://gentoo-wiki.com/HOWTO_Multicard_reader

----------

## m1k0

fakt, nie miałem tego ustawionego w jajku. Dodałem, lecz bez poprawy.

Mam jeden błąd 

```
Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [E] util.c:190: Cannot open '/sys/block/mmcblk0/mmcblk0p1/range'

```

Może tu jest klucz do rozwiązania zagatki?

Czy możesz zerknąć na dalszy log z /var/log/message?

```
Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_USAGE=filesystem'

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_TYPE=vfat'

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_VERSION=FAT16'

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_UUID='

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_UUID_ENC='

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_LABEL='

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_LABEL_ENC='

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' (stdout) 'ID_FS_LABEL_SAFE='

Oct 28 00:16:22 laptok udevd-event[8977]: run_program: '/lib/udev/vol_id' returned with status 0

Oct 28 00:16:22 laptok udevd-event[8977]: udev_rules_get_name: no node name set, will use kernel name ''

Oct 28 00:16:22 laptok udevd-event[8977]: udev_db_get_device: no db file to read /dev/.udev/db/\x2fblock\x2fmmcblk0\x2fmmcblk0p1: No such file or directory

Oct 28 00:16:22 laptok udevd-event[8977]: udev_node_add: creating device node '/dev/mmcblk0p1', major=179, minor=1, mode=0660, uid=0, gid=6

Oct 28 00:16:22 laptok udevd-event[8977]: name_index: creating index: '/dev/.udev/names/disk\x2fby-id\x2fmmc-SD02G_0xa3ec316f-part1/\x2fblock\x2fmmcblk0\x2fmmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: name_index: creating index: '/dev/.udev/names/disk\x2fby-path\x2fpci-mmc0:8ffd--part1/\x2fblock\x2fmmcblk0\x2fmmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: name_index: creating index: '/dev/.udev/names/mmcblk0p1/\x2fblock\x2fmmcblk0\x2fmmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: udev_node_update_symlinks: update symlink 'disk/by-id/mmc-SD02G_0xa3ec316f-part1' of '/block/mmcblk0/mmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: udev_db_get_devices_by_name: found index directory '/dev/.udev/names/disk\x2fby-id\x2fmmc-SD02G_0xa3ec316f-part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: found 1 devices with name 'disk/by-id/mmc-SD02G_0xa3ec316f-part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: found '/block/mmcblk0/mmcblk0p1' for 'disk/by-id/mmc-SD02G_0xa3ec316f-part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: compare (our own) priority of '/block/mmcblk0/mmcblk0p1' 0 >= 0

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: 'disk/by-id/mmc-SD02G_0xa3ec316f-part1' with target 'mmcblk0p1' has the highest priority 0, create it

Oct 28 00:16:22 laptok udevd-event[8977]: node_symlink: creating symlink '/dev/disk/by-id/mmc-SD02G_0xa3ec316f-part1' to '../../mmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: udev_node_update_symlinks: update symlink 'disk/by-path/pci-mmc0:8ffd--part1' of '/block/mmcblk0/mmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: udev_db_get_devices_by_name: found index directory '/dev/.udev/names/disk\x2fby-path\x2fpci-mmc0:8ffd--part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: found 1 devices with name 'disk/by-path/pci-mmc0:8ffd--part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: found '/block/mmcblk0/mmcblk0p1' for 'disk/by-path/pci-mmc0:8ffd--part1'

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: compare (our own) priority of '/block/mmcblk0/mmcblk0p1' 0 >= 0

Oct 28 00:16:22 laptok udevd-event[8977]: update_link: 'disk/by-path/pci-mmc0:8ffd--part1' with target 'mmcblk0p1' has the highest priority 0, create it

Oct 28 00:16:22 laptok udevd-event[8977]: node_symlink: creating symlink '/dev/disk/by-path/pci-mmc0:8ffd--part1' to '../../mmcblk0p1'

Oct 28 00:16:22 laptok udevd-event[8977]: pass_env_to_socket: passed 587 bytes to socket '/org/freedesktop/hal/udev_event',

Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [I] osspec.c:232: SEQNUM=2382, ACTION=add, SUBSYSTEM=block, DEVPATH=/sys/block/mmcblk0/mmcblk0p1, DEVNAME=/dev/mmcblk0p1, IFINDEX=0

Oct 28 00:16:22 laptok udevd-event[8977]: pass_env_to_socket: passed -1 bytes to socket '/org/kernel/udev/monitor',

Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [E] util.c:190: Cannot open '/sys/block/mmcblk0/mmcblk0p1/range'

Oct 28 00:16:22 laptok udevd-event[8977]: udev_event_run: seq 2382 finished with 0

Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [I] blockdev.c:654: block_add: sysfs_path=/sys/block/mmcblk0/mmcblk0p1 dev=/dev/mmcblk0p1 is_part=1, parent=0x00000000

Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [I] blockdev.c:741: Ignoring hotplug event - no parent

Oct 28 00:16:22 laptok hald[5823]: 00:16:22.858 [W] blockdev.c:1160: Not adding device object

Oct 28 00:16:22 laptok udevd[1343]: udev_done: seq 2382, pid [8977] exit with 0, 0 seconds old

```

----------

## m1k0

OK, widzę ładnie zamontowaną kartę pod konquerorem (media:/) ale tylko po restarcie laptopa.

Jeśli wyjmę i włożę kartę z powrotem do laptopa to już więcej nie zobaczę zamontowanej karty ani pod konquerorem ani nigdzieindziej

Trochę logów

po restarcie - jest OK

```
/var/log/message

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.665 [I] coldplug.c:213: pool_num_freed = 880 (of 882)

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.665 [E] util.c:190: Cannot open '/sys/block/sda/sda3/range'

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.665 [I] osspec.c:892: hal_util_find_known_parent: '/sys/block/sda/sda3'->'/sys/block/sda'

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.665 [I] blockdev.c:654: block_add: sysfs_path=/sys/block/sda/sda3 dev=/dev/sda3 is_part=1, parent=0x081b5910

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.667 [I] hald_dbus.c:4766: ***************************

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.667 [I] hald_dbus.c:4767: ********* got a connection 8177860

Oct 28 15:49:19 laptok hald[5828]: 15:49:19.667 [I] hald_dbus.c:4768: ***************************

Oct 28 15:49:19 laptok hald-probe-volume: [5849]: 15:49:19.667 [D] probe-volume.c:381: Doing probe-volume for /dev/sda3

Oct 28 15:49:19 laptok hald-probe-volume: [5849]: 15:49:19.667 [D] probe-volume.c:392: volume.block_size = 512

Oct 28 15:49:19 laptok hald-probe-volume: [5849]: 15:49:19.667 [D] probe-volume.c:396: volume.size = 158920634880

Oct 28 15:49:19 laptok hald-probe-volume: [5849]: 15:49:19.668 [I] probe-volume.c:625: invoking volume_id_probe_all, offset=0, size=0
```

po ponmownym włożeniu - nie jest dobrze

```
/var/log/message

Oct 28 15:53:27 laptok hald[5828]: 15:53:27.998 [I] osspec.c:232: SEQNUM=2361, ACTION=add, SUBSYSTEM=block, DEVPATH=/sys/block/mmcblk0/mmcblk0p1, DEVNAME=/dev/mmcblk0p1, IFINDEX=0

Oct 28 15:53:27 laptok hald[5828]: 15:53:27.998 [E] util.c:190: Cannot open '/sys/block/mmcblk0/mmcblk0p1/range'

Oct 28 15:53:27 laptok hald[5828]: 15:53:27.998 [I] blockdev.c:654: block_add: sysfs_path=/sys/block/mmcblk0/mmcblk0p1 dev=/dev/mmcblk0p1 is_part=1, parent=0x00000000

Oct 28 15:53:27 laptok hald[5828]: 15:53:27.998 [I] blockdev.c:741: Ignoring hotplug event - no parent

Oct 28 15:53:27 laptok hald[5828]: 15:53:27.998 [W] blockdev.c:1160: Not adding device object

Oct 28 15:53:27 laptok udevd-event[9476]: pass_env_to_socket: passed 587 bytes to socket '/org/freedesktop/hal/udev_event',

Oct 28 15:53:27 laptok udevd-event[9476]: pass_env_to_socket: passed -1 bytes to socket '/org/kernel/udev/monitor',

Oct 28 15:53:27 laptok udevd-event[9476]: udev_event_run: seq 2361 finished with 0

Oct 28 15:53:27 laptok udevd[1347]: udev_done: seq 2361, pid [9476] exit with 0, 0 seconds old

```

----------

## le_mon

Poszukaj na forum było trochę watków związanych z automontowaniem. Ja miałem podobny problem jak dołozyłem do kompa takie ustrojstwo.

Jeśli dobrze pamiętam to pomogło wywalenie hal i dbus, wywalenie wpisów w /etc, ponowne emerge hal i dbus i na koniec przeemergowanie kdebase-kioslaves.

Tu masz parę linków, może coś z tego wykombinujesz:  https://forums.gentoo.org/viewtopic-t-524143-postdays-0-postorder-asc-highlight-hal-start-25.html,   

https://forums.gentoo.org/viewtopic-t-518572.html, https://forums.gentoo.org/viewtopic-t-487273.html.

Arfrever: Poprawiono URL-e.

----------

## m1k0

podałeś odnośniki w niebyt.

Proszę, skoryguj je.

----------

## le_mon

Moje niedopatrzenie.

Ale są dobre tylko wywal przecinek lub kropkę z końca adresu.

Jeden znaczek za dużo  :Smile: 

----------

## m1k0

Jednak chyba nie tędzy droga... wiele kompilacji i nic w zamian. Jest dokładnie tak samo jak było.

UDEV przydziela nazwę jak przydzielał, ale montowanie jest tylko podczas startu systemu

coś znajduję

```
laptok ~ # udevinfo -a -p /sys/block/mmcblk0

Udevinfo starts with the device specified by the devpath and then

walks up the chain of parent devices. It prints for every device

found, all possible attributes in the udev rules key format.

A rule to match, can be composed by the attributes of the device

and the attributes from one single parent device.

  looking at device '/block/mmcblk0':

    KERNEL=="mmcblk0"

    SUBSYSTEM=="block"

    DRIVER==""

    ATTR{capability}=="10"

    ATTR{stat}=="      12      126      173       14        0        0        0        0        0       14       14"

    ATTR{size}=="4022272"

    ATTR{removable}=="0"

    ATTR{range}=="8"

    ATTR{dev}=="179:0"

```

ATTR{removable}=="0"

Może należy mieć tam =="1"

----------

## KaszeL

I jak? Udalo sie rozwiazac ten problem? Wlasnie sam sie z tym mecze :\

----------

## SlashBeast

U mnie karty SD, MMC są montowane jak pendrivy, tworzą kolejne urządzenie sdXX.

----------

## KaszeL

U mnie nie bardzo. Automount wystepuje tylko w momencie bootowania. Pozniej musze montowac recznie. Karty widziane sa jako: /dev/mmcblk0p1

----------

## SlashBeast

Może to jak z gwizdkami, gdy nie mamy scsi w kernelu, widzimy gwizdki jako /dev/ubXX np. uba1, jak mamy to sdXX np. sda1.

----------

## KaszeL

Problem w tym, ze ja mam scsi w kernelu  :Wink: 

----------

## mar_rud

Mam taki sam problem i rzecz w tym, że do nie dawna (miesiąc?) wszystko działało jak należy:

wkładam kartę, pojawia się urządzenie w system:/media i automontowanie. Teraz tak działa tylko dla pamięci pod usb (/dev/sdb1), natomiast dla czytnika pod sterownikiem sdhci już nie (urzędzenie /dev/mmcblk0p1). Urządzenie jest widoczne tylko po restarcie lub przywrócenia z suspenda. Może ma to związek z updatem jądra. Aktualnie mam gentoo-sources-2.6.23-r3.

----------

## KaszeL

Jeśli faktycznie do niedawna dzialalo bez problemu, to ewidentnie wina ktoregos z pakietow. Pamietasz moze jakie jajko uzywales wtedy, jak wszystko dzialalo poprawnie?

----------

## mar_rud

Hmm, przeleciałem wstecz po jądrach, które się przewinęły przez mój laptop i:

2.6.23-r3 - nie działa

2.6.23-r1 - nie działa

2.6.22-r7 - działa

Niestety nie jestem dokładnie pewien i wydaje mi się  jednak, że z jądrem 2.6.23* do jakiegoś momentu jeszcze działało. Wydaje mi się nawet, że przed 1-2 tygodniami działało, ale chyba z problemami (czasami dopiero za drugim razem załapywało). Zatem jak widać ewidetnie jest jakiś problem z 2.6.23, ale wydaje mi się, że również jakiś pakiet mógł dodatkowo zapomnieć jak poprawnie działać.

Z jądrem 2.6.22-r7 teraz przykładowo lshal -m reportuje więcej zdarzeń(przy czym dwa ostatnie związane są z samym zamontowaniem):

```
17:44:37.971: pci_104c_8034_mmc_host_1_mmc_card_rca58916 added

17:44:38.000: storage_serial_0x40756122 added

17:44:38.118: volume_uuid_4769_992B added

17:44:39.168: volume_uuid_4769_992B property volume.mount_point = '/mnt/usb'

17:44:39.176: volume_uuid_4769_992B property volume.is_mounted = true
```

Wcześniej pojawiał się tylko pierwszy komunikat.

Podobnie dbus-monitor:

```
signal sender=:1.3 -> dest=(null destination) path=/org/freedesktop/Hal/Manager; interface=org.freedesktop.Hal.Manager; member=DeviceAdded

   string "/org/freedesktop/Hal/devices/pci_104c_8034_mmc_host_1_mmc_card_rca58916"

signal sender=:1.3 -> dest=(null destination) path=/org/freedesktop/Hal/Manager; interface=org.freedesktop.Hal.Manager; member=DeviceAdded

   string "/org/freedesktop/Hal/devices/storage_serial_0x40756122"

signal sender=:1.3 -> dest=(null destination) path=/org/freedesktop/Hal/Manager; interface=org.freedesktop.Hal.Manager; member=DeviceAdded

   string "/org/freedesktop/Hal/devices/volume_uuid_4769_992B"

signal sender=:1.3 -> dest=(null destination) path=/org/freedesktop/Hal/devices/volume_uuid_4769_992B; interface=org.freedesktop.Hal.Device; member=PropertyModified

   int32 2

   array [

      struct {

         string "volume.mount_point"

         boolean false

         boolean false

      }

      struct {

         string "volume.is_mounted"

         boolean false

         boolean false

      }

   ]

```

wcześniej było jedynie pierwsze zdarzenie.

----------

## mar_rud

Spróbowałem vanilla-2.6.24-rc6 i tak samo. Nawet wziąłem config z działającego 2.6.22-r7 i make oldconfig z większością opcji domyślną i tak samo.

Za to natknąłem się na pewną możliwość obejścia problemu. Jeśli wezmę 

rmmod mmc_block

to po kolejnym włożeniu karty pojawia się nowe urządzenie i automontowanie (zupełnie jak przy restarcie/resume). Zatem wystarczyłoby napisać regułkę w udev, która przy wyjęciu karty odmontowywałaby ją(czasami wyjmuję bez odmontowywania jeśli nic nie pisałem) i wyrzuci moduł mmc_block tak, aby następnym razem karta była poprawnie autowykryta. 

Niestety do zrobienia tego muszę poświęcić chwilkę na man udev itp dokształcenie, więc jeśli ktoś z zainteresowanych ma większe doświadczenie w tym temacie, to nie mam nic przeciwko gotowej regułce  :Wink: 

UPDATE:

Wymodziłem taką regułkę do dodania do jakiegoś własnego pliku w /etc/udev/rules.d:

```
ACTION=="remove", KERNEL=="mmcblk0", RUN+="/root/scripts/mmc_remove.sh"
```

oraz skrypcik /root/scripts/mmc_remove.sh:

```
#!/bin/sh

/bin/umount -l /mnt/usb

/sbin/rmmod mmc_block
```

Należy jedynie skorygować ścieżkę montowania do własnych potrzeb. Reguła zawiedzie, jeśli /mnt/usb jest "busy", czyli jest zamontowany i jest jakiś program z otwartym plikiem na karcie. Wystarczy jednak zamknąć wszystko co używało karty i powkładać ją z dwa razy by ruszyło automagiczne wykrywanie/montowanie. Poza tym przypadkiem urządzenie w KDE pojawia się za każdym włożeniem karty do czytnika sd/mmc laptopa + automontowanie, czyli tak jak w przypadku zwykłej pamięci pendrive.

Jest to jednak jedynie zamaskowanie problemu.

----------

