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 ...
OpenIPC源码编译
参考文章
参考文章https://zhuanlan.zhihu.com/p/666861211
项目剖析
board/, configs/, linux/, packages/与不同的板子bearing相关,来自该特定供应商的芯片。
board/ 包含由名为 家族。在每个这样的 family 目录中都驻留着内核配置 该系列中各个处理器的文件、通用补丁和其他 特定于系列的文件。
configs/目录包含默认配置文件 (defconfig) 带有来自给定供应商的处理器的各种板。这些配置文件因硬件设置、包含的软件包集、不同的默认值而设置不同。这些 defconfig 文件中的每一个都是单独的包中生成单独的固件二进制文件。
package/目录中包含指向用于构建结果的包的符号链接 固件。
Config.in是一个配置文件,它整合了来自所有 提供的软件包。
ssc338Q烧录的FPV固件的Buildroot 配置文件
Buildroot 是用于 OpenIPC 的 Linux 发行版。用于许多嵌入式系统,因为它的占用空间非常小,并且可以轻松定制以包含或排除特定功能
编译目标
编译步骤
O ...
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
固件安装
这里是利用的TFTP和UART来安装固件
SoC识别
SoC(系统级芯片)包括相机的 CPU 内核以及所有必要的外围设备,例如相机和网络接口。这部分由摄像头厂商确定,需要看IC标记丝印来查看,或者使用ipctool软件识别SoC型号
闪存芯片大小
通常是摄像头8引脚的一个芯片,可以通过U-boot启动过程确认,也可以查看丝印(丝印包含64,即是8M,包含128,即16M)
TFTP服务器
TFTP(Trivial File ...
OpenIPC
跟踪日志
2024//
2024//
2024//
参考文章
参考文章https://zhuanlan.zhihu.com/p/666861211
Linux/Ubuntu20 安装 TP-link(RTL8812AU) 无线网卡驱动https://blog.csdn.net/weixin_46283523/article/details/127072929
主流视频编码器H264、HEVC、AV1之间的视频质量以及编码速度比较https://www.bilibili.com/opus/733259258149208084
参考文献
[1]徐瑶.基于H.264的视频压缩技术及其在视频监控系统中的应用[D].安徽大学
引言
图传系统
无线图传技术即无线图像传输技术,是指不用布线(线缆)利用无线电波来传输图像数据的技术。
工作原理
无线图传技术主要涉及图像采集、编码、调制、发射、接收、解调、解码和图像显示等环节。
图像采集:通过摄像头或其他图像采集设备获取图像信息。这些设备可以是专业的摄像机、监控摄像头、手机摄像头等。采集到的图像通常是模拟信号或数字信号,具体取决于采集设备 ...
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