AI编程体验
参考文章
知乎https://zhuanlan.zhihu.com/p/666861211
CSDNhttps://zhuanlan.zhihu.com/p/666861211
githubhttps://zhuanlan.zhihu.com/p/666861211
augment Code
Claude Code
成了成了!!!!
现在是北京时间4点56
linxu-kernel-interrupt
参考文章
知乎https://zhuanlan.zhihu.com/p/666861211
CSDNhttps://zhuanlan.zhihu.com/p/666861211
githubhttps://zhuanlan.zhihu.com/p/666861211
中断
CPU在正常运行期间,由外部或者内部引起的事件,让CPU停下当前正在运行的程序,转而去执行触发他的中断所对应的程序,处理完中断对应的程序以后在回来继续执行。这个就是中断。举例:同学A现在正在厨房做饭,突然电话响了,然后A关火去接电话。接完电话在回去开火继续做饭。这个过程就是一个中断的一个过程。
中断类型
同步中断由CPU本身产生,又称为内部中断。这里同步是指中断请求信号与代码指令之间的同步执行,在一条指令执行完毕后,CPU才能进行中断,不能在执行期间。所以也称为异常(exception)。
异步中断是由外部硬件设备产生,又称为外部中断,与同步中断相反,异步中断可在任何时间产生,包括指令执行期间,所以也被称为中断(interrupt)。
异常又可分为可屏蔽中断(Maskable interrupt) ...
linxu-kernel-syscall
参考文章
『 Linux 』“ 一切皆文件 “https://blog.csdn.net/2202_75303754/article/details/138967355
系统调用的基本概念
在linux中,操作系统负责硬件资源的封装,任务的创建、调度、读写磁盘
μc/os中,采用OSinit-OSTaskCreate-创建一个任务
Linux中,拥有权限管理来保证安全,划分内核态和用户态。通过系统调用,让APP某些运行陷入到内核态,以此来访问硬件设备
软中断
权限管理
程序的用户态、内核态
操作系统+ CPU软中断:swi/svc
CPU的运行级别:普通权限(普通运行)、特权(陷入到内核态)
ARM32:
普通模式:User
特权模式:FIQ、IRQ、SVC、ABT、UND
ARM64:EL0、EL1、EL2、EL3
X86:ring0 ~ ring
系统调用号
ARM:swi、svc
ARM : swi、svc
系统调用接口:read、write、printf
内核中的实现:sys_read、sys_write
系统调用号:
32位ARM:3、4
64位A ...
linxu内核学习笔记
参考文章
知乎https://zhuanlan.zhihu.com/p/666861211
CSDNhttps://zhuanlan.zhihu.com/p/666861211
githubhttps://zhuanlan.zhihu.com/p/666861211
软件分层思想
BSP:嵌入式底层系统开发,调试程序,让特定的系统跑在特定的板子上,具体的工作包括调Bootloader程序,加载操作系统内核,文件系统的加载,外设驱动程序的开发。
驱动开发:驱动与底层硬件直接打交道,充当了硬件与应用软件中间的桥梁。
应用层:网络服务层、文件系统、虚拟化
基础服务:进程、内存管理、VFS、中断、任务调度
模块化设计
更细粒度的模块划分、模块依赖
功能、模块、子系统、框架
Linux内核中的OOP思想
结构体
函数指针
宏内核与微内核
宏内核:宏内核将操作系统的所有核心功能集中到一个大的内核空间中,所有服务(如设备驱动、文件系统、内存管理等)都运行在内核态,紧密集成在一起。这种设计简化了模块间的交互,提高了性能,但增加了复杂性和维护难度。
微内核:微内核只保留最基本的系 ...
嵌入式系统启动流程
参考文章
参考文章https://blog.csdn.net/qq_28877125/article/details/131032064?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-0-131032064-blog-116835100.235^v43^pc_blog_bottom_relevance_base4&spm=1001.2101.3001.4242.1&utm_relevant_index=3
Linux的启动过程
桌面端和嵌入式端的启动过程都遵循以下步骤
这里以嵌入式端Linux启动为例子:
硬件上电与BootROM阶段
系统通电后,CPU首先执行固化在芯片内部的BootROM代码。该阶段完成基础硬件初始化(如时钟、片内RAM),并根据引脚配置确定启动设备(如eMMC、TF卡),随后从设备中加载SPL(Secondary Program Loader)到RAM并执行。
二级引导加载程序(SPL + U-Boot)
SPL:作为轻量级 ...
巡检机器人项目经历优化
项目背景
在本项目中,我们采用鸟瞰视角的3D视觉算法BEVDet,设计并实现了一款巡检机器人。该机器人主要用于变电站的路径规划和杂物检测,确保变电站的安全和高效运行。
技术选型与部署
3D目标检测算法选取与部署
选择了BEVDet算法,该算法在鸟瞰视角下的3D目标检测中表现出色。
使用TensorRT对模型进行量化,以提高模型的推理速度和效率。
在ROS(Robot Operating System)中部署了BEVDet算法,确保其能够在机器人平台上稳定运行。
ROS节点开发与测试
参与了模型部署ROS节点的编写及测试,确保模型能够在ROS环境中正确运行。
编写了六路海康威视GSM摄像头与算力板的通信及数据采集模块,实现了图像的高效预处理。
数据通信实现
实现了算力板与下层无人车底层控制系统的数据通信,确保了机器人能够根据检测结果进行路径规划和动作控制。
项目成果
路径规划:机器人能够根据BEVDet算法检测到的3D目标,动态规划最优路径,避免障碍物。
杂物检测:机器人能够准确检测变电站内的杂物,及时报告异常情况,确保变电站的安全。
系统集成:通过ROS节 ...
Linux_kernel
参考文章
内核模块https://blog.csdn.net/weixin_45093118/article/details/139397775
Linux kernel开发模式
如何构建kernel
获取配套的交叉编译工具链
SOC原厂提供:NXPST Rockchip Amlogic Allwinnertech 等
社区下载:Linrao Debian ARM Bootlin下载kernel源码
获取Linux Kernel主线LTS源码
Git方式获取: git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
压缩版下载: https://mirrors.edge.kernel.org/pub/linux/kernel/获取芯片原厂Kernel源码
Host下配置开发环境
安装必要依赖包
解压配置合适的工具链
指定编译板子配置文件
make BOARDNAME defconfig
编译
编译内核镜像 make -jN
编译设备树 make d ...
arm架构
跟踪日志
2024//
2024//
2024//
参考文章
参考文章https://zhuanlan.zhihu.com/p/666861211
ARM
ARM1 CPU内部运行的原理图
ARM架构,过去称作高级精简指令集机器,是一个精简指令集(RISC)处理器架构家族,其广泛地使用在许多嵌入式系统设计。由于节能的特点,其在其他领域上也有很多作为。ARM处理器非常适用于移动通信领域,符合其主要设计目标为低成本、高性能、低耗电的特性。另一方面,超级计算机消耗大量电能,ARM同样被视作更高效的选择。
ARM架构版本从ARMv3到ARMv7支持32位空间和32位算数运算,大部分架构的指令为定长32位(Thumb)指令集支持变长的指令集,提供对32位和16位指令集的支持),而2011年发布的ARMv8-A架构添加了对64位空间和64位算术运算的支持,同时也更新了32位定长指令集
至2009年为止,ARM架构处理器占市面上所有32位嵌入式RISC处理器90%的比例[5],使它成为占全世界最多数的32位架构。
产品系列
A - 多运行Linux系统
M - 多用于单片机
ARMv7嵌入式 ...
qemu模拟开发板开发
参考文章
如何配置 QEMU 虚拟机网络https://huaweicloud.csdn.net/6707aefbe2ce0119e0a1e3eb.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6NjUyNDYwLCJleHAiOjE3NDA2MjcwNjIsImlhdCI6MTc0MDAyMjI2MiwidXNlcm5hbWUiOiJBX3J1b3NodWkifQ.UvK-zaDEx_il-jNwsV5R23KQ9JmvEZ0mjEbYDA-PcRU&spm=1001.2101.3001.6650.15&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7Eactivity-15-129685202-blog-131290211.235%5Ev43%5Epc_blog_bottom_relevance_base4&depth_1-utm_source=distribute.pc_relevant.n ...
Buildroot
参考文章
Linux发行版列表https://zh.wikipedia.org/wiki/Linux%E5%8F%91%E8%A1%8C%E7%89%88%E5%88%97%E8%A1%A8
Linux的启动过程
发行版Linux操作系统
Linux发行版(也叫做GNUlinux发行版),为一般用户预先集成好的Linux操作系统及各种应用软件。一般用户不需要重新编泽,在直接安装之后,只需要小幅度更改设置就可以使用,通常以软件包管理系统来进行应用软件的营理,Linux发行板通常包含了包括桌面环境办公包、媒体播放器、数据车等应用软件。这些保作系统通总由Linux内核、以及来自GNU计划的大量的函数库,和基于x Window或者Wayland的图形界面。
Debian系列
Debian及其派生发行版使用deb软件包格式,并使用dpkg及其前端作为软件包管理器。
旗下最著名的就是Ubuntux系列和国内优麒麟和Deepin
Red Hat系
Red Hat Linux和SUSE Linux是最早使用RPM格式软件包的发行版,如今RPM格式已广泛运用于众多的发行版。
旗下最著名的是CentO ...
无线链路Wifibroadcast
参考文章
参考文章https://zhuanlan.zhihu.com/p/666861211
远程无线编写
通过无线网卡接收带有 radiotap 头的 802.11 数据包,并进行解析、过滤、FEC(前向纠错)、加密解密等处理。我们可以将其划分为几个模块来分析其功能和设计思路。
🧩 模块结构概览
模块
类名
主要职责
接收器
Receiver
负责打开网卡设备、设置混杂模式、过滤特定数据包、循环读取原始数据包
聚合器
Aggregator
负责 FEC 解码、数据包去重、会话密钥管理、丢包恢复等
数据流
-
实际上聚合器还负责将数据流输出到指定的目的地
🔍 Receiver 类详解
构造函数:初始化网卡
Receiver::Receiver(const char *wlan, int wlan_idx, uint32_t channel_id, BaseAggregator *agg, int rcv_buf_size)
使用 pcap_create() 创建一个 pcap 设备。
设置混杂模式(promiscuous mode)、超时 ...
OpenIPC开发文档
跟踪日志
2024/1/9
通过 TFTP 和 UART 逐步安装 OpenIPC 固件。
2024//
2024//
参考文章
参考文章https://github.com/OpenIPC/wiki/blob/master/en/installation.md
说明
核心就是利用网络摄像头,而且网络监控的市场很大,网络摄像头可选择的范围很大,可以根据主控芯片、图像传感器的型号,以及板载的串口(刷鞋固件、通信),USB(连接WIFI网卡)的情况自由选择
我这里选择的是 SigmaStar SsC338Q 分辨率4K@20FPS 内置2Gb DDR3
架构:
我的工作任务:
硬件环境的搭建
openipc固件的烧写
天空端电路搭建
地面端环境的烧写
固件的编译和编译脚本
裁剪的openipc linux内核中执行启动脚本的过程
rtl8812网卡天空端驱动(内核配置的)、rtl8812au地面端驱动(开源项目)
摄像头驱动(开源的),视频编码器(闭源方案)
wfb-ng数据链路
地面端解码方案(安卓、linux、嵌入式开发板)
固件安装
这里是利用的TFTP和UART ...