저수준 리눅스 그래픽


11

교육 목적으로, 키보드 이벤트를 처리하고 X 또는 SDL과 같은 큰 의존성없이 그래픽을 그릴 수있는 Linux 환경에서 응용 프로그램을 작성하고 싶습니다. X와 SDL은 단지 프로그램 그 자체이므로 환경에 내재 된 다른 방법에 의존해야하기 때문에 이것이 가능해야한다고 생각합니다. 이 이해가 맞습니까?

그렇다면 그러한 프로그램을 작성하는 방법을 어디에서 배울 수 있습니까? 제한된 경험에 의하면 커널을 호출하거나 특수 파일을 작성해야합니다. 그러나 문제에 대한 자습서를 찾을 수 없었습니다 (Google에 대한 내용조차 확실하지 않습니다).

또한 관련이있는 경우 Virtualbox에서 Debian Squeeze를 실행하고 있습니다. 네트워킹없이 netinst CD를 사용 했으므로 현재 많이 설치되어 있지 않습니다. 설치 gcc하지만 더 이상 아무것도 얻을 수 없기를 바랍니다.


이것이 당신이 찾고있는 것인지 모르겠지만 색을줍니다. ncurses
Joe

Linux Framebuffer를 살펴볼 수 있습니다 .
mouviciel

X와 fbdev 외에도 2001 년 이후로 업데이트되지 않은 SVGALib도 있습니다.
user16764

베어 메탈 프로그래밍 (예 : 비디오 모드를 설정하기 위해 인터럽트 호출)을 원한다면 DOS를 제안 할 수 있습니까?
user16764

답변:


13

X (또는 X Window System )는 실제로 Linux 응용 프로그램이 최신 Linux 데스크톱에서 사용할 수있는 가장 낮은 수준의 그래픽 API입니다. 대부분의 응용 프로그램은 그렇게 깊이 신경 쓰지 않으며 대신 GTK 또는 Qt와 같은 GUI 툴킷 구현을 사용합니다.

그 아래에는 하드웨어 드라이버와 드라이버에 대한 일부 X 내부 API가 있습니다. 그러나 이들은 일반적인 사용자 공간 응용 프로그램에서 사용하도록 의도되거나 설계되지 않았습니다.

커널 프레임 버퍼 장치 (fbdev)를 사용할 수는 있지만 최신 그래픽 API를 얼마나 잘 지원하는지 모르겠습니다.

편집 : Wayland 는 최근에 일부 주류 채택을 발견 한 X의 대안입니다. X-Windows 시스템을 전혀 실행하지 않고 Wayland에서만 Linux-Desktop을 실행할 수 있습니다. Wayland 자체는 EGL 드라이버 (OpenGL과 밀접한 관련이있는 API) 에 의존합니다 .


2
X는 프레임 버퍼를 사용할 수 있습니다. GTK와 Qt는 일반적으로 X를 대상으로하지만 프레임 버퍼를 대상으로 할 수 있습니다.
AProgrammer

@ AProgrammer : 사실이지만 실제로 대답을 바꾸지는 않습니다. 대부분의 GTK / Qt 애플리케이션은 기본 프레임 워크에서와 같이 (최소한 현재) X에서 실행되며 원시 X API를 직접 사용하는 애플리케이션은 거의 없습니다.
Joachim Sauer

프레임 버퍼는 최소한 표준 VESA 모드에서 그래픽 카드 실행을 지원해야합니다. 완벽하지 않을 수도 있지만 (예를 들어 다른 해상도의 수가 제한되어 있으며 와이드 스크린 모드가 지원되지 않는다고 생각합니다) 최소한의 종속성을 가진 Linux 시스템의 그래픽을 제공합니다.
CVn

9

X를 사용하지 않고 입력 이벤트를 받으려면 장치 노드에서 입력 이벤트를 읽어야합니다. Linux에는 대부분의 드라이버가 사용하는 evdev라는 일반 입력 하위 시스템이 있습니다. 따라서 입력 이벤트를 읽으려면 / dev / input의 모든 장치 노드에서 읽을 수 있습니다.

마우스 장치 노드를 찾는 쉬운 방법은 장치 노드에서 한 번에 하나씩 "cat"을 실행하여 "cat"마다 마우스를 움직이는 것입니다. 화면에 데이터가 나오면 이것이 마우스 장치 노드입니다. 관련 헤더 파일은 linux / input.h입니다. 사용 방법의 예를 보려면 xevdev 드라이버의 소스를보십시오.

저수준 그래픽 조작의 경우, 정말로 야심을 느끼는 경우 일반적으로 프레임 버퍼를 메모리 맵하고 자신의 비트를 처리 할 수 ​​있습니다.


3

Linux의 저수준 그래픽에 대한 유용한 자습서는 여기를 참조하십시오 .

낮은 수준의 입력에 대한 스택 오버플로에 대한 좋은 게시물은 여기에서 볼 수 있습니다 .

어쨌든, 그래픽에는 framebuffer 또는 drm / kms (두 가지 중 더 간단한 프레임 버퍼)를 사용하고 Linux에서는 직접 입력에 evdev를 사용하려고합니다.


왜 공감해야합니까?
Vreality
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.