A File Encryption System for USB Memory Device Based on Embedded System of ARM9 Abstract As the threat exists in the storage protection of the present



Similar documents
Guide to Install SATA Hard Disks

Microsoft Word - 正文.doc

Bus Hound 5

Ch03_嵌入式作業系統建置_01

目 录

ICD ICD ICD ICD ICD

Abstract arm linux tool-chain root NET-Start! 2

K7VT2_QIG_v3

IP TCP/IP PC OS µclinux MPEG4 Blackfin DSP MPEG4 IP UDP Winsock I/O DirectShow Filter DirectShow MPEG4 µclinux TCP/IP IP COM, DirectShow I

USB解决方案.ppt

(Load Project) (Save Project) (OffLine Mode) (Help) Intel Hex Motor

EK-STM32F

Serial ATA ( Silicon Image SiI3114)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 5 (4) S A T A... 8 (5) S A T A... 10

P4i45GL_GV-R50-CN.p65

AL-M200 Series

solutions guide

AL-MX200 Series

SST SPAC SST SoftICE SST89C5x/SST89x554RC /564RD /SST89x516/5xRD / SoftICE SoftICE MCU SoftICE SS

1.ai

PTS7_Manual.PDF

SPHE8202R Design Guide Important Notice SUNPLUS TECHNOLOGY CO. reserves the right to change this documentation without prior notice. Information provi

JTAG ICE PC JTAG ICE JTAG ISP... 5 IDE AVR STUDIO JTAGICE JTAGICE... 12

第 15 章 程 式 編 写 語 言 15.1 程 式 編 写 語 言 的 角 色 程 式 編 寫 語 言 是 程 式 編 寫 員 與 電 腦 溝 通 的 界 面 語 法 是 一 組 規 則 讓 程 式 編 寫 員 將 字 詞 集 合 起 來 電 腦 是 處 理 位 元 和 字 節 的 機 器, 與

OSI OSI 15% 20% OSI OSI ISO International Standard Organization 1984 OSI Open-data System Interface Reference Model OSI OSI OSI OSI ISO Prototype Prot

1 CPU

ARM JTAG实时仿真器安装使用指南

(Guangzhou) AIT Co, Ltd V 110V [ ]! 2

Serial ATA ( Nvidia nforce430)...2 (1) SATA... 2 (2) B I O S S A T A... 3 (3) RAID BIOS RAID... 6 (4) S A T A... 9 (5) S A T A (6) Microsoft Win

Windows RTEMS 1 Danilliu MMI TCP/IP QEMU i386 QEMU ARM POWERPC i386 IPC PC104 uc/os-ii uc/os MMI TCP/IP i386 PORT Linux ecos Linux ecos ecos eco

A Preliminary Implementation of Linux Kernel Virus and Process Hiding

Symantec™ Sygate Enterprise Protection 防护代理安装使用指南

untitled

Ác Åé å Serial ATA ( Sil3132) S A T A (1) SATA (2) BIOS SATA (3)* RAID BIOS RAID (4) SATA (5) SATA (a) S A T A ( S A T A R A I D ) (b) (c) Windows XP

P4Dual-915GL_BIOS_CN.p65

<4D F736F F D20C7B6C8EBCABDCFB5CDB3C9E8BCC6CAA6BFBCCAD4B4F3B8D92E646F63>

RAID RAID 0 RAID 1 RAID 5 RAID * ( -1)* ( /2)* No Yes Yes Yes A. B. BIOS SATA C. RAID BIOS RAID ( ) D. SATA RAID/AHCI ( ) SATA M.2 SSD ( )

Windows 2000 Server for T100

ARM Cortex-M3 (STM32F) STMicroelectronics ( ST) STM32F103 Core: ARM 32-bit Cortex -M3 CPU 72 MHz, 90 DMIPS with 1.25 DMIPS/MHz Single-cycle multiplica

Microsoft Word - MTK平台生产软件使用说明.doc

untitled

《计算机应用基础》学习材料(讲义)

51 C 51 isp 10 C PCB C C C C KEIL

ebook140-9

1 Project New Project 1 2 Windows 1 3 N C test Windows uv2 KEIL uvision2 1 2 New Project Ateml AT89C AT89C51 3 KEIL Demo C C File

目次 

CHN_p000A_Cover.ai

TX-NR3030_BAS_Cs_ indd

第4章 系统设置

P4V88+_BIOS_CN.p65

Microsoft PowerPoint - ATF2015.ppt [相容模式]

+01-10_M5A_C1955.p65

P4VM800_BIOS_CN.p65

一个开放源码的嵌入式仿真环境 ― SkyEye

T

ebook140-8

相 关 知 识 1 计 算 机 工 作 原 理 1946 年 2 月, 世 界 上 第 一 台 电 子 计 算 机 ENIAC (Electronic Numerical Integrator And Computer, 电 子 数 字 积 分 计 算 机 ) 诞 生 于 美 国 宾 夕 法 尼 亚

VoIP Make a Rtp Call VoIP Abstract... 2 VoIP RTP...3 Socket IP...9 Config Two Voice-hub

PCM-3386用户手册.doc

典型自编教材

CL-S10w

KL DSC DEMO 使用说明

User ID 150 Password - User ID 150 Password Mon- Cam-- Invalid Terminal Mode No User Terminal Mode No User Mon- Cam-- 2

DPJJX1.DOC

Outline USB Application Requirements Variable Definition Communications Code for VB Code for Keil C Practice

CH01.indd

untitled

Microsoft Word - PS2_linux_guide_cn.doc

Oracle 4

AN INTRODUCTION TO PHYSICAL COMPUTING USING ARDUINO, GRASSHOPPER, AND FIREFLY (CHINESE EDITION ) INTERACTIVE PROTOTYPING

Data Management Software CL-S10w

MICROCHIP EVM Board : APP APP001 PICmicro Microchip APP001 40pin PDIP PICmicro Design Tips Character LCM Temperature Sensor Application I/O Pi

Desktop Management Guide

Microsoft Word - InoTouch Editor编程软件手册 doc

全 国 高 等 职 业 教 育 规 划 教 材 21 世 纪 高 职 高 专 规 划 教 材 系 列 高 等 职 业 教 育 计 算 机 专 业 规 划 教 材 选 题 征 集 通 知 一 选 题 范 围 ( 不 仅 限 于 此 ) 选 题 方 向 选 题 名 计 算 机 基 础 计 算 机 应 用


HighPoint产品的FAQ手册

大学计算机基础B.doc

目录

Microsoft Word htm

untitled

ATMEL AT90S8515 AVR CPU AVR AVR AVR ATMEL RISC 32 8 r0 r X Y Z R0 R1 R2 R13 R14 R15 R16 R17 R26 R27 R28 R29 R30 R31 0x00 0x

Xilinx Alliance Program Certified GJVZsIPb3 IPb3pg(lwE & by2eh;[d)y IP ROM

System Design and Setup of a Robot to Pass over Steps Abstract In the research, one special type of robots that can pass over steps is designed and se

,,, PCB, AR M VxWorks DSP,,,,,,,,,,, (CIP) /,,.:,2005 ISBN TP36 CIP (2005) : ( 10 ) : : (010 ) : (010)

高 职 计 算 机 类 优 秀 教 材 书 目 * 序 号 书 号 (ISBN) 书 名 作 者 定 价 出 版 / 印 刷 日 期 ** 配 套 资 源 页 码 计 算 机 基 础 课 计 算 机 应 用 基 础 刘 升 贵 年 8 月

Transcription:

基 于 ARM9 嵌 入 式 系 统 的 U 盘 文 件 加 解 密 系 统 摘 要 针 对 目 前 USB 移 动 存 储 设 备 在 数 据 安 全 中 存 在 的 漏 洞, 本 文 提 出 了 一 种 新 的 USB 存 储 设 备 数 据 安 全 解 决 方 案 本 系 统 通 过 USB 接 口 连 接 于 计 算 机 与 USB 存 储 设 备 之 间, 对 计 算 机 和 USB 设 备 之 间 传 输 的 数 据 进 行 解 析, 利 用 指 纹 模 块 提 供 的 稳 定 密 钥 加 密 并 转 发 USB 数 据 实 现 文 件 加 密 文 件 名 不 加 密 的 效 果, 使 得 U 盘 中 普 通 文 件 与 加 密 文 件 可 以 共 存, 多 个 用 户 可 以 共 同 使 用 一 块 U 盘 而 无 需 担 心 数 据 泄 露 设 备 具 有 相 对 计 算 机 USB 存 储 设 备 独 立 的 特 点, 无 需 对 两 者 做 任 何 改 动, 保 证 了 对 普 通 U 盘 的 支 持 本 文 选 用 AT91SAM9260 作 为 实 现 平 台, 针 对 嵌 入 式 核 心 板 设 计 了 外 接 电 路, 提 供 了 USB 的 主 从 接 口 RS232 串 口 面 向 指 纹 模 块 的 SPI 接 口 不 使 用 操 作 系 统, 移 植 了 USB 海 量 存 储 协 议 的 主 机 和 从 机 驱 动 上 电 启 动 时, 使 用 bootstrap 直 接 加 载 应 用 程 序, 并 跳 转 执 行 主 从 驱 动 协 同 工 作, 并 添 加 对 FAT32 文 件 系 统 的 识 别, 使 系 统 对 文 件 名 透 明 传 输 的 同 时 对 文 件 数 据 加 密 加 密 算 法 采 用 AES 标 准 CBC 分 组 模 式, 采 用 32 位 快 速 AES 算 法 另 外, 核 心 板 空 余 的 32M 内 存 被 用 来 缓 存 USB 数 据, 对 同 一 数 据 的 再 次 访 问 可 以 直 接 从 内 存 获 取 最 后 通 过 SPI 接 口 同 指 纹 模 块 连 接 在 USB 全 速 设 备 的 基 础 上, 通 过 优 化 软 件, 读 写 分 别 可 以 达 到 550KB/s 和 230KB/s 的 传 输 速 度 关 键 词 :USB 协 议 FAT32 文 件 系 统 文 件 加 密 AES-CBC AT91SAM9260 I

A File Encryption System for USB Memory Device Based on Embedded System of ARM9 Abstract As the threat exists in the storage protection of the present USB Mass Storage Device, this article proposes a new method to provide them with security services. All of the packets will be processed when they go through this system, which connects PC and USB Mass Storage Device. Before forwarding them to the USB device, these packets will be chosen to be encrypted using the key provided by the fingerprint module. As a result, when be directly connected, the disk will be found normal with all the directories correctly shown while the contents of certain file are obfuscated. Thus it becomes possible that in such disk coexist the plaintext and the ciphertext and that multi people share one disk without worrying about the privacy. This system is not only relatively independent to the computer and USB Device, but compatible with various USB Memory Devices without any update to PC or USB Device. On the platform of AT91SAM9260, this article designed the extension circuit equipping the core-board with various ports, such as USB HOST&DEVICE port, RS232 and the SPI to fingerprint module. After startup, the system runs directly the Bootstrap which would load the application mainly consisting of the two drivers, USB MSD Host Driver and Device Driver, without any operating systems. With the two drivers cooperating, the system should transmit the directory related data transparently and encrypt the contents of files depending on the knowledge of FAT32 system. And a 32-bit optimized algorithm supports AES and CBC block cipher mode well with a fast run. What s more, sparing 32M memory in SDRAM and using it as a Cache helps to reduce the procedure to fetch it from USB Device when the in Cache data were requested again. At last, the SPI provides the interface to communicate with the fingerprint module. The final data rate can reach 230KB/s while writing and 550KB/s while reading respectively on the full-speed USB port. Keyword: USB Protocol; FAT32 File System; File Encryption; AES-CBC; AT91SAM9260 II

目 录 摘 要... I Abstract... II 第 一 章 绪 论... 1 1.1 引 言... 1 1.2 关 于 本 课 题 的 研 究... 2 1.2.1 本 文 的 研 究 目 标... 2 1.2.2 主 要 工 作 内 容 以 其 创 新 点... 3 第 二 章 总 体 方 案 概 述... 4 第 三 章 硬 件 电 路 设 计... 7 第 四 章 开 发 环 境 的 建 立... 10 第 五 章 AT91SAM9260 的 启 动... 11 第 六 章 USB 透 明 传 输... 15 6.1 USB 协 议 规 范... 15 6.1.1 USB 基 础 简 介... 15 6.1.2 USB 设 备 的 枚 举 过 程... 17 6.1.3 CBW 命 令 包 格 式 [1][4]... 18 6.1.4 SCSI 命 令 格 式 [19]... 19 6.2 ARM9 中 USB 的 具 体 实 现... 21 6.2.1 MSDDriver 的 工 作 原 理... 22 6.2.2 USBHostDriver 的 工 作 原 理... 23 6.3 文 件 透 明 传 输 的 实 现 ( 主 从 驱 动 互 联 )... 23 第 七 章 内 存 的 分 配 映 射 及 其 管 理... 26 7.1 内 存 的 分 配... 26 7.2 内 存 的 映 射 及 管 理... 27 第 八 章 文 件 目 录 簇 的 识 别... 30 8.1 FAT32 文 件 系 统 简 介 [5][8]... 30 8.1.1 主 引 导 记 录 区 (MBR)... 30 8.1.2 DOS 引 导 记 录 区 (DBR)... 31 8.1.3 文 件 分 配 表 区 (FAT)... 32 8.1.4 数 据 区 (DATA)... 32 8.2 数 据 区 中 目 录 簇 的 识 别 [26]... 34 第 九 章 文 件 数 据 的 加 解 密... 36 9.1 AES 标 准 [16]... 36 9.2 CBC 加 密 模 式 [16]... 36 第 十 章 测 试 与 总 结... 38 10.1 总 述... 38 10.2 AES 加 密 函 数 验 证 性 测 试... 38 10.3 传 输 性 能 测 试... 39 第 十 一 章 结 束 语... 40 11.1 论 文 总 结... 40 11.2 前 景 与 展 望... 41 致 谢... 42 参 考 文 献 (Reference)... 43 附 录... 45 III

第 一 章 绪 论 1.1 引 言 在 信 息 技 术 突 飞 猛 进 的 今 天, 人 们 在 享 受 技 术 进 步 的 同 时, 也 要 遭 受 越 来 越 多 的 数 字 危 机 U 盘, 由 于 其 拥 有 容 量 大 体 积 小 价 格 便 宜 等 众 多 优 点, 已 成 为 人 们 移 动 存 储 的 首 选 设 备 因 此 U 盘 的 数 据 安 全 问 题 也 日 益 露 出 水 面 世 界 各 地 关 于 U 盘 数 据 泄 露 的 事 件 层 出 不 穷, 既 有 企 业 私 人 的, 也 有 政 府 军 方 的 这 些 事 件 的 发 生 给 个 人 隐 私 和 集 体 利 益 带 来 了 巨 大 的 损 失 可 移 动 存 储 设 备 的 安 全 现 状 : 目 前 市 场 上 所 见 到 的 U 盘 大 多 不 带 有 任 何 安 全 功 能, 计 算 机 的 文 件 数 据 直 接 经 过 USB 端 口 存 储 到 U 盘 中 的 Flash 芯 片 中, 这 类 U 盘 我 们 称 之 为 普 通 U 盘 在 很 多 场 合, 人 们 并 没 有 意 识 到 存 储 于 U 盘 中 数 据 的 安 全 性, 唯 一 可 以 做 到 的 就 是 尽 量 保 证 U 盘 不 会 丢 失 而 一 般 情 况 下, 丢 失 之 后 的 U 盘 中 存 储 的 数 据 在 他 人 眼 中 变 得 一 览 无 余 同 时 U 盘 互 借 互 拷 也 会 给 攻 击 者 带 来 窃 取 数 据 的 机 会, 随 着 USB 的 数 据 传 输 速 率 的 不 断 提 高, 上 G 字 节 的 数 据 瞬 间 就 可 以 被 攻 击 者 偷 偷 拷 走 现 有 安 全 方 案 概 述 : [6] 1 计 算 机 上 的 安 全 措 施 一 种 方 式 是 通 过 在 操 作 系 统 内 核 中 嵌 入 对 USB 接 口 转 存 数 据 的 安 全 控 制 来 实 现 写 到 磁 盘 上 的 数 据 为 密 文 形 式, 当 需 要 从 磁 盘 上 读 出 数 据 时 做 相 应 的 解 密 工 作 这 种 安 全 机 制 相 当 于 在 磁 盘 前 段 加 入 一 块 加 解 密 装 置, 在 一 定 范 围 内 可 以 保 证 数 据 的 流 通, 通 用 性 强 如 果 使 用 硬 件 电 路 的 方 式 实 现 加 解 密 对 文 件 读 取 速 度 上 的 影 响 也 较 小 但 是 这 种 方 案 需 要 对 操 作 系 统 的 内 核 做 修 改, 或 者 是 对 主 板 的 结 构 进 行 修 改, 工 作 量 大 标 准 得 不 到 统 一, 一 旦 到 了 大 的 范 围 内, 各 种 操 作 系 统 的 计 算 机 之 间 就 无 法 进 行 文 件 的 共 享, 产 生 了 无 谓 的 麻 烦 而 目 前 国 内 使 用 最 多 的 操 作 系 统 Windows 仍 然 是 一 个 商 业 运 作 的 操 作 系 统, 普 通 用 户 无 法 对 其 内 核 进 行 修 改, 使 用 该 种 方 案 对 数 据 保 护 的 用 户 只 能 局 限 在 Linux 几 种 开 放 的 操 作 系 统 下, 故 至 今 未 得 到 广 泛 的 应 用 而 对 主 板 进 行 修 改 费 用 高 难 度 大, 很 难 成 为 普 通 用 户 及 小 公 司 的 首 选 于 是 在 这 种 情 况 下, 很 多 渴 望 数 据 安 全 的 用 户 将 目 光 投 到 了 一 些 加 密 软 件 上, 使 用 折 中 的 办 法 满 足 自 己 的 需 求 通 过 授 权 PC 机 上 的 程 序, 使 其 工 作 在 系 统 层 上, 对 出 入 U 盘 的 数 据 进 行 加 解 密 来 提 高 U 盘 的 安 全 性 能 这 种 加 密 方 式 有 很 多 不 同 的 形 式, 不 论 是 系 统 自 身 安 装 的 软 件 还 是 通 过 移 动 设 备 上 的 autorun 自 动 加 载 的 应 用 程 序, 都 使 用 了 这 种 方 式 这 种 加 密 方 式 经 济 代 价 低 硬 件 上 无 需 做 变 动 但 是 却 缺 乏 通 用 性, 一 般 来 说 各 个 厂 家 提 供 的 软 件 都 各 不 相 同 不 仅 占 用 系 统 资 源, 而 且 还 容 易 受 到 木 马 病 毒 的 威 胁 通 常 来 说, 这 种 加 密 方 式 需 要 手 动 输 入 密 码, 所 以 长 度 有 限 的 字 符 数 字 组 合 很 容 易 被 后 台 运 行 的 木 马 劫 持 1

2 可 移 动 磁 盘 上 的 改 动 此 种 方 案 来 自 与 各 大 U 盘 制 造 厂 家, 它 们 的 共 同 点 就 是 加 密 模 块 集 成 在 U 盘 之 上, 使 U 盘 自 身 带 有 保 密 功 能 这 类 方 法 类 似 与 在 计 算 机 中 的 磁 盘 前 段 加 上 加 解 密 模 块 一 样, 只 不 过 将 该 模 块 放 到 了 可 移 动 磁 盘 内 部 Flash 的 前 面 同 样, 这 类 产 品 也 有 很 多 种 不 同 的 模 式, 而 且 大 多 数 U 盘 第 一 次 使 用 时 会 要 求 先 安 装 驱 动 程 序 之 后 每 次 插 入 该 U 盘 之 后, 系 统 自 动 调 用 驱 动 程 序, 开 始 文 件 传 输 但 是 也 有 的 产 品 是 不 需 要 驱 动 的, 但 此 类 也 采 用 autorun 自 动 加 载 应 用 程 序 因 为 病 毒 的 泛 滥, 通 常 autorun 会 被 杀 毒 软 件 认 为 是 可 疑 对 象 而 隔 离 使 用 起 来 带 来 不 必 要 的 麻 烦 同 样 也 会 受 到 病 毒 的 侵 扰 这 些 产 品 将 加 密 过 程 转 由 硬 件 实 现, 但 是 具 体 使 用 的 加 密 标 准 却 不 以 公 开, 无 法 对 其 展 开 理 论 分 析, 安 全 强 度 未 知 [7] 3 独 立 的 加 解 密 设 备 此 种 类 型 加 解 密 设 备 的 典 型 的 例 子 就 是 华 中 科 大 的 基 于 CH375 的 嵌 入 式 USB 文 件 加 解 密 系 统, 这 个 系 统 完 全 与 计 算 机 脱 离, 工 作 时 首 先 将 U 盘 中 的 数 据 全 部 取 出 来, 加 密 之 后 再 写 入 U 盘, 然 后 将 明 文 删 除 总 的 来 说 这 样 的 系 统 有 几 个 缺 点, 首 先 不 是 实 时 的 加 解 密, 每 次 使 用 U 盘 的 前 后 都 必 须 使 用 该 设 备 然 后 将 其 加 解 密 之 后 再 使 用 ; 其 次 是 我 们 知 道 在 删 除 数 据 时 很 难 在 磁 盘 上 不 留 下 痕 迹, 因 为 在 FAT 文 件 系 统 下, 文 件 的 删 除 是 通 过 标 定 目 录 已 删 除 来 实 现 的, 真 实 的 文 件 数 据 并 未 得 到 损 毁 这 种 对 U 盘 文 件 的 处 理 过 程 实 际 上 就 等 价 于 在 计 算 机 平 台 上 一 个 可 以 将 U 盘 中 数 据 取 出 加 密 再 写 入 的 软 件 该 方 案 可 以 使 用 对 计 算 机 和 U 盘 两 者 都 独 立 的 设 备 提 供 数 据 安 全 服 务, 在 思 想 上 有 一 定 的 新 意, 但 是 并 没 有 对 U 盘 数 据 安 全 方 面 的 保 护 起 到 实 际 意 义 上 的 贡 献 近 年 来,U 盘 市 场 上 又 出 现 了 基 于 指 纹 识 别 身 份 认 证 技 术 的 产 品, 硬 件 上 增 加 了 指 纹 识 别 模 块, 但 仍 会 依 赖 一 段 在 PC 上 执 行 的 程 序, 这 段 程 序 或 预 先 安 装 在 PC 上, 或 来 自 U 盘 上 的 某 块 存 储 区 域, 国 内 代 表 作 是 亚 略 特 系 列 U 盘 除 了 解 决 了 无 需 手 动 输 入 密 码 外, 软 硬 结 合 方 案 的 其 他 缺 点 依 旧 没 有 解 决 1.2 关 于 本 课 题 的 研 究 本 课 题 的 主 要 目 标 就 是 整 合 现 有 的 解 决 方 案, 提 炼 出 他 们 的 优 点, 将 其 集 中 到 我 们 所 要 完 成 的 USB 文 件 加 解 密 系 统 在 1.1 节 中 对 计 算 机 的 主 板 甚 至 是 操 作 系 统 所 做 的 改 进 我 们 可 以 拿 到 USB 接 口 外 面 来 完 成 ; 可 以 吸 取 指 纹 U 盘 上 使 用 指 纹 作 为 身 份 认 证 的 高 度 安 全 的 方 案 ; 同 样 把 本 系 统 做 成 一 个 脱 离 于 计 算 机 与 普 通 U 盘 的 独 立 设 备, 这 样 便 可 以 集 多 家 之 长, 完 成 预 定 的 USB 文 件 加 解 密 系 统 1.2.1 本 文 的 研 究 目 标 本 着 一 种 高 度 的 灵 活 性 与 独 立 性 的 设 计 理 念, 本 课 题 所 设 计 的 USB 文 件 加 解 密 系 统 必 然 是 2

独 立 于 计 算 机 与 普 通 U 盘 而 单 独 存 在 的 它 通 过 一 主 一 从 两 个 USB 端 口 连 接 于 计 算 机 与 U 盘 之 间, 实 现 透 明 的 数 据 传 输 ( 即 任 何 一 方 都 不 会 感 觉 到 中 间 这 个 加 解 密 设 备 的 存 在 ) 同 时 必 须 做 到 文 件 级 别 的 数 据 加 密, 这 样 就 可 以 在 同 一 磁 盘 中 存 放 多 个 不 同 用 户 的 文 件 和 没 有 加 密 的 文 件 而 相 互 之 间 不 出 现 干 扰, 做 到 高 度 的 灵 活 性 而 另 一 方 面 实 现 指 纹 的 无 模 板 存 储 的 特 殊 处 理, 直 接 由 采 集 到 的 指 纹 图 像 生 成 加 解 密 所 需 要 的 密 钥 而 这 一 过 程 则 需 要 尽 可 能 的 保 证 这 串 密 钥 的 稳 定 性, 否 则 很 可 能 发 生 加 密 后 的 文 件 自 己 也 无 法 打 开 的 尴 尬 情 况 在 以 上 描 述 的 基 础 上, 可 以 得 出 结 论 : 该 系 统 可 以 做 到 只 有 在 U 盘 ( 密 文 ) 手 指 ( 密 钥 ) 加 解 密 装 置 三 者 同 时 存 在 的 情 况 下 才 可 以 在 计 算 机 上 打 开 用 户 存 入 该 U 盘 的 文 件 ; 而 普 通 用 户 也 只 能 浏 览 U 盘 内 的 文 件 名 和 不 同 的 目 录 而 已 1.2.2 主 要 工 作 内 容 以 其 创 新 点 由 于 本 课 题 工 作 量 大, 需 要 大 量 的 理 论 创 新 和 实 践 工 作, 所 以 分 由 三 位 同 学 共 同 完 成 本 文 主 要 负 责 ARM 平 台 上 的 USB 协 议 的 解 析 文 件 级 的 数 据 加 密 以 及 和 负 责 指 纹 图 像 处 理 的 DSP 平 台 之 间 的 接 口 设 计 通 过 对 设 计 目 标 的 进 一 步 分 析, 可 以 将 其 主 要 的 工 作 内 容 概 括 为 一 下 几 个 步 骤 : (1). 掌 握 并 完 成 硬 件 电 路 板 的 制 作 技 术 和 调 试 (2). USB 主 机 设 备 的 工 作 原 理, 以 及 USB 主 从 设 备 间 的 通 信 协 议 (3). 支 持 对 普 通 U 盘 文 件 的 加 解 密, 文 件 名 称 可 见, 内 容 不 可 见, 方 便 文 件 管 理 (4). 基 于 嵌 入 式 的 加 密 算 法 实 现 (5). 连 接 指 纹 模 块 (6). 保 证 对 计 算 机 与 U 盘 的 透 明, 并 支 持 市 场 上 大 多 数 的 通 用 U 盘 主 要 创 新 点 : (1). 采 用 了 独 立 于 U 盘 与 计 算 机 的 设 计 思 想, 采 用 过 滤 的 技 术 实 现 对 原 始 操 作 无 干 扰 的 数 据 加 密 (2). 对 U 盘 中 的 每 一 个 文 件 进 行 加 解 密, 而 不 是 对 整 个 U 盘 加 解 密, 使 用 和 管 理 都 更 为 方 便 3

第 二 章 总 体 方 案 概 述 为 了 给 USB 设 备 的 使 用 带 来 最 小 的 影 响, 同 时 又 要 具 备 数 据 加 密 的 功 能, 因 此 将 加 密 设 备 设 计 成 一 个 数 据 过 滤 型 的 设 备 成 为 首 选 所 谓 数 据 过 滤 就 是 将 本 设 备 连 接 于 USB 存 储 设 备 和 计 算 机 之 间, 数 据 的 存 储 读 取 都 必 然 要 通 过 此 设 备, 因 此 也 就 有 可 能 在 使 用 过 程 中, 实 时 的 提 供 数 据 加 密 功 能 借 助 于 ARM 平 台 强 大 处 理 能 力 和 丰 富 的 外 设, 这 部 分 功 能 可 以 在 ARM 平 台 上 实 现, 具 体 芯 片 型 号 选 为 AT91SAM9260. 另 一 方 面 通 过 对 指 纹 信 息 的 读 取, 采 用 先 进 的 图 像 处 理 和 特 征 提 取 的 算 法, 从 指 纹 图 像 中 提 取 出 用 户 的 身 份 信 息, 并 将 其 作 为 密 钥 提 供 给 数 据 加 密 模 块 该 部 分 的 处 理 涉 及 到 大 量 的 浮 点 运 算, 所 以 考 虑 在 DSP 平 台 上 实 现,DSP 与 ARM 之 间 可 以 使 用 SPI 接 口 实 现 简 单 的 通 信 协 议, 完 成 密 钥 的 传 输 实 现 结 构 如 图 1 所 示 图 1 系 统 方 案 图 本 文 的 重 点 工 作 放 在 ARM 平 台 上 的 USB 协 议 解 析 和 文 件 数 据 的 加 密 因 此 可 以 将 此 部 分 的 工 作 分 为 以 下 三 个 主 要 部 分 : [2] 1 USB 协 议 的 解 析 要 在 同 一 系 统 中 配 备 一 主 一 从 两 个 USB 接 口 以 及 对 应 的 驱 动 程 序, 对 计 算 机 伪 装 成 普 通 的 U 盘, 响 应 所 有 的 计 算 机 请 求 ; 对 U 盘 伪 装 成 计 算 机, 根 据 计 算 机 发 来 的 请 求 稍 加 改 动 再 次 转 发 给 U 盘 PC FAT 文 件 系 统 AT91SAM9260 FAT 文 件 系 统 加 密 解 密 FAT 文 件 系 统 U 盘 SCSI 协 议 SCSI 协 议 SCSI 协 议 SCSI 协 议 MSC 子 类 MSC 子 类 MSC 子 类 MSC 子 类 功 能 层 功 能 层 功 能 层 功 能 层 USB 设 备 基 础 设 备 层 设 备 层 设 备 层 设 备 层 物 理 层 物 理 层 物 理 层 物 理 层 图 2 系 统 加 解 密 协 议 栈 4

类 似 于 TCP/IP 协 议 层,USB 自 身 也 含 有 类 似 的 协 议, 下 层 为 上 层 提 供 服 务, 逻 辑 层 之 间 互 相 通 信, 真 正 的 数 据 流 都 必 须 通 过 物 理 信 道 图 2 描 述 的 是 整 个 系 统 对 USB 数 据 的 处 理 过 程 ARM 通 过 其 USB 接 口 连 接 到 PC 的 USB 接 口 获 得 底 层 的 差 分 数 据 信 号, 使 其 进 行 转 化 为 可 识 别 [19] 的 数 据 包 CPU 进 行 后 续 解 析, 在 SCSI 层 解 析 出 的 数 据 包 是 包 括 写 入 到 Flash 中 的 数 据 块 地 址 及 其 数 据 长 度 等 信 息, 并 进 一 步 判 断 当 前 数 据 是 否 需 要 加 解 密 调 用 AES 子 程 序, 对 数 据 加 密, 之 后 把 它 按 照 加 密 前 的 方 式 转 发, 在 物 理 层 通 过 USB 的 主 驱 动 程 序 发 送 给 U 盘 图 3 透 明 传 输 示 意 图 另 外 USB 是 一 种 基 于 主 从 结 构 的 总 线 形 式, 总 线 上 的 数 据 传 输 都 必 须 由 主 机 来 发 起, 只 有 通 过 请 求 才 会 产 生 相 应 的 响 应 从 图 3 的 左 图 可 以 看 出 在 数 据 进 行 转 发 过 程 中 会 在 时 间 等 待 上 产 生 一 定 的 代 价, 但 是 在 目 前 的 嵌 入 式 系 统 中 还 存 在 这 一 大 块 没 有 经 过 开 发 利 用 的 内 存, 如 果 将 这 部 分 内 存 开 发 出 来, 存 储 一 些 已 经 通 过 本 设 备 的 数 据, 那 么 下 次 有 相 同 的 请 求 时, 就 没 有 必 要 重 新 到 U 盘 那 边 请 求 数 据, 直 接 可 以 从 内 存 中 取 出, 减 小 时 间 开 销 2 文 件 数 据 的 识 别 在 USB 上 传 输 的 数 据 是 非 常 简 单 的, 主 机 只 通 知 U 盘 该 数 据 要 存 放 在 Flash 的 哪 块 地 址, 这 段 数 据 的 长 度 所 有 的 文 件 系 统 的 结 构 在 操 作 系 统 中 得 到 了 封 装, 不 论 用 户 的 操 作 是 读 写 删 除 还 是 格 式 化, 所 有 的 操 作 在 USB 总 线 上 的 看 到 的 只 会 有 两 种 数 据 的 读 和 写 因 此 要 通 过 被 封 装 了 的 数 据 还 原 出 用 户 的 原 始 操 作 几 乎 变 得 不 太 可 能 但 是 换 一 种 思 维, 实 际 上 的 保 密 只 要 做 到 磁 盘 上 的 文 件 数 据 保 密 便 可 达 到 目 标, 那 么 该 问 题 的 求 解 转 化 成 在 USB 上 传 输 的 数 据 中 文 件 数 据 的 检 测 问 题, 进 一 步 化 简 为 USB 数 据 流 中 目 录 簇 的 识 别 既 然 文 件 系 统 的 组 织 必 须 遵 循 一 系 列 规 则 [5][8], 那 么 这 两 种 数 据 形 式 必 然 有 其 数 字 特 征, 相 比 文 件 数 据, 目 录 簇 的 这 种 特 征 显 然 要 更 加 突 出, 易 于 发 现 3 数 据 加 密 算 法 加 密 算 法 多 种 多 样, 在 本 系 统 中 要 选 择 一 种 快 速 且 安 全 性 高 的 数 据 加 密 算 法 必 然 会 想 到 AES 算 法 在 密 码 学 界,AES(Advanced Encryption Standard) 加 密 算 法 是 美 国 政 府 所 采 用 的 一 种 加 密 标 准, 是 世 界 上 最 流 行 的 对 称 加 密 算 法 之 一, 它 的 安 全 性 可 以 得 到 保 证 另 外 正 因 为 它 5

的 广 泛 应 用, 代 码 的 重 新 利 用 可 以 大 大 减 小 项 目 的 开 发 周 期 除 此 之 外, 数 据 加 密 靠 的 不 仅 仅 是 算 法, 同 时 也 需 要 加 密 模 式 的 参 与 本 文 选 用 CBC 分 组 密 码 模 式 最 后, 为 了 更 加 快 速 的 使 系 统 启 动, 考 虑 不 使 用 操 作 系 统, 直 接 加 载 底 层 的 应 用 程 序, 速 度 快 效 率 高 6

第 三 章 硬 件 电 路 设 计 基 于 AT91SAM9260 的 ARM 开 发 平 台 已 经 有 着 比 较 成 熟 的 应 用 方 案, 可 以 利 用 实 验 室 现 有 的 硬 件 资 源 来 构 造 本 文 所 需 的 硬 件 平 台 考 虑 到 ARM 核 心 板 部 分 在 各 种 应 用 情 况 下 的 变 化 一 般 不 是 很 大 的 情 况 下, 开 发 人 员 通 常 将 其 做 成 单 独 的 一 个 电 路 模 块, 然 后 根 据 不 同 的 应 用 需 求, 通 过 配 备 不 同 的 底 板 来 扩 展 IO 端 口 和 电 源 模 块 核 心 板, 顾 名 思 义, 就 是 ARM 硬 件 电 路 的 核 心 部 分, 它 包 括 了 内 存 NAND Flash 模 式 选 择 开 关 以 及 必 要 的 电 源 管 理 模 块 相 对 于 底 板, 核 心 板 的 设 计 复 杂 但 相 对 固 定, 通 常 采 用 Atmel 公 司 推 荐 的 配 置 方 式 [20], 因 此 本 毕 设 并 未 涉 及 到 核 心 板 电 路 上 的 设 计 工 作 [21], 只 是 在 此 对 它 做 简 要 的 列 表 说 明 : >> CPU:AT91SAM9260 >> SDRAM:32M 2, 两 片 HY57V561620 构 成 32bit >> NAND FLASH:128MB, 一 片 K9F1G08 >> RTC:PCF8563T >> JTAG:JTAG 调 试 接 口, 标 准 20PIN >> 电 源 :3.3V 电 源 输 入 和 3V RTC 后 备 电 源 输 入 >> 扩 展 接 口 : 数 据 地 址 总 线 接 口 和 剩 余 GPIO 口 通 过 2 个 80PIN 双 排 插 阵 引 出 根 据 本 毕 设 的 需 求 和 对 核 心 板 硬 件 资 源 的 分 析, 在 底 板 上 必 须 配 备 一 个 电 源 模 块 USB 的 主 从 接 口 用 来 作 为 调 试 工 具 的 串 口 必 要 的 LED 状 态 显 示 以 及 对 外 的 接 口 图 4 电 源 模 块 原 理 图 电 源 管 理 使 用 AP1513 芯 片 产 生 更 加 稳 定 的 5V 电 源, 另 外 还 可 以 从 USB 电 源 中 取 5V 电 源, 该 电 源 通 过 二 极 管 连 到 上 述 电 源 管 理 芯 片 的 输 出, 保 证 在 外 部 电 源 供 电 时,USB 工 作 也 不 会 受 到 影 响 图 5 USB 供 电 在 系 统 中 的 应 用 图 6 5V 到 3.3V 的 电 压 转 化 电 路 7

如 图 6 所 示, 使 用 5V 到 3.3V 电 源 转 化, 向 核 心 板 供 电 图 7 USB 接 口 电 路 上 图 为 USB 主 设 备 接 口,5V 电 源 通 过 500mA 的 保 险 丝 介 入, 以 保 护 U 盘 以 及 不 正 确 时 候 时 电 路 的 安 全 下 图 为 USB 从 设 备 电 路, 其 中 VUSB 通 过 10K 电 阻 接 到 ARM 的 A24 引 脚, 该 引 脚 可 以 用 于 检 测 本 设 备 上 端 是 否 有 主 机 供 电 不 论 是 从 口 还 是 主 口,D+ 和 D- 两 根 数 据 线 必 须 根 据 主 芯 片 的 要 求 接 入 必 要 的 电 阻 以 及 旁 路 电 容, 以 提 高 电 路 的 抗 干 扰 性 能 完 整 的 原 理 图 见 附 录 的 图 28, 双 层 PCB 版 图 的 正 面 效 果 见 图 8 图 8 母 板 的 PCB 版 图 8

如 图 9 所 示, 为 制 作 完 成 的 硬 件 电 路,ARM 核 心 板 通 过 两 列 细 口 双 插 槽 与 母 板 相 连 接 上 面 分 别 分 布 了 SPI 接 口 ( 连 接 DSP 指 纹 预 处 理 模 块 ) USB 设 备 端 口 ( 作 为 USB 设 备 连 接 到 计 算 机 ) USB 主 机 端 口 ( 作 为 USB 控 制 器 连 接 USB 存 储 设 备 ) SPI 接 口 USB 设 备 端 口 USB 主 机 端 口 口 图 9 电 路 ( 母 板 + 核 心 板 ) 实 物 图 ARM 核 心 板 9

第 四 章 开 发 环 境 的 建 立 一 个 完 整 的 开 发 环 境 是 开 发 ARM 应 用 程 序 的 必 要 前 提, 只 有 当 第 一 个 简 单 的 Hello World 成 功 的 出 现 在 电 脑 上 的 时 候, 意 味 着 从 代 码 的 编 写 下 载 程 序 运 行 一 直 到 终 端 显 示 都 能 够 正 常 工 作 了 任 何 复 杂 的 系 统 都 是 构 建 在 这 个 简 单 的 基 础 上 的, 并 且 要 尽 量 使 这 个 过 程 尽 量 的 简 单, 为 以 后 的 调 试 工 作 节 省 下 大 量 的 时 间 本 毕 设 的 开 发 环 境 是 建 立 在 计 算 机 内 部 搭 建 的 虚 拟 局 域 网 上 的, 在 Windows XP 上 进 行 代 码 的 编 辑 和 二 进 制 可 执 行 文 件 的 下 载, 在 Fedora 8 下 对 工 程 文 件 进 行 编 译 连 接 所 有 的 工 程 文 件 存 储 在 Linux 操 作 系 统 中, 通 过 虚 拟 局 域 网, 使 用 Fedora 自 带 的 Samba 服 务 功 能 共 享 工 作 空 间 [21], 并 在 Windows 下 将 共 享 文 件 夹 映 射 成 网 络 驱 动 器, 从 而 实 现 不 同 的 操 作 系 统 和 不 同 的 文 件 系 统 之 间 的 文 件 共 享 功 能 图 10 开 发 环 境 示 意 图 首 先 介 绍 两 款 Windows 下 的 必 备 软 件 :Source Insight 和 SAM-BA Source Insight 是 一 个 面 向 项 目 开 发 的 程 序 编 辑 器 和 代 码 浏 览 器, 它 拥 有 内 置 的 对 C/C++, C# 和 Java 等 程 序 的 分 析 Source Insight 能 分 析 源 代 码 并 在 工 作 的 同 时 动 态 维 护 它 自 己 的 符 号 数 据 库, 并 自 动 为 用 户 显 示 有 用 的 上 下 文 信 息 Source Insight 不 仅 仅 是 一 个 强 大 的 程 序 编 辑 器, 它 还 能 显 示 reference trees,class inheritance diagrams 和 call trees 而 SAM Boot Assistant (SAM-BA ) 则 一 种 提 供 了 在 Windows 下 对 Atmel AT91 ARM 器 件 编 程 的 操 作 十 分 简 单 的 可 视 化 软 件 它 可 以 选 择 通 过 USB 端 口 或 者 更 为 常 用 的 RS232 端 口 对 目 标 设 备 进 行 编 程 它 可 以 定 义 可 执 行 文 件 下 载 的 具 体 地 址, 还 可 以 对 内 存 空 间 的 任 意 位 置 进 行 查 看 考 虑 到 开 发 过 程 中 会 不 得 不 对 大 量 的 现 有 的 USB 驱 动 程 序 源 代 码 的 阅 读, 为 了 更 好 的 了 解 各 种 变 量 的 定 义 和 大 量 的 函 数 间 相 互 调 用 的 复 杂 关 系, 提 高 工 作 效 率,SourceInsight 可 以 说 是 一 款 十 分 符 合 要 求 的 编 辑 器 SourceInsight 编 辑 好 的 源 程 序 通 过 Windows 和 Linux 之 间 的 共 享 通 道, 存 储 到 虚 拟 机 上, 然 后 在 Linux 在 执 行 编 译 命 令 在 Makefile 中 编 写 需 要 编 译 的 源 程 序 和 所 使 用 的 编 译 器 [22], 本 文 所 使 用 的 交 叉 编 译 工 具 Gnuarm3.4.3 为 ATMEL 官 方 推 荐 使 用 的 编 译 器 版 本 编 译 成 功 的 二 进 制 文 件 再 通 过 共 享 通 道 由 Windows 下 的 SAM-BA [23] 下 载 到 目 标 板 上 在 下 一 章, 我 将 详 细 介 绍 可 执 行 的 二 进 制 文 件 下 载 的 地 址 以 及 ARM 启 动 的 详 细 过 程 10

第 五 章 AT91SAM9260 的 启 动 首 先 介 绍 一 下 系 统 的 存 储 的 地 址 映 射 图 11 AT91SAM9260 地 址 映 射 简 图 图 11 只 是 列 出 了 前 面 一 部 分 的 存 储 器 地 址 映 射 的 信 息, 从 中 我 们 可 以 看 到 CPU 内 部 已 经 配 备 了 一 个 32K 的 ROM 和 两 个 SRAM,CPU 对 它 们 的 存 储 都 可 以 在 1 个 时 钟 周 期 内 完 成 另 外 在 核 心 板 上 还 有 片 外 的 SDRAM 与 NAND Flash,SDRAM 是 由 两 片 16-bit 的 32M 内 存 通 过 位 扩 展 而 构 成 的 32-bit 的 64M 内 存, 而 NAND Flash 单 片 大 小 为 128M 系 统 具 体 从 以 上 那 么 多 的 存 储 器 中 的 哪 一 个 开 始 启 动 还 要 取 决 于 BMS(Boot Mode Select) 引 脚 的 电 平, 具 体 配 置 见 下 表 CPU 启 动 之 后 总 是 从 0 地 址 开 始 执 行 指 令 的, 所 以 在 REMAP 之 前 会 根 据 BMS 的 情 况 载 入 相 应 的 数 据 到 Boot Memory 中 运 行 一 旦 系 统 启 动 完 成, 重 新 进 行 地 址 映 射 之 后 从 内 部 的 SRAM 启 动 表 1 内 部 存 储 映 射 因 为 核 心 板 EBI_NCS0 上 没 有 挂 载 任 何 存 储 设 备, 所 以 启 动 模 式 BMS 选 择 置 为 高 电 平, 从 固 化 ROM 启 动 ROM 内 部 的 启 动 程 序 要 完 成 的 工 作 以 列 表 的 方 式 罗 列 如 下 1 : (1). 初 始 化 调 试 单 元 的 串 口 (DBGU) 和 USB 设 备 端 口 ( 用 于 进 入 SAMBA 模 式 ) (2). 加 载 ROM 中 的 程 序, 运 行 它 会 从 NAND Flash 中 0 地 址 处 开 始 检 查 是 否 有 8 个 有 效 的 中 断 向 量 存 在 所 有 的 这 些 中 断 向 量 必 须 是 B 跳 转 或 是 LDR 加 载 寄 存 器 指 令 与 其 他 存 储 器 不 同 的 是 NAND Flash 的 第 六 个 中 断 向 量 无 需 指 定 加 载 程 序 镜 像 的 长 度, 因 为 在 NAND Flash 中 每 次 加 载 都 会 拷 贝 4K 程 序 到 片 内 SRAM 中 加 载 完 成 后 重 定 向 地 1 在 DBGU 初 始 化 之 后 实 际 上 还 会 有 关 于 DataFlash 的 检 查 工 作, 具 体 流 程 同 NAND Flash 相 同, 因 为 核 心 板 没 有 配 备 DataFlash, 故 在 次 隐 去 11

址, 跳 转 (3). 如 果 没 有 合 法 的 中 断 向 量,SAM-BA 启 动 程 序 被 执 行, 并 等 待 计 算 机 端 通 过 串 口 或 USB 接 口 发 起 SAM-BA 会 话 以 上 工 作 的 具 体 流 程 见 下 图 : Start Init Clock & PLL Init DBGU Init USB Device Port SPI DataFlash Boot Yes Download from DataFlash (NPCS0) RUN No SPI DataFlash Boot Yes Download from DataFlash (NPCS1) RUN No NAND Flash Boot Yes Download from NAND Flash RUN No USB Enumeration Successful? No Character(s) received on DBGU? Yes Run SAM-BA Boot Yes Run SAM-BA Boot 图 12 启 动 程 序 算 法 流 程 从 启 动 的 结 果 来 看, 实 际 上 只 有 两 种 效 果 :1 将 程 序 拷 贝 到 内 部 4KSRAM,REMAP 并 开 始 运 行 ;2 进 入 SAM-BA 模 式 后 者 和 我 们 之 前 介 绍 的 Windows 平 台 上 的 程 序 SAM-BA 有 很 大 关 系,SAM-BA 模 式 通 过 计 算 机 上 运 行 的 一 段 主 机 控 制 程 序 和 另 一 段 在 嵌 入 式 平 台 上 运 行 的 从 机 程 序 的 相 互 配 合 通 信, 可 以 将 计 算 机 上 的 可 执 行 代 码 下 载 到 嵌 入 式 指 定 的 地 址 上 具 体 的 通 道 也 分 为 USB 方 式 和 串 口 方 式, 因 为 串 口 要 留 作 调 试 信 息 的 输 出, 因 此 选 用 USB 电 缆 完 成 程 序 的 下 载 工 作 Boot loader: 从 上 面 的 流 程 可 以 看 到, 在 系 统 REMAP 之 后 程 序 会 跳 转 到 4K 大 小 的 SRAM 中 运 行, 虽 然 SRAM 有 着 很 高 的 存 储 速 度, 指 令 能 够 更 快 的 被 CPU 执 行 但 是 谁 也 不 能 保 证 自 己 的 程 序 能 够 被 限 制 在 4K 的 大 小 之 内, 而 且 一 个 4K 的 程 序 也 不 能 指 望 它 能 够 完 成 多 少 复 杂 的 系 统 功 能 那 么 就 需 要 在 这 4K 大 小 的 空 间 中 再 次 完 成 一 个 跳 转 工 作, 将 程 序 指 针 CP 指 向 到 可 用 范 围 更 加 广 的 内 存 中 去 ( 当 然 这 之 前 需 要 完 成 一 些 必 要 的 系 统 配 置 ) 这 个 工 作 就 是 由 Boot Loader 来 完 成 的 与 操 作 系 统 的 Boot Loader 相 比 [17][18], 这 里 只 需 要 使 用 第 一 级 的 Loader Bootstrap 就 能 完 12

成 任 务 因 为 不 需 要 启 动 操 作 系 统,Bootstrap 只 要 能 将 自 己 的 指 针 指 到 应 用 程 序 的 入 口 即 可 首 先 该 Boostrap 要 能 被 启 动 程 序 认 为 是 一 段 能 够 正 确 运 行 的 程 序 才 会 被 拷 贝 到 片 内 内 存, 所 以 它 必 须 是 以 8 个 中 断 向 量 为 开 头 的 因 为 Bootstrap 功 能 比 较 简 单, 用 不 着 处 理 中 断,8 个 中 断 的 存 在 只 是 为 了 被 启 动 程 序 发 现 为 可 用 二 进 制 代 码, 所 以 实 际 上 这 些 中 断 向 量 只 是 指 向 一 个 死 循 环 而 已 它 的 八 个 向 量 分 别 如 下 所 示, 虽 然 在 这 边 用 不 到, 但 是 在 应 用 程 序 中 却 是 中 断 处 理 的 必 由 之 路 _exception_vectors: b reset_vector /* reset */ b undef_vector /* Undefined Instruction */ b swi_vector /* Software Interrupt */ b pabt_vector /* Prefetch Abort */ b dabt_vector /* Data Abort */ b rsvd_vector /* reserved */ b irq_vector /* IRQ : read the AIC */ b fiq_vector /* FIQ */ 然 后 它 要 依 次 进 行 : (1). 堆 栈 初 始 化 (2). 时 钟 配 置 (3). 初 始 化 bss 字 段 (4). 跳 转 到 Bootstrap 的 main 函 数 (5). 从 main 函 数 返 回 并 跳 转 到 目 标 地 址 注 :bss 字 段 是 指 那 些 被 分 配 的 初 始 值 为 0 静 态 变 量 所 对 应 的 地 址, 在 main 开 始 之 前 必 须 将 其 声 明 的 未 赋 初 值 的 静 态 变 量 置 为 0;main 函 数 完 成 对 NAND Flash 的 初 始 化, 并 将 相 应 的 应 用 程 序 从 中 复 制 到 片 外 内 存 中 的 JUMP_ADDR 地 址, 并 将 该 地 址 返 回 以 供 main 函 数 之 前 的 这 段 crt0_gnu 的 汇 编 代 码 跳 转 用 对 程 序 下 载 方 法 所 做 的 改 进 开 发 板 最 初 所 争 对 的 应 用 主 要 是 对 基 于 Linux 操 作 系 统 来 开 发 的, 所 以 在 那 种 情 况 下 Bootstrap 并 不 直 接 引 导 应 用 程 序, 而 是 从 NAND Flash 复 制 一 段 被 称 为 U-Boot 的 程 序 (U-Boot 通 常 和 Bootstrap 共 同 构 成 我 们 所 熟 知 的 二 级 和 一 级 启 动 代 码 Bootloader) 到 片 外 SDRAM 中 的 最 后 一 段 地 址 中, 然 后 跳 转 到 U-Boot 执 行 二 级 启 动 代 码,U-Boot 实 际 上 是 一 段 相 对 比 较 复 杂 的 程 序, 它 能 够 简 单 的 支 持 一 些 命 令 行 Linux 内 核 也 就 是 借 助 U-Boot 才 可 以 被 复 制 到 SDRAM 的 0 地 址 才 能 够 被 正 确 的 运 行 那 么 当 第 一 段 的 Bootstrap 烧 入 到 NAND Flash 的 首 地 址 之 后, 怎 样 才 能 再 次 令 嵌 入 式 系 统 进 入 到 SAM-BA 模 式 呢? 原 来 Bootstrap 除 了 加 在 应 用 程 序 还 有 一 项 功 能 : 每 次 运 行 自 动 扫 描 PC11 引 脚 2, 如 果 该 引 脚 低 电 平, 则 程 序 写 入 一 段 0 到 NAND Flash 的 0 地 址, 这 样 就 可 以 阻 止 下 次 复 2 在 Bootstrap 从 Flash 的 指 定 地 址 载 入 应 用 程 序 或 U-Boot 前 对 NAND Flash 的 初 始 化 函 数 nandflash_hw_init 中 调 用 nand_recovery 实 现 此 功 能 13

位 时 电 路 开 始 运 行 程 序, 而 可 以 再 次 进 入 到 SAM-BA 模 式, 在 这 个 模 式 下 可 以 重 新 烧 入 更 新 后 的 程 序 但 这 样 做 的 一 个 缺 点 就 是 每 次 烧 入 程 序 代 码 之 后 都 必 须 重 新 写 入 Bootstrap, 给 程 序 的 调 试 工 作 带 来 了 很 大 的 不 便 表 2 合 法 中 断 向 量 表 地 址 机 器 码 汇 编 语 言 此 外, 由 于 Flash 的 烧 写 次 数 是 有 限 的, 所 以 在 以 上 基 础 上 要 尽 量 减 少 对 Flash 的 写 入 次 数, 并 最 大 程 度 的 使 调 试 过 程 中 程 序 的 烧 写 变 得 简 单 首 先, 每 次 写 入 新 的 程 序 时 都 必 须 进 行 一 次 Bootstrap 的 擦 除 和 写 入, 而 Bootstrap 在 调 试 过 程 中 通 常 是 不 会 被 改 变 的, 所 以 这 个 过 程 确 实 是 一 个 多 余 的 过 程, 它 所 达 到 的 目 标 就 是 进 入 SAM-BA 模 式 而 多 次 的 对 NAND Flash 的 0 地 址 反 复 做 无 意 义 的 擦 出 写 入 很 大 程 度 上 缩 短 了 系 统 的 使 用 寿 命 根 据 CPU 进 入 SAM-BA 模 式 的 流 程, 可 以 看 到 在 检 测 NAND Flash 中 是 否 有 正 确 的 执 行 码 取 决 于 对 前 8 个 中 断 向 量 的 检 测 ( 如 图 13 所 示 ), 可 以 发 现 如 果 在 复 位 的 同 时 人 为 的 对 上 面 读 到 的 数 据 进 行 干 扰 就 可 以 使 CPU 认 为 Flash 中 的 数 据 不 为 可 用 代 码, 最 终 达 到 误 导 CPU 进 入 SAM-BA 模 式 而 无 需 累 赘 的 多 次 重 复 的 对 Bootstrap 的 烧 写 再 看 到 NAND Flash 的 引 脚, 发 现 它 只 是 用 了 一 个 8 位 的 数 据 总 线 [24], 因 此 可 以 在 该 总 线 上 下 功 夫 来 欺 骗 CPU 具 体 的 做 法 是 : 在 复 位 的 同 时 短 接 D7 与 地 线 这 样 做 可 以 方 便 的 解 决 启 动 是 选 择 SAM-BA 还 是 正 常 运 行, 而 且 每 次 仅 需 对 改 动 过 的 代 码 进 行 写 入 就 可 以 了 图 13 核 心 板 中 NAND Flash 电 路 原 理 图 14

第 六 章 USB 透 明 传 输 为 了 分 析 出 入 USB 存 储 设 备 的 数 据 流 就 必 须 截 取 所 有 的 通 过 USB 端 口 的 数 据, 因 此 介 于 计 算 机 与 可 移 动 存 储 设 备 之 间 的 加 解 密 装 置 必 须 同 时 具 备 USB 海 量 存 储 设 备 类 所 具 有 的 全 部 功 能, 于 此 同 时 还 要 有 主 动 向 USB 从 设 备 读 写 数 据 的 能 力 本 章 先 从 理 论 上 简 述 USB 以 及 它 的 MSC 子 类 的 基 本 原 理 和 最 基 本 的 命 令 数 据 格 式, 然 后 再 从 实 现 角 度 分 别 讨 论 主 机 驱 动 和 从 机 驱 动 的 实 现, 最 后 论 述 如 何 利 用 在 加 解 密 设 备 中 主 机 驱 动 和 从 机 驱 动 之 间 的 通 信 实 现 文 件 的 透 明 传 输 功 能 的 6.1 USB 协 议 规 范 USB 全 名 为 Universal Serial Bus, 即 通 用 串 行 总 线 它 是 一 种 基 于 主 从 方 式 的 总 线 结 构, 在 本 加 解 密 设 备 中 就 同 时 实 现 了 USB 的 主 从 功 能, 主 从 功 能 分 别 面 向 移 动 存 储 设 备 和 计 算 机 数 据 信 息 通 过 串 行 接 口 引 擎 在 串 行 数 据 和 并 行 数 据 之 间 转 化, 在 物 理 层 上 通 过 一 对 基 于 差 分 曼 彻 斯 特 码 的 差 分 电 流 信 号 传 递 数 据 主 从 设 备 分 别 配 备 了 复 杂 的 USB 硬 件 电 路 以 更 好 更 快 的 实 现 USB 的 数 据 传 输, 同 时 为 上 层 驱 动 和 应 用 程 序 的 编 写 提 供 最 大 的 便 利 6.1.1 USB 基 础 简 介 USB 有 着 自 己 的 一 套 理 论 体 系, 从 物 理 层 一 直 到 上 层 应 用, 从 严 格 规 整 到 灵 活 多 变, 每 一 个 层 次 都 有 一 定 的 规 范 就 USB 自 身 而 言 十 分 复 杂, 很 难 在 篇 幅 有 限 的 地 方 叙 述 清 楚, 在 下 面 的 几 个 小 的 部 分 中 主 要 做 一 些 简 略 的 介 绍, 并 将 文 章 的 主 体 部 分 留 给 如 何 实 现 USB 数 据 的 透 明 传 输 用 有 关 USB 详 细 的 内 容 可 以 参 考 相 关 网 站 3 6.1.1.1 USB 的 拓 扑 结 构 图 14 USB 物 理 总 线 的 拓 扑 USB 系 统 在 硬 件 上 主 要 分 为 USB 主 控 制 器 和 USB 设 备 USB 的 主 控 制 器 和 设 备 以 星 型 方 式 排 布, 主 控 制 器 永 远 都 处 于 中 心 节 点 的 位 置, 而 我 们 在 日 常 生 活 中 所 用 的 U 盘 USB 鼠 标 和 键 3 http://www.usb.org 15

盘 摄 像 头 等 等 都 是 属 于 USB 设 备 USB 的 主 控 芯 片 就 是 通 过 Hub 的 概 念 将 众 多 的 设 备 连 接 成 一 个 星 型 网 络, 每 个 不 同 的 USB 设 备 在 初 始 化 阶 段 都 会 被 分 配 一 个 特 定 的 地 址 以 供 主 机 区 别 既 然 Hub 可 以 扩 展 出 众 多 的 USB 端 口, 那 么 作 为 设 备 的 Hub 可 以 将 这 个 星 型 网 络 向 下 进 行 扩 展 USB 的 拓 扑 结 构 如 图 14 示 6.1.1.2 USB 的 传 输 速 率 和 传 输 类 型 USB 的 传 输 速 率 分 为 低 速 (Low speed) 全 速 (Full speed) 和 高 速 (High speed) 三 种 模 式, 他 们 的 波 特 率 分 别 为 1Mbit/s 12Mbit/s 和 480Mbit/s 在 USB2.0 的 规 范 中 同 时 规 定 了 这 三 种 速 度 模 式, 并 要 求 在 主 从 设 备 的 速 度 不 同 时, 高 速 设 备 应 该 向 低 速 设 备 靠 拢 通 常 一 个 USB 端 口 的 速 度 上 限 是 由 硬 件 来 决 定 的, 通 过 软 件 的 方 式 通 过 对 程 序 的 优 化 减 少 不 必 要 的 等 待 来 使 得 真 正 的 传 输 的 字 节 数 据 速 率 达 到 最 优 AT91SAM9260 所 配 备 的 两 个 USB 端 口 都 是 属 于 全 速 端 口, 因 此 实 现 的 传 输 波 特 率 为 12Mbit/s. USB 使 用 4 种 数 据 传 输 方 式 分 别 为 控 制 传 输 (control) 中 断 传 输 (interrupt) 批 量 传 输 (bulk) 和 同 步 传 输 (synchronous) 控 制 传 输 是 每 个 USB 设 备 与 主 机 通 信 中 必 须 使 用 的 一 种 传 输 方 式, 也 是 默 认 方 式, 主 机 通 过 控 制 传 输 来 对 设 备 枚 举 配 置 分 配 地 址 并 协 商 下 面 所 使 用 的 传 输 方 式, 因 此 控 制 传 输 在 整 个 对 话 过 程 中 必 须 保 证 不 会 出 错, 否 则 显 出 混 乱 的 系 统 便 无 法 通 过 主 机 的 绝 对 控 制 来 恢 复 正 常 的 通 信 秩 序 ; 中 断 传 输 用 于 小 批 量 非 连 续 和 不 可 预 测 何 时 会 产 生 数 据 的 场 合, 它 只 能 单 向 的 向 主 机 发 送 数 据, 所 以 通 常 用 在 键 盘 鼠 标 等 USB 设 备 中 ; 批 量 传 输 则 是 成 批 量 的 传 输 大 量 数 据, 对 时 间 上 的 要 求 并 不 是 太 高, 通 常 用 在 打 印 机 和 扫 描 仪 等 设 备 中, 而 通 常 所 说 的 USB 移 动 磁 盘 也 是 使 用 该 中 传 输 方 式 进 行 文 件 数 据 传 输 ; 同 步 传 输 要 求 数 据 实 时 并 且 连 续, 它 对 数 据 的 传 输 时 间 要 求 很 高, 主 要 应 用 于 对 数 据 实 时 性 要 求 很 高 的 语 音 业 务 传 输 类 型 6.1.1.3 USB 的 传 输 事 务 和 数 据 包 一 次 USB 传 输 是 有 一 个 或 多 个 事 务 组 成 的,USB 主 机 和 设 备 之 间 通 过 这 些 事 务 的 里 三 角 湖 来 进 行 通 信 一 个 事 务 大 多 由 主 机 发 起, 主 机 发 送 令 牌 包 (token) 后, 视 情 况 而 定 的 传 输 数 据 包 (data), 该 数 据 包 的 方 向 大 小 通 常 都 是 在 令 牌 包 中 事 先 说 明 的, 最 后 完 成 数 据 传 输 之 后 要 由 接 受 方 是 不 同 的 情 况 发 送 握 手 信 号 (handshake) 以 上 的 这 些 包 都 是 符 合 USB 传 输 数 据 的 定 义 的, 通 过 包 头 的 PID 来 识 别 他 们 具 体 的 类 型 而 通 过 将 多 个 复 杂 的 事 务 组 成 在 一 起 又 可 以 在 USB 上 建 立 起 新 的 传 输 协 议 或 者 说 是 子 类, 海 量 存 储 类 (Mass Storage Class) 就 是 其 中 的 一 种 6.1.1.4 USB 的 端 点 概 念 从 主 机 发 来 的 数 据 包 根 据 它 们 不 同 的 类 型 发 往 不 同 的 USB 端 点 USB 端 点 是 USB 设 备 特 有 的 一 种 硬 件 的 接 收 发 送 单 元 USB 主 机 与 设 备 之 间 都 是 通 过 端 点 来 传 输 数 据 的 端 点 是 桥 梁 和 纽 带, 不 同 的 端 点 其 传 输 数 据 的 能 力 不 同, 适 于 不 同 的 应 用 场 合 在 Bulk Only Transportation 的 海 量 存 储 实 现 规 范 中, 使 用 了 三 个 端 点, 他 们 分 别 是 控 制 端 点 数 据 输 出 端 点 和 数 据 输 入 端 16

点 控 制 端 点 可 以 用 于 控 制 命 令 的 输 出, 配 置 信 息 的 输 入 和 输 出, 它 通 常 表 示 为 0 端 点, 这 个 端 点 的 流 向 是 双 向 的, 不 会 出 现 STALL 的 状 态, 它 负 责 设 备 的 配 置 交 互, 最 大 信 息 包 64 字 节 输 入 输 出 端 点 负 责 数 据 的 输 入 输 出, 他 们 都 是 单 向 的 只 能 负 责 输 出 或 者 输 入, 最 大 信 息 包 64 字 节 (USB 全 速 设 备 ) 表 3 BOT 端 点 的 属 性 端 点 传 输 类 型 端 点 类 型 传 输 方 向 最 大 传 输 包 0 控 制 输 入 输 入 默 认 控 制 输 出 输 出 64Byte 1 数 据 输 出 普 通 输 出 64Byte 2 数 据 输 入 普 通 输 入 64Byte 6.1.2 USB 设 备 的 枚 举 过 程 枚 举 过 程 定 义 为 : 当 设 备 插 入 系 统 时, 主 机 对 设 备 进 行 配 置, 获 取 USB 设 备 的 各 种 描 述 ( 包 括 设 备 描 述 配 置 描 述 Bulk Only 数 据 接 口 描 述 Bulk-In 端 点 描 述 Bulk-Out 端 点 描 述 和 字 符 描 述, 这 些 描 述 相 互 之 间 的 关 系 如 图 15 所 示 ), 这 也 就 是 USB 设 备 为 什 么 可 以 热 插 拨 的 原 因 USB 设 备 可 分 为 以 下 几 类 : 显 示 器 通 讯 设 备 音 频 设 备 人 机 输 入 海 量 存 储 特 定 类 的 设 备 又 可 划 分 成 子 类 枚 举 使 得 主 机 可 以 精 确 定 位 USB 设 备 类 型, 搜 索 相 应 的 驱 动 程 序 Device Descriptor Configuration Descriptor Configuration Descriptor Interface Descriptor Interface Descriptor Endpoint Descriptor Endpoint Descriptor Endpoint Descriptor 图 15 USB 描 述 的 层 次 结 构 为 了 更 加 清 晰 的 演 示 在 USB 设 备 插 入 主 机 时 的 枚 举 过 程, 这 里 简 要 的 引 用 BUSHOUND 软 件 截 取 的 一 段 U 盘 的 枚 举 示 例, 并 加 以 解 释 Device18 即 代 表 该 U 盘 在 本 地 计 算 机 上 获 得 的 USB 通 信 的 地 址 为 18, 而 后 面 的 跟 的 0 代 表 现 在 他 们 正 在 使 用 0 端 点 进 行 通 信 上 面 一 行 是 计 算 机 给 U 盘 发 送 设 备 描 述 (device description) 请 求 (CTL 代 表 控 制 传 输 方 式 ), 并 规 定 设 备 应 该 返 回 0x12 字 节 的 数 据 然 后 U 盘 回 复 了 自 己 17

的 设 备 描 述, 其 中 带 有 信 息 包 括 USB 版 本 最 大 包 大 小 USB-IF 分 配 的 制 造 商 ID 厂 商 分 配 的 产 品 ID 设 备 发 行 时 的 设 备 号 等 等 主 机 请 求 配 置 描 述 (configuration description), 长 度 要 求 为 9Bytes, 设 备 返 回 的 信 息 包 括 真 正 的 配 置 描 述 长 度 接 口 数 配 置 值 设 备 的 最 大 消 耗 电 流 等 这 次 根 据 上 次 返 回 的 真 正 的 配 置 描 述 长 度 为 0x20 重 新 请 求 32 字 节 的 配 置 描 述, 这 个 配 置 描 述 实 际 上 还 包 括 了 接 口 描 述 (Interface Description) 和 输 入 数 据 端 点 输 出 数 据 端 点 描 述 (Endpoint Description) 这 些 描 述 中 间 就 规 定 了 该 设 备 是 一 个 海 量 存 储 设 备 (Mass Storage Device) 使 用 的 数 据 传 输 的 方 式 ( 在 移 动 存 储 设 备 中 采 用 批 量 传 输 ) 这 段 主 机 开 始 询 问 设 备 的 字 符 串 描 述 (String Description) 信 息, 其 总 往 来 了 好 几 个 回 合, 分 别 在 问 询 交 换 的 语 言 ( 一 般 都 采 用 国 际 通 用 的 英 文 ) 设 备 的 序 列 号 5B8305000EE( 由 Unicode 码 的 形 式 给 出 ) 从 右 边 的 信 息 可 以 看 到 此 时 计 算 机 大 概 已 经 知 道 这 个 具 体 是 什 么 设 备, 用 什 么 驱 动 来 进 行 交 互 了, 所 以 开 始 对 设 备 进 行 配 置 : 设 置 配 置 (Set Configuration) 设 置 接 口 (Set Interface) 获 取 最 大 逻 辑 单 元 数 (Get Max LUN) 至 此 通 过 0 端 点 所 传 输 的 控 制 的 控 制 过 程, 即 枚 举 过 程, 都 已 经 结 束 了 这 里 只 是 简 要 介 绍 了 枚 举 过 程 中 设 备 和 计 算 机 之 间 到 底 发 生 了 什 么 事 情, 具 体 的 这 些 描 述 的 严 格 的 格 式 可 以 参 见 附 录 和 相 关 网 站 [1][4] 6.1.3 CBW 命 令 包 格 式 在 完 成 U 盘 的 枚 举 过 程 之 后, 识 别 出 为 Bulk-Only 的 Mass Storage 设 备, 然 后 即 进 入 Bulk-Only 传 输 方 式 在 此 方 式 下, 计 算 机 与 U 盘 之 间 所 有 数 据 均 通 过 Bulk-In 和 Bulk-Out 来 进 行 传 输, 不 再 通 过 控 制 端 点 (0 端 点 ) 传 输 任 何 数 据 在 这 种 传 输 方 式 下, 有 三 种 类 型 的 数 据 在 USB 和 设 备 之 间 传 送,CBW CSW 和 普 通 数 据 CBW(Command Block Wrapper) 是 从 USB Host 发 送 到 设 备 的 命 令, 命 令 格 式 遵 从 接 口 中 的 binterfacesubclass 所 指 定 的 命 令 块, 这 里 为 SCSI 传 输 命 令 集 USB 设 备 需 要 将 SCSI 命 令 从 18

CBW 中 提 取 出 来, 执 行 相 应 的 命 令, 完 成 以 后, 向 Host 发 出 反 映 当 前 命 令 执 行 状 态 的 CSW(Command Status Wrapper),Host 根 据 CSW 来 决 定 是 否 继 续 发 送 下 一 个 CBW 或 是 数 据 Host 要 求 USB 设 备 执 行 的 命 令 可 能 为 发 送 数 据, 则 此 时 需 要 将 特 定 数 据 传 送 出 去, 完 毕 后 发 出 CSW, 以 使 Host 进 行 下 一 步 的 操 作 USB 设 备 所 执 行 的 操 作 可 用 图 16 描 述 Ready Command Transport (CBW) Data-Out (from host) Data-In (to host) Status Transport (CSW) 图 16 命 令 数 据 状 态 流 程 图 在 流 程 图 中 包 括 了 三 种 形 式 的 数 据 包,USB 的 设 备 层 统 一 将 他 们 看 成 数 据, 不 加 区 分 的 进 行 传 输, 而 在 功 能 层 上 才 开 始 区 分 这 三 种 不 同 形 式 不 同 功 能 的 数 据 包 表 4 CBW 格 式 [9][4] 字 节 值 0-3 0x43425355 4-7 dcbtag 8-11 要 传 输 的 数 据 长 度 12 bmcbwflags 13 bcbwlun 14 命 令 字 的 长 度 15-30 CBWCB 如 表 4 CBW 命 令 包 格 式, 其 中 0x43425355 表 示 当 前 发 送 的 是 一 个 CBW;dCBWTag 的 内 容 需 要 原 样 作 为 dcswtag 再 发 送 给 Host;bmCBWFlags 反 映 数 据 传 输 方 向 ;bcbwlun 为 零 ; bcbwcblength 为 本 次 命 令 字 的 长 度 ;CBWCB 即 为 真 正 的 传 输 命 令 集 的 命 令 得 到 一 个 CBW 后, 解 释 出 CBWCB 中 所 代 表 的 命 令, 并 向 USB Hosting 发 送 CSW 来 反 映 命 令 执 行 的 状 态 dcswsignature 的 内 容 为 0x53425355,dCSWTag 即 为 dcbwtag 的 内 容,dCSWDataResidue 还 需 要 传 送 的 数 据, 此 数 据 根 据 dcbwdatatransferlength 减 去 本 次 已 经 传 送 的 数 据 得 到 Host 端 根 据 此 值 决 定 下 一 次 CBW 的 内 容, 如 果 没 有 完 成 则 继 续 ; 如 果 命 令 正 确 执 行,bCSWStatus 返 回 0 即 可 按 这 个 规 则 组 装 好 CSW 后, 通 过 Bulk-In 端 点 将 其 发 出 即 可 [19] 6.1.4 SCSI 命 令 格 式 USB 是 随 机 存 取 基 于 扇 区 存 储 的 设 备, 接 口 遵 循 SCSI-2 标 准 的 直 接 存 取 存 储 设 备 协 议 在 6.1.3 节 中 介 绍 的 BOT(Bulk-Only Transportation) 协 议 的 CBW 数 据 包 中 有 一 个 长 度 为 6 到 12 不 等 的 字 段 CBWCB, 其 传 输 的 就 是 SCSI 命 令 19

SCSI 命 令 集 是 一 套 能 够 完 成 对 一 般 外 接 存 储 系 统 设 备 的 存 取 配 置 检 查 等 任 务 的 完 备 指 令 集 SCSI 拥 有 的 这 套 指 令 集 有 很 多 指 令, 不 同 的 版 本 分 别 用 在 光 驱 硬 盘 软 驱 等 设 备 的 控 制 中, 表 5 列 出 的 7 条 指 令 已 经 可 以 完 全 实 现 USB 存 储 设 备 的 操 作 了, 这 一 特 性 大 大 减 小 了 设 备 设 计 的 难 度 与 复 杂 度 表 5 MSC 基 本 SCSI 命 令 集 命 令 描 述 INQUIRY 查 询 设 备 的 详 细 信 息, 如 生 产 厂 家 序 列 号 等 PREVENT-ALLOW MEDIUM REMOVAL READ CAPACITY(10) READ(10) REQUEST SENSE TEST UNIT READY WRITE(10) 禁 止 或 允 许 取 走 U 盘 读 取 Flash 容 量, 扇 区 大 小 以 及 总 扇 区 数 输 入 要 读 取 的 数 据, 从 Flash 读 出 请 求 判 断, 用 于 发 生 错 误 时 系 统 自 我 纠 正 测 试 单 元 准 备, 电 脑 通 过 此 命 令 保 持 U 盘 一 直 处 于 激 活 状 态 提 供 Flash 地 址, 向 Flash 写 数 据 在 这 7 条 指 令 中,READ10 和 WRITE10 是 两 个 十 分 重 要 的 指 令, 文 件 的 读 写 等 各 种 对 磁 盘 的 操 作 基 本 上 全 部 由 这 两 条 指 令 来 完 成 的 故 在 此 要 简 要 的 介 绍 一 下 READ10 命 令 的 详 细 格 式, 因 为 后 面 的 内 容 会 讨 论 到 这 两 个 命 令 表 6 READ10 Command 在 该 命 令 中 0 字 节 0x28 是 READ10 的 编 码,1 6 9 三 个 字 节 是 用 来 对 数 据 传 输 做 一 些 具 体 的 控 制, 但 是 一 般 不 会 使 用 2~5 这 4 个 字 节 作 为 一 个 32bit 长 整 型 数 据 指 定 了 逻 辑 块 地 址, 它 的 以 扇 区 为 单 位, 所 以 在 寻 址 能 力 上,USB 的 存 储 器 可 以 支 持 大 到 2TG 的 容 量 空 间 ( 扇 区 的 大 小 规 定 为 512Byte) 7~8 的 2 个 字 节 作 为 一 个 16bit 数 据 指 定 传 输 数 据 的 大 小, 同 样 这 个 值 的 单 位 也 是 扇 区, 虽 然 该 值 最 大 可 以 达 到 255, 但 是 在 现 实 应 用 中, 通 常 不 会 大 于 0x0008, 即 最 多 一 次 传 输 4KB 的 数 据 表 7 WRITE10 Command 如 果 要 实 现 WRITE10 实 际 上 在 READ10 的 基 础 上 只 要 将 传 输 方 向 加 以 改 变, 而 上 述 的 逻 辑 20

块 地 址 和 传 输 长 度 的 定 义 仍 然 是 我 们 最 关 心 的 两 个 参 数 通 过 分 析, 可 以 看 到 在 操 作 系 统 对 一 个 磁 盘 做 读 取 操 作 时, 底 层 硬 件 上 看 到 的 仅 仅 是 系 统 所 读 数 据 的 地 址 和 大 小, 而 对 数 据 的 内 容 是 什 么 不 加 以 关 心 即 使 是 一 般 的 删 除 操 作, 操 作 系 统 所 做 的 工 作 也 就 是 向 要 被 删 除 数 据 的 区 域 写 入 一 串 零 而 已 这 就 给 后 面 文 件 系 统 中 目 录 数 据 的 识 别 带 来 了 难 度 这 部 分 的 内 容 在 第 八 章 有 详 细 的 介 绍 最 后 给 出 BOT 传 输 开 始 阶 段 的 示 例, 紧 接 在 USB 枚 举 后 面 数 据 传 输 的 过 程 表 8 CBW 数 据 包 传 输 示 例 上 面 三 个 框 圈 住 的 分 别 执 行 了 INQUIRY READ CAPACITY10 和 READ10: INQUIRY 命 令 READ CAPACITY10 READ10 返 回 Kingston DataTraveler 2.0PMAP; 返 回 磁 盘 的 大 小 :0x1DCFFF 个 扇 区, 扇 区 大 小 :0x0200Byte 读 取 逻 辑 地 址 为 0, 长 度 为 1 个 扇 区 的 数 据 ( 数 据 太 多, 图 中 仅 显 示 开 头 的 部 分 数 据 ) 之 后, 操 作 系 统 会 逐 个 读 取 扇 区, 包 括 了 MBR FAT1 FAT2 和 根 文 件 目 录 6.2 ARM9 中 USB 的 具 体 实 现 本 小 节 详 细 介 绍 了 系 统 如 何 实 现 USB 协 议, 包 括 了 主 机 驱 动 和 设 备 驱 动 两 个 部 分, 这 两 个 部 分 有 着 很 大 的 工 作 量, 代 码 的 实 现 工 作 也 很 大 程 度 上 依 赖 于 开 源 项 目 芯 片 制 造 商 ATMEL 公 司 在 硬 件 的 软 件 化 包 装 上 也 给 编 程 实 现 带 来 了 很 大 的 便 利 他 所 提 供 的 at9lib_softpack_1.5 很 好 的 将 对 硬 件 的 操 作 封 装 成 函 数 的 调 用, 在 开 发 文 档 给 予 了 很 详 细 的 说 明, 在 一 定 程 度 简 化 开 发 过 程, 提 高 嵌 入 式 应 用 程 序 的 可 重 用 性 如 图 17 所 示, 在 现 有 的 基 础 上 进 行 开 发, 只 有 在 保 证 主 机 程 序 和 设 备 驱 动 可 以 分 别 正 确 的 运 行 才 有 成 功 的 将 二 者 结 合 起 来 的 可 能 21

U-boot USBHost Driver ATMEL USBDDriver Interface Modification at91lib_softpack_1.5 AT91SAM9260&Hardware 图 17 软 硬 件 层 次 架 构 图 6.2.1 MSDDriver 的 工 作 原 理 本 模 块 原 型 来 自 于 ATMEL 公 司 网 站, 作 为 该 款 芯 片 的 一 个 示 例 程 序, 它 可 以 将 核 心 板 上 的 64M 内 存 开 发 出 来, 做 成 一 个 大 小 不 超 过 60M 的 移 动 磁 盘 当 然 作 为 一 个 磁 盘, 必 须 以 非 易 失 性 存 储 介 质 存 储 数 据, 而 这 里 使 用 SDRAM 只 是 为 了 一 个 演 示 效 果 但 正 是 因 为 这 里 内 存 的 时 候, 可 以 考 虑 在 连 接 主 从 驱 动 时, 将 内 存 作 为 一 个 简 单 的 cache 来 使 用, 以 减 少 真 正 从 U 盘 中 读 取 数 据 的 机 会 本 部 分 要 做 的 内 容 即 将 以 上 所 述 的 原 理 予 以 实 现, 所 以 同 样 分 成 两 个 部 分 考 虑, 分 别 是 枚 举 和 数 据 传 输 1 USB 设 备 驱 动 的 枚 举 过 程 当 设 备 插 入 计 算 机 的 一 瞬 间, 便 需 要 进 入 这 个 状 态 所 以 应 用 程 序 启 动 之 后 的 操 作 步 骤 如 下 : (1). 对 USB 进 行 初 始 化 ; (2). 拉 高 D+ 数 据 线, 通 知 计 算 机 有 USB 设 备 接 入, 可 以 开 始 枚 举 ; (3). 等 待 SET CONFIGURATION 请 求, 该 请 求 标 志 着 枚 举 的 成 功, 设 备 和 计 算 机 之 间 的 交 互 可 以 进 入 下 一 个 阶 段 第 3 个 等 待 的 步 骤 是 由 While 循 环 完 成, 不 断 的 检 查 是 否 已 经 得 到 SET CONFIGURATION 请 求 在 While 循 环 过 程 中, 通 过 中 断 处 理 USB 总 线 上 的 其 他 控 制 请 求 2 MSDDriver 状 态 机 实 现 枚 举 任 务 完 成 之 后, 对 USB 来 说 系 统 便 进 入 了 纯 数 据 的 传 输 阶 段, 但 是 这 些 数 据 又 遵 循 了 MSD 协 议, 满 足 CBW CSW 等 格 式 的 要 求 所 以 在 实 现 普 通 U 盘 功 能 时 需 要 借 助 状 态 机 实 现 图 16 所 示 的 命 令 数 据 和 状 态 的 流 程 图 如 图 18 所 示, 将 状 态 改 变 及 相 关 操 作 描 述 如 下 : (1). 初 始 化 后 的 默 认 状 态 为 READ_CBW, 此 状 态 一 直 要 保 持 到 USB 总 线 上 出 现 数 据 传 输 ; (2). 在 WAIT_CBW 状 态, 顾 名 思 义 为 等 待 CBW 传 输 完 毕 后 转 入 下 一 状 态 ; (3). 在 PROCESS_CBW 状 态, 需 要 检 查 接 收 到 的 CBW 数 据 是 否 满 足 上 文 中 CBW 的 标 准, 即 以 0x43425355 开 头 长 度 为 31 字 节 然 后 进 一 步 检 查 SCSI 命 令 的 合 法 性, 最 后 根 22

据 具 体 的 命 令 调 用 不 同 的 函 数 执 行 该 状 态 一 直 要 保 持 到 CBW 请 求 的 数 据 发 送 完 毕 或 接 受 完 毕 才 可 以 转 到 SEND_CSW 图 18 MSDDriver 的 数 据 传 输 阶 段 状 态 图 (4). SEND_CSW, 在 此 状 态 检 查 PROCESS_CBW 的 执 行 结 果, 根 据 执 行 情 况 选 择 相 应 的 状 态 发 送 给 主 机 ; (5). WAIT_CSW 等 待 CSW 状 态 传 输 完 毕, 转 到 下 一 个 会 话 6.2.2 USBHostDriver 的 工 作 原 理 ARM 芯 片 中 的 USB 主 口 服 从 OHCI(Open Host Control Interface) 的 标 准,OHCI 主 要 面 对 的 对 象 为 USB2.0 的 全 速 设 备 和 低 速 设 备 用 于 USB 的 OHCI 规 范 是 USB 主 机 控 制 器 的 寄 存 器 描 述, 该 标 准 的 使 用 使 得 硬 件 制 造 商 在 满 足 USB 协 议 的 同 时, 面 对 用 户 也 有 了 一 个 统 一 的 通 过 寄 存 器 描 述 的 接 口, 只 要 改 动 OHCI 驱 动 寄 存 器 的 偏 移 地 址 便 可 以 使 USB 主 机 驱 动 成 功 的 移 值 OHCI.C 提 供 了 非 常 方 便 的 外 部 接 口 以 供 调 用 USB 的 主 机 驱 动 分 成 三 个 层 次, 由 上 到 下 分 别 为 :Usb_storage.c Usb.c Usb.ohci.c 其 中 Usb.c 提 供 了 两 个 非 常 重 要 的 接 口 函 数 : int submit_bulk_msg(*dev, pipe, *buffer, transfer_len); int submit_control_msg(*dev, pipe, *buffer, transfer_len, devrequest *setup); 它 们 分 别 实 现 批 量 传 输 和 控 制 传 输, 有 了 这 两 个 关 键 的 函 数 才 使 得 Usb_storage.c 中 各 种 复 杂 的 功 能 得 以 实 现 主 机 对 U 盘 的 访 问 和 U 盘 响 应 主 机 的 步 骤 完 全 一 致, 只 不 过 一 个 处 于 主 动 的 地 位 而 另 一 个 被 动 首 先 同 样 是 对 USB 进 行 初 始 化, 然 后 扫 描 设 备, 这 里 的 USB 主 控 器 默 认 是 一 个 Hub, 所 有 的 USB 设 备 如 果 连 接 到 USB 接 口, 那 么 它 们 以 树 形 的 方 式 结 合 起 来 驱 动 中 含 有 大 量 的 结 构 体 定 义, 以 对 设 备 的 属 性 中 包 含 的 各 种 参 数 进 行 存 储 6.3 文 件 透 明 传 输 的 实 现 ( 主 从 驱 动 互 联 ) 在 简 要 的 介 绍 完 主 机 驱 动 和 从 机 驱 动 的 实 现, 需 要 对 如 何 将 两 者 进 行 合 并, 在 同 一 个 系 统 中 系 统 工 作, 对 USB 数 据 流 进 行 分 析 转 发 等 工 作 做 一 些 详 细 的 介 绍 因 为 不 管 是 主 设 备 还 是 从 设 备, 整 个 通 信 过 程 必 须 分 为 两 个 部 分, 首 先 是 枚 举, 然 后 是 数 据 传 输, 所 以 在 联 合 主 从 驱 23

动 时 也 必 须 对 这 两 部 分 分 别 给 予 考 虑 1 枚 举 阶 段 枚 举 阶 段 主 要 是 对 设 备 的 各 种 属 性 参 数 的 问 询, 此 过 程 因 为 实 时 性 不 是 很 强, 故 可 以 分 开 进 行, 即 先 对 U 盘 进 行 枚 举, 将 枚 举 完 成 所 获 得 的 结 果 赋 给 加 解 密 设 备 的 USB 从 机 驱 动 的 相 关 变 量, 使 得 不 论 是 什 么 U 盘, 通 过 加 解 密 设 备 之 后 在 计 算 机 上 看 到 的 能 和 直 接 连 接 计 算 机 的 效 果 相 同 图 19 主 机 驱 动 中 设 备 的 信 息 描 述 结 构 体 定 义 如 图 19 所 示, 为 加 解 密 设 备 对 U 盘 完 成 枚 举 后 能 够 得 到 的 设 备 信 息, 这 些 信 息 就 是 上 文 中 所 说 必 须 转 移 到 USB 从 机 驱 动 中 的, 使 计 算 机 同 样 能 看 到 加 解 密 设 备 上 的 USB 存 储 器 的 参 数 2 数 据 传 输 阶 段 如 表 5 所 示, 其 中 的 两 个 命 令 READ10 WRITE10 负 责 了 全 部 的 数 据 传 输 的 任 务, 所 以 在 数 据 传 输 阶 段 要 做 的 工 作 便 将 是 这 些 命 令 传 递 到 USB 存 储 器 上 USBDDrive 的 状 态 机 在 读 到 READ10 命 令 时 会 调 用 SBC_Read10 函 数, 在 其 处 理 READ10 时 也 用 到 了 状 态 机 的 形 式, 因 此 在 对 SBC_Read10 改 写 时, 最 大 可 能 的 遵 循 了 原 来 的 结 构, 保 证 最 小 的 改 动, 它 的 实 现 如 图 20 所 示 : 图 20 透 明 传 输 READ10 状 态 图 图 21 透 明 传 输 WRITE10 状 态 图 (1). READ: 调 用 submit_bulk_msg 函 数, 想 U 盘 下 达 读 取 计 算 机 要 求 的 数 据 命 令 因 为 24

USB 主 机 驱 动 的 函 数 会 阻 塞 至 传 输 完 成, 所 以 在 完 成 传 输 之 后, 程 序 会 立 即 判 断 该 数 据 是 否 需 要 加 密, 如 果 需 要 执 行 加 密 子 程 序 (2). WAIT_READ: 等 待 U 盘 返 回 数 据 传 输 完 成, 实 际 上 这 个 状 态 一 跳 而 过, 因 为 上 一 个 状 态 READ 调 用 的 读 取 函 数 一 直 会 阻 塞 到 数 据 传 输 结 束 (3). WRITE: 将 内 存 中 的 数 据 发 送 给 计 算 机, 该 过 程 并 不 阻 塞 调 用 完 相 关 函 数 立 即 转 到 WAIT_WRITE 状 态 (4). WAIT_WRITE: 等 待 USB 数 据 传 输 完 毕 (5). NEXT_BLOCK: 因 为 如 果 一 次 性 计 算 机 要 求 的 数 据 量 太 大, 而 超 过 了 USB 的 一 次 性 传 输 的 能 力, 则 数 据 会 分 为 多 个 BLOCK 分 别 进 行 传 输 通 常 情 况 该 状 态 不 会 使 用 到, 而 是 由 上 一 状 态 直 接 开 始 下 一 个 READ10 的 命 令 周 期 WRITE10 命 令 的 处 理 过 程 与 READ10 类 似, 此 不 再 赘 述, 状 态 如 图 21 所 示 25

第 七 章 内 存 的 分 配 映 射 及 其 管 理 对 一 个 存 储 设 备 来 说, 传 输 速 率 是 个 至 关 重 要 的 性 能 指 标, 提 高 数 据 传 输 的 速 率 的 手 段 通 常 有 两 个 : 一 是 通 过 不 断 的 优 化 程 序 的 方 式 来 提 高 速 度, 这 种 方 法 在 程 序 架 构 和 算 法 确 定 之 后 基 本 上 没 有 多 少 提 升 的 空 间 ; 二 是 通 过 减 少 对 存 储 器 的 访 问 的 机 会 本 章 要 讨 论 的 问 题 就 是 怎 样 通 过 开 辟 内 存 的 方 式 来 在 现 有 的 基 础 上 提 高 数 据 传 输 的 速 度 众 所 周 之, 在 计 算 机 系 统 中 CPU 速 度 最 快, 而 计 算 机 的 整 体 性 能 并 不 仅 仅 取 决 于 CPU 的 处 理 能 力, 还 在 于 访 问 存 储 器 的 平 均 时 间 如 果 一 个 快 速 的 CPU 配 上 了 一 个 很 慢 的 硬 盘, 那 么 大 量 的 可 以 用 在 计 算 上 的 时 间 都 在 CPU 等 待 硬 盘 相 应 数 据 中 度 过 了 同 样 的 对 于 嵌 入 式 系 统 而 言, 在 这 里 的 传 输 速 度 很 大 程 度 的 取 决 于 对 U 盘 的 访 问 次 数 例 如, 计 算 机 要 从 U 盘 中 读 取 数 据, 加 解 密 设 备 收 到 命 令 之 后 要 对 U 盘 进 行 访 问, 从 U 盘 那 里 先 取 得 这 串 数 据, 然 后 再 转 发 给 计 算 机 在 这 之 间 如 果 不 算 控 制 和 命 令 解 析 的 处 理 时 间, 整 体 的 传 输 速 度 是 计 算 机 直 接 访 问 U 盘 的 时 间 还 要 加 上 命 令 从 计 算 机 到 加 解 密 设 备 和 数 据 从 加 解 密 设 备 传 回 计 算 机 的 两 个 时 间 因 此 真 实 的 传 输 速 率 大 概 会 成 为 直 接 传 输 速 度 的 一 半 左 右 但 是 如 果 计 算 机 下 次 再 次 对 该 数 据 进 行 访 问, 那 么 从 U 盘 重 新 读 取 该 数 据 还 是 直 接 从 内 存 中 获 取 上 次 驻 留 在 内 存 中 的 那 个 部 分 呢? 显 然, 如 果 从 内 存 中 直 接 读 取, 速 度 会 快 很 多 与 直 接 从 U 盘 读 取 相 比, 采 用 内 存 的 方 式 不 仅 省 去 读 Flash 的 时 间, 而 且 将 读 Flash 的 时 间 变 成 了 读 SDRAM 的 时 间, 从 理 论 上 来 讲, 执 行 速 度 甚 至 会 快 于 直 接 读 取 U 盘 基 于 这 样 的 思 想, 怎 样 在 核 心 板 上 64M 内 存 空 间 中 合 适 的 地 方 开 辟 合 适 大 小 的 内 存 以 供 中 转 ; 以 什 么 样 的 方 法 将 这 个 内 存 映 射 到 各 种 不 同 的 USB 存 储 设 备 ; 在 什 么 时 候 将 该 内 存 中 的 数 据 写 入 到 U 盘 中 等 等 都 成 为 本 章 要 解 决 的 问 题 7.1 内 存 的 分 配 在 64M 的 内 存 中 存 放 的 有 当 前 运 行 的 程 序 代 码 各 种 形 式 的 变 量 变 量 的 初 始 化 值 和 堆 栈 那 么 这 四 个 元 素 到 底 分 布 在 内 存 的 什 么 部 位 呢? 首 先 可 以 肯 定 的 是 在 连 接 完 之 后, 这 些 内 存 空 间 的 使 用 是 已 经 可 以 确 定 的 只 有 弄 清 楚 他 们 的 位 置, 才 能 确 定 哪 里 可 以 腾 出 多 少 空 间 供 数 据 缓 存 使 用 表 9 程 序 资 源 消 耗 表 数 据 类 型 起 始 地 址 末 地 址 大 小.text 0x2000 0000 0x2001 05d3 0x105d4.rodata 0x2001 05d4 0x2001 597f 0x53ac.data 0x2001 5980 0x2001 e3ff 0x8a80.bss 0x2001 e400 0x2004 b7f7 0x2d3f8 COMMON 0x2004 b7f8 0x2025 5104 0x20990d stack 0x2400 0000 [27] 因 此, 必 须 对 工 程 文 件 夹 下 每 次 Make 都 会 生 成 的 toto.map 文 件 进 行 分 析, 得 到 的 结 果 如 26

表 9 所 示 表 中 地 址 都 是 从 片 外 的 16M 内 存 SDRAM 的 首 地 址 0x2000 0000 开 始 的 其 中.text 内 容 表 示 为 程 序 的 代 码 段, 共 65K 左 右 ;.rodata (read only data) 为 程 序 中 所 申 明 的 常 量, 大 小 1K 左 右 ;.data 段 为 所 有 的 带 有 初 值 的 局 部 变 量, 共 2K 左 右 ;.bss 段 用 于 存 放 没 有 初 始 化 值 的 静 态 变 量, 该 部 分 在 程 序 加 载 时 会 自 动 填 零, 共 180K 左 右 ;COMMON 段 存 放 全 局 变 量, 和 一 些 大 数 组, 大 小 约 为 2M 所 以 从 SDRAM 的 0 地 址 开 始 的 大 2M 多 的 空 间 需 要 腾 出 来 作 为 程 序 的 使 用 范 围, 具 体 的 范 围 为 :0x2000 0000~0x2025 5104. 在 程 序 运 行 中 所 遇 要 的 不 仅 仅 是 代 码 和 各 种 变 量, 还 包 括 调 用 函 数 时 所 遇 要 用 到 的 堆 栈, 堆 栈 的 位 置 放 在 SDRAM 的 最 后, 与 其 他 段 不 同 的 是, 它 的 地 址 的 增 长 方 向 是 相 反 的, 从 高 地 址 一 直 到 低 地 址 图 22 内 存 分 配 示 意 图 综 上 所 述, 考 虑 以 后 程 序 的 改 动 和 各 种 可 能 出 现 的 变 更, 如 图 22 所 示 将 前 面 的 4M 和 最 后 28M 空 间 腾 出 来, 剩 下 的 32M 内 存 作 为 数 据 的 中 转 存 储 地 使 用 7.2 内 存 的 映 射 及 管 理 由 于 系 统 对 文 件 传 输 的 速 度 影 响 越 小 越 好, 所 以 在 内 存 管 理 上 采 用 最 简 单 的 机 制, 即 类 似 于 Cache 地 址 映 射 中 的 Direct mapping 的 概 念 [25] 主 存 储 器 被 分 为 一 页 一 页 的, 每 页 的 大 小 与 Cache 的 大 小 相 同, 具 体 的 实 现 描 述 如 下 : 32M 内 存 在 以 512 大 小 的 扇 区 为 单 位 寻 址 时 的 地 址 空 间 可 以 使 用 16bit 表 示, 而 在 USB 传 输 中 的 SCSI 命 令 中 的 地 址 空 间 为 32bit, 所 以 对 每 一 个 内 存 中 的 扇 区 都 必 须 使 用 一 个 额 外 的 16bit 的 变 量 存 储 该 扇 区 的 原 始 地 址 的 高 16 位, 这 样 才 能 准 确 无 误 的 将 扇 区 地 址 和 USB 存 储 器 的 地 址 一 一 对 应 因 此 开 辟 数 组 table 记 录 各 个 扇 区 的 高 16 位 地 址,table 的 下 标 使 用 扇 区 在 内 存 中 的 偏 移 地 址 表 示 初 始 化 时 一 定 要 将 其 全 部 置 为 0xffff, 以 区 分 当 前 该 扇 区 还 没 有 和 存 储 器 映 射 过 27

图 23 table 数 据 申 明 的 代 码 段 假 设 当 前 有 数 据 要 存 入 内 存, 它 的 存 储 器 地 址 为 usb_addr, 所 以 与 之 对 应 的 内 存 映 射 地 址 应 该 为 : ram_addr=(usb_addr & 0xffff) + SDRAM_OFFSET+CODE_SIZE 但 是 也 就 产 生 了 一 个 问 题 :USB 传 输 中 可 以 一 次 传 输 128 个 扇 区 (64KB), 那 么 如 果 这 段 数 据 的 首 地 址 映 射 到 32M 的 末 尾, 而 首 地 址 则 会 对 应 到 32M 的 开 头, 这 样 就 给 底 层 调 用 USB 数 据 的 接 受 函 数 造 成 了 一 定 的 麻 烦, 因 为 一 旦 对 USB 模 块 的 底 层 代 码 进 行 改 动 就 意 味 着 程 序 的 通 用 性 变 得 很 差, 一 旦 换 了 硬 件 平 台 就 很 难 再 对 系 统 进 行 移 植 因 此 在 32M 内 存 后 面 再 分 配 64K 的 缓 冲 区 域, 以 提 高 兼 容 性 此 外, 内 存 是 为 明 文 准 备 的 当 计 算 机 读 数 据 时, 可 以 如 下 进 行 操 作 : (1). 首 先 从 磁 盘 中 将 密 文 读 入 内 存 ; (2). 然 后 在 当 前 内 存 地 址 解 密 数 据 ; (3). 解 密 之 后 再 将 数 据 发 送 给 计 算 机 这 样 可 以 保 证 内 存 中 存 储 的 仍 然 为 明 文, 但 是 当 计 算 机 写 数 据 时 问 题 便 出 现 了 : (1). 首 先 将 明 文 写 到 内 存 中 ; (2). 然 后 在 当 前 内 存 地 址 加 密 数 据 ; (3). 将 加 密 后 的 数 据 写 到 磁 盘 中 从 上 面 的 步 骤 看, 似 乎 没 有 错, 但 是 所 有 的 操 作 结 束 之 后, 内 存 中 存 储 的 竟 然 是 密 文, 这 样 就 将 内 存 中 的 数 据 搞 混 了, 也 没 有 遵 循 内 存 是 为 明 文 准 备 的 这 条 规 定, 下 次 读 取 该 数 据 时 便 会 出 现 错 误 因 此 在 上 面 开 辟 的 64K 用 于 跨 区 的 内 存 后 再 开 辟 一 块 用 于 加 密 数 据 的 64K 内 存 来 解 决 这 个 问 题, 从 而 将 计 算 机 写 数 据 的 步 骤 更 改 为 : (1). 首 先 将 明 文 写 到 内 存 中 ; (2). 然 后 将 该 数 据 复 制 到 加 密 专 用 的 地 址 ; (3). 在 当 前 内 存 地 址 加 密 数 据 ; (4). 将 加 密 后 的 数 据 写 到 次 盘 中 多 了 一 个 copy 的 步 骤 为 了 降 低 实 际 应 用 中 多 次 拷 贝 数 据 给 系 统 带 来 的 时 间 开 销, 真 正 使 用 的 内 存 复 制 函 数 并 不 是 C 标 准 库 的 memcpy 函 数, 而 是 快 速 的 fast_memcpy 函 数 : 28

该 fast_memcpy 利 用 了 32 位 处 理 器 每 次 处 理 32 位 数 的 特 点, 每 次 复 制 的 数 据 大 小 为 4-byte 而 非 C 标 准 库 中 提 供 的 1 个 字 节 的 长 度 从 理 论 上 可 以 将 同 样 长 度 的 数 据 复 制 时 间 变 为 原 来 的 1/4 但 是 此 处 fast_memcpy 的 时 候 有 一 个 限 制 :src 和 dest 两 个 指 针 的 值 必 须 满 足 4 的 倍 数, 因 为 在 AT91SAM9260 硬 件 中 规 定 4-byte 寻 址 必 须 向 4-byte 对 齐, 否 则 会 出 现 读 到 的 数 据 不 是 想 要 的 数 据 的 结 果 例 如 : 一 个 4-byte 的 长 整 型 的 指 针 p 的 位 置 在 A 处, 那 么 *p 的 值 并 不 是 所 想 像 的 0x15D13F49, 通 过 实 验 可 以 发 现 实 际 上 *p 的 值 却 是 0x53033F49, 这 就 是 因 为 p 的 地 址 没 有 对 齐 4-byte; 而 如 果 p 指 向 的 是 B, 那 么 *p 得 到 的 值 理 所 当 然 为 0x3BB815D1 不 过 幸 运 的 是, 在 USB 进 行 数 据 读 取 时 所 有 的 数 据 都 是 以 512-byte 为 单 位 的, 即 数 据 的 地 址 为 512 的 倍 数, 显 然 更 是 4 的 倍 数 了 29

第 八 章 文 件 目 录 簇 的 识 别 目 前 在 大 容 量 U 盘 中 普 遍 采 用 的 文 件 系 统 格 式 为 FAT32, 而 FAT16 及 FAT12 也 因 为 U 盘 容 量 的 不 断 扩 展 早 早 的 退 出 了 历 史 的 舞 台 因 此 本 文 选 取 FAT32 作 为 研 究 对 象, 实 现 该 文 件 系 统 下 的 文 件 级 别 的 数 据 加 密 但 是 就 USB 的 存 储 设 备 而 言 并 不 存 在 文 件 系 统 的 概 念, 它 所 看 到 的 只 能 是 地 位 相 同 的 RAW DATA, 因 此 这 也 给 基 于 USB 的 文 件 级 别 的 加 密 带 来 了 挑 战 8.1 FAT32 文 件 系 统 简 介 [5][8] 对 于 FAT32 文 件 系 统, 硬 盘 上 的 数 据 按 照 不 同 的 特 点 和 作 用 大 致 可 分 为 5 部 分 :MBR 区 ( 主 引 导 记 录 区 ) DBR 区 (DOS 引 导 记 录 区 ) FAT 区 ( 文 件 分 配 表 区 ) 和 DATA 区 ( 数 据 区 ) 其 中, MBR 区 由 分 区 软 件 创 建, 而 DBR 区 FAT 区 和 DATA 区 由 高 级 格 式 化 程 序 创 建 这 4 个 区 域 共 同 作 用 才 有 利 于 整 个 硬 盘 的 管 理 图 24 FAT 文 件 系 统 结 构 示 意 图 8.1.1 主 引 导 记 录 区 (MBR) MBR 在 磁 盘 中 的 地 位 是 首 要 的, 它 的 缺 失 对 磁 盘 中 存 储 的 数 据 而 言 可 能 是 灾 难 性 的 一 个 MBR 的 大 小 为 512 字 节, 以 0x55AA 作 为 结 束 的 标 志, 这 一 标 志 通 常 也 被 用 于 判 定 该 磁 盘 所 使 用 的 是 否 是 DOS 文 件 系 统 MBR 中 存 储 的 主 要 就 是 启 动 代 码 和 磁 盘 的 分 区 表 在 计 算 机 启 动 时 BIOS 会 选 择 从 哪 个 盘 启 动, 一 但 BIOS 将 控 制 权 交 给 磁 盘 之 后, 第 一 件 事 就 是 执 行 位 于 磁 盘 0 地 址 的 前 446 个 字 节 的 启 动 代 码, 这 段 代 码 对 本 问 的 研 究 没 有 任 何 影 响, 故 不 做 详 细 的 介 绍 然 后 从 偏 移 为 0x1BE 的 地 址 开 始 就 是 16 个 字 节 的 分 区 表, 分 区 表 共 有 四 个 共 64 字 节 在 Windows 操 作 系 统 下 的 可 移 动 磁 盘 是 无 法 分 区 的, 即 使 通 过 强 行 的 方 法 进 行 分 区,Windows 也 只 对 第 一 个 分 区 做 识 别, 后 面 的 分 区 无 法 访 问 表 10 MBR 分 区 表 表 10 所 示 便 是 一 块 U 盘 的 主 分 区 表, 在 这 里 规 定 了 磁 盘 的 开 始 和 结 束 的 磁 头 扇 区 和 柱 30

面, 这 些 参 数 实 际 上 没 有 真 实 的 作 用, 只 是 习 惯 上 沿 用 以 前 盘 片 式 磁 盘 的 习 惯 有 用 的 参 数 有 :Partition type indicator( 指 明 了 该 分 区 中 使 用 的 操 作 系 统 ), 本 文 简 单 的 检 查 是 否 为 我 们 所 需 要 的 FAT32 的 代 码 0x0B;Sectors preceding partition 1( 指 明 真 正 分 区 的 DBR 开 始 的 逻 辑 块 地 址 ), 本 文 通 过 该 数 值 找 到 DBR;Sectors in partition 1( 指 明 该 分 区 的 大 小, 以 扇 区 为 单 位 ), 在 这 里 也 可 以 不 用 值 得 一 提 的 是, 正 是 因 为 Windows 下 的 U 盘 只 有 一 个 分 区, 所 以 很 多 时 候 MBR 可 以 不 存 在 的, 磁 盘 的 0 扇 区 直 接 存 储 DBR 也 可 以 正 常 工 作, 所 以 在 本 设 计 中 也 加 入 了 对 这 一 特 殊 情 况 的 考 虑 8.1.2 DOS 引 导 记 录 区 (DBR) 与 MBR 不 同,DBR 中 存 储 着 大 量 的 在 识 别 目 录 簇 时 可 以 使 用 到 的 数 据 DBR 区 (DOS BOOT RECORD) 即 操 作 系 统 引 导 记 录 区 的 意 思, 通 常 占 用 分 区 的 第 0 扇 区 共 512 个 字 节 ( 特 殊 情 况 也 要 占 用 其 它 保 留 扇 区, 我 们 只 讨 论 第 0 扇 ) 在 这 512 个 字 节 中, 其 实 又 是 由 跳 转 指 令, 厂 商 标 志 和 操 作 系 统 版 本 号,BPB(BIOS Parameter Block), 扩 展 BPB,OS 引 导 程 序, 结 束 标 志 几 部 分 组 成, 如 表 11 所 示 表 11 FAT32 分 区 上 DBR 中 各 部 分 的 位 置 划 分 字 节 位 移 字 段 长 度 字 段 名 0x00 3 个 字 节 跳 转 指 令 0x03 8 个 字 节 厂 商 标 志 和 os 版 本 号 0x0B 53 个 字 节 BPB 0x40 26 个 字 节 扩 展 BPB 0x5A 420 个 字 节 引 导 程 序 代 码 0x01FE 2 个 字 节 有 效 结 束 标 志 这 里 详 细 介 绍 如 何 通 过 读 取 该 扇 区 获 得 簇 大 小 和 FAT1 FAT2 跟 目 录 的 地 址 表 12 部 分 BPB 值 (BIOS Parameter Block) 如 表 12 所 示, 它 是 从 Winhex 软 件 中 截 取 出 来 的 截 屏, 显 示 的 是 一 只 U 盘 的 几 个 属 性, 其 中 偏 移 地 址 为 0xD 的 说 明 了 簇 的 大 小, 这 里 为 8 个 扇 区, 即 4KB; 一 个 重 要 信 息 为 保 留 的 扇 区 数, 这 个 保 留 的 意 思 就 是 指 FAT1 之 前 的 扇 区 的 个 数 ( 从 DBR 的 开 始 算 起 ); 最 后 的 偏 移 为 0x24 的 FAT 的 扇 区 数 可 以 利 用 了 确 定 FAT2 以 及 跟 目 录 的 位 置 FAT1_addr=Reserved_sectors+DBR_addr FAT2_addr=FAT1_addr+Sectors_per_FAT; root_directory_addr=fat2_addr+ Sectors_per_FAT; 31

8.1.3 文 件 分 配 表 区 (FAT) FAT 用 于 存 储 磁 盘 中 大 于 一 簇 的 文 件 的 跨 簇 存 储 的 信 息, 采 用 链 表 的 方 式 实 现 了 文 件 的 连 续 和 不 连 续 的 存 储, 同 时 FAT 会 存 有 相 同 的 两 份, 以 供 其 中 一 个 出 现 错 误 时 恢 复 用 8.1.4 数 据 区 (DATA) FAT32 文 件 系 统 的 目 录 结 构 其 实 是 一 颗 有 向 的 从 根 到 叶 的 树, 这 里 提 到 的 有 向 是 指 对 于 FAT32 分 区 内 的 任 一 文 件 ( 包 括 文 件 夹 ), 均 需 从 根 目 录 寻 址 来 找 到 可 以 这 样 认 为 : 目 录 存 储 结 构 的 入 口 就 是 根 目 录 FAT32 文 件 系 统 根 据 根 目 录 来 寻 址 其 他 文 件 ( 包 括 文 件 夹 ), 故 而 根 目 录 的 位 置 必 须 在 磁 盘 存 取 数 据 之 前 得 以 确 定, 这 一 工 作 已 经 在 前 面 对 DBR 分 析 的 过 程 中 完 成 FAT32 文 件 系 统 的 一 个 重 要 思 想 是 把 目 录 ( 包 括 跟 目 录 ) 当 作 一 个 特 殊 的 文 件 来 处 理 FAT32 分 区 中 所 有 的 目 录, 实 际 上 可 以 看 作 是 一 个 存 放 其 他 文 件 ( 目 录 ) 入 口 参 数 的 数 据 表 所 以 目 录 的 占 用 空 间 的 大 小 并 不 等 同 于 其 下 所 有 数 据 的 大 小, 但 也 不 等 同 于 0 通 常 是 占 很 小 的 空 间 的, 可 以 看 作 目 录 文 件 是 一 个 简 单 的 二 维 表 文 件 其 具 体 存 储 原 理 是 : 不 管 目 录 文 件 所 占 空 间 为 多 少 簇, 一 簇 为 多 少 字 节 系 统 都 会 以 32 个 字 节 为 单 位 进 行 目 录 文 件 所 占 簇 的 分 配 这 32 个 字 节 以 确 定 的 偏 移 来 定 义 本 目 录 下 的 一 个 文 件 ( 或 文 件 夹 ) 的 属 性, 实 际 上 是 一 个 简 单 的 二 维 表 这 32 个 字 节 的 各 字 节 偏 移 定 义 如 表 13 FAT32 短 文 件 目 录 项 32 个 字 节 的 表 示 定 义 字 节 偏 移 (Hex) 字 节 数 定 义 0x00~0x07 8 文 件 名 0x08~0x0A 3 扩 展 名 00000000( 读 写 ) 00000001( 只 读 ) 属 00000010( 隐 藏 ) 性 0x0B* 1 00000100( 系 统 ) 字 00001000( 卷 标 ) 节 00010000( 子 目 录 ) 00100000( 归 档 ) 0x0C 1 系 统 保 留 0x0D 1 创 建 时 间 的 10 毫 秒 位 0x0E~0x0F 2 文 件 创 建 时 间 0x10~0x11 2 文 件 创 建 日 期 0x12~0x13 2 文 件 最 后 访 问 日 期 0x14~0x15 2 文 件 起 始 簇 号 的 高 16 位 0x16~0x17 2 文 件 的 最 近 修 改 时 间 0x18~0x19 2 文 件 的 最 近 修 改 日 期 0x1A~0x1B 2 文 件 起 始 簇 号 的 低 16 位 0x1C~0x1F 4 表 示 文 件 的 长 度 32

对 表 13 中 的 一 些 取 值 进 行 说 明 : (1). 对 于 短 文 件 名, 系 统 将 文 件 名 分 成 两 部 分 进 行 存 储, 即 主 文 件 名 + 扩 展 名 0x0~0x7 字 节 记 录 文 件 的 主 文 件 名,0x8~0xA 记 录 文 件 的 扩 展 名, 取 文 件 名 中 的 ASCII 码 值 不 记 录 主 文 件 名 与 扩 展 名 之 间 的., 主 文 件 名 不 足 8 个 字 符 以 空 白 符 (20H) 填 充, 扩 展 名 不 足 3 个 字 符 同 样 以 空 白 符 (20H) 填 充 0x0 偏 移 处 的 取 值 若 为 00H, 表 明 目 录 项 为 空 ; 若 为 E5H, 表 明 目 录 项 曾 被 使 用, 但 对 应 的 文 件 或 文 件 夹 已 被 删 除 ( 这 也 是 误 删 除 后 恢 复 的 理 论 依 据 ) 文 件 名 中 的 第 一 个 字 符 若 为. 或.. 表 示 这 个 簇 记 录 的 是 一 个 子 目 录 的 目 录 项. 代 表 当 前 目 录 ;.. 代 表 上 级 目 录 ( 和 我 们 在 dos 或 windows 中 的 使 用 意 思 是 一 样 的, 如 果 磁 盘 数 据 被 破 坏, 就 可 以 通 过 这 两 个 目 录 项 的 具 体 参 数 推 算 磁 盘 的 数 据 区 的 起 始 位 置, 猜 测 簇 的 大 小 等 等, 故 而 是 比 较 重 要 的 ) (2). 0xB 的 属 性 字 段 : 可 以 看 作 系 统 将 0xB 的 一 个 字 节 分 成 8 位, 用 其 中 的 一 位 代 表 某 种 属 性 的 有 或 无 这 样, 一 个 字 节 中 的 8 位 每 位 取 不 同 的 值 就 能 反 映 各 个 属 性 的 不 同 取 值 了 如 00000101 就 表 示 这 是 个 文 件, 属 性 是 只 读 系 统 该 字 段 的 用 途 在 长 文 件 名 的 表 示 中 还 会 用 到 (3). 0xE~0xF 和 0x16~0x17 中 的 时 间 = 小 时 *2048+ 分 钟 *32+ 秒 /2 得 出 的 结 果 换 算 成 16 进 制 填 入 即 可 也 就 是 :0x16 字 节 的 0~4 位 是 以 2 秒 为 单 位 的 量 值 ;0x16 字 节 的 5~7 位 和 0x17 字 节 的 0~2 位 是 分 钟 ;0x17 字 节 的 3~7 位 是 小 时 (4). 0x10~0x11 和 0x18~0x19 中 的 日 期 =( 年 份 -1980)*512+ 月 份 *32+ 日 得 出 的 结 果 换 算 成 16 进 制 填 入 即 可 也 就 是 :0x18 字 节 0~4 位 是 日 期 数 ;0x18 字 节 5~7 位 和 0x19 字 节 0 位 是 月 份 ; 0x19 字 节 的 1~7 位 为 年 号, 原 定 义 中 0~119 分 别 代 表 1980~2099, 目 前 高 版 本 的 Windows 允 许 取 0~127, 即 年 号 最 大 可 以 到 2107 年 (5). 由 于 FAT32 可 寻 址 的 簇 号 为 32bit 所 以 系 统 在 记 录 文 件 ( 文 件 夹 ) 开 始 簇 地 址 的 时 候 也 需 要 32 位 来 记 录,FAT32 启 用 目 录 项 偏 移 0x12~0x13 来 表 示 起 始 簇 号 的 高 16 位 偏 移 0x1A~0x1B 表 示 起 始 簇 的 低 16 位 以 上 介 绍 的 仅 仅 是 对 短 文 件 名 的 支 持, 最 多 只 支 持 8 个 字 符, 因 此 在 FAT32 中 规 定 长 文 件 名 依 然 记 录 在 目 录 项 中 为 了 低 版 本 的 OS 或 程 序 能 正 确 读 取 长 文 件 名 文 件, 系 统 自 动 为 所 有 长 文 件 名 文 件 创 建 了 一 个 对 应 的 短 文 件 名, 使 对 应 数 据 既 可 以 用 长 文 件 名 寻 址, 也 可 以 用 短 文 件 名 寻 址 不 支 持 长 文 件 名 的 OS 或 程 序 会 忽 略 它 认 为 不 合 法 的 长 文 件 名 字 段, 而 支 持 长 文 件 名 的 OS 或 程 序 则 会 以 长 文 件 名 为 显 式 项 来 记 录 和 编 辑, 并 隐 藏 起 短 文 件 名 当 创 建 一 个 长 文 件 名 文 件 时, 系 统 会 自 动 加 上 对 应 的 短 文 件 名, 其 一 般 有 的 原 则 : (1). 取 长 文 件 名 的 前 6 个 字 符 加 上 "~1" 形 成 短 文 件 名, 扩 展 名 不 变 (2). 如 果 已 存 在 这 个 文 件 名, 则 符 号 "~" 后 的 数 字 递 增, 直 到 5 (3). 如 果 文 件 名 中 "~" 后 面 的 数 字 达 到 5, 则 短 文 件 名 只 使 用 长 文 件 名 的 前 两 个 字 母 通 过 数 学 操 纵 长 文 件 名 的 剩 余 字 母 生 成 短 文 件 名 的 后 四 个 字 母, 然 后 加 后 缀 "~1" 直 到 最 后 长 文 件 名 的 实 现 有 赖 于 目 录 项 偏 移 为 0xB 的 属 性 字 节, 当 此 字 节 的 属 性 为 : 只 读 隐 藏 系 统 卷 标, 即 其 值 为 0FH 时, 操 作 系 统 会 认 为 该 目 录 项 正 在 为 一 个 长 文 件 名 服 务 系 统 将 长 33

文 件 名 以 13 个 字 符 为 单 位 进 行 切 割, 每 一 组 占 据 一 个 目 录 项 所 以 可 能 一 个 文 件 需 要 多 个 目 录 项, 这 时 长 文 件 名 的 各 个 目 录 项 按 倒 序 排 列 在 目 录 表 中, 以 防 与 其 他 文 件 名 混 淆 长 文 件 名 中 的 字 符 采 用 unicode 形 式 编 码, 每 个 字 符 占 据 2 字 节 的 空 间 其 目 录 项 定 义 如 表 15 表 14 FAT32 长 文 件 目 录 项 32 个 字 节 的 表 示 定 义 字 节 偏 移 (Hex) 字 节 数 定 义 7 保 留 未 用 属 6 1 表 示 长 文 件 最 后 一 个 目 录 项 性 5 保 留 未 用 字 4 0x00 1 节 3 位 意 义 2 1 0 顺 序 号 数 值 0x01~0x0A 10 长 文 件 名 unicode 码 1 0x0B 1 长 文 件 名 目 录 项 标 志, 取 值 0FH 0x0C 1 系 统 保 留 0x0D 1 校 验 值 ( 根 据 短 文 件 名 计 算 得 出 ) 0x0E~0x19 12 长 文 件 名 unicode 码 2 0x1A~0x1B 2 文 件 起 始 簇 号 ( 目 前 常 置 0) 0x1C~0x1F 4 长 文 件 名 unicode 码 3 系 统 在 存 储 长 文 件 名 时, 总 是 先 按 倒 序 填 充 长 文 件 名 目 录 项, 然 后 紧 跟 其 对 应 的 短 文 件 名 从 表 14 可 以 看 出, 长 文 件 名 中 并 不 存 储 对 应 文 件 的 文 件 开 始 簇 文 件 大 小 各 种 时 间 和 日 期 属 性 因 此 长 文 件 名 和 短 文 件 名 之 间 的 联 系 变 得 非 常 敏 感, 光 靠 他 们 之 间 的 位 置 关 系 维 系 显 然 远 远 不 够 其 实, 长 文 件 名 的 0xD 字 节 的 校 验 和 起 很 重 要 的 作 用, 此 校 验 和 是 用 短 文 件 名 的 11 个 字 符 通 过 一 种 运 算 方 式 来 得 到 的 8.2 数 据 区 中 目 录 簇 的 识 别 [26] 在 USB 的 读 写 过 程 中,USB 控 制 器 无 需 对 文 件 系 统 有 任 何 了 解, 在 对 文 件 的 处 理 过 程 中 所 需 要 的 操 作 全 部 由 PC 机 上 的 操 作 系 统 完 成, 将 需 要 读 写 的 数 据 读 出 或 写 到 Flash 中 而 USB 所 要 做 的 就 是 不 断 的 响 应 PC 的 请 求, 这 些 请 求 就 是 6.1.4 节 所 述 的 SCSI 的 读 写 命 令, 完 全 不 需 要 管 上 层 的 文 件 系 统 究 竟 在 做 什 么 工 作 因 此 在 这 种 条 件 下 就 需 要 以 来 与 前 一 小 节 的 分 析 来 提 供 依 据, 用 最 快 最 方 便 的 方 法 将 隐 藏 与 大 量 数 据 中 的 目 录 簇 识 别 出 来 从 8.1.1 与 8.1.2 可 知 通 过 对 数 据 的 过 滤 可 以 很 容 易 的 识 别 出 MBR DBR FAT1 FAT2 以 及 根 目 录, 在 地 址 超 过 跟 目 录 的 时 候, 如 果 该 组 数 据 是 目 录 簇, 那 么 不 加 密, 而 如 果 此 次 传 输 的 数 据 为 文 件 数 据 则 需 要 加 密 FAT32 是 以 簇 为 单 位 进 行 存 储 的 文 件 系 统 中, 当 前 簇 不 是 文 件 数 据 就 是 目 录 数 据, 所 以 只 需 要 对 每 个 簇 的 前 面 一 部 分 的 数 据 进 行 判 断 就 可 以 识 别 出 该 簇 的 真 正 身 份 文 件 数 据 的 组 织 形 式 取 决 于 该 文 件, 而 目 录 数 据 的 组 织 形 式 却 是 由 文 件 系 统 规 定, 因 此 既 然 有 规 定 了 目 录 数 据 的 34

格 式 标 准, 它 就 必 然 存 在 不 同 于 文 件 数 据 的 数 字 特 征 将 文 件 数 据 看 成 是 一 种 随 机 数, 那 么 识 别 目 录 簇 的 工 作 便 是 从 噪 声 中 对 有 用 信 号 的 检 测 通 过 8.1.4 的 分 析 可 以 发 现, 目 录 簇 存 在 着 这 样 几 个 特 征 : (1). 在 非 跟 目 录 的 簇 的 开 头, 如 果 该 簇 为 字 母 的 首 簇, 那 么 前 两 个 文 件 的 文 件 名 必 定 是. 和.., 他 们 分 别 代 表 当 前 目 录 和 上 级 目 录, 因 此 同 时 还 提 供 给 我 们 的 信 息 有 : 1) 每 个 目 录 项 的 文 件 的 长 度 一 定 为 0;2). 和.. 两 者 的 创 建 时 间 的 10 毫 秒 位 创 建 时 间 和 日 期 最 经 修 改 时 间 和 日 期 最 后 访 问 日 期 都 是 一 样 的 (2). 即 使 当 前 簇 不 是 目 录 簇 的 首 簇, 它 的 短 文 件 名 所 使 用 的 值 必 定 是 可 识 别 的 ASCII 码, 那 么 就 从 一 定 程 度 上 限 制 了 相 应 字 段 的 数 值 (3). 偏 移 为 0xB 的 属 性 字 节 的 最 高 两 个 BIT 是 0 (4). 时 间 格 式 特 征 表 示 小 时 的 5bit 的 区 间 为 [0,23], 表 示 分 钟 的 6 个 bit 的 取 值 区 间 为 [0,59], 同 样 表 示 秒 /2 的 5 个 bit 的 范 围 为 [0,29] 这 些 都 没 有 将 各 自 的 空 间 使 用 完 整 (5). 日 期 格 式 特 征 表 示 月 份 的 4bit 的 取 值 区 间 为 [1,12], 而 表 示 日 和 年 的 bit 利 用 价 值 不 是 很 大 (6). 长 文 件 名 的 特 征 1) 偏 移 为 0xD 的 字 节 的 校 验 值 应 该 同 它 的 短 文 件 名 相 对 应 ;2)0x0 的 属 性 字 节 的 低 4bit 表 示 的 顺 序 号 数 值 的 倒 叙 关 系 可 以 成 为 特 征 从 以 上 分 析 可 以 看 到 目 录 簇 存 在 很 多 特 征, 通 过 抓 住 这 些 特 征, 虽 然 不 能 100% 的 命 中 目 标, 但 至 少 可 以 保 证 在 对 合 法 的 FAT32 文 件 系 统 扫 描 时, 不 会 出 现 漏 检 的 现 象 但 是 在 实 现 上, 既 要 保 证 高 的 识 别 率, 又 要 保 证 不 影 响 数 据 传 输 的 速 度, 最 终 采 用 上 面 的 第 一 条 特 征, 保 证 高 速 的 识 别 但 是 如 果 文 件 夹 内 部 的 文 件 项 的 个 数 超 过 128 个, 即 子 目 录 的 出 现 了 跨 簇 的 现 象 时, 就 无 法 保 证 首 簇 后 的 文 件 的 正 确 显 示 了 虽 然 在 U 盘 中 出 现 某 个 子 文 件 夹 下 文 件 数 过 多 的 情 况 也 不 太 可 能, 但 是 如 果 能 够 将 上 述 的 大 多 数 特 征 都 用 上, 对 每 个 簇 的 前 几 项 做 一 个 合 适 的 运 算, 是 满 足 特 征 的 预 算 结 果 都 映 射 到 一 个 区 间, 那 么 就 可 以 很 清 晰 的 解 决 这 一 问 题 35

第 九 章 文 件 数 据 的 加 解 密 在 加 密 方 式 上, 采 用 AES 的 加 密 方 式, 不 只 是 因 为 它 的 安 全 性 能, 更 因 为 AES 是 一 种 很 好 的 分 析 加 密 算 法 但 是 在 加 密 模 式 上 一 直 存 在 一 定 的 问 题 普 通 的 ECB 模 式 因 为 它 的 一 一 对 应 容 易 受 到 水 印 攻 击 (watermarking attack), 而 CBC(Cipher Block Chain) 模 式 一 直 以 来 是 众 多 模 式 中 使 用 最 为 广 泛 的 加 密 模 式, 尽 管 在 某 些 方 面 还 存 在 一 些 不 足 综 合 考 虑 各 种 因 素,CBC 仍 然 具 有 多 方 面 的 优 越 性 9.1 AES 标 准 [16] 在 密 码 学 界,AES(Advanced Encryption Standard) 加 密 算 法 是 美 国 政 府 所 采 用 的 一 种 加 密 标 准, 是 世 界 上 最 流 行 的 对 称 加 密 算 法 之 一 它 具 有 三 种 不 同 的 分 组 加 密 形 式 :AES-128 AES-192 AES-256, 每 种 方 法 都 使 用 128-bit 分 组 长 度, 密 钥 长 度 可 以 分 别 为 128 192 和 256 比 特 该 加 密 算 法 的 安 全 性 能 已 经 得 到 世 界 范 围 内 的 认 可, 并 广 泛 应 用 简 单 的 将 AES 算 法 表 述 如 下 : 1. 使 用 称 之 为 Rijndael's key schedule 的 算 法 对 密 钥 进 行 扩 展 2. Initial Round a) 轮 密 钥 加 : 利 用 单 签 分 组 和 扩 展 密 钥 的 一 部 分 进 行 按 位 XOR 3. Rounds ( 对 于 128-bit 密 钥 需 要 进 行 9 轮,192-bit 需 要 11 轮,256-bit 密 钥 的 AES 需 要 13 轮 ) a) 字 节 代 换 : 用 一 个 S 盒 完 成 分 组 中 的 按 字 节 代 换 b) 行 移 位 : 行 置 换, 状 态 表 的 每 一 行 都 要 进 行 一 定 数 量 的 移 位 c) 列 混 淆 : 一 个 利 用 在 域 GF(28) 上 的 算 术 特 性 的 代 换 d) 轮 密 钥 加 : 利 用 单 签 分 组 和 扩 展 密 钥 的 一 部 分 进 行 按 位 XOR 4. Final Round ( 没 有 列 混 淆 ) a) 字 节 代 换 : 用 一 个 S 盒 完 成 分 组 中 的 按 字 节 代 换 b) 行 移 位 : 行 置 换, 状 态 表 的 每 一 行 都 要 进 行 一 定 数 量 的 移 位 c) 列 混 淆 : 一 个 利 用 在 域 GF(28) 上 的 算 术 特 性 的 代 换 9.2 CBC 加 密 模 式 [16] Decryption Encryption P i P i+1 C i C i+1 C i-1 XOR XOR Decryption Decryption Encryption Encryption C i-1 XOR XOR C i C i+1 图 25 CBC 加 解 密 模 式 P i P i+1 在 一 块 可 以 扇 区 寻 址 的 Flash 或 者 硬 盘 上, 通 常 一 个 扇 区 的 大 小 为 512Byte, 那 么 一 个 扇 区 36

所 需 要 的 AES 加 密 次 数 为 32 次 这 32 次 加 密 本 文 使 用 CBC 模 式 完 成,IV(Initiation Vector) 初 始 化 向 量 由 当 前 数 据 地 址 加 密 得 到 设 扇 区 的 地 址 为 n, 该 扇 区 中 的 第 i 个 (i 从 0 开 始 计 数 )128 位 明 文 记 为 P, P 经 过 AES 加 密 之 后 的 密 文 记 为 C, 密 钥 为 k n i n i n i C E( k,[ C P ]); i 0 n n n i i 1 i n C 1 IV ( n) E( k, n) 由 于 IV 的 生 成 涉 及 到 密 码 k 的 介 入, 所 以 IV 的 不 可 预 测 性 很 大 程 度 增 加 了 破 解 的 难 度 37

第 十 章 测 试 与 总 结 10.1 总 述 系 统 测 试 采 用 先 局 部 后 整 体 的 方 案, 首 先 将 各 个 模 块 (USB 数 据 传 输 模 块 AES 加 密 模 块 ) 在 分 离 的 情 况 下 单 独 测 试, 通 过 对 它 的 各 种 操 作 来 尽 可 能 多 的 暴 露 问 题, 并 一 一 解 决 最 后 再 将 其 整 合 起 来 进 行 总 体 测 试 对 于 软 件 测 试 完 全 依 靠 RS232 串 口 输 出 程 序 中 的 数 据 变 量, 然 后 通 过 计 算 机 上 的 分 析 除 了 串 口 工 具, 测 试 中 还 用 到 的 主 要 工 具 有 : (1). Bus Hound 5.0: 一 款 用 于 分 析 PC 上 IO 数 据 软 件, 能 够 对 多 种 协 议 的 数 据 包 进 行 截 取 解 析 并 保 存 这 些 数 据 代 表 了 在 PC 上 看 到 的 USB 数 据, 与 串 口 发 回 的 USB 数 据 对 比 可 以 找 到 程 序 的 漏 洞, 并 作 出 相 应 的 改 进 (2). USB-IF Test Suite:USB 开 发 者 论 坛 提 供 的 用 于 USB 标 准 测 试 的 软 件, 能 够 查 看 当 前 设 备 是 否 符 合 国 际 标 准 (3). HD Tach v3.0.4.0: 用 来 对 USB 的 传 输 速 率 测 试, 它 会 对 U 盘 提 供 大 小 不 同 的 数 据 包, 分 别 计 算 他 们 的 传 输 速 率 (4). ATTO Disk Benchmark v2.34: 同 样 是 USB 测 速 软 件, 使 用 不 同 的 两 款 软 件 可 以 提 高 测 试 数 据 的 可 信 度 (5). WinHex 15.0 SR-2: 用 于 观 察 Flash 上 每 一 个 扇 区 的 数 据 变 化, 有 效 地 判 断 加 密 的 正 确 性 并 评 估 效 果 10.2 AES 加 密 函 数 验 证 性 测 试 因 为 AES 加 解 密 函 数 来 源 于 互 联 网, 难 免 会 有 疏 漏, 质 量 不 能 得 到 保 证 稍 作 修 改 后 应 当 对 齐 正 确 性 进 行 验 证, 通 过 权 威 机 构 发 布 的 测 试 向 量 对 齐 进 行 验 证 具 有 权 威 性 测 试 向 量 是 一 组 已 经 给 出 的 输 入 明 文 密 钥 和 输 出 密 文 的 集 合 以 下 数 据 来 源 于 NIST 发 布 的 联 邦 信 息 处 理 标 准 (FIPS PUBS) 197 例 如, 对 于 一 个 128-bit 的 密 钥 为 "00010203050607080A0B0C0D0F101112" 并 且 输 入 明 文 为 "506812A45F08C889B97F5980038B8359" 128-bit 的 AES 加 密 过 后 的 正 确 输 出 应 当 为 "D8F532538289EF7D06B506A4FD5BE9C9" 另 一 组 测 试 值 为 : 明 文 : 密 钥 : 密 文 : "4EC137A426DABF8AA0BEB8BC0C2B89D6" "95A8EE8E89979B9EFDCBC6EB9797528D" "D9B65D1232BA0199CDBD487B2A1FD646" 38

若 使 用 上 以 测 试 向 量 的 明 文 作 为 密 文, 密 钥 不 变, 则 解 密 明 文 为 : "9570C34363565B393503A001C0E23B65" 通 过 编 写 专 门 测 试 程 序, 串 口 输 出 测 试 结 果 显 示 AES 加 解 密 函 数 准 确 无 误 10.3 传 输 性 能 测 试 将 加 解 密 设 备 插 到 电 脑 USB 端 口, 再 将 U 盘 连 接 到 本 设 备 等 待 指 纹 输 入 完 成, 连 接 计 算 机, 显 示 U 盘 盘 符 可 以 开 始 数 据 传 输, 传 输 速 率 测 试 结 果 如 下 图 : 图 26 设 备 读 写 速 度 测 试 结 果 如 图 28 所 示 为 一 款 金 士 顿 U 盘 在 本 平 台 上, 通 过 专 业 测 试 软 件 ATTO Disk Benchmark 所 得 的 USB 传 输 速 率 通 过 对 测 试 结 果 的 观 察, 可 以 发 现 随 着 传 输 数 据 的 增 加, 读 写 速 度 都 会 有 很 大 的 提 高, 因 为 在 传 输 过 程 中 没 有 一 簇 的 数 据 会 自 动 补 全 一 簇 处 理, 在 加 上 其 余 的 传 输 控 制 使 得 在 传 输 小 的 文 件 数 据 时 所 得 的 读 写 速 度 偏 低 直 到 当 文 件 达 到 64K 左 右 时, 读 写 速 度 相 对 开 始 稳 定, 写 入 速 度 稳 定 在 230KB/s 左 右 ; 而 因 为 缓 存 的 使 用, 使 得 同 样 情 况 的 读 速 率 达 到 了 将 近 写 的 两 倍, 为 550KB/s 根 据 文 献 28 的 测 试,USB 全 速 设 备 的 传 输 速 度 理 论 上 最 高 只 能 达 到 1MB/s 左 右, 而 文 献 29 指 出 真 正 实 现 中 能 达 到 的 速 度 为 600KB/s~700KB/s 左 右, 因 此, 相 比 而 言 系 统 所 得 传 输 效 果 令 人 满 意 再 将 加 密 后 的 文 件 重 新 拷 贝 到 电 脑 上, 打 开 后 与 原 文 件 一 样, 本 设 备 加 解 密 运 算 在 系 统 中 运 行 正 确 将 加 密 后 的 U 盘 直 接 连 到 电 脑 上, 电 脑 无 法 读 写 U 盘 中 的 数 据 通 过 以 上 测 试, 作 品 完 全 能 够 正 确 完 成 加 解 密 运 算, 为 U 盘 提 供 可 靠 的 保 护, 完 全 实 现 了 预 期 目 标 39

第 十 一 章 结 束 语 11.1 论 文 总 结 通 过 不 断 的 调 试 与 改 进, 系 统 已 经 能 够 正 确 运 行, 并 且 得 到 了 让 人 满 意 的 效 果 通 过 该 系 统, 在 计 算 机 上 可 以 正 确 无 误 的 看 到 文 件 目 录, 在 读 取 文 件 数 据 时 只 有 存 入 该 数 据 时 使 用 的 指 纹 才 能 够 正 确 的 解 密 文 件, 否 则 看 到 的 只 能 是 无 法 解 开 的 乱 码 通 过 总 结, 本 文 完 成 了 以 下 工 作 : (1). 完 成 硬 件 电 路 板 的 制 作 技 术 和 调 试 (2). 移 植 USB 主 机 设 备 段 驱 动 程 序, 实 现 USB 主 从 设 备 间 的 数 据 透 明 传 输 (3). 支 持 对 普 通 U 盘 文 件 的 加 解 密, 文 件 名 称 可 见, 内 容 不 可 见, 方 便 文 件 管 理 (4). 与 指 纹 模 块 相 互 通 信, 获 取 指 纹 图 像 在 与 DSP 指 纹 模 块 相 互 连 接, 完 成 系 统 整 体 功 能 的 调 试 之 后, 加 解 密 设 备 的 实 物 图 如 图 27 所 示 从 上 之 下 四 种 不 同 类 型 的 虚 线 框 分 别 是 : 指 纹 采 集 传 感 器 DSP 指 纹 预 处 理 模 块 SPI 接 口 ARM 嵌 入 式 平 台 图 27 系 统 最 终 实 物 图 在 完 成 这 些 工 作 的 同 时, 努 力 提 高 USB 方 面 的 理 论 水 平, 学 习 了 OHCI 规 范 和 FAT32 文 件 系 统 的 标 准, 收 获 颇 深 通 过 代 码 的 改 进, 提 高 了 对 USB 存 储 器 的 兼 容 性 在 实 践 过 程 中, 有 如 下 创 新 : (1). 采 用 了 独 立 于 U 盘 与 计 算 机 的 设 计 思 想, 采 用 过 滤 USB 数 据 流 的 方 法 实 现 文 件 加 密 40

(2). 对 U 盘 中 的 每 一 个 文 件 进 行 加 解 密, 而 不 是 对 整 个 U 盘 加 解 密, 使 用 和 管 理 都 更 为 方 便 a) 提 出 了 FAT32 文 件 系 统 中 目 录 簇 的 识 别 方 法 及 未 来 的 扩 展 空 间 b) 构 造 了 数 据 缓 存 区, 使 文 件 传 输 更 快 (3). 提 出 了 一 种 更 快 更 有 利 于 保 护 硬 件 的 程 序 下 载 方 式 11.2 前 景 与 展 望 作 品 拥 有 广 阔 的 应 用 前 景, 能 为 私 人 企 业 政 府 等 机 构 提 供 便 捷 可 靠 的 U 盘 安 全 解 决 方 案 加 密 器 与 U 盘 相 分 离, 减 小 指 纹 信 息 泄 露 的 威 胁, 在 需 要 保 密 的 部 门 更 便 于 安 全 上 的 管 理, 因 此 将 大 受 欢 迎 41

致 谢 首 先 衷 心 感 谢 我 的 导 师 胡 爱 群 教 授! 胡 老 师 在 我 的 本 科 四 年 最 后 的 很 长 的 一 段 时 间 里 给 我 提 供 了 良 好 的 学 习 条 件 和 宽 松 的 研 究 氛 围, 在 实 验 室 里 同 样 可 以 感 觉 到 家 的 温 暖 在 跟 随 胡 老 师 的 这 段 时 间 里, 我 的 学 习 研 究 和 动 手 能 力 有 了 很 大 的 进 步, 不 仅 眼 界 得 到 了 开 阔, 而 且 看 问 题 的 角 度 也 变 得 更 加 全 面 科 学 胡 老 师 渊 博 的 学 识 治 学 严 谨 的 态 度 和 永 不 停 息 的 求 学 精 神, 给 我 很 大 的 启 迪 感 谢 宋 宇 波 老 师 和 秦 中 元 老 师, 在 课 题 研 究 最 困 难 的 时 候 给 予 了 我 继 续 的 信 心, 他 们 不 厌 其 烦 的 和 我 讨 论 交 流, 让 我 重 新 看 到 了 希 望 的 曙 光, 并 且 找 到 解 决 目 录 与 文 件 数 据 分 离 的 手 段 他 们 对 我 的 研 究 成 果 的 肯 定 在 精 神 上 深 深 的 激 励 我 更 加 努 力 的 学 习 和 奋 斗 感 谢 蒋 睿 老 师 在 项 目 前 期 对 我 的 指 导, 他 让 我 明 白 思 维 只 有 经 过 激 烈 的 碰 撞 才 能 长 生 绚 烂 的 光 彩 感 谢 Lakeview Research 的 Janet Louise Axelson 通 过 E-mail 对 我 的 前 期 工 作 的 指 导, 和 他 的 技 术 网 站 上 提 供 的 丰 富 经 验 以 及 参 考 代 码 感 谢 OpenSSL Linux 开 源 社 区 的 程 序 爱 好 者 们 感 谢 实 验 室 的 金 制 和 周 青 学 长, 是 他 们 在 把 我 从 对 嵌 入 式 的 一 知 半 解 带 入 这 道 门 槛, 在 学 习 资 料 与 实 践 经 验 上 给 予 了 我 很 大 帮 助, 祝 他 们 在 以 后 的 工 作 中 一 帆 风 顺 感 谢 同 课 题 的 范 鹏 飞 刘 慧 慧 同 学, 感 谢 陈 开 志 博 士 和 郭 晓 乔 师 兄, 和 他 们 在 一 起 的 半 年 里 学 习 和 生 活 都 非 常 愉 快, 尤 其 是 讨 论 问 题 共 享 学 习 所 得 是 我 在 学 习 之 余 最 大 的 乐 趣 感 谢 顾 群 老 师 还 有 实 验 室 的 所 有 师 兄 师 姐, 大 家 一 起 为 信 息 安 全 研 究 中 心 营 造 了 良 好 的 学 习 研 究 环 境 感 谢 吴 健 雄 学 院 的 钟 辉 书 记 近 些 年 来 学 习 和 生 活 上 对 我 无 微 不 至 的 关 怀, 给 了 我 很 多 宝 贵 的 机 会, 使 我 视 野 更 开 阔, 对 自 己 信 心 更 加 坚 定 最 后, 感 谢 父 母 姐 姐 和 任 艳 的 关 心 和 支 持, 他 们 一 如 既 往 的 支 持 和 信 任 是 我 永 远 的 动 力 和 信 心 此 外, 在 本 科 四 年 期 间, 还 有 很 多 在 学 业 和 生 活 上 给 我 鼓 励 帮 助 的 老 师 和 同 学, 虽 然 不 能 一 一 列 举 出 他 们 的 名 字, 但 正 是 他 们 默 默 的 帮 助 和 支 持 给 了 我 很 多 美 好 的 回 忆 42

参 考 文 献 (Reference) [1] AxelsonJan. USB Mass Storage:Designing and programming Devices and Embedded Hosts[M]. Lakeview Research LLC. 2006 [2] Compaq, Hewlett-Packard, Intel... Universal Serial Bus Specification[EB/OL]. www.usb.org, 2000-4-27 [3] Harlan Carvey, Cory Altheide. Tracking USB storage: Analysis of windows artifacts generated by USB storage devices[j]. Digital Investigation, 2005(2) 94-100 [4] USB-IF. Universal Serial Bus Mass Storage Class-Bulk Only Transport[EB/OL]. USB Implementers Forum, 1999-09-31 [5] 匿 名. FAT 文 件 系 统 原 理 [EB/OL]. 数 据 恢 复 : www.sjhf.net [6] 牛 玲, 李 骞. 信 息 安 全 防 护 与 USB 安 全 控 制 技 术 [J]. 周 口 师 范 学 院 学 报, 2006,23(2) 109-110. [7] 王 殊, 程 卓. 基 于 CH375 的 嵌 入 式 USB 文 件 加 解 密 系 统 的 设 计. 电 子 技 术 应 用, 2007(8) 157-160 [8] Microsoft Corporation. Microsoft Extensible Firmware Initiative FAT32 File System Specification[EB/OL]. http://www.microsoft.com, 2000-11-06 [9] Curtis E Stevens, Mark Gianopulos. USB Communication Device Class Definition for Mass Storage Devices[EB/OL]. USB Implementers Forum. 1996-02-02 [10] 王 梅, 林 君, 刘 俊 华. 一 种 基 于 嵌 入 式 USB-Host 的 大 容 量 数 据 存 储 方 案 及 应 用 [J]. 计 算 机 测 量 与 控 制. 2004. 12(4): 384-389 [11] Stephen D Wolthusen. Windows device interface security[j]. Information Security Technical Report, 2006(11) 160-165 [12] 张 井 刚, 刘 德 活. 在 嵌 入 式 系 统 中 提 高 U 盘 访 问 兼 容 性 的 几 种 措 施 [EB/OL]. www.eepw.com.cn/article/21990.htm, 2007-02-04 [13] frank_wang. 对 USB 协 议 层 的 深 层 分 析 [EB/OL]. http://www.embedusb.51.net, 2004-04-17 [14] frank_wang. USB 项 目 技 术 报 告 [EB/OL]. http://www.embedusb.51.net, 2004-04-17 [15] ATMEL Corporation. AT91Bootstrap[EB/OL]. http://www.atmel.com, 2005-12-06 [16] William Stallings. Cryptography and Network Security: Principles and Practices [M]. Forth Edition. New Jersey: Pearson Education, 2006. 99-115 [17] 赵 鹏, 蒋 烈 辉. AT91 系 列 微 处 理 器 启 动 过 程 的 分 析 与 实 现 [J]. 电 子 设 计 应 用,2005.3 116-120 [18] 詹 荣 开. 嵌 入 式 系 统 Boot Loader 技 术 内 幕 [EB/OL]. Linux 爱 好 者, 2003-12-01 [19] INCITS. SCSI Primary Commands-3[EB/OL]. American National Standards Institute. 2002.11.10 [20] ATMEL Corporation. AT91 ARM Thumb Microcontrollers: AT91SAM9260 Preliminary[EB/OL]. http://www.atmel.com, 2008-01-31 [21] 深 圳 无 线 互 联 技 术. CA9260 核 心 板 用 户 手 册 [EB/OL]. http://www.szwinet.com. 2008.04.01 [22] Richard M. Stallman, Roland McGrath, Paul Smith. GNU Make[M]. Version 3.8. MA: Free Software Foundation, 2002 [23] ATMEL Corporation. SAM Boot Assistant(SAM-BA) User Guide[EB/OL]. http://www.atmel.com, 2006-10-09 [24] SAMSUNG Electronics. 128M x 8 Bit NAND Flash Memory[EB/OL]. http://www.samsung.com, 2006.09.27 [25] William Stallings. Computer organization and architecture[m]. Fifth Edition. New Jersey: Pearson Education, 2006. 99-115 [26] 黄 步 根. 数 据 恢 复 与 计 算 机 取 证 [J]. 计 算 机 安 全, 2006.06 79-80 43

[27] Richard M. Stallman. Using and Porting the GNU Compiler Collection[M]. MA: Free Software Foundation, 2001 [28] 旧 日 足 迹. 高 价 不 高 速, 走 出 USB2.0 接 口 速 度 规 格 误 区 [EB/OL]. http://blog.zol.com.cn, 2006.11.13 [29] shuiyan. USB 传 输 速 率 [EB/OL]. http://topic.csdn.net, 2008.05.29 44

附 录 1 电 路 图 : 图 28 AT91SAM9260 底 板 电 路 原 理 图 45

2 标 准 USB 描 述 符 表 15 设 备 描 述 表 (18Byte) Byte Field Description 0 blength Descriptor size in bytes (12h) 1 bdescriptortype The constant DEVICE (01h) 2 bcdusb USB specification release number (BCD). For USB 2.0, byte 2 = 00h and byte 3 = 02h. 4 bdeviceclass Class code. For mass storage, set to 00h (the class is speci-fied in the interface descriptor). 5 bdevicesubclass Subclass code. For mass storage, set to 00h. 6 bdeviceprotocol Protocol Code. For mass storage, set to 00h. 7 bmaxpacketsize0 Maximum packet size for endpoint zero. 8 idvendor Vendor ID. Obtained from USB-IF. 10 idproduct Product ID. Assigned by the product vendor. 12 bcddevice Device release number (BCD). Assigned by the product vendor. 14 imanufacturer Index of string descriptor for the manufacturer. Set to 00h if there is no string descriptor. 15 iproduct Index of string descriptor for the product. Set to 00h if there is no string descriptor. 16 iserialnumber Index of string descriptor containing the serial number. Must be > 00h for mass-storage devices. 17 bnumconfigurations Number of possible configurations. Typically 01h. 表 16 配 置 描 述 表 Byte Field Description 0 blength Descriptor size in bytes. Always 09h. 1 bdescriptortype The constant CONFIGURATION (02h). 2 wtotallength The number of bytes in the configuration descriptor and all of its subordinate descriptors. 4 bnuminterfaces The number of interfaces in the configuration. 5 bconfigurationvalue Identifier for Set Configuration and Get Configuration requests. Use 01h for the first configuration. 6 iconfiguration Index of string descriptor for the configuration. Set to 00h if there is no string descriptor. 7 bmattributes Self/bus power and remote wakeup settings. 8 bmaxpower The amount of bus power the device requires, expressed as (maximum milliamperes / 2). 46

表 17 接 口 描 述 ( 海 量 存 储 功 能 描 述 ) Byte Field Description 0 blength Descriptor size in bytes (09h). 1 bdescriptortype The constant INTERFACE (04h). 2 binterfacenumber Number identifying this interface. 3 balternatesetting Set to 00h for the default setting. 4 bnumendpoints Number of endpoints supported, not counting endpoint zero. Set to 02h for a bulk-only mass-storage device. 5 binterfaceclass Class code. Mass storage = 08h. 6 binterfacesubclass Subclass code. Mass-storage values: 01h: Reduced Block Commands (RBC). 02h: SFF-8020i, MMC-2 (ATAPI) (CD/DVD drives) 03h: QIC-157 (tape drives). 04h: USB Floppy Interface (UFI). 05h: SFF-8070i (ATAPI removable rewritable media devices). 06h: SCSI transparent command set. Use the SCSI INQUIRY command to determine the peripheral device type. Recommended value for most devices. 7 binterfaceprotocol Protocol code. Mass storage values: 00h: CBI with command completion interrupt transfers 01h: CBI without command completion interrupt transfer 50h: bulk only. Recommended value for most devices. 8 iinterface Index of string descriptor for the interface. 表 18 批 量 传 输 协 议 的 端 点 描 述 Byte Field Description 0 blength Descriptor size in bytes (07h). 1 bdescriptortype The constant Endpoint (05h). 2 bendpointaddress Endpoint number and direction. 3 bmattributes Transfer type supported. Bulk = 02h. 4 wmaxpacketsize Maximum packet size supported. 6 binterval Maximum NAK rate for high-speed bulk OUT endpoints. Otherwise ignored for bulk endpoints. 表 19 字 符 串 描 述 Byte Field Description 0 blength Descriptor size in bytes 1 bdescriptortype The constant String (03h) 2 bstring or wlangid For string descriptor zero, an array of 1 or more Language Identifier codes. For other string descriptors, a Unicode string. 47

3 BOT 传 输 模 式 CBW CSW 定 义 表 20 USB 主 机 向 设 备 发 送 CBW 的 格 式 Name Bits Description dcbwsignature 32 The value 43425355h, which identifies the structure as a CBW. The LSB (55h) transmits first on the bus. dcbwtag 32 A value that associates this CBW with the CSW the device will send in response. If bit 7 of bmcbwflags = 0, the number of bytes the host will send in the dcbwdata 32 data-transport phase. If bit 7 of bmcbwflags = 1, the number of bytes Transfer Length the host expects to receive in the data-transport phase. Specifies the direction of the data-transport phase. Bit 7 = 0 for an OUT bmcbwflags 8 (host-to-device) transfer. Bit 7 = 1 for an IN (device-to-host) transfer. If there is no data-transport phase, bit 7 is ignored. All other bits are zero. Reserved 4 Zero. bcbwlun 4 For devices with multiple LUNs, specifies the LUN the command block is directed to. Otherwise the value is zero. Reserved 3 Zero. bcbwcblength 5 The length of the command descriptor block in the CBWCB field in bytes. Valid values are 1 16. Currently defined command descriptor blocks are all at least 6 bytes. CBWCB 128 The command block for the device to execute. 表 21 USB 设 备 发 回 主 机 的 状 态 CSW Name Bits Description dcswsignature 32 The value 53425355h, which identifies the structure as a CSW. The LSB (55h) transmits first on the bus. dcswtag 32 The value of the dcbwtag in a CBW received from the host. For transfers where the host sends data to the device in the data-transport phase, the difference between dcbwdatatransferlength and the number dcswdata of bytes the device processed. For transfers where the device sends data to 32 Residue the host in the data-transport phase, the difference between dcbwdatatransferlength and the number of valid bytes the device has sent, excluding any pad bytes. bcswstatus 8 00h = command passed. 01h = command failed. 02h = phase error. Host should perform a reset recovery. 48