2015년 5월 19일 화요일

Device Driver


Device DriverKernel Source 포함 시 요구사항
Device Driver module 추가해야 한다.
리눅스 부팅 시 Kernel에 모듈로 포함되기 때문에 Major번호를 정한다.
Kernel은 모듈 시작을 위해 자동으로 함수를 호출한다.
module_init( );
Kernel은 모듈 제거를 위해 자동으로 함수를 호출한다.
module_exit( );
make menuconfig를 통해 Kernel에 포함시키기 위해 Config.in파일에 추가해 주어야 한다.
Device Driver를 컴파일 해서 Kernel에 포함하기 위해서 Makefile을 수정한다.
 
Kernel에 포함시키는 방법
LED Device Driver 수정
Major 번호 지정 및 Kernel 자동 모듈 초기화 제거를 한 함수 추가한다.
LED Device DriverMajor번호를 243으로 고정
#define LED_MAJOR 243
Kernel이 자동으로 module_init를 통해 led_gpio_init을 이용해 초기화 한다.
module_init(led_gpio_init);
Kernel 종료 시 module_exit를 통해 led_gpio_shutdown을 이용해 Driver를 제거한다.
module_exit(led_gpio_shutdown);
수정 Code Kernel 폴더에 복사한다.
cp led_driver.c /root/linux-2.4.19-pxa255_pro2/drivers/char/
make menuconfig 메뉴에 나타내기 위해 Config.in 파일을 수정한다.
vi /root/linux-2.4.19-pxa255_pro2/driver/char/Config.in
파일을 vi로 열어서 아래 코드를 추가한다.
Bool ‘LED GPIO’ CONFIG_LED
make menuconfig를 통한 Kernel에 추가를 선택한다.
LED_GPIO항목이 추가되어 있다. 사용을 선택하고 나간다.
추가 내용을 확인한다.
vi /root/linux-2.4.19-pxa255_pro2/.config
파일 내용에서 CONFIG_LED 부분 검색하고 CONFIG_LED = y 확인한다.
led_driver.c파일을 컴파일 하여 Kernel에 포함한다.
vi /root/pxa255/linux-2.4.19-pxa255_pro2/driver/char/Makefile
obj-$(CONFIG_LED)를 검색하여
obj-$(CONFIG_LED) += led_driver.o 입력한다.
의존성 검사를 한다.
cd /root/linux-2.4.19-pxa255_pro2/
make clean;make dep
Kernel 이미지를 만든다.
make zImage

댓글 없음:

댓글 쓰기