Имеется карточка с чипами CX25850 и CX25821. Предполагается сделать из компа видеорегистратор на базе данной карты. Проблема в том, что при загрузке ядро не загружает драйвер под мою карту и соответственно не создаются устройства /dev/video*.
Исходные данные:
uname -a
Linux avreg 3.14.0 #4 Thu May 1 15:17:08 MSK 2014 i686 GNU/Linuxdmesg | grep cx25821
[ 1561.750513] cx25821: unknown parameter 'tuner' ignored
[ 1561.750768] cx25821: driver version 0.0.106 loadedlsmod | grep cx258
cx25821 44202 0
btcx_risc 12499 1 cx25821
videobuf_dma_sg 17124 1 cx25821
videobuf_core 21583 2 videobuf_dma_sg,cx25821
v4l2_common 12867 1 cx25821
videodev 103526 2 cx25821,v4l2_common
i2c_core 23647 8 drm,i2c_i801,cx25821,drm_kms_helper,i2c_algo_bit,v4l2_common,radeon,videodevlspci -v
03:00.0 Multimedia video controller: Conexant Systems, Inc. CX25850
Subsystem: Device 5644:4e4c
Flags: bus master, fast devsel, latency 0, IRQ 9
Memory at fd400000 (64-bit, non-prefetchable) [size=2M]
Capabilities: [40] Express Endpoint, MSI 00
Capabilities: [80] Power Management version 3
Capabilities: [90] Vital Product Data
Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
Capabilities: [100] Advanced Error Reporting
Capabilities: [200] Virtual Channel
Можно заметить что в выводе нет Kernel driver in use: ....................
Смотрим подробнее про карточку:
lspci -vvvvnnnn
03:00.0 Multimedia video controller [0400]: Conexant Systems, Inc. CX25850 [14f1:8200]
Subsystem: Device [5644:4e4c]
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 9
Region 0: Memory at fd400000 (64-bit, non-prefetchable) [size=2M]
Capabilities: [40] Express (v1) Endpoint, MSI 00
DevCap: MaxPayload 128 bytes, PhantFunc 0, Latency L0s <64ns, L1 <1us
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, Latency L0 <2us, L1 <4us
ClockPM- Surprise- LLActRep- BwNot-
LnkCtl: ASPM Disabled; RCB 64 bytes Disabled- Retrain- CommClk-
ExtSynch- ClockPM- AutWidDis- BWInt- AutBWInt-
LnkSta: Speed 2.5GT/s, Width x1, TrErr- Train- SlotClk- DLActive- BWMgmt- ABWMgmt-
Capabilities: [80] Power Management version 3
Flags: PMEClk- DSI+ D1+ D2+ AuxCurrent=0mA PME(D0+,D1+,D2+,D3hot+,D3cold-)
Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [90] Vital Product Data
No end tag found
Capabilities: [a0] MSI: Enable- Count=1/1 Maskable- 64bit+
Address: 0000000000000000 Data: 0000
Capabilities: [100 v1] 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: [200 v1] Virtual Channel
Caps: LPEVC=1 RefClk=100ns PATEntryBits=1
Arb: Fixed+ WRR32+ WRR64+ WRR128-
Ctrl: ArbSelect=WRR64
Status: InProgress-
Port Arbitration Table [240] <?>
VC0: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable+ ID=0 ArbSelect=Fixed TC/VC=ff
Status: NegoPending- InProgress-
VC1: Caps: PATOffset=00 MaxTimeSlots=1 RejSnoopTrans-
Arb: Fixed- WRR32- WRR64- WRR128- TWRR128- WRR256-
Ctrl: Enable- ID=1 ArbSelect=Fixed TC/VC=00
Status: NegoPending- InProgress-
В заключении добавлю, что перед сборкой ядра в каталоге /usr/src/linux-3.14/drivers/media/pci/cx25821 поправил файл cx25821-core.c:
строку:
if (dev->pci->device != 0x8210) {
заменил на:
if (dev->pci->device != 0x8210 && dev->pci->device != 0x8200) {
А так же далее:
блок:
/* CX25821 No Brand */
.vendor = 0x14f1,
.device = 0x8210,
.subvendor = 0x0000,
.subdevice = 0x0000,
заменил на:
/* CX25820 No Brand */
.vendor = 0x14f1,
.device = 0x8200,
.subvendor = 0x0000,
.subdevice = 0x0000,
Но это не привело к нужному результату, драйвер так и не подцепился.
Подскажите где и что еще можно покрутить, может я что-то не так делаю и недопонимаю.