この問題を発行する他の投稿をいくつか読んだことがあります。しかし、まさにこの問題の解決策はありません。 Lenovo T440にUbuntu 14.04をインストールしました。
Realtek Semiconductor Co.、Ltd. RTS5227 PCI Express Card Readerは動作していません。
SDカードをスロットに押し込んだ後、何も起こりませんでした。
# lspci
02:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
Subsystem: Lenovo Device 220c
Flags: fast devsel, IRQ 16
Memory at f0500000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 3
Capabilities: [50] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [70] Express Endpoint, MSI 00
Capabilities: [100] Advanced Error Reporting
Capabilities: [140] Device Serial Number 00-00-00-01-00-4c-e0-00
Capabilities: [150] Latency Tolerance Reporting
Capabilities: [158] L1 PM Substates
# lshw
*-pci:0
Beschreibung: PCI bridge
Produkt: Lynx Point-LP PCI Express Root Port 6
Hersteller: Intel Corporation
Physische ID: 1c
Bus-Informationen: pci@0000:00:1c.0
Version: e4
Breite: 32 bits
Takt: 33MHz
Fähigkeiten: pci pciexpress msi pm normal_decode bus_master cap_list
Konfiguration: driver=pcieport
Ressourcen: irq:17 memory:f0500000-f05fffff
*-generic UNGEFORDERT
Beschreibung: Unassigned class
Produkt: RTS5227 PCI Express Card Reader
Hersteller: Realtek Semiconductor Co., Ltd.
Physische ID: 0
Bus-Informationen: pci@0000:02:00.0
Version: 01
Breite: 32 bits
Takt: 33MHz
Fähigkeiten: pm msi pciexpress cap_list
Konfiguration: latency=0
Ressourcen: memory:f0500000-f0500fff
グリーツ
mSI GE60での作業Realtek Semiconductor Co.、Ltd.のRTS5227がWindowsで動作していますが、Linuxミント(ubuntuベース)では動作していません。
注意/重要:
この方法を使用すると、デバイスが再起動後にカードリーダーを認識しないようになる可能性があります。何が起こっているのかまだわかりませんが、デバイスはpciバスで列挙できないようです。 Windowsでのコールドブート(公式ドライバーを使用)で修正しました。
私はrts5209のいくつかのチュートリアルを見つけ、それらを適応させようとしました:
https://vidyut.net/realtek-sd-card-reader-working-ubuntu/
RTS5229のソースをrealtekのWebサイト(Linux用PCIE RTS5229カードリーダードライバー)から取得しました。メッセージ内のリンクは2つまでです。チュートリアルはもっと重要なようです-> google
その後、エラーなしでビルドするために、rtcx.cのリンクされたチュートリアルよりも少しコードを変更しました。rtsx_Host_template初期化行206のproc_infoの宣言にコメントを付けます。
(before)
.proc_info = proc_info,
(after)
//.proc_info = proc_info,
この問題を解決したら、ドライバーを作成し、試してみましたが、明らかにドライバーとハードウェア間のリンクはありませんでした。
そのため、デバイスの名前を取得し、正しいデバイス名になるようにコードを変更しようとしました。 rtsx.hの最初の行(55)に移動し、デバイス名の定義を必要に応じて調整します。
(before)
#define CR_DRIVER_NAME "rts5229"
(after)
#define CR_DRIVER_NAME "rts5227"
Makefileのターゲットを変更した後:
(before)
TARGET_MODULE := rts5229
(after)
TARGET_MODULE := rts5227
何の後
make clean
make
Sudo make install
Sudo depmod
Sudo modprobe rts5227
デバイスがrtsx_pciモジュール(lspci -v)を使用していないことを確認します。その場合、Dainaccioの方法を使用して修正する必要があります(2番目のチュートリアルの終わり近く)。
モジュールが正しくロードされると、ls/devは新しいインターフェイスを表示します(私は/ dev/sdb):D
実際、それは本当にきれいではありません。問題は、2カードリーダーバージョンの違いをより深く理解し、それをうまく機能させるためにドライバーをより深く理解する必要があるということです。
ドライバーは基本的に機能しており、パーティションのマウント/アンマウント、カードへの書き込みと読み取り、挿入と取り外しが検出されます。自動マウントをテストしていません。しかし、とにかく、ドライバーが動作しているlspci -vは、このソリューションがクリーンではないことを示します。周辺クラスは認識されないため、他の値が考えられます。コードを少し見てみると、rts5229にハードコードされた多くのリファレンスも見ました。彼らはやるべき仕事かもしれない...
とにかく、良い一日を!
~~~~~
アップストリームrtsx_pciはカードリーダーを管理します。
それでも動作するようにドライバをアンロードしてからリロードしなければならなかったため、まだ何かが間違っています:
# modprobe -r rtsx_pci
# modprobe rtsx_pci
PS:まだアップストリームに報告していません(または、問題がすでに報告されていることを確認しました)。すぐにそれをやりたいと思っていますが、私にそれを打ち負かすことは自由です(唯一の要件はバグを再現するハードウェアを持つことです)。
こちらのThinkpad Yoga S1には、このデバイスも同梱されています。
# lspci
05:00.0 Unassigned class [ff00]: Realtek Semiconductor Co., Ltd. RTS5227 PCI Express Card Reader (rev 01)
Subsystem: Lenovo Device 2217
Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0, Cache Line Size: 64 bytes
Interrupt: pin A routed to IRQ 75
Region 0: Memory at f0400000 (32-bit, non-prefetchable) [size=4K]
Capabilities: [40] Power Management version 3
Flags: PMEClk- DSI- D1+ D2+ AuxCurrent=375mA PME(D0-,D1+,D2+,D3hot+,D3cold+)
Status: D0 NoSoftRst- PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [50] MSI: Enable+ Count=1/1 Maskable- 64bit+
Address: 00000000fee0f00c Data: 41e2
Capabilities: [70] Express (v2) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s unlimited, L1 unlimited
ExtTag- AttnBtn- AttnInd- PwrInd- RBE+ FLReset-
DevCtl: Report errors: Correctable- Non-Fatal- Fatal- Unsupported-
RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop-
MaxPayload 128 bytes, MaxReadReq 512 bytes
DevSta: CorrErr- UncorrErr- FatalErr- UnsuppReq- AuxPwr+ TransPend-
LnkCap: Port #0, Speed 2.5GT/s, Width x1, ASPM L0s L1, Exit Latency L0s unlimited, L1 <64us
ClockPM+ Surprise- LLActRep- BwNot-
LnkCtl: ASPM L1 Enabled; RCB 64 bytes Disabled- CommClk-
ExtSynch- ClockPM+ AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk+ DLActive- BWMgmt- ABWMgmt-
DevCap2: Completion Timeout: Not Supported, TimeoutDis+, LTR+, OBFF Via message/WAKE#
DevCtl2: Completion Timeout: 50us to 50ms, TimeoutDis-, LTR+, OBFF Disabled
LnkCtl2: Target Link Speed: 2.5GT/s, EnterCompliance- SpeedDis-
Transmit Margin: Normal Operating Range, EnterModifiedCompliance- ComplianceSOS-
Compliance De-emphasis: -6dB
LnkSta2: Current De-emphasis Level: -3.5dB, EqualizationComplete-, EqualizationPhase1-
EqualizationPhase2-, EqualizationPhase3-, LinkEqualizationRequest-
Capabilities: [100 v2] Advanced Error Reporting
UESta: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UEMsk: DLP- SDES- TLP- FCP- CmpltTO- CmpltAbrt- UnxCmplt- RxOF- MalfTLP- ECRC- UnsupReq- ACSViol-
UESvrt: DLP+ SDES+ TLP- FCP+ CmpltTO- CmpltAbrt- UnxCmplt- RxOF+ MalfTLP+ ECRC- UnsupReq- ACSViol-
CESta: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr-
CEMsk: RxErr- BadTLP- BadDLLP- Rollover- Timeout- NonFatalErr+
AERCap: First Error Pointer: 00, GenCap+ CGenEn- ChkCap+ ChkEn-
Capabilities: [140 v1] Device Serial Number 00-00-00-01-00-4c-e0-00
Capabilities: [150 v1] Latency Tolerance Reporting
Max snoop latency: 71680ns
Max no snoop latency: 71680ns
Capabilities: [158 v1] L1 PM Substates
L1SubCap: PCI-PM_L1.2+ PCI-PM_L1.1+ ASPM_L1.2+ ASPM_L1.1+ L1_PM_Substates+
PortCommonModeRestoreTime=60us PortTPowerOnTime=60us
Kernel driver in use: rtsx_pci
それは私のDebianシステムのrts_pstor
ドライバーでした。動作させるのに2 rmmod
/modprobe
サイクルかかりました。
上記の解決策を試しましたが、Lenovo T540pおよびLinux Mint Mate 14.04 LTSでは動作しません。カーネルソース(ヘッダー)を調べたが、解決策が見つかりませんでした。そこで、安定したカーネル19.1を http://www.kernel.org からダウンロードし、/usr/src/linux_19.1/drivers/mfd/
という名前のrts5227.c
というファイルを見つけました。このファイルは、カーネルバージョン3.9以降から見つけることができます。
新しいカーネルを含めてコンパイルすることにしました。元の.config
を使用して
make oldconfig
make menuconfig
次に、現在の構成を保存し、カーネルとモジュールをコンパイルした後、menuconfig
を残しました。
make
モジュールをインストールするには:
Sudo make modules_install
新しいカーネルをインストールしてGrub2を更新するには
Sudo make install
すべての準備ができたら、システムを再起動します(最初の再起動はinitramfsのシェルで終了しました(「dev by uuid」が見つかりませんでした)。)
これで、SDスロットに挿入されたSDカードが表示されます。 PCIeスロットにPCIe USB 3.0カードがあり、現在動作しています。