[外设篇] 设备驱动操作指南

目录

前言 

一、ETH 操作指南

1.1 操作示例

1.2 ethtool 配置接口 

二、USB 2.0 Host/USB3.0 Host 操作指南

2.1 U 盘操作示例

2.1.1 插入检测

2.1.2 初始化及应用

三、EMMC 卡操作指南 

3.1 操作示例

3.2 操作中需要注意的问题

3.2.1 在正常操作过程中需要遵守的事项

3.2.2 在正常操作过程中不能进行的操作

3.3.3 在操作过程中出现异常时的操作

四、创建分区以及格式化

4.1 用 fdisk 工具分区

4.1.1 查看当前状态 

4.1.2 创建新的分区

4.1.3 保存分区信息

4.2 用 mkdosfs 工具格式化

4.3 挂载目录

4.4 读写文件 


前言 

本章内容主要介绍外设驱动的一些操作方法,其中包括 "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 需要下载的文件所在的 serverip 地址。

  • 上传文件
    tftp -l xx.file remoteip –p

    其中,xx.file 为需要上传的文件,remoteip 文件需要上传到的 serverip 地址。

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 盘或移动硬盘上的第一个分区,当存在多个分区时,会出现 sda1sda2sda3 等字样。

2.1.2 初始化及应用

模块插入完成后,进行如下操作:

说明:sdXYX 代表磁盘号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 文件系统(通过 fdiskmkdosfs 命令,具体过程参见 "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

你可能感兴趣的:(嵌入式驱动开发,arm开发,linux)