PNP 기능을 플랫폼 드라이버라는 형태로 지원한다.
드라이버의 기본동작을 구현하기 위한 자료구조체
/usr/src/linux-3.19.4/include/linux/platform_device.h
174 struct platform_driver {
490 #define PLATFORM_NAME_SIZE 20
보통 사용 예 static struct platform_driver test_driver= { .probe = test_probe, .remove= test_remove, .suspend= test_suspend .resume = test_resume, .driver ={ .name = TEST_DEVICE_DRIVER_NAME, }, }; |
- probe() 디바이스가 추가 되었을 때 처리하는 함수를 지정
- remove() 디바이스가 제거 되었을 때 처리하는 함수를 지정
- shutdown() 디바이스의 동작을 중지 시킬때 처리하는 함수
- resume() 디바이스의 동작을 재시작 시킬 때 처리하는 함수
- driver 구조체 내부의 name 필드만 보통 지정, 나머지 필드는 커널 내부에서 관리되면서 채워진다.
- id_table probe()함수가 호출되는 과정에서 해당 디바이스를 구별하고 처리하기 위한 내부 데이터를 지정하는 목적
플랫폼 드라이버 구조체 정보는 다음과 같은 함수로 커널에 등록되거나 제거된다.
- int platform_driver_register(struct platform_driver *pdev);
- void platform_dirver_unregister(struct platform_driver *pdev);
platform_driver_register() 함수는 : pdev 정보를 커널 내부에 등록하기 위해서 사용되므로 보통 모듈 초기화 함수에서 사용된다. 반환값이 0이면 정상이다.
32 #ifdef MODULE |
다른버전 ----4.0.2
/usr/src/linux-4.0.2/drivers/base/platform.c
참조 : B003_디바이스 드라이버 모듈 (유영창)
'리눅스커널 > Device Driver' 카테고리의 다른 글
USB 인사이드 muosys.egloos.com (0) | 2016.05.16 |
---|---|
PS/2 키보드 LED제어 (0) | 2015.05.13 |
문자디바이스 드라이버와 file_operations (0) | 2015.05.12 |
IOCTL (0) | 2015.05.12 |
디바이스드라이버기초정리 (0) | 2015.05.11 |