跳转到内容

系统控制、存储和 USB

1. 看门狗 (Watchdog)

1.1. 查看看门狗资源

使用 ls 命令可以查看系统中存在多少个看门狗节点。

Terminal window
ls /dev/watchdog\*

查看看门狗资源

查看看门狗资源

1.2. 快速开始

1.2.1 准备开发环境

在 PC 端的 Ubuntu 系统中运行 run 脚本,进入 EASY-EAI 编译环境。详情如下。

Terminal window
cd ~/develop_environment
./run.sh 2204

1.2.2 下载源码并编译示例

首先,在虚拟机后台终端中执行以下命令,创建外设示例源码的管理目录:

Terminal window
cd /opt
mkdir -p EASY-EAI-Nano-TB/demo

下载示例程序:

例如,将示例程序下载到“PC\D:”(没有指定要求,用户可放在任意位置)。

然后,将下载的示例复制到虚拟机文件系统中。步骤请参考下图。

下载源码并编译示例

下载源码并编译示例

最后,进入对应示例的目录并执行编译操作。具体命令如下:

Terminal window
cd EASY-EAI-Nano-TB/demo/05_watchDog
./build.sh

💡 注意:由于依赖库放置在板端,交叉编译过程中需要保持 /mnt 挂载。

下载源码并编译示例

下载源码并编译示例

1.2.3 运行示例

通过串口调试或 SSH 访问开发板后台,并进入示例所在目录:

Terminal window
cd /userdata

运行示例的命令如下:

Terminal window
./05_watchDog

1.2.4 运行结果

运行结果如下【注意!!运行 demo 会导致系统重启,请谨慎操作】。

运行结果

运行结果

如果不希望系统重启,可以在中途按键盘上的【Ctrl+C】停止看门狗进程。

1.3. C 语言使用示例

这是看门狗的 C 语言使用示例。代码路径为 05_watchDog/test-watchDog/main.c。 可作为编码参考。以下代码展示了看门狗定时器的基本操作流程:

void ctrl_c_handler(){
int ret = wdt_close();
if(ret < 0){
printf("\n看门狗禁用失败!!!\n");
}else if(ret == 0){
printf("\n看门狗禁用成功!!!\n");
}
exit(0);
}
int main(){
int timeout = 30;
int ret = wdt_open(timeout);
if(ret < 0){
printf("看门狗启用失败!!!\n");
return -1;
}
printf("看门狗启用成功。实际超时时间:%d(秒)\n", ret);
// 捕获 Ctrl+C 信号
signal(SIGINT, ctrl_c_handler);
int feedTimes = 0;
while (1)
{
sleep(3);
if(5 < feedTimes){
printf("不再喂狗(停止清除看门狗)\n");
continue;
}
if(0 == wdt_feeddog()){
feedTimes++;
printf("喂狗(清除看门狗)成功!!!\n");
}else{
printf("喂狗(清除看门狗)失败!!!\n");
}
}
return 0;
}

2. TF 卡插槽

2.1 硬件连接介绍

💡 注意:TF 卡支持热插拔(通电时插拔),但如果底板未安装保护外壳,容易触碰到底板上的元件,并且板子附近的金属部件更容易导致短路。因此,在插拔外设时,强烈建议确认电源已经完全断开。

2.2 TF 卡挂载

2.2.1 查看 TF 卡节点

插入 TF 卡后,/dev/ 目录中会出现名为 mmcblk1 的设备节点。可以使用以下命令查看。

Terminal window
ls /dev/mmcblk\*

查看 TF 卡节点

查看 TF 卡节点

执行 mount 命令可以查看挂载状态。

Terminal window
mount

查看 TF 卡节点

查看 TF 卡节点

2.2.2 TF 卡自动挂载/卸载

当前开发板可通过 /usr/lib/udev/rules.d/61-removable-disk-auto-mount.rules 规则文件管理 TF 卡的自动挂载与卸载。默认挂载位置为 /mnt/sdcard 目录。

TF 卡自动挂载/卸载

TF 卡自动挂载/卸载

2.2.3 TF 卡手动挂载

执行以下命令可以将 TF 卡挂载到 /mnt/sdcard。

Terminal window
sudo mount /dev/mmcblk1 /mnt/sdcard

也可以将 TF 卡的【分区 1】挂载到 /mnt/sdcard。

Terminal window
sudo mount /dev/mmcblk1p1 /mnt/sdcard

挂载成功后,进入 /mnt/sdcard 目录即可查看 TF 卡当前保存的内容。

TF 卡手动挂载

TF 卡手动挂载

2.2.4 TF 卡手动卸载

卸载 TF 卡前,需要先离开 TF 卡的挂载目录(例如:/mnt/sdcard)。否则无法执行卸载命令。

Terminal window
cd /
umount /mnt/sdcard ## 需要 root 权限

不过,由于存在 61-removable-disk-auto-mount.rules 规则文件,即使手动卸载 TF 卡,也会被规则文件再次自动挂载到 /mnt/sdcard。因此,如果确实不想挂载,需要将该规则文件【删除】或【从 /usr/lib/udev/rules.d/ 中移走】。

3. USB

3.1. USB 硬件资源概述

3.1.1 两种 USB 模式

EASY EAI Nano-TB 开发板支持两种 USB 工作模式:

两种 USB 模式

两种 USB 模式

  • 默认模式: 默认情况下,USB 资源在设备树中配置为【2 路 USB2.0 HOST】以及【ADB】。

  • USB3.0 模式: 当用户需要高速 USB(如工业相机等)或双千兆网口时,可以通过修改内核源码(设备树),使 USB 接口工作在高速模式。

USB 资源的原理框图如下。

两种 USB 模式

两种 USB 模式

💡 注意:作为 USB3.0 模式使用时,必须拔掉 ADB 线缆。否则可能会对【所有】USB 接口造成串扰(干扰)。

3.2. 切换到 USB3.0 模式

3.2.1 升级到最新固件

3.2.2 下载 Ubuntu 系统 SDK 源码

关于 ubuntu_sdk 源码(主要是内核源码)的下载,请参考“嵌入式底层开发/Ubuntu 系统 SDK/编译说明”。

3.2.3 修改内核设备树

然后,按照下图说明,修改【内核源码开发仓库】中的设备树文件:

修改内核设备树

修改内核设备树

  • EASY-EAI-Nano-TB 设备树入口: arch/arm64/boot/dts/rockchip/rv1126b-nano.dts

编译完成后,将生成新的 kernel.img。

3.2.4 更新内核镜像

将上一步生成的 kernel.img 复制到固件的 rockdev 目录中,替换原来的 kernel.img,然后将 kernel.img 写入开发板。

3.3. 功能确认和性能测试

  • 测试用 U 盘: 【USB3.0】Kingston U 盘

  • 测试接口:

功能确认和性能测试

功能确认和性能测试

U 盘挂载命令:

Terminal window
sudo mkdir -p /mnt/usb
sudo mount /dev/sda /mnt/usb

U 盘测试命令 - 读取:

Terminal window
dd if=/dev/sda of=/dev/null bs=1M count=1000 iflag=direct status=progress

U 盘测试命令 - 写入:

Terminal window
dd if=/dev/zero of=/mnt/usb/test.tmp bs=1M count=1000 oflag=direct status=progress

3.3.1 USB2.0 模式

功能确认:

Terminal window
lsusb -t

仅存在 1 路通信速度为 480M 的 USB2.0 HOST,符合预期结果。

  • 1GB 大小 — 读取测试:(※ 请参考原文档中的执行结果)

功能确认:

功能确认:

  • 1GB 大小 — 写入测试:(※ 请参考原文档中的执行结果)

功能确认:

功能确认:

3.3.2 USB3.0 模式

由于 USB3.0 模式下无法使用 ADB,因此需要使用串口调试或 SSH 调试访问开发板后台。

功能确认:

lsusb -t

功能确认:

功能确认:

存在 1 路通信速度为 480M 的 USB2.0 HOST,以及 1 路通信速度为 5000M 的 USB3.0 HOST,符合预期结果。

  • 1GB 大小 — 读取测试(取决于 U 盘读写速度):(※ 请参考原文档中的执行结果)

功能确认:

功能确认照片

  • 1GB 大小 — 写入测试(取决于 U 盘读写速度):(※ 请参考原文档中的执行结果)

功能确认:

功能确认照片