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

目录

前言 

一、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
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
目录 3 DMA驱动 1 3.1 简介 1 3.2 概要 1 3.3 VxBus驱动方法 1 3.3.1 {vxbDmaResourceGet}( ) 1 3.3.2 {vxbDmaResourceRelease}( ) 2 3.3.3 {vxbDmaResDedicatedGet}( ) 2 3.4 头文件 2 3.5 BSP配置 3 3.6 可用的工具函数 3 3.7 初始化 3 3.8 DMA系统结构和函数 3 3.8.1 (*dmaRead)( ) 3 3.8.2 (*dmaReadAndWait)( ) 4 3.8.3 (*dmaWrite)( ) 4 3.8.4 (*dmaWriteAndWait)( ) 4 3.8.5 (*dmaCancel)( ) 5 3.8.6 (*dmaPause)( ) 5 3.8.7 (*dmaResume)( ) 5 3.8.8 (*dmaStatus)( ) 5 3.9 调试 5 4 中断控制器驱动 5 4.1 介绍 6 4.2 概要 6 4.3 VxBus驱动方法 7 4.3.1 基本方法 7 4.3.2 动态向量方法 8 4.3.3 多处理器方法 9 4.4 头文件 9 4.5 BSP配置 10 4.5.1 中断输入表 10 4.5.2 动态向量表 11 4.5.3 CPU路由表 12 4.5.4 中断优先级 12 4.5.5 交差路由表 13 4.6 现有的工具函数 14 4.6.1 intCtlrHwConfGet( ) 14 4.6.2 intCtlrISRAdd( ) 14 4.6.3 intCtlrISRDisable( ) 14 4.6.4 intCtlrISREnable( ) 15 4.6.5 intCtlrISRRemove( ) 15 4.6.6 intCtlrPinFind( ) 15 4.6.7 intCtlrTableArgGet( ) 15 4.6.8 intCtlrTableFlagsGet( ) 15 4.6.9 intCtlrTableIsrGet( ) 15 4.6.10 intCtlrHwConfShow( ) 15 4.6.11 intCtlrTableCreate( ) 15 4.6.12 intCtlrTableFlagsSet( ) 15 4.1.13 intCtlrTableUserSet( ) 15 4.6.14 VXB_INTCTLR_ISR_CALL( ) 15 4.6.15 VXB_INTCTLR_PINENTRY_ENABLED( ) 16 4.6.16 VXB_INTCTLR_PINENTRY_ALLOCATED( ) 16 4.6.17 调度函数 16 4.7 初始化 16 4.8 中断控制器术语和层次 17 4.9 中断优先级 17 4.10 ISR调度 18 4.11 管理动态中断向量 20 4.12 中断输入的内部特征 22 4.13 VxWorks SMP 多处理器问题 22 4.14 调试 22 5 多功能驱动 23 5.1 介绍 23 5.2 概述 23 5.3 VxBus驱动方法 23 5.4 头文件 23 5.5 BSP配置 23 5.6 可用的工具函数 24 5.7 初始化 24 5.8 设备互联 24 5.8.1 交互寄存器 24 5.8.2 共享资源 25 5.8.3 其它交互 25 5.9 子设备的逻辑位置 25 5.10 调试 25 6 网卡驱动 25 6.1 介绍 25 6.1.1 术语 25 6.1.2 网络概述 26 6.2 网络接口驱动程序 27 6.2.1 网络接口驱动概述 27 6.2.2 网络接口驱动程序VxBus驱动方法 28 6.2.3 网络接口驱动程序头文件 33 6.2.4 网络接口驱动程序BSP配置 34 6.2.5 网络接口驱动程序可用的工具程序 34 6.2.6 网络接口驱动程序初始化 42 6.2.7 MUX:连接到网络代码 42 6.2.8 jobQueueLib:延迟中断处理 43 6.2.9 使用Ipcom_pkt包 43 6.2.10 netBufLib:用M_BLKs传输数据 46 6.2.11 协议对驱动程序的影响 48 6.2.12 其它的网络接口驱动问题 48 6.2.13 网络接口驱动程序的调试 48 6.3 PHY驱动程序 56 6.3.1 PHY驱动概述 56 6.3.2 PHY驱动程序的VxBus驱动方法 58 6.3.3 PHY驱动程序头文件 60 6.3.4 PHY驱动的BSP配置 60 6.3.5 PHY驱动程序拥有的工具程序 60 6.3.6 PHY驱动的初始化 62 6.3.7 PHY驱动的调试 62 6.4 无线以太网驱动 62 6.5 层次END驱动 62 7 Non-Volatile RAM驱动 63 7.1 介绍 63 7.2 Non-Volatile RAM 驱动 63 7.2.1 NVRAM驱动概述 63 7.2.2 针对NVRAM驱动的VxBus驱动方法 63 7.2.3 头文件 64 7.2.4 NVRAM驱动的BSP配置 64 7.2.5 NVRAM驱动的工具程序 65 7.2.6 NVRAM驱动的初始化 65 7.2.7 NVRAM块大小 65 7.2.8 栈NVRAM实例 66 7.2.9 调试NVRAM驱动 66 7.3 TureFFS Flash文件系统支持 66 7.3.1 TrueFFS概述 66 7.3.2 TrueFFS驱动开发流程 67 8 资源驱动 90 8.1 介绍 90 8.2 概要 90 8.3 VxBus驱动方法 91 8.4 头文件 91 8.5 BSP配置 91 8.6 可以的工具函数 91 8.7 初始化 91 8.8 调试 91 10 存储器驱动 92 10.1 介绍 92 10.2 概要 92 10.3 VxBus驱动方法 92 10.4 头文件 92 10.5 BSP配置 92 10.6 可用的工具程序 93 10.7 初始化 93 10.8 VxWorks文件系统关联接口 93 10.8.1 设备创建 93 10.8.2 处理 95 10.8.3 事件报告 95 10.9 写一个新的存储器驱动 96 10.10 调试 97 12 USB驱动 97 12.1 介绍 97 12.2 风河USB概要 98 12.2.1 USB主机栈驱动 98 12.2.2 USB外设驱动 98 12.3 主机控制器和根集线器类驱动 98 12.3.1 VxBus驱动方法 98 12.3.2 头文件 99 12.3.3 BSP配置 99 12.3.4 可用的工具函数 101 12.3.5 初始化 101 12.3.6 调试 101 13 其它驱动类 103 13.1 介绍 103 13.2 概要 103 13.3 VxBus驱动方法 103 13.4 头文件 104 13.5 BSP配置 104 13.6 可以的工具函数 104 13.7 初始化 104 13.8 调试 104

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积步千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值