scanpci
pci bus 0x0000 cardnum 0x01 function 0x00: vendor 0x1002 device 0x9802
Advanced Micro Devices, Inc. [AMD/ATI] Wrestler [Radeon HD 6310]
Прописал в /etc/X11/xorg.conf драйвер ati.
В /usr/lib/xorg/modules/drivers/amd64/ati_drv.so определяется, какой драйвер соответствует видеокарте. В нашем случае radeon_drv.so
Вызовы функций в radeon_drv.so
1 -> RADEONSetup
1 <- RADEONSetup
1 -> RADEONIdentify
1 <- RADEONIdentify
1 -> RADEONDriverFunc
1 <- RADEONDriverFunc
1 -> RADEONDriverFunc
1 <- RADEONDriverFunc
1 -> radeon_pci_probe
1 <- radeon_pci_probe
Выполнение прерывается на этой функции (radeon_probe.c)
static Bool radeon_kernel_mode_enabled(ScrnInfoPtr pScrn, struct pci_device *pci_dev)
{
char *busIdString;
int ret;
if (!xf86LoaderCheckSymbol("DRICreatePCIBusID")) {
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
"[KMS] No DRICreatePCIBusID symbol, no kernel modesetting.\n");
return FALSE;
}
busIdString = DRICreatePCIBusID(pci_dev);//"pci:0000:00:01.0"
ret = drmCheckModesettingSupported(busIdString); //%rax = 0x00000000ffffffa7
#if defined(__FreeBSD__) || defined(__FreeBSD_kernel__)
if (ret) {
if (xf86LoadKernelModule("radeonkms")) //Может быть портировать этот модуль?
ret = drmCheckModesettingSupported(busIdString);
}
#endif
free(busIdString);
if (ret) {
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
"[KMS] drm report modesetting isn't supported.\n"); //Это сообщение выводится
return FALSE; //Выход тут
}
xf86DrvMsgVerb(pScrn->scrnIndex, X_INFO, 0,
"[KMS] Kernel modesetting enabled.\n");
return TRUE;
}
Пропытка обмануть драйвер, что KMS есть.
root@openindiana:/home/keremet# mdb /usr/bin/amd64/Xorg
Loading modules: [ Xorg ]
> ::bp radeon_drv.so`radeon_pci_probe
> :c
X.Org X Server 1.7.7
Release Date: 2010-05-04
X Protocol Version 11, Revision 0
Build Operating System: SunOS 5.11 i86pc
Current Operating System: SunOS openindiana 5.11 oi_151a8 i86pc
Build Date: 18 February 2013 09:58:49PM
Solaris ABI: 64-bit
Current version of pixman: 0.18.4
Before reporting problems, check
http://openindiana.org/consolidation/xnv to make sure that you have the latest version.
Markers: (--) probed, (**) from config file, (==) default setting,
(++) from command line, (!!) notice, (II) informational,
(WW) warning, (EE) error, (NI) not implemented, (??) unknown.
(==) Log file: "/var/log/Xorg.0.log", Time: Tue Jan 6 13:44:28 2015
(==) Using config file: "/etc/X11/xorg.conf"
(EE) Failed to load module "xtsol" (module does not exist, 0)
mdb: stop at radeon_drv.so`radeon_pci_probe
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe: pushq %rbp
mdb: You've got symbols!
Loading modules: [ ld.so.1 libc.so.1 ]
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+1: leaq +0x570b8(%rip),%rcx <radeon_drv.so`RADEONPciChipsets>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+8: xorl %r9d,%r9d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb: xorl %r8d,%r8d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe: xorl %edi,%edi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x10: movq %rsp,%rbp
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x13: movq %rbx,-0x20(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x17: movq %r13,-0x10(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x1b: movq %rdx,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x1e: movq %r14,-0x8(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x22: movq %r12,-0x18(%rbp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x26: subq $0x40,%rsp
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2a: movl %esi,%edx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2c: movl %esi,%r14d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x2f: movq $0x0,0x10(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x38: xorl %esi,%esi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x3a: movq $0x0,0x8(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x43: movq $0x0,(%rsp)
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x4b: call -0x4958 <PLT:xf86ConfigPciEntity>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x50: movq %rax,%r13
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x53: xorl %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x55: testq %r13,%r13
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x58: je +0x32 <radeon_drv.so`radeon_pci_probe+0x8c>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x5a: testq %rbx,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x5d: je +0x96 <radeon_drv.so`radeon_pci_probe+0xf9>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x63: leaq +0x45c9d(%rip),%rdi <0xfffffd7ffe88c4e7>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x6a: call -0x4967 <PLT:xf86LoaderCheckSymbol>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x6f: testl %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0x71: jne +0x2d <radeon_drv.so`radeon_pci_probe+0xa0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa0: movq %rbx,%rdi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa3: call -0x4980 <PLT:DRICreatePCIBusID>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xa8: movq %rax,%rbx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xab: movq %rax,%rdi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xae: call -0x497b <PLT:drmCheckModesettingSupported>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb3: movq %rbx,%rdi
> ::regs
%rax = 0x00000000ffffffa7 %r8 = 0x000000007fffffff
%rbx = 0x00000000006e4130 %r9 = 0x0000000000000030
%rcx = 0x00000000006e4140 %r10 = 0x00000000000005c8
%rdx = 0xfffffd7fffdfeb95 %r11 = 0x0000000000000258
%rsi = 0xfffffd7fffdfeb94 %r12 = 0x0000000000000000
%rdi = 0x00000000006e4130 %r13 = 0x00000000006cfe50
%r14 = 0x0000000000000000
%r15 = 0x0000000000009802
%cs = 0x0053 %fs = 0x0000 %gs = 0x0000
%ds = 0x0000 %es = 0x0000 %ss = 0x004b
%rip = 0xfffffd7ffe846893 radeon_drv.so`radeon_pci_probe+0xb3
%rbp = 0xfffffd7fffdffa00
%rsp = 0xfffffd7fffdff9c0
%rflags = 0x00000292
id=0 vip=0 vif=0 ac=0 vm=0 rf=0 nt=0 iopl=0x0
status=<of,df,IF,tf,SF,zf,AF,pf,cf>
%gsbase = 0x0000000000000000
%fsbase = 0xfffffd7fff162a40
%trapno = 0x3
%err = 0x0
> 0>rax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb6: movl %eax,%r12d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xb9: call -0x4a16 <PLT:free>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xbe: testl %r12d,%r12d
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xc1: je +0x1d <radeon_drv.so`radeon_pci_probe+0xe0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe0: movl 0x18(%r13),%edi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xe4: leaq +0x43e15(%rip),%rcx <0xfffffd7ffe88a6e0>
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xeb: xorl %edx,%edx
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xed: movl $0x7,%esi
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf2: xorl %eax,%eax
> ::step over
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf4: call -0x49e1 <PLT:xf86DrvMsgVerb>
> ::step over
(II) [KMS] Kernel modesetting enabled.
mdb: target stopped at:
radeon_drv.so`radeon_pci_probe+0xf9: movq +0x564e0(%rip),%r10 <0xfffffd7ffe89cdc0>
> :c
(EE) RADEON(0): [drm] Failed to open DRM device for pci:0000:00:01.0: No such device or address
(EE) RADEON(0): Kernel modesetting setup failed
(EE) Screen(s) found, but none have a usable configuration.
Fatal server error:
no screens found
Please consult the OpenIndiana, based on X.Org Foundation & OpenSolaris sources support
at
http://openindiana.org/consolidation/xnv for help.
Please also check the log file at "/var/log/Xorg.0.log" for additional information.
mdb: target has terminated
>