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 ...
bootloader嵌入式芯片启动过程全解析
参考文章
bootloader的全面解析https://blog.csdn.net/qq_51004011/article/details/138376644
STM32 开发必备-内存地址(*****)https://zhuanlan.zhihu.com/p/648904738
STM32、GD32固件升级IAPhttps://blog.csdn.net/RMDYBW/article/details/140552321
什么是Bootloader
在嵌入式操作系统中,BootLoader是在操作系统内核运行之前运行。可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的环境。
在嵌入式系统中,通常并没有像BIOS那样的固件程序(注,有的嵌入式CPU也会内嵌一段短小的启动程序),因此整个系统的加载启动任务就完全由BootLoader来完成。
BootLoader 起到了桥梁的作用,连接了硬件启动与高级软件运行之间的环节,确保系统能够从一个初始、裸机的状态过渡到一个完整的、可操作的运行环境。
两种Bootloader ...
bevdet-tensorrt-cpp-master
跟踪日志
2024//
2024//
2024//
参考文章
参考文章https://zhuanlan.zhihu.com/p/666861211
_Zh1218_Zh
1111
视频编码技术
参考文章
h.264基础解析https://blog.csdn.net/weixin_60610210/article/details/144188041
默认 提示块标签
default 提示块标签
primary 提示块标签
success 提示块标签
info 提示块标签
warning 提示块标签
danger 提示块标签
视频编码技术
所谓视频编码方式就是指通过压缩技术,将原始视频格式的文件转换成另一种视频格式文件的方式。视频流传输中最为重要的编解码标准有国际电联的H.261、H.263、H.264,运动静止图像专家组的M-JPEG和国际标准化组织运动图像专家组的MPEG系列标准,此外在互联网上被广泛应用的还有Real-Networks的RealVideo、微软公司的WMV以及Apple公司的QuickTime等。
为什么会有视频编解码技术
通常视频文件都非常庞大,如果直接存储或者传输,那么对内存大小和传输速度的要求将会变的非常高,进而降低用户的体验,也不利于整个生态的发展。
因此为了解决上述问题,才有了视频编解码技术,其通过 ...