최근 dnf 플러그인을 통해 Fedora 22에서 23으로 업그레이드했는데 그래픽을 제외한 모든 것이 잘 작동합니다. fglrx 모듈은 잘 로드되는 것 같지만 화면을 열려고 하면 X 서버가 충돌합니다. fglrx를 여러 번 다시 설치해 보았습니다.
Xorg 로그의 관련 오류 섹션은 다음과 같습니다.
[141.208] (EE)
[141.208] (EE) 역추적:
[141.208] (EE) 0: /usr/libexec/Xorg (OsLookupColor+0x139) [0x59afb9]
[141.209] (EE) 1: /lib64/libc.so .6 (__restore_rt+0x0) [0x7f1a9bf0cb1f]
[141.210] (ee) 2 : /usr/lib64/xorg/modules/drivers/fglrx_drv.so (xs117setprivate+0x27) [0x7f1a98f7]
[141.211] r /lib64/xorg/modules/drivers/fglrx_drv.so (xclSetPrivate+0xd) [0x7f1a986f850d]
[ 141.212] (EE) 4: /usr/lib64/xorg/modules/drivers/fglrx_drv.so (xdl_xs117_swlDriScreenInit+0x124) [0x7 ] f1a98960764]
[141.213] (EE) 5: /usr/lib64/xorg/modules/drivers/fglrx_drv.so (xdl_xs117_atiddxDriScreenInit+0x32a) [0x7f1a98948c9a]
[141.214] (EE) 6: /usr/lib64/x 조직/모듈 /drivers /fglrx_drv.so (xdl_xs117_atiddxScreenInit+0x118b) [0x7f1a98942dcb]
[ 141.214] (EE) 7: /usr/libexec/Xorg (AddScreen+0x101) [0x436cd1]
[ 141.214] (EE) 8: /usr/ c/Xorg ( InitOutput+0x3e1) ) [0x47ab41]
[ 141.215] (EE) 9: /usr/libexec/Xorg (remove_fs_handlers+0x264) [0x43a7f4]
[ 141.215] (EE) 10: /lib64/libc.so.6 (__libc_start_main+ 0xf0 )[0x7f1a9bef8580]
[141.215](EE)11:/usr/libexec/Xorg(_start+0x29)[0x424ce9]
[141.215](EE)12:? (?+0x29) [0x29]
[ 141.215] (EE)
[ 141.215] (EE) 주소 0x10의 분할 오류
[ 141.215] (EE)
치명적인 서버 오류:
[ 141.215] (EE) 신호 11 포착(분할 오류). 서버 중단됨
[141.216] (EE)
이전에 이 커널(4.1.10)에서 성공적으로 실행되었으므로 이것이 fglrx 문제가 아닌 Xorg 문제라고 생각됩니다.
Xorg를 다시 작동시키려면 어떻게 해야 합니까?
답변1
이전에 4.x 커널에서 fglrx를 어떻게 설치했는지 잘 모르겠지만 fglrx는 공식적으로 4.x 커널을 지원하지 않습니다. 최근까지 최신 커널을 사용하도록 설치 프로그램을 패치할 수 있었습니다.
그러나 최근 Linux 4.2 이상에서 gcc5로 컴파일하면 이 드라이버가 손상된다는 보고가 있었습니다. Fedora 23은 기본적으로 4.2.x 커널과 gcc5를 사용하므로 해결책이 없습니다.
gcc49를 수동으로 컴파일하고 이를 사용하여 드라이버를 컴파일하는 것이 가능할 수도 있지만 개인적으로는 이 작업을 수행할 수 없습니다.
이제 나는 같은 배를 타고 있습니다.
답변2
firegl_public.c
최신 커널에 대한 패치를 얻었습니다.
--- ../firegl_public.c 2016-06-04 23:00:11.938899758 -0400
+++ firegl_public.c 2016-06-06 21:30:45.942122307 -0400
@@ -136,6 +136,9 @@
#include <asm/processor.h>
#include <asm/tlbflush.h> // for flush_tlb_page
#include <asm/cpufeature.h>
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4,3,0)
+#undef CONFIG_MTRR
+#endif
#ifdef CONFIG_MTRR
#include <asm/mtrr.h>
#endif
@@ -631,7 +634,12 @@
len = snprintf(buf, request, "%d\n", major);
#else
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4,3,0)
len = seq_printf(m, "%d\n", major);
+#else
+ seq_printf(m, "%d\n", major);
+ len = 0;
+#endif
#endif
KCL_DEBUG1(FN_FIREGL_PROC, "return len=%i\n",len);
@@ -3424,7 +3432,7 @@
int ATI_API_CALL KCL_MEM_MTRR_AddRegionWc(unsigned long base, unsigned long size)
{
#ifdef CONFIG_MTRR
- return mtrr_add(base, size, MTRR_TYPE_WRCOMB, 1);
+ return -EPERM;/*return mtrr_add(base, size, MTRR_TYPE_WRCOMB, 1);*/
#else /* !CONFIG_MTRR */
return -EPERM;
#endif /* !CONFIG_MTRR */
@@ -3433,7 +3441,7 @@
int ATI_API_CALL KCL_MEM_MTRR_DeleteRegion(int reg, unsigned long base, unsigned long size)
{
#ifdef CONFIG_MTRR
- return mtrr_del(reg, base, size);
+ return -EPERM;/*return mtrr_del(reg, base, size);*/
#else /* !CONFIG_MTRR */
return -EPERM;
#endif /* !CONFIG_MTRR */
@@ -6452,10 +6460,10 @@
if(static_cpu_has(X86_FEATURE_XSAVE)) {
#if LINUX_VERSION_CODE < KERNEL_VERSION(4,2,0)
fpu_xsave(fpu);
- if (!(fpu->state->xsave.xsave_hdr.xstate_bv & XSTATE_FP))
+ if (!(fpu->state->xsave.xsave_hdr.xstate_bv))
#else
copy_xregs_to_kernel(&fpu->state.xsave);
- if (!(fpu->state.xsave.header.xfeatures & XSTATE_FP))
+ if (!(fpu->state.xsave.header.xfeatures))
#endif
return 1;
} else if (static_cpu_has(X86_FEATURE_FXSR)) {