이전까지 네트워크 디바이스 드라이버는 LOOPBACK 디바이스 드라이버를 통하여 네크워크 디바이스 드라이버의 간단한 개요를 살펴 보았습니다.


이제는 실제 보드에서 사용하고 있는  AX88796 이더넷칩의 디바이스 드라이버에 대하여 살펴 보도록 하겠습니다.


실제 AX88796 이더넷 드라이버의 초기화 및 해제와 관련된 소스 내용은 다음과 같습니다.


모듈의 초기화 및 해제와 관련된 함수인 init 과 exit 에 대하여 살펴 보도록 하겠습니다.


디바이스 드라이버에서 platform_driver_register가 호출 됩니다.

platform driver 가 등록될때 name 이 동일해야 probe 함수가 호출 됩니다.



/* 플랫폼 드라이버의 정보 */
static struct platform_driver ax88796b_driver = {
        .driver = {
                .name    = "ax88796b",     // 드라이버의 모듈 이름
                .owner   = THIS_MODULE,    // 드라이버의 소유자
        },
        .probe   = ax88796b_drv_probe,               // 프로브시 호출된 함수를 등록 합니다.
        .remove  = __devexit_p(ax88796b_exit_module), // 드라이버 제거시 호출되는 함수를 등록 합니다.
        .suspend = ax88796b_suspend,                  // 서스펜드에 들어갈 때 수행하는 함수를 등록 합니다.
        .resume  = ax88796b_resume,                   // 리줌을 수행 할 때 수행하는 함수를 등록 합니다.
};

/* 드라이버 초기화, 플랫폼 드라이버 등록 */
static int __init ax88796b_init_mod(void)
{
        int rtn;
        rtn = platform_driver_register (&ax88796b_driver);     // 플랫폼 드라이버에 ax88796b_driver 구조체를 등록 합니다.
        return rtn;
}

/*
 * 플랫폼 드라이버 등록 해제.
 */
static void __exit ax88796b_cleanup(void)
{
        /* Unregister platform driver*/
        platform_driver_unregister (&ax88796b_driver);       // 플랫폼 드라이버에서 등록된 ax88796b_driver 구조체를 제거 합니다.
}

module_init(ax88796b_init_mod);             // 모듈 등록시 호출되는 함수 등록
module_exit(ax88796b_cleanup);              // 모듈 제거시 호출되는 함수 등록


init 함수와 exit 함수는 디바이스 드라이버 등록과 해제시 호출 되는 함수 입니다.


이상과 같이 실제 이더넷 디바이스 드라이버의 init 과 exit 함수에 대하여 간단히 살펴 보았습니다.