boot compile
基础概念Thumb 指令Thumb 指令集是 ARM 架构为了解决代码密度(Code Density)问题而设计的一种压缩指令集. SCB在 ARM Cortex-M 微控制器开发中,CORTEX_SCB_VTOR(或在 CMSIS 标准库中常见的 SCB->VTOR)里的 SCB 是 System Control Block(系统控制块)的缩写SCB 是 ARM Cortex-M 处理器内核中一个非常核心的寄存器组和功能模块(位于系统控制空间 SCS 中)。它负责提供系统的配置、控制以及异常/中断状态的报告 通过 SCB,可以配置或获取以下系统级信息: CPU ID 与版本(CPUID 寄存器):识别是 Cortex-M3、M4 还是 M7,以及它的修订版本 中断与异常控制(如 SHCSR、AIRCR 等):控制系统异常的使能、优先级分组、软件复位系统等 功耗与睡眠模式(SCR 寄存器):配置睡眠深度(Sleep-on-exit、Sleepdeep 等) 向量表位置(VTOR 寄存器) CMSIS 标准库CMSIS 全称是 Cortex...
device driver
您好!我是在浏览 GitHub 开源项目时,偶然发现并了解到 LINUX DO 这个充满活力的技术社区的。作为一个初入编程世界的小白新人,这是我第一次接触此类技术社区。在认真浏览了社区里的几篇帖子后,我被大家分享的技术干货和友好的交流氛围深深吸引,觉得非常有趣且充满干货,因此十分渴望加入。此前因为注册必须满足 GitHub 账号满三年的硬性条件,当时我还差最后半个月,今天终于满期,特来提交申请,希望能和大家一起学习、共同进步!
无标题
Cortex-M 从上电到运行:启动、汇编与链接脚本入门本文面向刚接触 Cortex-M 固件的开发者,介绍处理器从复位到运行 C 程序的大致过程、常见汇编和 GNU 链接脚本语法,以及内存段和启动代码之间的关系。示例以本仓库的 MCU1 工程为准;不同芯片、Bootloader 和工具链的具体细节可能不同。 相关文件: app/Startup.S:复位处理函数和早期初始化。 app/exceptions.S:异常/中断处理函数和向量表。 app/mcu1.ld:MCU1 链接脚本和内存布局。 build/config.mk:MCU1 映像加载地址和入口地址。 app/main.c:应用 C 入口。 1. 先建立整体模型可以把启动理解为“找到入口、准备运行环境、进入应用”: 上电或复位 ↓Boot ROM / Bootloader 准备并加载固件映像 ↓处理器从向量表取得初始栈指针和复位入口 ↓执行 Reset Handler(启动汇编) ├─ 设置异常向量表 ├─ 设置栈 ├─ 初始化全局变量所在内存 ├─...
ethernet socket
TCP/UDPTCP保证可靠性 序列号、确认应答、超时重传 数据到达接收方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。如果发送方迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*RTT(报文段往返时间)+一个偏差值 窗口控制与高速重发控制/快速重传(重复确认应答) TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定要等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值。如果不使用窗口控制,每一个没收到确认应答的数据都要重发。使用窗口控制,如果数据段1001-2000丢失,后面数据每次传输,确认应答都会不停地发送序号为1001的应答,表示我要接收1001开始的数据,发送端如果收到3次相同应答,就会立刻进行重发;但还有种情况有可能是数据都收到了,但是有的应答丢失了,这种情况不会进行重发,因为发送端知道,如果是数据段丢失,接收端不会放过它的,会疯狂向它提醒… TCP...
linux driver
linux驱动模型字符设备驱动模型 驱动初始化驱动初始化中涉及到一个设备描述结构的概念。在任何一种驱动模型中,设备都会用内核中的一种结构来描述,这种结构称为设备描述结构。字符设备在内核中使用 struct cdev这种结构来描述 struct cdev { struct kobject kobj; struct module *owner; const struct file_operations *ops; //设备操作集 struct list_head list; dev_t dev; //设备号 unsigned int count; //设备数 }; count表明该类型设备的数目,如有两个串口,则count的值为2。dev是设备号,包含有主设备号和次设备号的信息。主设备号用于区分设备的类型,次设备号用于标记相同类型的设备的不同个体。如串口1和串口2使用同一驱动程序,则其主设备号相同,但次设备号不同。Linux内核中使用 dev_t 类型来定义设备号,dev_t 这种类型其实质为32位的 unsigned...
cpp note
字符串操作符字符串化(#)& 符号连接操作符 (##)#define example( instr ) printf("xxx %s\n", #instr) // “把参数 instr 直接转为字符串字面量”。#define example1(instr) #instr // 把参数文本直接转成字符串字面量,替换到调用处#define example2(n) num ## nint main() { example(TEST::LIC_EDFA); // xxx TEST::LIC_EDFA std::string str = example1(abc); printf("%s\n", str.c_str()); // abc printf("xxx %s\n", example1(yesai)); // yesai int num = 9; int num9 = example2(9); return...
无标题
基于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 选择然后再进行编译即可
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...
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...
