Решил поставить кубунту (kubuntu), увидеть красоты компиза (compiz fusion), насладится юникс окружением!
Но не тут то было. Моя видеокарта упорно не хотела работать с драйверами от nvidia (10,14.19-23).
Система загружалась, но как только в xorg.conf видела driver="nvidia" (вместо "nv"), сразу впадала в ступор и нагло зависала не подавая признаков жизни (экран гаснет, система в дед локе)
Вот что система выдавала в dmesg
# dmesg
[ 20.393275] PCI: Cannot allocate resource region 3 of device 0000:05:00.0
[ 20.480120] PCI: Failed to allocate mem resource #3:2000000@fe000000 for 0000:05:00.0
[ 21.108511] Boot video device is 0000:05:00.0
[ 39.067285] ACPI: PCI Interrupt 0000:05:00.0[A] -> Link [APC3] -> GSI 18 (level, low) -> IRQ 20
[ 39.067387] PCI: Setting latency timer of device 0000:05:00.0 to 64
Понятно, что не может зарезервировать регион памяти, понятно что биос глючный, либо ядро косячит,
непонятно - почему!? Ибо в win xp все работает, Непорядок, Нужно разобраться.
Перерыв, как обычно, пол интернета, просмотрев кучу сообщений в баг репортах однозначного ответа не нашел.
Пошел читать книжки типа "understanding linux kernel", "compiling linux kernel modules for dummies", "linux device drivers 3 edition"..
В итоге пополняем наши знания:
- ядру можно передавать кучу опций, таких как apic=debug noapic lapic nolapic pci=nommconf pci=nobios vga=791
Результатов это не принесло, гораздо более интересна в моем случае опция reserve=, которая позволяет резервировать память,
не давая ядру возможности самостоятельно "попробовать" этот регион.
- можно управлять pci шиной/устройствами командой setpci. Читать данные можем той же командой или lspci, lshw, также низкоуровневая информация содержится в /proc, и /sys/pci
Несколько дней-недель зоопарка linux и танцов с бубнами (барабанами) и мы ее добили,
Делаем следующее (справедливо для моей системы)
1) Add all nvidia stuff to /etc/modprobe.d/blacklist
blacklist nv
blacklist nvidia
blacklist nvidia_new
2) Add kernel ooptions
reserve=0xCE000000,0x1FFFFFF reserve=0xFD000000,0x1FFFF
Перезагружаем систему, и - о чудо! Заставка nvidia и кдешный сплэш радуют нас своим присутствием.
Обнаруживаем рабочую конфигурацию системы с другими параметрами регионов памяти!
05:00.0 0300: 10de:0402 (rev a1) (prog-if 00 [VGA])
Subsystem: 1462:0910
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR-
Latency: 0
Interrupt: pin A routed to IRQ 20
Region 0: Memory at 8a000000 (32-bit, non-prefetchable) [size=16M]
Region 1: Memory at 90000000 (64-bit, prefetchable) [size=256M]
Region 3: Memory at 88000000 (64-bit, non-prefetchable) [size=32M]
Region 5: I/O ports at 9f00 [size=128]
[virtual] Expansion ROM at 8b000000 [disabled] [size=128K]
Capabilities: [60] Power Management version 2
Flags: PMEClk- DSI- D1- D2- AuxCurrent=0mA PME(D0-,D1-,D2-,D3hot-,D3cold-)
Status: D0 PME-Enable- DSel=0 DScale=0 PME-
Capabilities: [68] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0 Enable-
Address: 0000000000000000 Data: 0000
Capabilities: [78] Express Endpoint IRQ 0
Device: Supported: MaxPayload 128 bytes, PhantFunc 0, ExtTag+
Device: Latency L0s <512ns, L1 <4us
Device: AtnBtn- AtnInd- PwrInd-
Device: Errors: Correctable- Non-Fatal- Fatal- Unsupported-
Device: RlxdOrd+ ExtTag- PhantFunc- AuxPwr- NoSnoop+
Device: MaxPayload 128 bytes, MaxReadReq 512 bytes
Link: Supported Speed 2.5Gb/s, Width x16, ASPM unknown, Port 0
Link: Latency L0s <512ns, L1 <4us
Link: ASPM Disabled RCB 128 bytes CommClk- ExtSynch-
Link: Speed 2.5Gb/s, Width x16
Capabilities: [100] Virtual Channel
Capabilities: [128] Power Budgeting
Capabilities: [600] Unknown (11)
И в результате -
glxinfo | grep direc
direct rendering: Yes
За это время было отослано баг репортов - 4
Получено подтверждений - 1
Получено способов устранения проблемы - 0