2015년 5월 3일 일요일

Device Driver

디바이스 드라이버
높은 수준의 컴퓨터 프로그램들이 컴퓨터 하드웨어 장치와 상호 작용하기 위해 만들어진 하나의 컴퓨터 프로그램이다. 드라이버는 흔히 컴퓨터 버스, 또는 하드웨어와 이어진 통신 하위 시스템을 통해 장치와 통신한다. 드라이버는 하드웨어에 의존하며 특정한 운영 체제를 따른다. 장치 드라이버는 흔히 장치 칩의 레지스터에 접근하여 하드웨어를 제어하며 하드웨어와 주변 기기를 사용하는 프로그램의 중간 다리 역할을 한다. 전자 제품에서 각각의 주변 기기들을 제어하기 위해 설계된 펌웨어 또한 장치 드라이버라고 한다.
 
Device Driver의 기능
물리적 하드웨어 장치를 관리한다.
장치 드라이버는 장치와 응용 프로그램/운영체제 사이의 해석기 역할을 하며 프로그래밍을 단순하게 한다. 높은 수준의 코드는 코드가 제어하는 하드웨어 장치를 독립적으로 기록 받을 수 있다. 프린터와 같은 장치 버전은 저만의 특별한 명령어들을 요구한다. 반면, 파일을 프린터로 보내는 것과 같은, 대부분의 응용 프로그램들은 PRINTLN과 같은 높은 수준의, 포괄적인 명령어들을 사용하여 장치를 접근한다. 드라이버는 이러한 포괄적인 명령어들을 받아들이고, 이 명령어들을 장치가 요구하는 낮은 수준의 명령어들로 변환한다.
커널의 일부분(모듈)
모듈 : 시스템에 탑재된 커널이 부팅되어 동작하는 중에도 디바이스 드라이버를 수정할 수 있도록 하는 방법이다. 필요 없는 기능은 커널에 포함시키지 않음으로 자원을 효율적으로 다루게 한다.
Major NumberMinor Number를 이용하여 디바이스 구분한다.
Major Number : 응용 프로그램과 디바이스 드라이버를 연결하는 고리이다.
Minor Number : 실질적인 디바이스를 나타낸다.
하드웨어 장치들을 파일처럼 사용한다.
일반 파일을 제어하듯이 하드웨어를 표현하는 디바이스 파일에 응용 프로그램의 입출력을 시도하면 커널 내의 해당 디바이스 파일에 연결된 디바이스 드라이버의 서비스 루틴이 호출되어 디바이스에 대한 처리가 이루어진다.
 
Device Driver의 구조
 
Device Driver의 종류
Character Device Driver
일반 파일과 가장 유사한 방식으로 처리할 수 있는 디바이스 드라이버, open(), close(), read(), write() 로 하드웨어를 처리한다.
Block Device Driver
파일시스템을 지원하는 구조이므로 응용 프로그램은 파일 시스템을 통해 접근한다. 블록 디바이스의 효율적인 처리를 위해 커널은 내부에 버퍼를 이용하여 처리한다. 1Kbyte 단위 블록 크기로 처리 한다.
Network Device Driver
리눅스의 네트워크 서브시스템은 네트워크 장치를 데이터 패킷을 보내고 받는 한 개체로 생각한 다. 이는 대개의 경우 이더넷 카드 같은 물리적인 장치이다. 각 네트워크 장치는 device 자료구조로 표현된다.
 
커널 삽입 과정
모듈 파일을 실행하기 위해서 다음과 같이 커널에 적재해야한다.
ex) insmod test.o
insmod : 커널의 심볼 테이블 시스템을 통해 모듈로 작성한 커널 객체를 커널에 링크시키도록 도와주는 외부 유틸리티 객체 형태의 디바이스 드라이버 모듈을 커널에 적재할 때 커널에 메모리 할당을 요구하고, 심볼 테이블을 참조하여 함수와 변수의 실제 변수를 객체 안에 할당한 뒤 이를 커널에 포함시킬 것을 요구한다.
모듈 초기화 함수와 제거 함수를 지정한다.
module_init : 커널에 모듈을 적재할 때 커널이 호출하는 함수를 지정하는 매크로이다.
module_exit : 커널에서 모듈을 제거할 때 호출하는 함수를 지정하는 매크로이다.
mknod : 드라이버에 대응하는 특수 장치 파일 생성한다.
ex) mknod [디바이스 파일명] [디바이스 파일형] [주 번호] [부 번호]
rmmod : 커널에 등록된 모듈을 제거하는 명령이다.
 
LED Schematic











LED0 - GPIO82 , LED1 - GPIO83에 연결
GPIO82, GPIO83 핀에 low(Logic 0 State)를 출력 LEDON
GPIO82, GPIO83 핀에 high(Logic 1 State)를 출력 LEDOFF
 
KEY Schematic
74C922(Key Decoder)







Key_Row1~3Key_Col1~4라인이 Key decoder의 입력으로 들어간다.
Decoding 된 값은 Key1~4라인으로 출력된다.
Key_Aval 라인은 pxa255 GPIO 0와 연결된다.
74LVT245










Key1~4는 데이터 버스 DATA00~03과 연결된다.
이 데이터 버스의 물리 주소는 0x1400 0000 이다.

댓글 없음:

댓글 쓰기