요약·해설과 원문, 전문 번역을 서로 분리했습니다. API 이름, symbol, source path는 원문 표기를 사용합니다.
1. 요약·해설
원문의 핵심 논리와 kernel programming 관점의 보충 설명입니다. 아래의 전문 번역과는 별도로 작성했습니다.
2. 영어 원문 전체
번역 기준이 된 Linux v6.18.37 원문입니다. 줄 번호는 이 버전의 파일 좌표입니다.
원문 전체 펼치기
================================
Intel 810/815 Framebuffer driver
================================
Tony Daplas <[email protected]>
http://i810fb.sourceforge.net
March 17, 2002
First Released: July 2001
Last Update: September 12, 2005
A. Introduction
===============
This is a framebuffer driver for various Intel 810/815 compatible
graphics devices. These include:
- Intel 810
- Intel 810E
- Intel 810-DC100
- Intel 815 Internal graphics only, 100Mhz FSB
- Intel 815 Internal graphics only
- Intel 815 Internal graphics and AGP
B. Features
============
- Choice of using Discrete Video Timings, VESA Generalized Timing
Formula, or a framebuffer specific database to set the video mode
- Supports a variable range of horizontal and vertical resolution and
vertical refresh rates if the VESA Generalized Timing Formula is
enabled.
- Supports color depths of 8, 16, 24 and 32 bits per pixel
- Supports pseudocolor, directcolor, or truecolor visuals
- Full and optimized hardware acceleration at 8, 16 and 24 bpp
- Robust video state save and restore
- MTRR support
- Utilizes user-entered monitor specifications to automatically
calculate required video mode parameters.
- Can concurrently run with xfree86 running with native i810 drivers
- Hardware Cursor Support
- Supports EDID probing either by DDC/I2C or through the BIOS
C. List of available options
=============================
a. "video=i810fb"
enables the i810 driver
Recommendation: required
b. "xres:<value>"
select horizontal resolution in pixels. (This parameter will be
ignored if 'mode_option' is specified. See 'o' below).
Recommendation: user preference
(default = 640)
c. "yres:<value>"
select vertical resolution in scanlines. If Discrete Video Timings
is enabled, this will be ignored and computed as 3*xres/4. (This
parameter will be ignored if 'mode_option' is specified. See 'o'
below)
Recommendation: user preference
(default = 480)
d. "vyres:<value>"
select virtual vertical resolution in scanlines. If (0) or none
is specified, this will be computed against maximum available memory.
Recommendation: do not set
(default = 480)
e. "vram:<value>"
select amount of system RAM in MB to allocate for the video memory
Recommendation: 1 - 4 MB.
(default = 4)
f. "bpp:<value>"
select desired pixel depth
Recommendation: 8
(default = 8)
g. "hsync1/hsync2:<value>"
select the minimum and maximum Horizontal Sync Frequency of the
monitor in kHz. If using a fixed frequency monitor, hsync1 must
be equal to hsync2. If EDID probing is successful, these will be
ignored and values will be taken from the EDID block.
Recommendation: check monitor manual for correct values
(default = 29/30)
h. "vsync1/vsync2:<value>"
select the minimum and maximum Vertical Sync Frequency of the monitor
in Hz. You can also use this option to lock your monitor's refresh
rate. If EDID probing is successful, these will be ignored and values
will be taken from the EDID block.
Recommendation: check monitor manual for correct values
(default = 60/60)
IMPORTANT: If you need to clamp your timings, try to give some
leeway for computational errors (over/underflows). Example: if
using vsync1/vsync2 = 60/60, make sure hsync1/hsync2 has at least
a 1 unit difference, and vice versa.
i. "voffset:<value>"
select at what offset in MB of the logical memory to allocate the
framebuffer memory. The intent is to avoid the memory blocks
used by standard graphics applications (XFree86). The default
offset (16 MB for a 64 MB aperture, 8 MB for a 32 MB aperture) will
avoid XFree86's usage and allows up to 7 MB/15 MB of framebuffer
memory. Depending on your usage, adjust the value up or down
(0 for maximum usage, 31/63 MB for the least amount). Note, an
arbitrary setting may conflict with XFree86.
Recommendation: do not set
(default = 8 or 16 MB)
j. "accel"
enable text acceleration. This can be enabled/reenabled anytime
by using 'fbset -accel true/false'.
Recommendation: enable
(default = not set)
k. "mtrr"
enable MTRR. This allows data transfers to the framebuffer memory
to occur in bursts which can significantly increase performance.
Not very helpful with the i810/i815 because of 'shared memory'.
Recommendation: do not set
(default = not set)
l. "extvga"
if specified, secondary/external VGA output will always be enabled.
Useful if the BIOS turns off the VGA port when no monitor is attached.
The external VGA monitor can then be attached without rebooting.
Recommendation: do not set
(default = not set)
m. "sync"
Forces the hardware engine to do a "sync" or wait for the hardware
to finish before starting another instruction. This will produce a
more stable setup, but will be slower.
Recommendation: do not set
(default = not set)
n. "dcolor"
Use directcolor visual instead of truecolor for pixel depths greater
than 8 bpp. Useful for color tuning, such as gamma control.
Recommendation: do not set
(default = not set)
o. <xres>x<yres>[-<bpp>][@<refresh>]
The driver will now accept specification of boot mode option. If this
is specified, the options 'xres' and 'yres' will be ignored. See
Documentation/fb/modedb.rst for usage.
D. Kernel booting
=================
Separate each option/option-pair by commas (,) and the option from its value
with a colon (:) as in the following::
video=i810fb:option1,option2:value2
Sample Usage
------------
In /etc/lilo.conf, add the line::
append="video=i810fb:vram:2,xres:1024,yres:768,bpp:8,hsync1:30,hsync2:55, \
vsync1:50,vsync2:85,accel,mtrr"
This will initialize the framebuffer to 1024x768 at 8bpp. The framebuffer
will use 2 MB of System RAM. MTRR support will be enabled. The refresh rate
will be computed based on the hsync1/hsync2 and vsync1/vsync2 values.
IMPORTANT:
You must include hsync1, hsync2, vsync1 and vsync2 to enable video modes
better than 640x480 at 60Hz. HOWEVER, if your chipset/display combination
supports I2C and has an EDID block, you can safely exclude hsync1, hsync2,
vsync1 and vsync2 parameters. These parameters will be taken from the EDID
block.
E. Module options
==================
The module parameters are essentially similar to the kernel
parameters. The main difference is that you need to include a Boolean value
(1 for TRUE, and 0 for FALSE) for those options which don't need a value.
Example, to enable MTRR, include "mtrr=1".
Sample Usage
------------
Using the same setup as described above, load the module like this::
modprobe i810fb vram=2 xres=1024 bpp=8 hsync1=30 hsync2=55 vsync1=50 \
vsync2=85 accel=1 mtrr=1
Or just add the following to a configuration file in /etc/modprobe.d/::
options i810fb vram=2 xres=1024 bpp=16 hsync1=30 hsync2=55 vsync1=50 \
vsync2=85 accel=1 mtrr=1
and just do a::
modprobe i810fb
F. Setup
=========
a. Do your usual method of configuring the kernel
make menuconfig/xconfig/config
b. Under "Code maturity level options" enable "Prompt for development
and/or incomplete code/drivers".
c. Enable agpgart support for the Intel 810/815 on-board graphics.
This is required. The option is under "Character Devices".
d. Under "Graphics Support", select "Intel 810/815" either statically
or as a module. Choose "use VESA Generalized Timing Formula" if
you need to maximize the capability of your display. To be on the
safe side, you can leave this unselected.
e. If you want support for DDC/I2C probing (Plug and Play Displays),
set 'Enable DDC Support' to 'y'. To make this option appear, set
'use VESA Generalized Timing Formula' to 'y'.
f. If you want a framebuffer console, enable it under "Console
Drivers".
g. Compile your kernel.
h. Load the driver as described in sections D and E.
i. Try the DirectFB (http://www.directfb.org) + the i810 gfxdriver
patch to see the chipset in action (or inaction :-).
G. Acknowledgment:
===================
1. Geert Uytterhoeven - his excellent howto and the virtual
framebuffer driver code made this possible.
2. Jeff Hartmann for his agpgart code.
3. The X developers. Insights were provided just by reading the
XFree86 source code.
4. Intel(c). For this value-oriented chipset driver and for
providing documentation.
5. Matt Sottek. His inputs and ideas helped in making some
optimizations possible.
H. Home Page:
==============
A more complete, and probably updated information is provided at
http://i810fb.sourceforge.net.
Tony
3. 한국어 전문 번역
영어 원문의 문단 순서와 의미를 유지한 전체 번역입니다. 코드, 함수명, symbol과 URL은 원문 표기를 유지합니다.
Intel 810/815 지원 범위
1-25이 문서는 Tony Daplas가 작성한 Intel 810/815 프레임 버퍼 드라이버 안내서입니다. 최초 릴리스는 2001년 7월이고 마지막 갱신일은 2005년 9월 12일이며, 당시 홈페이지는 `http://i810fb.sourceforge.net`입니다.
드라이버는 Intel 810, 810E, 810-DC100과 여러 Intel 815 내장 그래픽 구성을 지원합니다. Intel 815 항목에는 100 MHz FSB 내장 그래픽, 일반 내장 그래픽, 내장 그래픽과 AGP 조합이 포함됩니다.
================================
Intel 810/815 Framebuffer driver
================================
Tony Daplas <[email protected]>
http://i810fb.sourceforge.net
March 17, 2002
First Released: July 2001
Last Update: September 12, 2005
A. Introduction
===============
This is a framebuffer driver for various Intel 810/815 compatible
graphics devices. These include:
- Intel 810
- Intel 810E
- Intel 810-DC100
- Intel 815 Internal graphics only, 100Mhz FSB
- Intel 815 Internal graphics only
- Intel 815 Internal graphics and AGP
타이밍, 색상과 가속 기능
26-54비디오 모드는 Discrete Video Timings, VESA Generalized Timing Formula 또는 프레임 버퍼 전용 데이터베이스 중 하나로 설정할 수 있습니다. VESA GTF를 활성화하면 수평·수직 해상도와 수직 refresh rate를 가변 범위로 사용할 수 있습니다.
색 깊이는 8, 16, 24, 32 bpp를 지원하고 visual은 pseudocolor, directcolor, truecolor를 지원합니다. 8, 16, 24 bpp에서는 최적화된 하드웨어 가속을 제공합니다.
그 밖에 견고한 비디오 상태 저장과 복원, MTRR, 사용자가 입력한 모니터 규격에 따른 모드 자동 계산, native i810 드라이버를 사용하는 XFree86과의 동시 실행, 하드웨어 커서, DDC/I2C 또는 BIOS를 통한 EDID probe를 지원합니다.
B. Features
============
- Choice of using Discrete Video Timings, VESA Generalized Timing
Formula, or a framebuffer specific database to set the video mode
- Supports a variable range of horizontal and vertical resolution and
vertical refresh rates if the VESA Generalized Timing Formula is
enabled.
- Supports color depths of 8, 16, 24 and 32 bits per pixel
- Supports pseudocolor, directcolor, or truecolor visuals
- Full and optimized hardware acceleration at 8, 16 and 24 bpp
- Robust video state save and restore
- MTRR support
- Utilizes user-entered monitor specifications to automatically
calculate required video mode parameters.
- Can concurrently run with xfree86 running with native i810 drivers
- Hardware Cursor Support
- Supports EDID probing either by DDC/I2C or through the BIOS
기본 해상도와 동기 주파수 옵션
55-120`video=i810fb`는 드라이버를 활성화하며 필수로 권장됩니다. `xres`는 수평 픽셀 수로 기본값 640, `yres`는 수직 scanline 수로 기본값 480입니다. Discrete Video Timings에서는 `yres`를 `3*xres/4`로 계산하며, `mode_option`이 있으면 `xres`와 `yres`는 무시됩니다.
`vyres`는 가상 수직 해상도이며 0 또는 미지정이면 사용 가능한 최대 메모리에 맞춰 계산합니다. 문서의 기본값은 480이고 설정하지 않기를 권장합니다. `vram`은 비디오 메모리로 할당할 system RAM의 MB 수이며 1~4 MB를 권장하고 기본값은 4입니다.
`bpp`는 픽셀 깊이로 기본값과 권장값이 8입니다. `hsync1/hsync2`는 모니터의 최소·최대 수평 동기 주파수(kHz), `vsync1/vsync2`는 최소·최대 수직 동기 주파수(Hz)입니다. 고정 주파수 모니터에서는 최소와 최대를 같게 둘 수 있고, EDID probe가 성공하면 이 값들은 EDID block에서 가져와 명령행 값은 무시합니다.
수직 refresh를 고정하는 데도 `vsync1/vsync2`를 사용할 수 있습니다. 계산 중 overflow나 underflow 오차를 고려해 한 축을 60/60처럼 고정하면 다른 축의 최소·최대 사이에는 적어도 1단위 차이를 두라고 권고합니다.
C. List of available options
=============================
a. "video=i810fb"
enables the i810 driver
Recommendation: required
b. "xres:<value>"
select horizontal resolution in pixels. (This parameter will be
ignored if 'mode_option' is specified. See 'o' below).
Recommendation: user preference
(default = 640)
c. "yres:<value>"
select vertical resolution in scanlines. If Discrete Video Timings
is enabled, this will be ignored and computed as 3*xres/4. (This
parameter will be ignored if 'mode_option' is specified. See 'o'
below)
Recommendation: user preference
(default = 480)
d. "vyres:<value>"
select virtual vertical resolution in scanlines. If (0) or none
is specified, this will be computed against maximum available memory.
Recommendation: do not set
(default = 480)
e. "vram:<value>"
select amount of system RAM in MB to allocate for the video memory
Recommendation: 1 - 4 MB.
(default = 4)
f. "bpp:<value>"
select desired pixel depth
Recommendation: 8
(default = 8)
g. "hsync1/hsync2:<value>"
select the minimum and maximum Horizontal Sync Frequency of the
monitor in kHz. If using a fixed frequency monitor, hsync1 must
be equal to hsync2. If EDID probing is successful, these will be
ignored and values will be taken from the EDID block.
Recommendation: check monitor manual for correct values
(default = 29/30)
h. "vsync1/vsync2:<value>"
select the minimum and maximum Vertical Sync Frequency of the monitor
in Hz. You can also use this option to lock your monitor's refresh
rate. If EDID probing is successful, these will be ignored and values
will be taken from the EDID block.
Recommendation: check monitor manual for correct values
(default = 60/60)
IMPORTANT: If you need to clamp your timings, try to give some
leeway for computational errors (over/underflows). Example: if
using vsync1/vsync2 = 60/60, make sure hsync1/hsync2 has at least
a 1 unit difference, and vice versa.
메모리 오프셋, 가속과 출력 옵션
121-176`voffset`은 논리 메모리에서 프레임 버퍼를 할당할 MB 단위 오프셋입니다. 표준 그래픽 응용 프로그램인 XFree86이 쓰는 영역을 피하려는 옵션으로, 64 MB aperture에서는 기본 16 MB, 32 MB aperture에서는 기본 8 MB입니다. 0은 최대 메모리 사용, 31/63 MB는 최소 사용에 가깝지만 임의 값은 XFree86과 충돌할 수 있어 설정하지 않기를 권장합니다.
`accel`은 텍스트 가속을 활성화하며 `fbset -accel true/false`로 언제든 바꿀 수 있습니다. 문서는 활성화를 권장하지만 기본값은 꺼짐입니다. `mtrr`은 프레임 버퍼 전송을 burst로 만들어 성능을 높일 수 있으나 shared memory를 쓰는 i810/i815에서는 이점이 작아 기본적으로 권장하지 않습니다.
`extvga`는 모니터가 연결되지 않아 BIOS가 VGA 포트를 꺼도 secondary/external VGA 출력을 항상 활성화해 재부팅 없이 외부 모니터를 연결할 수 있게 합니다. `sync`는 다음 명령 전에 하드웨어 엔진 완료를 기다려 안정성을 높이지만 느려집니다.
`dcolor`는 8 bpp보다 깊은 모드에서 truecolor 대신 directcolor visual을 사용해 gamma 같은 색상 조정을 가능하게 합니다. 마지막으로 `<xres>x<yres>[-<bpp>][@<refresh>]` 형식의 boot mode option을 지정하면 `xres`와 `yres`가 무시되며 자세한 형식은 `Documentation/fb/modedb.rst`를 참조합니다.
i. "voffset:<value>"
select at what offset in MB of the logical memory to allocate the
framebuffer memory. The intent is to avoid the memory blocks
used by standard graphics applications (XFree86). The default
offset (16 MB for a 64 MB aperture, 8 MB for a 32 MB aperture) will
avoid XFree86's usage and allows up to 7 MB/15 MB of framebuffer
memory. Depending on your usage, adjust the value up or down
(0 for maximum usage, 31/63 MB for the least amount). Note, an
arbitrary setting may conflict with XFree86.
Recommendation: do not set
(default = 8 or 16 MB)
j. "accel"
enable text acceleration. This can be enabled/reenabled anytime
by using 'fbset -accel true/false'.
Recommendation: enable
(default = not set)
k. "mtrr"
enable MTRR. This allows data transfers to the framebuffer memory
to occur in bursts which can significantly increase performance.
Not very helpful with the i810/i815 because of 'shared memory'.
Recommendation: do not set
(default = not set)
l. "extvga"
if specified, secondary/external VGA output will always be enabled.
Useful if the BIOS turns off the VGA port when no monitor is attached.
The external VGA monitor can then be attached without rebooting.
Recommendation: do not set
(default = not set)
m. "sync"
Forces the hardware engine to do a "sync" or wait for the hardware
to finish before starting another instruction. This will produce a
more stable setup, but will be slower.
Recommendation: do not set
(default = not set)
n. "dcolor"
Use directcolor visual instead of truecolor for pixel depths greater
than 8 bpp. Useful for color tuning, such as gamma control.
Recommendation: do not set
(default = not set)
o. <xres>x<yres>[-<bpp>][@<refresh>]
The driver will now accept specification of boot mode option. If this
is specified, the options 'xres' and 'yres' will be ignored. See
Documentation/fb/modedb.rst for usage.
커널 부팅과 모듈 매개변수
177-231커널 부팅 옵션은 쉼표로 분리하고 옵션과 값은 콜론으로 구분합니다. 기본 형식은 `video=i810fb:option1,option2:value2`입니다. `/etc/lilo.conf`의 예시는 `vram:2,xres:1024,yres:768,bpp:8,hsync1:30,hsync2:55,vsync1:50,vsync2:85,accel,mtrr`를 전달합니다.
이 예시는 1024x768, 8 bpp로 초기화하고 system RAM 2 MB를 프레임 버퍼로 사용하며 MTRR을 활성화합니다. refresh rate는 `hsync1/hsync2`와 `vsync1/vsync2`를 바탕으로 계산합니다.
640x480 60 Hz보다 높은 모드를 사용하려면 네 sync 경계값을 모두 넣어야 합니다. 단 chipset과 display가 I2C를 지원하고 EDID block이 있으면 값들을 생략해도 EDID에서 읽습니다.
모듈 매개변수는 커널 매개변수와 거의 같지만 값이 없는 boolean 옵션에도 참은 1, 거짓은 0을 명시해야 합니다. 예를 들어 MTRR은 `mtrr=1`입니다. `modprobe i810fb ... accel=1 mtrr=1`로 직접 적재하거나 `/etc/modprobe.d/` 설정에 `options i810fb ...`를 넣고 `modprobe i810fb`를 실행합니다.
built-in과 module에서 표기법은 다르지만 같은 화면 구성을 전달합니다.
D. Kernel booting
=================
Separate each option/option-pair by commas (,) and the option from its value
with a colon (:) as in the following::
video=i810fb:option1,option2:value2
Sample Usage
------------
In /etc/lilo.conf, add the line::
append="video=i810fb:vram:2,xres:1024,yres:768,bpp:8,hsync1:30,hsync2:55, \
vsync1:50,vsync2:85,accel,mtrr"
This will initialize the framebuffer to 1024x768 at 8bpp. The framebuffer
will use 2 MB of System RAM. MTRR support will be enabled. The refresh rate
will be computed based on the hsync1/hsync2 and vsync1/vsync2 values.
IMPORTANT:
You must include hsync1, hsync2, vsync1 and vsync2 to enable video modes
better than 640x480 at 60Hz. HOWEVER, if your chipset/display combination
supports I2C and has an EDID block, you can safely exclude hsync1, hsync2,
vsync1 and vsync2 parameters. These parameters will be taken from the EDID
block.
E. Module options
==================
The module parameters are essentially similar to the kernel
parameters. The main difference is that you need to include a Boolean value
(1 for TRUE, and 0 for FALSE) for those options which don't need a value.
Example, to enable MTRR, include "mtrr=1".
Sample Usage
------------
Using the same setup as described above, load the module like this::
modprobe i810fb vram=2 xres=1024 bpp=8 hsync1=30 hsync2=55 vsync1=50 \
vsync2=85 accel=1 mtrr=1
Or just add the following to a configuration file in /etc/modprobe.d/::
options i810fb vram=2 xres=1024 bpp=16 hsync1=30 hsync2=55 vsync1=50 \
vsync2=85 accel=1 mtrr=1
and just do a::
modprobe i810fb
커널 구성과 드라이버 적재
232-263일반적인 `make menuconfig`, `make xconfig` 또는 `make config`로 커널을 구성하고, 당시 메뉴의 `Code maturity level options`에서 개발 중이거나 불완전한 코드 표시를 활성화합니다.
Intel 810/815 내장 그래픽용 `agpgart` 지원은 필수이며 당시 `Character Devices` 아래에 있었습니다. `Graphics Support`에서 Intel 810/815를 built-in 또는 module로 선택합니다.
디스플레이 능력을 최대화하려면 VESA Generalized Timing Formula를 선택할 수 있지만 보수적으로는 끌 수 있습니다. DDC/I2C Plug and Play display probe가 필요하면 VESA GTF를 켠 뒤 `Enable DDC Support`를 `y`로 설정합니다.
프레임 버퍼 콘솔이 필요하면 `Console Drivers`에서 활성화하고 커널을 컴파일한 뒤 앞 절의 부팅 또는 모듈 절차로 드라이버를 적재합니다. 문서는 DirectFB와 i810 gfxdriver patch도 시험 대상으로 안내합니다.
필수 AGP 지원부터 선택 기능과 적재까지의 순서입니다.
F. Setup
=========
a. Do your usual method of configuring the kernel
make menuconfig/xconfig/config
b. Under "Code maturity level options" enable "Prompt for development
and/or incomplete code/drivers".
c. Enable agpgart support for the Intel 810/815 on-board graphics.
This is required. The option is under "Character Devices".
d. Under "Graphics Support", select "Intel 810/815" either statically
or as a module. Choose "use VESA Generalized Timing Formula" if
you need to maximize the capability of your display. To be on the
safe side, you can leave this unselected.
e. If you want support for DDC/I2C probing (Plug and Play Displays),
set 'Enable DDC Support' to 'y'. To make this option appear, set
'use VESA Generalized Timing Formula' to 'y'.
f. If you want a framebuffer console, enable it under "Console
Drivers".
g. Compile your kernel.
h. Load the driver as described in sections D and E.
i. Try the DirectFB (http://www.directfb.org) + the i810 gfxdriver
patch to see the chipset in action (or inaction :-).
기여자와 홈페이지
264-287Geert Uytterhoeven의 howto와 virtual framebuffer 코드, Jeff Hartmann의 agpgart 코드, XFree86 소스에서 얻은 X 개발자들의 통찰, Intel의 chipset과 문서, Matt Sottek의 최적화 아이디어가 드라이버 개발에 기여했습니다.
더 완전하고 갱신된 정보는 문서 당시의 `http://i810fb.sourceforge.net`에서 제공했습니다.
G. Acknowledgment:
===================
1. Geert Uytterhoeven - his excellent howto and the virtual
framebuffer driver code made this possible.
2. Jeff Hartmann for his agpgart code.
3. The X developers. Insights were provided just by reading the
XFree86 source code.
4. Intel(c). For this value-oriented chipset driver and for
providing documentation.
5. Matt Sottek. His inputs and ideas helped in making some
optimizations possible.
H. Home Page:
==============
A more complete, and probably updated information is provided at
http://i810fb.sourceforge.net.
Tony
요약·해설
intel810.rst:1-287Intel 810/815 프레임 버퍼 드라이버는 다양한 타이밍 계산법, 8~32 bpp, 하드웨어 가속, EDID와 monitor frequency 기반 모드 계산을 지원합니다.
안전한 설정의 핵심은 필수 `agpgart`, 정확한 hsync/vsync 범위, XFree86과 겹치지 않는 메모리 배치이며 module에서는 boolean 옵션에 1 또는 0을 명시하는 것입니다.
장치 활성화에서 최종 적재까지의 핵심 단계입니다.