Ich habe einen HP Envy 13-ad001la mit PopOs 19.10. Der Kartenleser funktioniert nicht. Wenn ich ihn verwende, lspci
erhalte ich die Meldung, dass es sich um einen Alcor Micro-Geräteleser handelt:
01:00.0 Unassigned class [ff00]: Alcor Micro Device 6625
Subsystem: Hewlett-Packard Company Device 834a
Flags: fast devsel, IRQ 255
Memory at a1200000 (64-bit, non-prefetchable) [disabled] [size=4K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [80] Express Endpoint, MSI 00
Capabilities: [100] Latency Tolerance Reporting
Nach meinem Verständnis bedeutet „Nicht zugewiesene Klasse“, dass Linux keinen Treiber für dieses Gerät finden kann. Ich habe nach dem entsprechenden Treiber gesucht und festgestellt, dass es sich um den Treiber „alcor_pci“ handelt (https://cateee.net/lkddb/web-lkddb/MISC_ALCOR_PCI.html) und es wurde nicht geladen, also habe ich modprobe verwendet, um es zu laden.
~ lsmod | grep alcor
alcor_pci 20480 0
Aber danach funktioniert es immer noch nicht und lshw
zeigt Folgendes an (NO RECLAMADO bedeutet UNCLAIMED):
*-pci:0
descripción: PCI bridge
producto: Sunrise Point-LP PCI Express Root Port #5
fabricante: Intel Corporation
id físico: 1c
información del bus: pci@0000:00:1c.0
versión: f1
anchura: 32 bits
reloj: 33MHz
capacidades: pci normal_decode bus_master cap_list
configuración: driver=pcieport
recursos: irq:122 memoria:a1200000-a12fffff
*-generic NO RECLAMADO
descripción: Unassigned class
producto: Alcor Micro
fabricante: Alcor Micro
id físico: 0
información del bus: pci@0000:01:00.0
versión: 00
anchura: 64 bits
reloj: 33MHz
capacidades: cap_list
configuración: latency=0
recursos: memoria:a1200000-a1200fff
Kann mir bitte jemand helfen? Ich weiß nicht, ob ich nach dem Laden des Moduls noch etwas tun muss.
Antwort1
Dies kann nicht funktionieren, da die Geräte-ID AU6625 erst inLinux 5.6.
(einige Fahrerunterstützen die „Force Using“-Funktion von Modulen sogar bei einer Nichtübereinstimmung, aber ich würde nicht wirklich darauf hoffen, dass Kartenleser das unterstützen)
Antwort2
(Dieser Text ist eine automatische Übersetzung vom Französischen ins Englische.)
Hallo,
meine Erfahrungen mit dieser Karte:
*"Alcor Micro AU6625 PCI-E Flash card reader controller"*
Wenn Sie bereit sind, Ihren Linux-Kernel neu zu kompilieren, scheint die Karte mit dem bereits im Kernel enthaltenen AU6621-Treiber sehr gut zu funktionieren (seit Kernel-Version 5.5.6). Benennen Sie ihn einfach im Quellcode des Moduls um und kompilieren Sie dann den Linux-Kernel neu. Das funktioniert bei mir seit Kernel-Version 5.5.9. Ich verwende sie jetzt seit einigen Monaten ohne (offensichtliche) Probleme mit diesen Kernel-Versionen (5.5.9, 5.5.16, 5.6.7, 5.6.9).
meine Umgebung:
"HP ENVY Laptop 13-ad1xx"
LSPCI
02:00.0 Unassigned class [ff00]: Alcor Micro AU6625 PCI-E Flash card reader controller
Debian
Stock linux kernel: https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.6.7.tar.xz
Achtung, ich bin kein Entwickler, sondern nur ein Systemadministrator, der seinen Linux-Kernel von Zeit zu Zeit gerne neu kompiliert.
Der Rest dieses Beitrags setzt voraus, dass Sie bereits wissen, wie man einen Linux-Kernel neu kompiliert. Andernfalls ist es besser, diesen Vorgang nicht fortzusetzen. Einen Kernel falsch zu erstellen und auszuführen kann sehr gefährlich sein. Sie könnten alle Daten auf Ihrer Festplatte beschädigen.
Sobald die Quellen extrahiert sind, müssen die folgenden Dateien (gefunden durch den Shell-Befehl "$ grep -i -n -r "AU662" *") an der Wurzel der dekomprimierten Kernelquellen angepasst werden.
Ändern Sie alle Verweise mit „6621“ in „6625“.
Vor der Änderung: $ grep -i -r -n "AU662" *
*drivers/misc/cardreader/alcor_pci.c:5: * Driver for Alcor Micro AU6601 and AU6621 controllers*
*drivers/misc/cardreader/alcor_pci.c:37:static const struct alcor_dev_cfg au6621_cfg = {*
*drivers/misc/cardreader/alcor_pci.c:41:static const struct alcor_dev_cfg au6625_cfg = {*
*drivers/misc/cardreader/alcor_pci.c:48: { PCI_DEVICE(PCI_ID_ALCOR_MICRO, PCI_ID_AU6621),*
*drivers/misc/cardreader/alcor_pci.c:49: .driver_data = (kernel_ulong_t)&au6621_cfg },*
*drivers/misc/cardreader/alcor_pci.c:50: { PCI_DEVICE(PCI_ID_ALCOR_MICRO, PCI_ID_AU6625),*
*drivers/misc/cardreader/alcor_pci.c:51: .driver_data = (kernel_ulong_t)&au6625_cfg },*
*drivers/misc/cardreader/Kconfig:8: au6621.*
*drivers/mmc/host/alcor.c:5: * Driver for Alcor Micro AU6601 and AU6621 controllers*
*drivers/mmc/host/alcor.c:892: /* The clk will not work on au6621. We need to trigger data*
*include/linux/alcor_pci.h:5: * Driver for Alcor Micro AU6601 and AU6621 controllers*
*include/linux/alcor_pci.h:19:#define PCI_ID_AU6621 0x6621*
*include/linux/alcor_pci.h:20:#define PCI_ID_AU6625 0x6625*
*include/linux/alcor_pci.h:36: * 0x10 - ADMA phy address. AU6621 only?*
*include/linux/alcor_pci.h:45: * The au6601 and au6621 have different DMA engines with different issues. One*
*include/linux/alcor_pci.h:46: * For example au6621 engine is triggered by addr change. No other interaction*
*include/linux/alcor_pci.h:54:#define AU6621_DMA_PAGE_CNT 0x05*
*include/linux/alcor_pci.h:57:/* ADMA ctrl? AU6621 only. */*
*include/linux/alcor_pci.h:58:#define AU6621_DMA_CTRL 0x0c*
*include/linux/alcor_pci.h:59:#define AU6621_DMA_ENABLE BIT(0)*
Nach der veränderung:
*drivers/misc/cardreader/alcor_pci.c:5: * Driver for Alcor Micro AU6601 and AU6625 controllers*
*drivers/misc/cardreader/alcor_pci.c:37:static const struct alcor_dev_cfg au6625_cfg = {*
*drivers/misc/cardreader/alcor_pci.c:41:/*static const struct alcor_dev_cfg au6625_cfg = {*
*drivers/misc/cardreader/alcor_pci.c:48: { PCI_DEVICE(PCI_ID_ALCOR_MICRO, PCI_ID_AU6625),*
*drivers/misc/cardreader/alcor_pci.c:49: .driver_data = (kernel_ulong_t)&au6625_cfg },*
*drivers/misc/cardreader/Kconfig:8: au6625.*
*drivers/mmc/host/alcor.c:5: * Driver for Alcor Micro AU6601 and AU6625 controllers*
*drivers/mmc/host/alcor.c:892: /* The clk will not work on au6625. We need to trigger data*
*include/linux/alcor_pci.h:5: * Driver for Alcor Micro AU6601 and AU6625 controllers*
*include/linux/alcor_pci.h:19:#define PCI_ID_AU6621 0x6621*
*include/linux/alcor_pci.h:20:#define PCI_ID_AU6625 0x6625*
*include/linux/alcor_pci.h:36: * 0x10 - ADMA phy address. AU6625 only?*
*include/linux/alcor_pci.h:45: * The au6601 and au6625 have different DMA engines with different issues. One*
*include/linux/alcor_pci.h:46: * For example au6625 engine is triggered by addr change. No other interaction*
*include/linux/alcor_pci.h:54:#define AU6625_DMA_PAGE_CNT 0x05*
*include/linux/alcor_pci.h:57:/* ADMA ctrl? AU6625 only. */*
*include/linux/alcor_pci.h:58:#define AU6625_DMA_CTRL 0x0c*
*include/linux/alcor_pci.h:59:#define AU6625_DMA_ENABLE BIT(0)*
Zwei wichtige Hinweise:
seit Kernel 5.6.x scheint es einen Start des im Kernel enthaltenen AU6625-Treibers zu geben, aber dieser enthaltene Treiber scheint noch nicht zu funktionieren (zumindest bei meiner Konfiguration und bis zum 5.6.9-Kernel, den ich derzeit verwende). Sie müssen diesen neuen Teil daher im Code „auskommentieren“ oder löschen.
Nach dem Neustart auf diesem neu kompilierten Kernel zeigt der Befehl "lspci" weiterhin "Unassigned Class ..." an.
für mich02:00.0 Nicht zugewiesene Klasse [ff00]: Alcor Micro AU6625 PCI-E Flash-Kartenleser-Controller
Aber die Karte funktioniert trotzdem sehr gut und ist wie jede andere in meinem Dateimanager (Nautilus) eingebunden.
dmesg
May 10 13:35:35 MylapX kernel: [ 0.818161] pci 0000:02:00.0: [1aea:6625] type 00 class 0xff0000
May 10 13:35:35 MylapX kernel: [ 0.818209] pci 0000:02:00.0: reg 0x10: [mem 0xb4200000-0xb4200fff 64bit]
May 10 13:35:35 MylapX kernel: [ 0.818386] pci 0000:02:00.0: supports D1 D2
May 10 13:35:35 MylapX kernel: [ 0.818388] pci 0000:02:00.0: PME# supported from D1 D2 D3hot D3cold
May 10 13:35:35 MylapX kernel: [ 2.845290] alcor_pci 0000:02:00.0: enabling device (0000 -> 0002)
May 10 13:35:39 MylapX kernel: [ 7.617586] mmc0: Skipping voltage switch
May 10 13:35:39 MylapX kernel: [ 7.877031] mmc0: new high speed SDXC card at address aaaa
May 10 13:35:39 MylapX kernel: [ 7.880661] mmcblk0: mmc0:aaaa ACLCF 119 GiB
May 10 13:35:39 MylapX kernel: [ 7.896324] mmcblk0: p1
fdisk -l
Disk /dev/mmcblk0: 119.9 GiB, 127865454592 bytes, 249737216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x00000000
Device Boot Start End Sectors Size Id Type
/dev/mmcblk0p1 32768 249737215 249704448 119.1G 7 HPFS/NTFS/exFAT
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mmcblk0p1 120G 98G 22G 82% /media/user/3561-6331