web-dev-qa-db-ja.com

HP ENVY-13-ad001la Pop-Os 19.10 PCIカードリーダーが機能しない

HP Envy 13-ad001laとPopO 19.10を使用しています。カードリーダーが機能していません。 lspciを使用すると、これがAlcor Microデバイスリーダーであることがわかります。

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

私の理解では、「Unassigned class」とは、Linuxがこのデバイスのドライバーを見つけられないことを意味します。対応するドライバーを検索したところ、ドライバーが "alcor_pci"( https://cateee.net/lkddb/web-lkddb/MISC_ALCOR_PCI.html )であり、読み込まれていなかったため、それをロードするためにmodprobeを使用しました。

 ~  lsmod | grep alcor     
alcor_pci              20480  0

しかし、この後も機能しません。lshwには次のように表示されます(NO RECLAMADOは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

誰か助けてもらえますか?モジュールをロードした後、他に何かする必要があるかどうかわかりません。

AU6625デバイスIDは linux 5.6 でのみ追加されたため、機能しません。

一部のドライバー 不一致でも「強制使用」モジュールをサポートしますが、カードリーダーがそれをサポートするために私は本当に息を止めません)

2
mirh

(このテキストはフランス語から英語への自動翻訳です。)

こんにちは、
このカードでの私の経験:

*"Alcor Micro AU6625 PCI-E Flash card reader controller"*

linuxカーネルを再コンパイルする場合、カードはすでにカーネルに含まれているAU6621ドライバーで非常にうまく機能するようです(カーネルバージョン5.5.6以降)。モジュールのソースコードで名前を変更してから、Linuxカーネルを再コンパイルします。これは、カーネルバージョン5.5.9以降で機能します。私は数ヶ月間、これらのカーネルバージョン(5.5.9、5.5.16、5.6.7、5.6.9)を使用して(明らかな)問題なしに使用しています。

私の環境:

"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

警告、私は開発者ではありません。時々Linuxカーネルを再コンパイルするのが好きなシステム管理者です。

この投稿の残りの部分では、Linuxカーネルを再コンパイルする方法をすでに知っていることを前提としています。それ以外の場合は、このプロセスを続行しないことをお勧めします。カーネルを間違ってビルドして実行すると非常に危険な場合があり、ハードドライブ上のすべてのデータが破損する可能性があります。

ソースが抽出されたら、解凍されたカーネルソースのルートで次のファイルを調整する必要があります(シェルコマンド "$ grep -i -n -r" AU662 "*"で見つかります)。

「6621」のすべての参照を「6625」に変更します。

変更前:$ 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)*

変更後:

*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)*

2つの重要な注意事項:

  • カーネル5.6.x以降、カーネルに含まれているAU6625ドライバーの開始があるようですが、この含まれているドライバーはまだ機能していないようです(少なくとも私の構成と現在使用している5.6.9カーネルまで) )したがって、この新しい部分を「コメント」するか、コードから削除する必要があります。

  • この新しくコンパイルされたカーネルで再起動した後、 "lspci"コマンドは "Unassigned Class ..."を表示し続けます。
    私のために

    02:00.0未割り当てのクラス[ff00]:Alcor Micro AU6625 PCI-Eフラッシュカードリーダーコントローラー

しかし、カードはとにかく非常にうまく機能し、他のように私のファイルマネージャ(Nautilus)にマウントされます。

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
0
Abdou G