Wei.Studio's Blog

热爱技术,拥抱AI

在使用Zynq进行PS+PL互联开发时,PL端上运行的是时序电路,如果PS端的C代码由于各种异常原因挂死,可以通过复位系统重新执行以恢复功能。但是如果想在复位的过程中保持PL时序电路继续运行,则处理起来比较复杂,阅读本文,您可以了解到以下内容

  • Zynq的watchdog工作原理是什么,如何控制watchdog实现监测软件运行异常触发复位
  • 如何让watchdog的复位仅复位PS,而不复位PL
  • 复位后如何知道启动原因
  • 复位后C代码是从FSBL执行的,如何跳过重新初始化PL加载比特流的处理
阅读全文 »

在Linux网络驱动中,一些以太网MAC可能没有连接一个常见的使用MDIO管理的PHY,例如MAC对MAC、MAC对FPGA等。这种情况下,设备树提供了”fixed-link”绑定方法,其原理是当以太网驱动检测到设备树中存在”fixed-link”后,不会在配置流程中对PHY进行标准的MDIO操作,而是内核为MAC创建一个虚拟的有默认值的PHY设备

“fixed-link”的使用方法是在以太网MAC的设备节点下创建一个”fixed-link”的子节点,并编写以下属性

  • “speed” (整型 必须存在) 表明连接速率,可选的数值为10、100、1000

  • “full-duplex” (布尔 可选的) 表明是否使用全双工,如果没有该属性,默认是半双工

  • “pause” (布尔 可选的) 表明pause帧是否被启用

  • “asym-pause” (布尔 可选的) 表明是否启用 Asymmetric Pause帧功能

  • “link-gpios” (gpio-list 可选的) 表明是否可以通过gpio来读取是否link up

例子

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ethernet@0 {
...
fixed-link {
speed = <1000>;
full-duplex;
};
...
};

ethernet@1 {
...
fixed-link {
speed = <1000>;
pause;
link-gpios = <&gpio 12 GPIO_ACTIVE_HIGH>;
};
};

What is GStreamer

GStreamer的基本设计来自美国俄勒冈大学研究生院的视频管道(video pipeline)研究,是一个用于创建流媒体应用的框架。GStreamer的处理对象主要是音频和视频数据,但是不局限于音视频,而是可以处理任何数据流。管道的设计使得GStreamer具有较小的开销和延迟,组件插件化的设计使得各种音视频处理组件可以混合并匹配到任意管道中,开发音频和视频处理应用,为数据流创建管道变得非常简单

阅读全文 »

在多媒体尤其是视频处理领域,FFmpeg和GStreamer是最为流行的工具,它们在音视频处理领域有着广泛的应用。FFmpeg简单易用,通过一条命令即可快速完成多媒体处理任务,使用最为广泛,搞过音视频处理的人几乎都知道它。而GStreamer是一个多媒体处理框架,其管道化的设计更适合构建复杂的多媒体应用程序,且模块化的设计和插件系统使其更具灵活性和扩展性

阅读全文 »

介绍时钟提供者,首先要介绍设备树中与时钟节点相关内容,在设备树中描述时钟节点,有两种方式,第一种方式是将系统所有时钟抽象为一个虚拟设备,用一个节点表示

1
2
3
4
5
clock: clock-controller@0x10030000 {
compatible = "samsung,exynos4210-clock";
reg = <0x10030000 0x20000>;
#clock-cells = <1>;
};
阅读全文 »

如果没有时钟消费者来使用时钟,那么提供时钟的驱动程序将不起任何作用。提供者启动的主要目的就是为消费者分配时钟资源,这些时钟被用于各种用途。Linux内核提供了相应的API来完成时钟的使用。消费者需要在其代码中包含。另外,如今主流的驱动代码中都使用了设备树来为消费者提供时钟。在设备树中,时钟消费者的时钟绑定应该跟在提供者后面,因为消费者的指定符号是由提供者的#clock-cells属性决定的,例如以下UART节点的时钟描述

阅读全文 »

嵌入式系统中,时钟一直以来都是非常重要的部分,几乎所有的数字电路都需要时钟来驱动工作,各种计算机总线以及大多数外设接口都携带了时钟信号来同步数据,现代计算机体系结构中CPU和DDR还支持动态调频技术来调整负载和功耗。在CCF框架出现之前,Linux有一个老旧的时钟框架,该框架只有对时钟相关的编程接口定义,不同的SoC都有一套该框架的实现。随着SoC的发展,很快发现SoC的时钟硬件设计非常相似,导致内核中相关的时钟代码实现也非常相似,这种冗余和复杂的代码设计是不合理的

阅读全文 »

在程序的编译层面,可以有一些手段,将任意文件作为一种资源嵌入到可执行文件中,在代码中通过导入符号的方式来访问文件中的内容。利用这种技术,能够很方便的做到一些单纯用C语言做不到的事情

阅读全文 »

在上一篇文章中,对使用TensorRT引擎进行单幅图像推理进行了介绍,本文仍然使用Python API,在上篇文章的基础上,对视频实时推理的实现进行介绍

阅读全文 »

在Linux系统中,设备树Device Tree的概念已经广泛使用了,启动相关代码和驱动代码中随处可见设备树的身影。U-Boot中也引入了设备树的内容,通过设备树信息在运行时进行动态配置,使得U-Boot对板级信息的适配和描述更加灵活,一个单一的U-Boot二进制能够支持多个板子。U-Boot中使用flat device tree(fdt)扁平设备树,前面的文章中已经分析过,在代码中U-Boot通过gd->fdt_blob来指向内存中的设备树信息,阅读本文前,请思考

阅读全文 »
0%