为系统处理器编写Linux设备驱动程序
区块设备驱动器实例:IDE 设备驱动 与 EP9312 IDE 控制器接口的 IDE 设备被划分为 Linux 区块设备,其中包括硬盘驱动器和 CDROM 驱动器。这些设备上的数据可以随机读取是将其划分为区块设备的主要原因。 与简单的触摸屏接口执行相比,IDE 区块设备驱动器是相当复杂的。该设备驱动器被分成几部分,包括 IDE 区块设备内核接口、为 IDE 控制器设置的内部驱动器硬件接口(附加的独立 IDE 设备多达 4 个)、针对硬盘、软盘等 IDE 设备类型的模块,以及结构特别接口。通过允许硬件或结构特殊函数的调用,IDE 设备类型数据结构内的函数指针可以实现非标准结构的灵活性和可延展性。图3为IDE区块设备驱动程序结构示意图。下面从设备驱动程序初始化开始说明该驱动程序。 高级IDE驱动程序在Linux内核初始化或模块安装(如果驱动程序被设置为模块)时得到初始化。本文不详述高级IDE 驱动程序初始化或安装细节,而是着重讨论为初始化定制并与硬件接口的驱动程序各片断。在高级IDE驱动程序初始化过程中,以下函数被用于设置IDE控制器: static __inline__ void ide_init_default_hwifs(void) 该函数在文件中被定义为:include/asm/mach/ide.h,为非标准IDE控制器配置硬件接口数据结构,注册高级IDE驱动程序EP9312 IDE接口,并为接口设置IRQ。 在结构特殊初始化代码内完成的IRQ设置仅仅在硬件接口数据结构内设置IDE接口所需的平台IRQ号码。调用request_irq() 由高级IDE驱动程序负责。 IDE硬件接口数据结构通过调用以下函数得到配置,并同时在include/asm/mach/ide.h内得到定义: static __inline__ void ide_init_hwif_ports(hw_regs_t *hw, int data_port, int ctrl_port, int *irq) 该函数通过设置硬件接口数据结构内的命令和控制注册地址配置了非标准EP9312 IDE 接口,并设置和实现EP9312上的接口。 在ide_init_default_hwifs(void) 函数设置IDE控制器并由高级IDE驱动程序注册硬件接口后,结构特殊接口通过以下函数调用得到进一步初始化: void ep93xx_ide_init(unsigned int * pointer) 该函数在文档驱动器/ide/ide-ep93xx.c 内被定义,并同时执行几个任务--把结构特殊函数映射到硬件接口数据结构内的函数指针函数,如果平台设有DMA则设置DMA接口。 IDE硬件接口数据结构的结构特殊函数指针如下所示: typedef struct hwif_s { … ide_rw_proc_t *rwproc; ide_ideproc_t *ideproc; ide_dmaproc_t *dmaproc; … } ide_hwif_t; (编辑:云计算网_泰州站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |