1. 龙芯PMON USB驱动概述
龙芯PMON作为龙芯处理器上的轻量级引导加载程序,其USB驱动实现与标准Linux内核驱动有着显著差异。PMON的USB栈设计更注重硬件直接操作和最小化功能实现,主要服务于系统启动阶段的设备初始化、固件加载等基础任务。我在实际开发中发现,PMON的USB驱动通常具备以下特点:
- 硬件贴近性:直接操作寄存器而非通过内核抽象层
- 功能精简:仅实现必要的USB协议子集(如控制传输和批量传输)
- 静态配置:依赖硬编码参数或简化版设备树配置
- 无动态热插拔:设备枚举在初始化阶段一次性完成
以常见的USB存储设备驱动为例,PMON只需实现基础的Bulk-Only Transport协议即可满足启动盘读取需求,而不需要像完整操作系统那样支持SCSI命令队列等高级特性。
2. USB驱动文件结构解析
2.1 主机控制器驱动分类
在PMON代码库中,USB主机控制器驱动通常按以下架构组织:
code复制pmon/arch/mips/ls2k/usb/
├── usb-ohci.c # OHCI控制器驱动
├── usb-ehci.c # EHCI控制器驱动
├── usb-xhci.c # xHCI控制器驱动
├── usb-core.c # USB核心协议实现
└── usb-storage.c # USB大容量存储设备驱动
OHCI驱动特点:
c复制// 典型OHCI寄存器操作示例
void ohci_init(struct ohci_regs *regs)
{
regs->HcControl = OHCI_CTRL_CBSR; // 32-bit数据总线
regs->HcCommandStatus = OHCI_CMD_HCR; // 控制器复位
while (regs->HcCommandStatus & OHCI_CMD_HCR); // 等待复位完成
}
2.2 核心USB栈实现差异
与Linux内核的USB子系统相比,PMON的实现显著简化:
| 功能模块 | Linux实现 | PMON实现
