Linux usb gadget 驱 动利 用 Linux USB gadget设 备 驱 动 可 以 实 现 一 些 比 较 有 意 思 的 功 能 , 举 两 个 例 子 : 1、 一 个 嵌 入 式 产 品 中的 某 个 存 储 设 备 , 或 是 一 个 存 储 设 备 的 某 个 分 区 , 可 以 作 为 一 个 U盘 被 PC; 设 别 , 从 而 非 常 方 便 的 完 成 文件 交 互 , 这 个 功 能 被 广 泛 的 应 用 于 手 机 、 数 码 相 机 等 产 品 中 。 2、 一 个 嵌 入 式 设 备 通 过 USB连 接 到 你 的 PC后 , 在 你 的 PC端 会 出 现 一 个 新 的 网 络 连 接 , 在 嵌 入 式 设 备 上 也 会 有 一 个 网 卡 设 备 , 你 可 以 配 置 它 们 的 IP地 址 , 并 进 行 网 络 通 讯 , 俗 称 USBNET。所 有 USB通 讯 的 设 备 端 都 有 usb device程 序 , 通 常 称 它 们 为 usb固 件 。 在 一 些 功 能 简 单 的 设 备 里 , 用 一 些专 用 的 可 编 程 USB控 制 器 就 可 以 了 。 而 在 一 些 运 行 了 类 似 linux操 作 系 统 的 复 杂 的 嵌 入 式 系 统 中 , 要 完 成usb device程 序 , 就 会 要 求 你 不 仅 熟 悉usb device控 制 器 的 操 作 , 还要 熟 悉操 作 系 统 的 驱 动 架构。我想通 过 “功 能 体验”、 “驱 动 调试”、 “gadget驱 动 结构分 析”、 “编 写一 个 自己的 gadget驱 动 ”这4个 方 面解析linux usb gadget设 备 驱 动 的 编 写方 法。一 、 linux模拟U盘 功 能 的 实 现 在 硬件 环境为 华清远见的 fs2410平台, 软件 环境为 linux-2.6.26的 linux系 统 上 , 实 现 模拟U盘 的 功 能 。向 内 核 添 加 代 码#include
#include #include 修 改 arch/arm/mach-s3c2410/mach-smdk2410.c/*USB device上 拉 电 阻 处 理 */ static void smdk2410_udc_pullup(enum s3c2410_udc_cmd_e cmd) { u8 *s3c2410_pullup_info[] = { " ", "Pull-up enable", "Pull-up disable", "UDC reset, in case...