드라이버4 platform driver, device [블로그 통합으로 이전해 온 자료] - 2008. 4. 30. 12:24 * platform device platform_bus_type 이라는 가상의 플랫폼 버스 상에 새로운 디바이스를 등록하는 방법 struct platform_device xxx_device = { .name = .id = .dev = xxx_device, -> struct device .num_resources = .resource = -> struct resource }; platform_device_register() platform_device_register_simple() platform_device_unregister() xxx_init() / xxx_cleanup() 에서 등록 * platform driver struc.. 2021. 2. 8. 디바이스 드라이버의 동작 [블로그 통합으로 이전해 온 자료] - 2008. 4. 29. 21:45 * 초기화 - 드라이버의 등록 - 드라이버의 동작에 필요한 내부 구조체 메모리 할당 - 여러 프로세스가 하나의 디바이스에 접근하는 경우에 필요한 사전 처리 - 주 번호에 종속된 부 번호를 관리하기 위한 사전 처리 - 하드웨어 검출 처리 및 에러 처리 - 하드웨어 초기화 - 사용 자원 등록 - 인터럽트 핸들러 등록 * 종료 - 드라이버의 해제 - 드라이버의 동작에 필요한 내부 구조체 메모리 해제 - 여러 프로세스가 하나의 디바이스에 접근하는 경우에 종료 처리 - 제거 가능한 하드웨어의 경우 제거 처리 - 사용 자원 해제 - 인터럽트 핸들러 해제 * 열기 - 여러 프로세스가 하나의 디바이스에 접근하는 경우에 필요한 사전 처리 - 하드웨.. 2021. 2. 8. Major, Minor # [블로그 통합으로 이전해 온 자료] - 2008. 4. 29. 21:11 - 테스트나 특정 플랫폼용으로 사용 가능한 Major # 60 ~ 63 120 ~ 127 240 ~ 254 - Major 10 의 사용 가능한 Minor 240 ~ 255 - character device 중 major # 10을 가지는 device의 등록 char dev - major # 10의 minor #을 가지는 디바이스는 miscdevice이라고 해서 등록하는 함수가 따로 있다. struct file_operations xxx_misc_fop = { }; struct miscdev xxx_miscdev = { .fops = &xxx_misc_fop, .minor = XXX_MINOR, .name = "xxx_misc", }.. 2021. 2. 8. 드라이버 코드의 실행 지연 [블로그 통합으로 이전해 온 자료] - 2008. 4. 25. 04:07 * 긴 지연 // 실행 대기 while ( time_before( jiffies, j1 ) ) cpu_relax(); // 스케쥴링 while ( time_before( jiffies, j1 ) ) schedule(); 이벤트를 기다리는 지연일 경우는 대기큐를 사용한 timeout 방법도 있다. wait_event_timeout(); wait_event_interruptible_timeout(); 하지만 이벤트를 사용하지 않는다면 schedule_timeout()을 사용한다. set_current_state( TASK_INTERRUPTIBLE ); schedule_timeout( j1 ); timeout 시간은 jiffies 수가 .. 2021. 2. 8. 이전 1 다음