Ubuntu 14.04 Realtek Semiconductor Co., Ltd. RTS5227 Устройство считывания карт PCI Express не работает
Я прочитал несколько других сообщений, посвященных этой проблеме. Но без решения именно этой проблемы. Я установил Ubuntu 14.04 на свой Lenovo T440s.
Realtek Semiconductor Co., Ltd. RTS5227 Устройство чтения карт PCI Express не работает на нем.
После того, как я вставил 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
Greetz
5 ответов
Работая на MSI GE60, у меня есть Realtek Semiconductor Co., Ltd. RTS5227, работающая на Windows, но не на Linux Mint (на основе Ubuntu).
ВНИМАНИЕ / ВАЖНО:
использование этого метода может привести к тому, что устройство не распознает устройство чтения карт после перезагрузки. Я еще не понял, что происходит, но устройство, кажется, не в состоянии перечислить на шине pci. Я исправил это при холодной загрузке на windows (с официальным драйвером).
Я нашел несколько уроков для rts5209 и попытался их адаптировать:
https://vidyut.net/realtek-sd-card-reader-working-ubuntu/
Я взял источники для RTS5229 с веб-сайта realtek (драйвер устройства чтения карт PCIE RTS5229 для Linux): в моем сообщении не более 2 ссылок, учебники кажутся более важными -> Google
затем я должен был сделать немного больше модификации кода, чем в связанных учебниках в rtcx.c, чтобы построить без ошибок: прокомментируйте объявление proc_info в строке инициализации rtsx_host_template 206.
(before)
.proc_info = proc_info,
(after)
//.proc_info = proc_info,
как только я прошел через это, я собрал драйвер и попытался использовать его, но, очевидно, связи между драйвером и оборудованием не было.
Поэтому я взял имя моего устройства и попытался изменить код, чтобы получить правильное имя устройства. Перейдите в первые строки (55) файла rtsx.h и адаптируйте определение имени устройства под свои нужды:
(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, чтобы это исправить (ближе к концу второго урока).
когда ваш модуль правильно загружен, ls /dev должен показать вам новый интерфейс (для меня /dev/sdb):D
На самом деле это не совсем понятно. Дело в том, что должно быть гораздо больше понимания разницы между версией для двух карт-ридеров и гораздо больше понимания драйвера, чтобы все работало нормально.
Драйвер в основном функционален, вы можете монтировать / размонтировать раздел, записывать и читать на карту, обнаруживается вставка и удаление. Я не проверял автомонтирование. Но в любом случае lspci -v с работающим драйвером покажет вам, что это решение не является чистым: периферийный класс не распознается, поэтому я думаю, что другие значения. Кратко посмотрев код, я также увидел много ссылок, жестко запрограммированных на rts5229. они могли бы сделать какую-то работу...
в любом случае, хорошего дня!
~~~~~
Upstream 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
Это было rts_pstor
драйвер в моей системе Debian. взял два 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 USB 3.0 в слоте PCIe, и она работает сейчас.
Вы можете попробовать следующий код для включения модуля rtsx_pci при загрузке.
echo "rtsx_pci" | sudo tee -a /etc/modules