目录
二、USB 2.0 Host/USB3.0 Host 操作指南
前言
本章内容主要介绍外设驱动的一些操作方法,其中包括 "ETH 操作指南"、"U盘操作指南"、"EMMC 卡操作指南 "。
一、ETH 操作指南
1.1 操作示例
内核下使用网口的操作涉及到以下几个方面:
- ETH 模块支持 TSO 功能且默认是打开的,如果用户希望关闭 TSO 功能,可通过工具 ethtool 将其关闭。开关 TSO 功能的方法如下:
− 关闭 TSO: ./ethtool –K eth0 tx off − 打开 TSO: ./ethtool –K eth0 tx on
TSO(TCP Segment Offload) 功能简介:
TSO (TCP Segmentation Offload) 是一种利用网卡分割大数据包,减小 CPU 负荷的一种技术,也被叫做 LSO (Large segment offload),如果数据包的类型只能是 TCP,则被称之为 TSO,如果硬件支持 TSO 功能的话, 也需要同时支持硬件的 TCP 校验计算和分散-聚集 (Scatter Gather) 功能。 TSO 的实现,其实是由软件和硬件结合起来完成的,具体说来,硬件能够对大的数据包进行分片,并对每个分片附着相关的头部。使用 TSO 时,会把一部分由 CPU 处理的工作转移到由网卡来处理,减轻 CPU 的压力,提高性能。 - 配置 ip 地址和子网掩码
ifconfig eth0 xxx.xxx.xxx.xxx netmask xxx.xxx.xxx.xxx up
- 设置缺省网关
route add default gw xxx.xxx.xxx.xxx
- mount nfs
mount -t nfs -o nolock xxx.xxx.xxx.xxx:/your/path /mount-dir
- shell 下使用 tftp 上传下载文件
前提是在 server 端有 tftp 服务软件在运行。
- 下载文件:
tftp -r XX.file serverip -g
其中:XX.file 为需要下载的文件,serverip 需要下载的文件所在的 server 的 ip 地址。
- 上传文件:
tftp -l xx.file remoteip –p
其中,xx.file 为需要上传的文件,remoteip 文件需要上传到的 server 的 ip 地址。
1.2 ethtool 配置接口
用户可以通过标准 ethtool 工具接口进行流控功能的使能。
ethtool –a eth0 命令查看 eth0 口流控功能状态;打印如下:
# ./ethtool -a eth0
Pause parameters for eth0:
Autonegotiate: on
RX: on
TX: on
其中,RX 流控是打开的,TX 流控是打开的;
- 用户可以通过以下命令打开或关闭 TX 流控:
# ./ethtool -A eth0 tx off(关闭 TX 流控) # ./ethtool -A eth0 tx on(打开 TX 流控)
- RX 流控默认打开,不支持关闭,因此不支持通过 ethtool 配置 RX 流控。
二、USB 2.0 Host/USB3.0 Host 操作指南
2.1 U 盘操作示例
2.1.1 插入检测
直接插入 U 盘,观察是否枚举成功。USB 2.0 Host 正常情况下串口打印为:
~ # usb 1-1: new high-speed USB device number 7 using hiusb-ehci
scsi2 : usb-storage 1-1:1.0
scsi 2:0:0:0: Direct-Access Kingston DT 101 G2 1.00 PQ: 0 ANSI: 4
sd 2:0:0:0: [sda] 15131636 512-byte logical blocks: (7.74 GB/7.21 GiB)
sd 2:0:0:0: [sda] Write Protect is off
sd 2:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA
sda: sda1
sd 2:0:0:0: [sda] Attached SCSI removable disk
其中:sda1 表示 U 盘或移动硬盘上的第一个分区,当存在多个分区时,会出现 sda1、sda2、sda3 等字样。
2.1.2 初始化及应用
模块插入完成后,进行如下操作:
说明:sdXY 中 X 代表磁盘号,Y 代表分区号,请根据具体系统环境进行修改。
- 分区命令操作的具体设备节点为 sdX,示例:~$ fdisk /dev/sda
- 用 mkdosfs 工具格式化的具体分区为 sdXY:~ $ mkdosfs -F 32 /dev/sda1
- 挂载的具体分区为 sdXY:~ $ mount -t vfat /dev/sda1 /mnt
步骤 1. 查看分区信息。
- 运行命令 "ls /dev" 查看系统设备文件,若没有分区信息 sdXY,表示还没有分区,请参见 "4.1 用 fdisk 工具分区" 进行分区后,进入步骤 2。
- 若有分区信息 sdXY,则已经检测到 U 盘,并已经进行分区,进入步骤 2。
步骤 2. 查看格式化信息。
- 若没有格式化,请参见 "4.2 用 mkdosfs 工具格式化" 进行格式化后,进入步骤 3。
- 若已格式化,进入步骤 3。
步骤 3. 挂载目录,请参见 "4.3 挂载目录"。
步骤 4. 对硬盘进行读写操作,请参见 "4.4 读写文件"。
三、EMMC 卡操作指南
3.1 操作示例
此操作示例通过 SDIO 接口实现对 EMMC 卡的读写操作。初始化及应用见如下操作:
说明:其中 X 为分区号,由 fdisk 工具分区时决定。
- 命令 fdisk 操作的具体目录需改为:~ $ fdisk /dev/mmcblk0
- 用 mkdosfs 工具格式化的具体目录需改为:~ $ mkdosfs -F 32 /dev/mmcblk0pX
- 挂载的具体目录需改为:~ $ mount -t vfat /dev/mmcblk0pX /mnt
步骤 1. 查看分区信息。
- 若没有显示出 p1,表示还没有分区,请参见 "4.1 用 fdisk 工具分区" 进行分区后,进入步骤 2。
- 若有分区信息 p1,则 EMMC 卡已经检测到,并已经进行分区,进入步骤 2。
步骤 2. 查看格式化信息。
- 若没有格式化,请参见 "4.2 用 mkdosfs 工具格式化" 进行格式化后,进入步骤 3。
- 若已格式化,进入步骤 3。
步骤 3. 挂载目录,请参见 "4.3 挂载目录"。
步骤 4. 对 EMMC 卡进行读写操作,请参见 "4.4 读写文件"。
3.2 操作中需要注意的问题
3.2.1 在正常操作过程中需要遵守的事项
- 每次需要读写 EMMC 卡时,必须确保 EMMC 卡已经创建分区,并将该分区格式化为 vfat 文件系统(通过 fdisk 和 mkdosfs 命令,具体过程参见 "4.1 操作示例")。
- 需要做一次 mount 操作挂载文件系统,才能读写 EMMC 卡;退出文件系统时,需要执行一次 umount 操作。
3.2.2 在正常操作过程中不能进行的操作
- 当前目录是挂载目录如 /mnt 时,不能 umount 操作,必须转到其它目录下才能 umount 操作。
- 系统中读写挂载目录的进程没有完全退出时,不能 umount 操作,必须完全结束操作挂载目录的任务才能正常 umount 操作。
3.3.3 在操作过程中出现异常时的操作
- EMMC 有多分区时,可以通过 mount 操作切换挂载不同的分区,但最后 umount 操作次数与 mount 操作次数相等时,才会完全 umount 所有的挂载分区。
四、创建分区以及格式化
4.1 用 fdisk 工具分区
通过 “4.1.1 查看当前状态”,对应以下情况选择操作:
- 若已有分区,本操作可以跳过,直接到 “4.2 用 mkdosfs 工具格式化”。
- 若没有分区,则在控制台的提示符下,输入命令 fdisk,具体格式如下:
~ $ fdisk 设备节点
回车后,输入命令 m,根据帮助信息继续进行以下的操作。
其中设备节点与实际接入的设备类型有关,具体名称在以上各章节的 “操作示例” 中均有说明。
4.1.1 查看当前状态
在控制台的提示符下,输入命令 p,查看当前分区状态:
Command (m for help): p
控制台显示出分区状态信息:
Disk /dev/mmc/blk1/disc: 127 MB, 127139840 bytes
8 heads, 32 sectors/track, 970 cylinders
Units = cylinders of 256 * 512 = 131072 bytes
Device Boot Start End Blocks Id System
上面信息表明设备没有分区,需要按照 “4.1.2 创建新的分区” 和 “4.1.3 保存分区信息” 的描述对设备进行分区。
4.1.2 创建新的分区
创建新的分区步骤如下:
步骤 1. 创建新的分区。
在提示符下输入命令 n,创建新的分区:
Command (m for help): n
控制台显示出如下信息:
Command action
e extended
p primary partition (1-4)
步骤 2. 建立主分区。
输入命令 p,选择主分区:
p
步骤 3. 选择分区数。
本例中选择为 1,输入数字 1:
Partition number (1-4): 1
控制台显示出如下信息:
First cylinder (1-970, default 1):
步骤 4. 选择起始柱面。
本例选择默认值 1,直接回车:
Using default value 1
步骤 5. 选择结束柱面。
本例选择默认值 970,直接回车:
Last cylinder or +size or +sizeM or +sizeK (1-970, default 970):
Using default value 970
步骤 6. 选择系统格式。
由于系统默认为 Linux 格式,本例中选择 Win95 FAT 格式,输入命令 t 进行修改:
Command (m for help): t
Selected partition 1
输入命令 b,选择 Win95 FAT 格式:
Hex code (type L to list codes): b
输入命令 l,可以查看 fdisk 所有分区的详细信息:
Changed system type of partition 1 to b (Win95 FAT32)
步骤 7. 查看分区状态。
输入命令 p,查看当前分区状态:
Command (m for help): p
控制台显示出当前分区状态信息,表示成功分区。
4.1.3 保存分区信息
输入命令 w,写入并保存分区信息到设备:
Command (m for help): w
控制台显示出当前设备信息,表示成功写入分区信息到设备:
The partition table has been altered!
Calling ioctl() to re-read partition table.
…………
~ $
4.2 用 mkdosfs 工具格式化
存在以下情况选择操作:
- 若已格式化,本操作可以跳过,直接到 “4.3 挂载目录”。
- 若没有格式化,则输入命令 mkdosfs 进行格式化:
~ $ mkdosfs -F 32 设备分区名
其中设备分区名与实际接入的设备类型有关,具体名称在以上各章节的 “操作示例” 中均有说明。
控制台没有显示错误提示信息,表示成功格式化:~ $
4.3 挂载目录
使用命令 mount 挂载到 mnt 目录下,就可以进行读写文件操作:
~ $ mount -t vfat 设备分区名 /mnt
其中设备分区名与实际接入的设备类型有关,具体名称在以上各章节的 “操作示例” 中均有说明。
4.4 读写文件
读写操作的具体情况很多,在本例中使用命令 cp 实现读写操作。
使用命令 cp 拷贝当前目录下的 test.txt 文件到 mnt 目录下,即拷贝至设备,实现写操作,如:
~ $ cp ./test.txt /mnt