OS System
linux常用指令 systemctl petalinux 系统制作 系统引导和文件系统的制作 initram临时系统文件制作 ext4文件系统制作 编译结果的文件解释 BOOT.bin image.ub system.bit(bitstream) rootfs_cpio.tar.gz zynqmp_fsbl.elf u-boot SysMonPSU pgrep 获取指定进程信息 驱动创建 应用创建 gdb 远程调试 create modules 驱动 linuxptp 内核配置 rootfs设置 设置自动登录 PetaLinux patch生成和应用方法整理 patch 2021.1及以后的版本 清除patch 清理 devtool modify (linux-xlnx) 产生的源码与补丁 petalinux-build 清理 清理所有构建输出和缓存 或者使用 清理特定组件 清理内核 清理 u-boot 清理根文件系统 清理设备树 preboot 通过 mdio...
lwip ptp
lwip 支持 ptp和gptp功能记录背景xilinx的官方lwip bsp不支持 IEEE1588 协议 ptp和gptpptp: 可以在普通网卡上以软件方式实现,但精度只能达到毫秒级。要达到微秒级,需要支持硬件时间戳的网卡,但协议本身并不强制gPTP:强制要求链路上的每个设备(终端和交换机/网桥)都必须在硬件层面上支持时间戳。这意味着在数据包进入和离开网络端口的物理层瞬间,就由硬件打上时间戳,完全绕过了操作系统协议栈带来的随机延迟和抖动。这是实现纳秒级精度的基石。 lwip协议栈修改ptp 和 gptp 架构ptp实现 gptp实现 ptp(IEEE 1588)的基于udp的实现只需要绑定监听指定的端口(319, 320)上的事件就行但是gptp协议是IEEE 802.1AS, 仅支持 Layer 2(以太网帧),所以需要去捕获以太网帧,这里在ethernet的input入口处捕获。需要特别注意需要设置mac的hash表,让gptp的多播地址不被mac过滤。xilinx的mac设置hash表的时候需要先stopmac,设置完后需要restart...
WSL2
工程创建流程 vitis打开硬件描述(xsa)所在目录 create application project create a new platfrom hardware(xsa) 选中你的xsa文件 选择自己需要的工程模板(这里用的lwip udp client perf) 选择设置bsp lwip设置如下 去ps工程里添加数学库
WSL2
常用功能端口转发一次配置,可以实现 Windows端口==WSL端口 在WINDOWS用户目录下创建一个.wslconfig文件 [wsl2]localhostForwarding=true PS 如果Windows本地启动了指定端口, 这时WSL中可以使用相同的端口, 但是localhost:port 将指向Windows的服务 也可以直接在wsl的设置里将网络模式选择为Mirrored
WSL2
常用指令保存密码git config –global credential.helper store
RTOS System
RTOS 实时操作系统MOSI/MISO loopbackMOSI(Master Out Slave In)和 MISO(Master In Slave Out)是 SPI 总线的两条数据线。Loopback 指的是将 MOSI 和 MISO 物理上短接(或在软件中模拟),这样主机发送的数据会直接回到主机的接收端。在没有真实 SPI 从设备的情况下,可以用 loopback 测试 SPI 主机的收发流程、FIFO、回调等功能是否正常。 任务优先级设置#define TASK_PRIORITY_PAYLOAD (tskIDLE_PRIORITY + 4)#define TASK_PRIORITY_HEARTBEAT (tskIDLE_PRIORITY + 1)/* ... */int userTaskStack = TASK_PRIORITY_PAYLOAD;TaskHandle_t userTask = xTaskCreateStatic( &user_task_entry, ...
tool
订阅转换转换链接sub SwitchyOmega (V3) 配置 配置备份.bak ssh-keygen -R ip
C++ 泛型编程和模板
SFINAESubstitution Failure Is Not An Error : 替换失败不是错误*** 在模板的参数替换过程中,如果某个模板参数导致不合法的替换,编译器并不会立即报错,而是尝试寻找其他匹配的模板。 ***当编译器在实例化一个模板时,进行模板参数替换,如果替换过程中发生了错误(例如类型不匹配、表达式非法等),编译器会忽略这个模板,而不会将其视为编译错误。这时,编译器会继续寻找其他可能匹配的模板。如果没有找到其他匹配的模板,编译才会失败。SFINAE 主要用于函数模板的重载,通过某些条件选择合适的模板函数,而忽略不适用的函数模板。 typenametemplate <typename T>typename std::enable_if<std::is_integral<T>::value, void>::typeprocess(T value) { std::cout << "Processing integral type: " << value...
动态链接库和pybind11
构建 为了在C++项目下直接测试该DLL,在头文件中也需要暴露dll的API.如果需要生成python可调用的pyd模块, 需要include python解释器的include目录和boost目录、site-packages下的pybind11de include目录,另外还需要添加python的libs目录和boost目录下的编译完的stage下的lib目录。链接python*.lib #define BOOST_PYTHON_STATIC_LIB#include <boost/python.hpp>#define NOMINMAX#include<pybind11/pybind11.h>#undef max//放在<pybind11/numpy.h>之前(#define NOMINMAX有时不起作用)#include<pybind11/numpy.h>#define EXPORT_DLL __declspec(dllexport)class EXPORT_DLL className{ ...
architecure design
RPC远程过程调用(RPC):RPC 是一种通信机制,用于在分布式系统中不同的进程或计算机之间进行远程调用,使得它们可以像本地调用一样进行通信和交互。在嵌入式系统中,RPC 可用于实现分布式应用程序的模块化设计,允许不同的嵌入式设备或模块之间通过网络或其他通信介质进行函数调用和数据传输。通过 RPC,嵌入式系统的不同组件可以相互协作,共享资源和功能,提高系统的可扩展性和灵活性。