device driver
进程和线程定义 进程是资源分配的基本单位,在程序运行时创建 线程是程序执行的最小单位,是进程的一个执行流,一个进程由多个线程组成 区别 进程是资源分配的最小单位,线程是进程执行的最小单位,也是cpu调度的最小单位。两者都可以并发执行 进程拥有自己的独立地址空间,线程没有,线程必须依赖进程的地址空间。进程的创建会建立数据表来维护代码段、堆栈段和数据段,这种操作比较昂贵,开销比较大,线程的创建则是共享进程中的数据,开销比较小 线程之间的通信比较方便,同一进程下的线程共享全局变量和静态变量等数据。进程之间的通信则比较复杂(IPC) 进程切换的开销大于线程 每个进程都有一个程序执行的入口,但是线程不能独立运行 线程执行开销小,但是不利于资源的保护和管理。进程执行的开销大,但利于资源的保护和管理 进程状态创建、就绪、运行、阻塞、终止 创建一个应用程序从系统上启动,首先就是进入创建状态,需要获取系统资源创建进程管理块(PCB:Process Control...
ptp
PTP (IEEE 1588)PTP(IEEE 1588) 和 gPTP(IEEE 802.1AS) 都是用于网络设备间高精度时间同步的协议,精度都可以达到微秒甚至纳秒级。都是通过测量报文在网络中的传输延迟(Propagation Delay)以及主从时钟的偏差(Offset),进而修正从时钟的时间。 PTP 的核心思想:在网络上选举出一个时间基准(Grandmaster),其它节点(Slave)通过交换带时间戳的报文,估算出自己相对主时钟的偏差和链路延迟,然后不断修正本地时钟,使整个网络的时间趋于一致。 整个系统由几个关键部件组成: 报文交换:用一组特定报文(Sync / Follow_Up / Delay_Req / Delay_Resp 或 Pdelay 系列)携带或换取时间戳。 硬件时间戳:在尽可能靠近物理层的位置打戳,消除软件协议栈带来的不确定延迟。 计算公式:根据 4 个时间戳算出 offset 和链路延迟。 时钟伺服(servo):用一个 PI 控制器平滑地把本地时钟拉向主时钟,而不是硬跳变。 BMCA...
Yocto
Yocto定制linux (主机为ubuntu)构建步骤下载安装yocoto工程会用到的软件包sudo apt install gawk wget git-core diffstat unzip texinfo gcc-multilibsudo apt install build-essential chrpath socat cpio python3 python3-pip python3-pexpect sudo apt install xz-utils debianutils iputils-ping python3-git python3-jinja2 libegl1-mesa libsdl1.2-dev sudo apt install pylint3 xterm clone yocoto项目git clone git://git.yoctoproject.org/poky 首先你需要初始化构建环境,以此来得到一些重要的环境变量,进入poky目录,运行命令:source oe-init-build-env...
无标题
基于Yocto编译imx-boot 检查磁盘空间,至少需要200GB空间 wsl.exe –system -d Ubuntu-22.04 df -h /mnt/wslg/distroUbuntu-22.04为采用wsl.exe -l查看到的安装版本 代理设置 export https_proxy=http://127.0.0.1:7897 http_proxy=http://127.0.0.1:7897 all_proxy=socks5://127.0.0.1:7897不同代理设置方式不一样,用代理下载更快 安装必要的库sudo apt-get install build-essential chrpath cpio debianutils diffstat file gawk gcc git iputils-ping libacl1 liblz4-tool locales python3 python3-git python3-jinja2 python3-pexpect...
Yocto
petalinux 构建嵌入式webserveradd nginxpetalinuxde yocto layers中已经有了webserver的配方, 直接build就行 petalinux-build -c nginx nginx添加进镜像在project-spec/meta-user/conf/user-rootfsconfig中添加 CONFIG_nginx 然后在petalinux-config -c rootfs中的user layer中就会出现nginx 选择然后再进行编译即可
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 vhdx 内存优化导入Hyper-V# 启用Hyper-V功能(如果需要)Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All# 导入Hyper-V模块Import-Module Hyper-V 运行优化命令optimize-vhd命令需要在管理员权限的PowerShell中运行,并且需要Hyper-V模块支持。 optimize-vhd -Path "D:\00.wsl\ext4.vhdx" -Mode full windows...
无标题
wsl2的快照与回滚查看已安装的系统wsl -l -v NAME STATE VERSION* Ubuntu Running 2 docker-desktop Stopped 2 做快照wsl --export Ubuntu F:\WSL-bak\wsl-ubuntu.tar 回滚注销当前系统wsl --unregister Ubuntu 回滚wsl --import D:\WSL\Ubuntu F:\WSL-bak\wsl-ubuntu.tar --version 2 # 安装的哪个版本的就写哪个版本的(比如我安装的是Ubuntu-24.04)ubuntu2404 config --default-user USERNAME
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, ...
