본문 바로가기

분류 전체보기340

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.
DMA 처리 [블로그 통합으로 이전해 온 자료] - 2008. 4. 29. 20:58 * DMA DMA 할당/해제 int request_dma( unsigned int dma, const char *device_id ); void free_dma( unsigned int dma ); DMA를 위한 메모리 할당/해제 void *dma_alloc_coherent( struct device *dev, size_t size, dma_addr_t *dma_handle, int flags ); void *dma_free_coherent( struct device *dev, size_t size, void *cpu_addr, dma_addr_t dma_handle ); unsigned long clain_dma_lock( voi.. 2021. 2. 8.
Memory Mapping [블로그 통합으로 이전해 온 자료] - 2008. 4. 29. 20:57 * mmap * I/O 물리 주소의 커널 가상 주소로 맵팽 void *ioremap( unsigned long offset, unsigned long size ); void *ioremap_nocache( unsigned long offset, unsigned long size ); void *iounmap( void *data ); *_nocache() 버전은 pci 디바이스의 non-prefetchable 영역에 사용 * I/O 물리 주소와 커널 가상 주소간의 변환 unsigned long virt_to_phys( volatile void *address ); void *phys_to_virt( unsigned long addr.. 2021. 2. 8.
인터럽트 (Interrupt) 처리 [블로그 통합으로 이전해 온 자료] - 2008. 4. 28. 22:49 * 등록 / 해제 - int request_irq( irq, handler, flags, name, dev_id ); - free_irq( irq, dev_id ); unsigned int irq irqreturn_t (*handler)( int, void *, strct pt_regs * ) unsigned long flags const char *name void *dev_id - 인터럽트를 공유하는 경우는 디바이스의 open에서 등록하고 close에서 해제하는 것이 바람직하나 임베디드 환경에서는 대게 인터럽트를 전용으로 사용하기 때문에 디바이스의 등록 시점에서 할당하고 디바이스의 해제에서 인터럽트를 해제하는 것이 바람직할 것이.. 2021. 2. 8.