от Мариян Маринов(18-06-2006)

рейтинг (14)   [ добре ]  [ зле ]

Printer Friendly Вариант за отпечатване

От повече от година съм собственик на лаптоп HP nx8220. Като цяло машината е много добра но за цялото време през което я имам не бях успял да накарам вграденият в него четец за карти да работи.

След доста търсене в интернет преди 6 месеца намерих проект който се занимаваше с направата на модул за ядрото на Линукс който да работи с този четец.

За съжаление този проект не е мръднал много за последните 6 месеца което ме накара да се поровя из интернет отново. По случайност попаднах на друг проект който работи над модул за работа със Secure Dicital Host Controlers (SDHC). С радост разбрах, че моят контролер може и да тръгне с този модул.

Докато четох документацията видях, че модулът вече е влязъл в основното дърво на ядрото на Линукс и се очаква да излезе със ядро 2.6.17. Тестовете които аз направих са с ядро 2.6.17-rc6. Ето настройките на ядрото, които трябва да направите за да можете да използвате вашият четец:

   Device Drivers -->
     MMC/SD Card Support -->
       [M] MMC Support
        M MMC block device driver
        M Secure Digital Host Controller Interface support  (EXPERIMENTAL) 
 
или директно в конфигурационният файл:
   CONFIG_MMC=m
   CONFIG_MMC_BLOCK=m
   CONFIG_MMC_SDHCI=m
 

Първото нещо което прави впечатление след зареждането на модула sdhci е, че няма създадени блокови устройства с които да се работи. Налага се на ръка да бъде зареден модулът mmc_block който вече ви създава устройствата с които можете да работите.

А второто нещо което прави адски неприятно впечатление е, че след вкарването на карта в четеца, машината въобще не отчита каквато и да била дейност.

Първоначално реших, че тъй като модулът е все още експериментален просто не работи с моят четец, но след още малко търсене из пощенският списък на проекта открих, че проблема е единствено и само на контролерите произведени от Texas Instruments(TI).

Когато дадете lspci изхода от командата включва нещо подобно на това:
02:06.0 CardBus bridge: Texas Instruments PCIxx21/x515 Cardbus Controller
02:06.3 Mass storage controller: Texas Instruments PCIxx21 Integrated FlashMedia Controller
02:06.4 Class 0805: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Secure Digital (SD) Controller
02:06.5 Communication controller: Texas Instruments PCI6411, PCI6421, PCI6611, PCI6621, PCI7411, PCI7421, PCI7611, PCI7621 Smart Card Controller (SMC)

Откъдето ясно се вижда, че на машината има SD Controler и Flash Media Controler както и един CardBus Controler. Проблемът идва от това, че в документацията на PCIxx21 контролерите на TI никъде не е описано, че SD и FlashMedia контролерите не могат да работят едновременно. Стандартно FlashMedia контролерът е активиран и би трябвало през него да можете да се обръщате към SD/MMC картите в четеца. За съжаление обаче липсата на документация относно FlashMedia контролера спира проекта за разработка на модул за него.

Pierre Ossman обаче намира начин за излочването на FlashMedia контролера и след кратки тестове разбира, че автоматично след изключването му SD контролера се включва на негово място. Това по принцип е много грозен начин за работа с устройствата в компютърът ви защото се налага да се променят настройки установени от BIOS при началното инициализиране на машината. По принцип подобни операции са изключително опасни и нежелателни.

Все пак за да работи моят четец моят единствен шанс беше да си изключа FlashMedia контролера. Което става с изпълнението на следната команда:

# setpci -s 06.3 4c=0×22

След изпълнението на тази команда, вече спокойно може да се използва четеца с предварително заредени модулите sdhci и mmc_block.

Устройствата които ви се създават от модула mmc_block обикновено са тези:
   /dev/mmcblk0
   /dev/mmcblk0p1
 


<< *buntu файлови хранилища | Модулна поддръжка на XFS за RHEL и дериватите му >>