深入探讨: 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驱动设备的分类情况。


数据运维技术 » 深入探讨: Linux驱动设备的分类(linux驱动设备的分类)