그래픽 드라이버와 kernel의 매카니즘이 궁금합니다.
읽어주시고 제가 잘못 알고 있는 부분에 대해서 지적과 조언 부탁드립니다. 그리고 읽을 만한 문서 좀 추천해 주세요. fedora core 4와 KDE를 사용중입니다.
사담:
얼마전 사용하고 있는 matrox G550이 FC4 상에서 3d 가속을 하지 않고 있다는 사실을 알았습니다.
찾아보니 http://dri.freedesktop.org/wiki/ 에서 도움을 얻을 수 있다는 것을 알았습니다. 짧은 언어력에 몇가지 하라는 것을 하였습니다.
그 중 snapshots을 설치하라고 하길레 http://dri.freedesktop.org/snapshots/mga-20060403-linux.i386.tar.bz2 을 받아서 하라는 대로 했습니다. README
지금은 떨리는 화면에서 글을 쓰고 있습니다. 예전에 커널을 업데이트 하고나서 발생된 문제 였었는데, 다시 나타났습니다.
이 현상은 모니터가 최적화면을 잡아내지 못합니다.(윈도우 상에서는 이상이 없습니다.) 모니터의 menu중 'clock'의 'PH'의 조절로서 수동 설정을 해주는 많이 떨리지 않는 화면을 볼 수 있지만, 이 떨림이 시간이 지나면 나시 나타납니다. 그러면 다시 모니터의 menu중 clock>PH를 조절합니다. 그래도 미세하게 떨리기는 마찮가지 입니다.
저는 이 문제가 그래픽 드라이버가 잘못 설치되어서 그렇지 않나 하고 생각하고 있습니다. 위의 snapshots이 알고보니 G450용이더군요. 이 snapshots을 설치 할 적에 커널을 rebuild하였던 것 같습니다.
질문:
Q 커널과 그래픽드라이버(그래픽카드 제조 회사에서 제공하는 driver)와 x-windows(x.org) 사이의 관계가 어떻게 되나요?
Q1 그래픽 드라이버가 사용되는 곳이 커널과 x-windows 두 곳에서 각각(따로따로) 사용되어지고 있는 것 같은데 맞는지요? 그래픽 드라이버가 어디에 사용되는지 알고 싶습니다.
Q2 "커널의 역활이 하드웨어를 컨트롤하는 것이며, 이를 위해 device driver가 필요하다." 이 타당한 말인가요? 그리고 그래픽 드라이버가 이 device driver를 가르키는 것인가요?
Q3 x-windows 상에서 그래픽 드라이버를 이용한다면, 어떤 형태로 이용하는지 알고 싶습니다.
Q4 그래픽 드라이버가 저장되는 directory를 알고 싶습니다. 제가 알고 있는 디렉토리는, 저의 컴퓨터(FC4)의 경우 Xorg Modules 디렉토리는 /usr/X11R6/lib/modules, Xorg library DIR: /usr/X11R6/lib, kernel modules directory: /lib/modules/커널버젼 입니다. 다른 디렉토리가 있는지요?
Q5 kernel과 x-windows에서 사용하는 그래픽 드라이버를 바꾸고 싶습니다. 다시말해서 지금 사용되고 있는 드라이버가 g450의 드라이버 같은데 g550의 드라이버로 바꾸고자 한다면, 더욱 다르게 말하면 ati를 사용하다가 gforce로 그래픽 카드를 바꾸었다면 어떻게 설정을 다시하는지에 대한 개념이 궁금합니다.
리눅스 상에서 그래픽 드라이버가 어디에서 사용되고 있는지(혹은 커널의 역활, 드라이버의 역활 등의)에 도움을 줄 수 있는 문서가 있으면 링크 부탁합니다. 현재 몇몇 책(linux in nutshell, running linux, linux cookbook)들을 통해 개념을 잡아 보려고 하고 있는데 쉽지 않군요.
앞으로의 작업:
1. 커널을 update하면 이전의 커널 설정이 그대로 적용 된다고 하여,(현재 커널이 g550의 driver를 사용하고 있지 않고, g450의 driver를 사용하고 있지 않나 하는 의심을 하고 있습니다.) 커널을 다시 build하려 공부하고 있습니다.
2. x-window에서 잘못된 driver를 사용하고 있지 않나 하는 의심을 하여 보고 있습니다. 안될 경우 x-windows를 통채로 재설치 할 생각입니다.
Q 위의 방법이 driver를 바꾸는 역활을 할까요?
정보
[/lib/modules/2.6.16-1.2069_FC4/kernel/drivers/video/matrox] $ ls
g450_pll.ko matroxfb_Ti3026.ko matroxfb_crtc2.ko matroxfb_misc.ko
i2c-matroxfb.ko matroxfb_accel.ko matroxfb_g450.ko
matroxfb_DAC1064.ko matroxfb_base.ko matroxfb_maven.ko
[/usr/X11R6/lib/modules/drivers] $ ls
apm_drv.o fbdev_drv.o nv_drv.o tdfx_drv.o
ark_drv.o glint_drv.o r128_drv.o tga_drv.o
ati_drv.o i128_drv.o radeon_drv.o trident_drv.o
atimisc_drv.o i740_drv.o rendition_drv.o tseng_drv.o
chips_drv.o i810_drv.o riva128.o vesa_drv.o
cirrus_alpine.o linux s3_drv.o vga_drv.o
cirrus_drv.o mga_drv.o s3virge_drv.o via_drv.o
cirrus_laguna.o mga_hal_drv.o savage_drv.o vmware_drv.o
cyrix_drv.o neomagic_drv.o siliconmotion_drv.o
dummy_drv.o nsc_drv.o sis_drv.o
첨부파일에 lsmod, dmesg, lspci 값을 첨부하였습니다.
첨부 | 파일 크기 |
---|---|
![]() | 17.1 KB |
![]() | 36.45 KB |
저도 전문적인
저도 전문적인 지식이 있는 것이 아님으로 제가 알고 있는 부분에 대해서만
답글을 달겠습니다. (개인적인 소견이므로 실제 내용과 틀릴 수 있습니다.)
A. 커널과 그래픽드라이브와 X와의 관계.
커널은 시스템에 설치되어있는 모든 장치들의 입출력을 담당합니다.
한마디로 자원을 관리하는 것이죠. 어떤 프로세서가 특정 장비를 이용하려면
ioctl함수를 이용하여 해당 장비에 접근하는데 그에 대한 중간자 역할을 담당
합니다. 보통 장비를 커널에서 인식을하게되면 /dev 디렉토리 아래에 장비에
연결될 수 있는 파일을 만들게 됩니다. 그것을 통해서 그래픽 카드와 통신을
할 수 있게 만듭니다.
그래픽 드라이브는 그래픽카드에 지정되어있는 기능을 사용하도록 작성되어
있습니다. 점을 특정위치에 특정색상으로 점을 찍거나 그래픽 카드가 지원하는
OpenGL의기능을 이용할 수 있도록 하는 기능을 가지고 있습니다.
X는 이러한 기본 바탕위에서 동작을하는 것입니다.
X에서 특정색상의 점을 특정위치에 나타내려고 한다면 커널과 연결통로인
/dev아래의 특정 파일을 열고 ioctl함수를 이용해서 지정된 값을 보내면
커널에서는 값의 유효성을 검사하고 그래픽 드라이브로 값을 보내면 그래픽
드라이브가 그것을 행하는 형태입니다.
A.1 A의 마지막에 간단하게 설명해 놓았습니다.
A.2 네. 저도 그렇게 알고 있습니다.
장비의 실제적인 동작은 디바이스 드라이브에서 맡고 있습니다. 커널은 단지
시스템의 장치들에 대한 입출력을 담당하며 중간자적인 역할을 하고 있습니다.
대부분의 일반화된 장치들에 대한 정보는 커널에 들어가 있고 만일 어떤 회사
에서 현재 커널에서 지원하지 않는 장비를 추가하려면 현재 커널에 그것을 넣는
작업을하게 됩니다. 요즘은 모듈형태로 작성을하면 좀더 편하게 외부장치를
관리할 수 있는 방법이 있습니다. 그래픽 드라이브들도 이러한 형태로 제공이
되고 있습니다.
A.3 A를 참고하세요.
A.4 저도 해당 디렉토리만 알고 있습니다.
그리고 OpenGL을 위해서 /usr/lib/opengl 이란 디렉토리도 있습니다.
A.5 /var/log/Xorg.0.log 파일은 X가 실행될때 성공적인(또는 실패를한) 기록을
가지고 있습니다. 위 파일을 읽어보면 /dev아래 어떠한 파일을 참조하는지를
알 수 가 있습니다. 즉, 커널에서 바뀌어진 카드를 인식하고 /dev아래에 그
장치에 연결할 수 있는 통로를 만들어 놓습니다. (제경우엔 /dev/dri/card0)
이 장치를 이용해서 장치가 어떠한 카드인지를 읽을 수가 있습니다.
X는 기본적으로 여러 카드들을 지원하고 있습니다. 그것은 질문하신 디렉토리
아래에서도 확인 할 수 있습니다. 즉, X가 실행되면서 장치의 카드를 인식하고
그에 맞는 드라이브를 선택할 수가 있게 되는겁니다.
만일 카드업체에서 제공하는 드라이브를 설치하게되면 커널의 모듈형태로
설치가되고 /lib/modules/현재커널/ 아래에 설치가 되며 /etc/modules.autoload.d
나 그와 비슷한 디렉토리아래의 파일에 해당 드라이브를 부팅시 올릴 수 있도록
지정해주면 됩니다.
또한 /etc/X11/xorg.conf의 Device섹션의 Driver에 해당 드라이브를 지정하면
됩니다.
NVidia카드의 경우 X에서 제공하는 드라이브를 사용하려면 Driver "nv"를 지정
하고 NVidia사의 드라이브를 사용하려면 Driver "nvidia"를 지정하면 사용이
가능합니다.
커널 컴파일시에 주의해야하는 사항이 하나있습니다.
커널과 관련되어 설치되어있는 몇몇 드라이브 프로그램을 다시 설치해
주어야한다는 것입니다.
제 경우 Wireless랜을 사용하려면 커널모듈로 되어있는 드라이브를 설치해야
합니다. 즉, 기존의 커널을 다시 컴파일하고 make modules_install을 실행하면
현재 있는 modules설정이 새로운 커널에 맞게 바뀌게 됩니다.
(/lib/modules/커널버젼/ 아래의 modules관련 파일들...)
즉, 이렇게되면 기존의 그래픽이나 다른 장비에 대한 설정값이 사라짐으로
드라이브를 다시 컴파일해주어서 설치하거나 커널모듈을 넣어주는 작업을
따로 실행해주어야합니다.(이건 어딘가 있는것 같은데 제가 아직은 잘 모릅니다.)
X가 잘못된 드라이브를 사용하는지에대한 정보는 /var/log의 Xorg.0.log파일을
점검해보시면 알 수가 있을겁니다.
답글은 길지만 내용은 별로 없는 것같고 정확하지 않는 정보를 써놓은 것같아서
조금 부끄럽습니다. 하지만 위와 같이 생각하고 접근하셔도 그리 문제가 되지는
않을 것이라고 생각합니다.
------------------------------
좋은 하루되세요.
------------------------------
좋은 하루 되세요.
정말 유용한 도움
정말 유용한 도움 감사드립니다. 저에게 정말 큰 도움이 되었습니다.
/var/log/Xorg.0.log 파일을 보고, x에서 사용하는 드라이버의 문제가 아닐 것이라는 추측을 하고 있습니다. log 파일을 보니 '(--) MGA(0): Chipset: "mgag550"' 으로 g550 을 감지하고 있다는 생각에서 입니다.
다른 부분에서 1289x1024에서 두개의 default mode값이 나타나는 것이 이상하여 이 부분을 xorg.conf에서 바꾸어 보려 하고 있습니다. HorizSync:63.5 - 80.0, VertRefresh:60.0 - 75.0 두 값이 이렇게 설정되어 있는데 64.0 과 60.0 내로 설정하려 하고 있습니다.
Xorg.0.log 내용의 일부 입니다.
(--) MGA(0): Virtual size is 1280x1024 (pitch 1280)
(**) MGA(0): *Default mode "1280x1024": 135.0 MHz, 80.0 kHz, 75.0 Hz
(II) MGA(0): Modeline "1280x1024" 135.00 1280 1296 1440 1688 1024 1025 1028 1066 +hsync +vsync
(**) MGA(0): *Default mode "1152x864": 108.0 MHz, 67.5 kHz, 75.0 Hz
(II) MGA(0): Modeline "1152x864" 108.00 1152 1216 1344 1600 864 865 868 900 +hsync +vsync
(**) MGA(0): Default mode "1280x1024": 108.0 MHz, 64.0 kHz, 60.0 Hz
(II) MGA(0): Modeline "1280x1024" 108.00 1280 1328 1440 1688 1024 1025 1028 1066 +hsync +vsync
(**) MGA(0): Default mode "1152x864": 105.0 MHz, 67.6 kHz, 75.0 Hz
(II) MGA(0): Modeline "1152x864" 104.99 1152 1224 1352 1552 864 865 868 902 -hsync +vsync
(**) MGA(0): Default mode "1152x864": 96.8 MHz, 63.0 kHz, 70.0 Hz
(II) MGA(0): Modeline "1152x864" 96.77 1152 1224 1344 1536 864 865 868 900 -hsync +vsync
(==) MGA(0): DPI set to (75, 75)
------------------------------------------
FC4, KDE
http://www.linuxquestions.org/
http://www.fedoraforum.org/
------------------------------------------
emacs user
댓글 달기