DRIVER(9)

명칭
driver - 디바이스 드라이버를 기술하는 구조체

서식

    #include <sys/param.h>
    #include <sys/bus.h>
    static int foo_probe(device_t);
    static int foo_attach(device_t);
    static int foo_detach(device_t);
    static int foo_frob(device_t, int, int);
    static int foo_twiddle(device_t, char *);
    static struct device_method foo_methods[] = {
    	/* 디바이스 인터페이스로부터의 메소드 */
    	DEVMETHOD(device_probe,		foo_probe),
    	DEVMETHOD(device_attach,	foo_attach),
    	DEVMETHOD(device_detach,	foo_detach),
    	/* bogo 인터페이스로부터의 메소드 */
    	DEVMETHOD(bogo_frob,		foo_frob),
    	DEVMETHOD(bogo_twiddle,		foo_twiddle),
    	/* 메소드 리스트의 종단 */
    	{ 0, 0 }
    };
    static driver_t foo_driver {
    	"foo",
    	foo_methods,
    	DRIVER_TYPE_MISC,
    	sizeof(struct foo_softc),
    };
    static devclass_t foo_devclass;
    DRIVER_MODULE(foo, bogo, foo_driver, foo_devclass, 0, 0);

해설
커널안의 개개의 드라이버는 driver_t 구조체에 의해 기술됩니다. 이 구조체는 디바이스의 명칭, 메소드의 리스트에의 포인터, 드라이버가 실장한 디바이스의 종류의 표시, 및 드라이버가 디바이스 인스턴스에 관련짓기 위해서(때문에) 필요한 사적 데이터의 크기 (을)를 포함하고 있습니다. 각각의 드라이버는 1 개 이상의 (인터페이스로 불린다) 메소드의 조를 실장합니다. 상기의 예의 드라이버는 표준의 "driver" 인터페이스와 가상적인 "bogo" 인터페이스를 실장하고 있습니다.

드라이버가 ( DRIVER_MODULE 매크로에 의해, DRIVER_MODULE(9) (을)를 참조) 시스템에 등록될 때에, 그 부모의 버스 타입의 devclass 안에 포함되어 있다 드라이버의 리스트에 추가됩니다. 예를 들면, 모든 PCI 드라이버는 "pci" 라고 명명된 devclass 에 포함되어 모든 ISA 드라이버는 "isa" 라고 명명된 devclass 에 포함됩니다. 드라이버가 부모의 버스의 디바이스 오브젝트안에 보관 유지되지 않는 이유는, 주어진 버스의 타입의 복수의 인스턴스를 취급하기 (위해)때문입니다. DRIVER_MODULE 매크로는 그 드라이버의 이름의 devclass 도 생성합니다. 마지막 2 개의 인수로서 추가의 모듈 이벤트 핸들러와 그 인수를 주는 것에 의해, 옵션으로 드라이버의 추가의 초기화 코드를 호출할 수가 있습니다.

관련 항목
devclass(9), device(9), DRIVER_MODULE(9)

저자
이 메뉴얼 페이지는 Doug Rabson 하지만 썼습니다.