240 likes | 509 Views
LED, LCD, Snake 실습. Sunmoon univ. Ubiquitous Application Lab. shbae. 하드웨어 제어. 방법 메모리 맵을 이용한 하드웨어 제어 . 디바이스 드라이버를 이용한 하드웨어 제어 . << 차례 디바이스 드라이버의 정의 및 종류 . 디바이스 드라이버 등록 및 해제 . 디바이스 드라이버 응용 프로그램 작성. 디바이스 드라이버란 ?. 정의 응용프로그램이 H/W 를 제어할 수 있도록 인터페이스를 제공해 주는 코드 .
E N D
LED, LCD, Snake 실습 Sunmoon univ. Ubiquitous Application Lab. shbae
하드웨어 제어 • 방법 • 메모리 맵을 이용한 하드웨어 제어. • 디바이스 드라이버를 이용한 하드웨어 제어. << • 차례 • 디바이스 드라이버의 정의 및 종류. • 디바이스 드라이버 등록 및 해제. • 디바이스 드라이버 응용 프로그램 작성.
디바이스 드라이버란? • 정의 • 응용프로그램이 H/W를 제어할 수 있도록 인터페이스를 제공해 주는 코드. • 프로그래머로 하여금 하드웨어 독립적인 프로그램을 작성하도록 도와줌. • 종류 • 문자 디바이스 드라이버 • 블록 디바이스 드라이버 • 네트워크 디바이스 드라이버
Applicationarea Application System Call Interface 문자드라이버와 블록드라이버의 차이 VFS Kernelarea Buffer Cache Network Subsystem Character D/D Block D/D Network D/D Device Interface Hardware Hardware Linux Kernel Layout
디바이스 드라이버의 종류(1) • Character Device • 자료의 순차성을 지닌 장치 • 입출력연산 한번으로 임의의 데이터 전송 • Console, Keyboard, Serial, Parallel port …… • Block Device • 블록 단위로 데이터 입출력- Buffer Cache를 사용 • File System에 마운트 되어 관리되는 장치 • 입출력연산 한번으로 고정된 크기의 데이터 전송 • Disk, Cdrom, Floppy ……
디바이스 드라이버의 종류(2) • Network Device • 대응하는 장치파일이 없음. • 응용프로그램과의 통신은 표준 파일 시스템관련 콜 대신 socket(), bind() 등의 시스템 콜 사용.
디바이스 종류 주번호(Major Number) 부번호(Minor Number) 디바이스 장치 파일 예제
기본적인 문자디바이스 드라이버 • 디바이스 드라이버 구성 • 초기화 인터페이스 • init() 함수, init_module() 함수 • 디바이스 등록 • 파일 시스템 인터페이스 • 잘 정의된 인터페이스 : file_operations 이용 • open(), release(), read(), write(), ioctl() • 하드웨어 인터페이스 • memory mapped I/O : 메모리 연산 • special in/out instruction – in(), out()
드라이버의 구조 • init_module(), cleanup() :디바이스 등록 및 해제하기 위한 함수 • open():해당 디바이스에 연산을 가하기 위해 해당 디바이스 파일을 열기 위한 함수. 사용수 증가. • read():해당 디바이스로부터 데이터를 얻은 데이터를 커널 영역에서 사용자 영역으로 복사하기 위한 함수. • write():사용자 영역의 데이터를 커널 영역으로 복사하기 위한 함수. • release():해당 드라이버가 응용프로그램에 의해 닫힐 때 호출 하는 함수. 사용수 감소. • Ioctl():읽기 / 쓰기 이외의 부가적인 연산을 위한 인터페이스 - 디바이스 설정 및 하드웨어 제어(향상된 문자드라이버 작성가능)
설정 - 드라이버 적재 및 삭제 • 노드 생성 - 노드를 통해서 입출력 수행. • mknod /dev/파일이름 드라이버특성 주번호 부번호 • 예) mknod /dev/lcd_dd c 127 0 • 생성 후 속성변경 : chmod ug+w /dev/led_dd • 디바이스 드라이버 적재 • insmod 드라이버명.o • 예) insmod lcd_dd.o
설정 - 드라이버 적재 및 삭제 • 디바이스 드라이버 삭제 • rmmod 드라이버명 • 예)rmmod lcd_dd (주의 .o가 붙지 않음) • 드라이버의 적재 여부 • lsmod
프로그램 명세 • 응용프로그램 • 입력 : 키보드로 사용자의 입력을 받음. • 출력 : LCD창에 입력된 내용 출력. • 파일 • font.h : LCD에 사용할 폰트 파일. • lcd_dd.h : 디바이스 드라이버 제작에 사용한 헤더 파일(함수 및 내장변수 목록). • lcd_app.c : 사용자의 입력을 받아서 LCD 드라이버에 넘겨주는 소스파일.
예제 실습 • CD에 있는 예제를 작업디렉토리로 복사 • /mnt/cdrom/Resource/Part4/Driver/ • 위의 경로에서 LED, LCD 디렉토리를 작업 디렉토리로 복사 • /mnt/cdrom/Resource/Part5/ • 위의 경로에서 Snake 디렉토리를 작업 디렉토리로 복사
LED • LED 작업 디렉토리에서 Makefile을 통해서 컴파일과 디바이스 드라이버를 생성을 한다. -Host % make clean % make - Makefile에 의해서 leddd_test.o가 /usr/driver에 복사된다.
LED • 디바이스 드라이버를 적재 • 장비 bash-2.05b# cd /usr/driver bash-2.05b# insmod leddd_test.o - Host • /LED/testp에서 다시 make한다. % make clean % make
LED • 실행 파일을 장비에서 실행시킨다. • 실행 • 장비에서 자신의 작업디렉토리에 있는 leddd_test를 실행시켜준다. bash-2.05b# ./leddd_test
LCD • LCD 작업 디렉토리에서 Makefile을 통해서 컴파일과 디바이스 드라이버를 생성을 한다. -Host % make clean % make - Makefile에 의해서 lcd_dd.o가 /usr/driver에 복사된다.
LCD • 디바이스 드라이버를 적재 • 장비 bash-2.05b# cd /usr/driver bash-2.05b# insmod lcd_dd.o - Host • /LCD/testp에서 다시 make한다. % make clean % make
LCD • 실행 파일을 장비에서 실행시킨다. • 실행 • 장비에서 자신의 작업디렉토리에 있는 lcd_test를 실행시켜준다. bash-2.05b# ./lcd_test
LCD • 또 다른 LCD 예제 하나 더 • Host • /LCD/lcd_app에서 다시 make 한다. % make clean % make
LCD • 실행 파일을 장비에서 실행시킨다. • 실행 • 장비에서 자신의 작업디렉토리에 있는 lcd_app를 실행시켜준다. bash-2.05b# ./lcd_app
Snake • Snake 작업 디렉토리에서 Makefile을 통해서 컴파일과 디바이스 드라이버를 생성을 한다. -Host % make clean % make - Makefile에 의해서 snake가 /usr/snake/snake에 복사된다.
Snake • Snake 예제는 3가지를 insmod 해야한다.(key_dd.o, led_dd.o, lcd_dd.o) - 디바이스 드라이버를 적재 • 장비 bash-2.05b# cd /usr/driver bash-2.05b# insmod led_dd.o bash-2.05b# insmod lcd_dd.o bash-2.05b# insmod key_dd.o
Snake • make를 통해 생성된 실행 파일을 장비에서 실행한다. bash-2.05b# ./snake