深入探讨: Linux驱动设备的分类(linux驱动设备的分类)
Linux驱动设备一般有四类,即硬件设备驱动、文件系统驱动、网络设备驱动和存储设备驱动。其中,硬件设备驱动是最重要的,它通过官方的API函数来控制和驱动硬件设备。具体的设备有:CPU、内存、显卡、磁盘、蜂鸣器、U盘及其他I/O端口设备等等。下面将对硬件设备驱动的一些常用的API函数做一个简要概述:
1. register_readl/writeX:用于注册外设的读写操作,常用于CPU寄存器访问,例如:
static void register_readl(unsigned long addr, unsigned long *val)
{ *val = readl(addr);
}
static void register_writel(unsigned long addr, unsigned long val){
writel(val, addr);}
2. request_irq/free_irq:用于注册硬件设备的中断,例如:
static void request_irq(IRQn_Type irq, void (*handler)(void), void *dev)
{ NVIC_SetPriority(irq, 10);
NVIC_EnableIRQ(irq); // 将指定的处理函数挂载到中断任务链上
NVIC_SetVector(irq, handler); // for HSV00xx set FIQ
NVIC_SetTarget(irq, 1); // for HSV00xx enable IRQ
NVIC_EnableIRQ(irq);}
static void free_irq(IRQn_Type irq){
NVIC_DisableIRQ(irq); // for HSV00xx disable FIQ
NVIC_ClearPendingIRQ(irq);}
3. request_dma/free_dma:用于注册硬件设备的DMA,例如:
static int request_dma( DMAC_Channel dma, int dir, int mode, unsigned int size )
{ DMAC_SetTransferSize( dma, size );
// 设定传输模式 DMAC_SetTransferMode( dma, mode );
// 设定TRX_TYPE, 为Memory/Peripheral模式 DMAC_SetTransferType( dma, dir );
// 设定DMA传输接口 DMAC_SetTransferInterface( dma, 0, 0, 1, 0 );
// 启动DMA DMAC_Start( dma );
return 0;}
static void free_dma( DMAC_Channel dma ){
DMAC_Stop(dma);}
除了以上硬件设备驱动外,Linux还提供了文件系统驱动、网络设备驱动和存储设备驱动。文件系统驱动实现文件系统的功能,例如ext2、ntfs、fuse等;网络卡驱动实现网络的功能,功能如网卡的控制、收发包等;存储设备驱动实现硬盘等外设的操作,支持u盘、移动硬盘、sd卡等等。以上就是Linux驱动设备的分类情况。