- 博客(35)
- 收藏
- 关注
原创 Bring-up Yocto 构建 imx6ull 镜像(kernel, dts and rootfs)
本文介绍基于Yocto构建i.MX6ULL定制镜像的完整流程,涵盖内核、设备树及根文件系统的修改。通过devtool工具提取并修改Linux内核源码,使用patch方式集成设备树更改与功能配置(如NFS、CAN);利用bbappend文件添加自定义defconfig或配置文件,实现功能定制。同时,通过修改base-files和mosquitto配方,完成主机名、欢迎信息及服务安装。最终生成包含定制内核、设备树与功能组件的完整系统镜像。
2026-10-26 15:19:25
206
原创 在ubuntu中通过 docker 搭建 yocto 开发环境
本文详细介绍在 Ubuntu 20.04 主机上,基于 Docker 搭建适用于 NXP i.MX6ULL 的 Yocto 开发环境。通过构建 Ubuntu 22.04 容器,配置阿里云源与国内镜像加速,实现高效依赖安装与代码同步。利用 repo 工具获取 NXP 官方 i.MX Yocto 源码,结合主机挂载的持久化目录(downloads/sstate-cache),优化构建性能。通过合理配置 local.conf 实现下载加速与 SState 缓存共享,最终完成 i.MX6ULL 镜像的初始化与构建,
2026-10-21 16:07:48
239
原创 Bring up Yocto 构建基于官方 imx6ull-14x14-evk 的 ubuntu 镜像
本文介绍基于Yocto构建i.MX6ULL自定义镜像的完整流程:在Ubuntu+Docker环境下搭建Yocto开发环境,创建自定义layer并集成至构建系统;通过继承官方imx6ull14x14evk配置,定义新machine(my-imx6ull),指定自定义设备树和U-Boot配置;采用patch方式修改设备树源码,覆盖引脚、外设及兼容性信息,并在U-Boot阶段验证model与compatible属性。最终完成编译、烧录与硬件验证,实现定制化嵌入式系统部署。
2026-10-21 15:53:44
227
原创 基于 Yocto 的 i.MX6ULL CANopen-LVGL D-Bus 通信应用开发与集成实践
本文介绍基于Yocto构建的i.MX6ULL嵌入式系统开发,实现CANOPEN与DBus通信的双模块Demo。通过修改设备树配置LCDIF和CAN1接口,启用CAN驱动并集成iproute2、can-utils进行测试。自定义meta-myapp层管理demo-a(CANOPEN+DBus)与demo-b(DBus+LVGL显示)应用,利用sdbus-c++实现跨进程通信,最终在LCD上实时显示CAN数据,完整验证了从硬件驱动到应用层的数据链路。
2026-10-21 10:27:21
221
原创 STM32N6570-DK上部署 object detection dog
本文介绍了基于STM32N6570-DK开发板的Object Detection模型训练与部署流程。主要内容包括:1) 搭建GPU开发环境(Miniconda+TensorFlow 2.10.1);2) 配置STEdgeAI工具链并修改N6开发板加载配置文件;3) 选择SSD MobileNetV2 FPNLite作为目标检测模型。文章详细记录了环境配置步骤、CUDA验证方法以及STEdgeAI工具的路径设置要点,为在STM32嵌入式设备上部署目标检测模型提供了完整的开发指南。
2026-07-02 15:48:35
290
原创 STM32F429 外部SPI Flash Loader 开发指南
本文介绍了为STM32F429微控制器开发外部SPI Flash加载器的项目。该加载器支持通过STM32CubeProgrammer工具将代码直接烧写到MX25L12835F SPI Flash芯片中。开发基于STM32CubeIDE环境,使用HAL库实现SPI5接口通信。项目包含Loader源代码集成、硬件配置(SPI5接口连接)和系统初始化等功能,支持内存映射模式和校验和计算。开发前需准备STM32CubeIDE、STM32CubeMX等工具,并配置STM32F429IGH6微控制器与外部Flash芯片
2026-01-13 10:38:06
985
原创 I.MX 6ULL HAB 安全启动实操
本文介绍了在i.MX6ULL处理器上实现安全启动的完整流程。首先基于NXP官方u-boot进行移植,创建自定义板级支持包,包括配置修改、设备树调整和构建流程。详细分析了生成的u-boot-dtb.imx文件结构,重点解析了IVT(Image Vector Table)、Boot Data和DCD(Device Configuration Data)等关键部分。文章提供了完整的构建命令和配置方法,并解释了各数据结构的作用,为在i.MX6ULL处理器上实现HAB(High Assurance Boot)安全启动
2025-10-21 15:17:09
1082
原创 IMX6ULL中BootROM包含HAB的启动流程
摘要:本文介绍了IMX6ULL芯片中HAB(High Assurance Boot)安全启动功能的实现流程。HAB通过数字签名验证确保代码完整性,构建从Boot ROM到操作系统的信任链。文章详细分析了HAB的关键组件(公钥/私钥、签名工具)、状态设置(通过eFuse中的SEC_CONFIG位控制)以及两种工作模式(Closed和Open)下的不同验证机制。在Closed模式下会严格验证签名并终止验证失败的启动流程,而Open模式则允许开发调试。文中还比较了两种模式在安全硬件初始化、错误处理等方面的差异,并
2025-08-07 11:19:24
1199
原创 IMX6ULL启动流程
IMX6ULL启动流程解析:从Boot ROM到系统启动 IMX6ULL处理器的启动流程分为多个阶段:上电后首先执行片内固化的Boot ROM代码,该代码根据BOOT_MODE寄存器和eFuse配置选择启动设备(如eMMC/SD卡等)。关键设置BT_FUSE_SEL决定从eFuse还是GPIO获取启动配置,支持开发调试与量产两种模式。Boot ROM支持HAB安全验证,若验证失败则转入串行下载模式(Serial Downloader)用于恢复或调试。最后,通过验证的引导程序(U-boot等)将加载并启动系统
2025-08-06 11:23:42
1176
原创 imx6ull UI开发
本文介绍了在imx6ull平台上进行UI开发的基本流程。硬件层面采用LCDIF外设驱动TFT屏幕,内核驱动通过帧缓冲设备/dev/fbX实现显存管理。软件部分分别介绍了LVGL和QT两种UI框架的实现方式:LVGL通过mmap映射显存并实现flush回调函数,QT则通过设置环境变量指定显示设备。文中详细说明了设备树配置、驱动文件位置及显示数据流从应用层到硬件层的传输路径,为imx6ull的UI开发提供了完整的技术参考。
2025-07-18 13:29:35
777
原创 为STM32CubeIDE工程创建 post-build脚本
在使用STM32CubeIDE开发时,如果需要对最终编译出来的elf文件做二次处理,比如删除部分section,根据配置文件(假设为config.h),对最终的hex文件命名等,则需要添加一个post-build脚本来最终生成的处理elf文件(或hex文件)。
2025-01-22 11:16:40
873
原创 STM32G070CB的USART1_RX引脚
在使用STM32G070CBT6 的 USART1时,发现把 PA10作为 USART1_RX引脚时,接收不到数据。
2024-12-31 14:48:23
885
1
原创 STM32在bootloader跳转到application时设置MSP
在做bootloader 跳转到application时,经常会看到设置MSP的操作。
2024-12-24 14:15:21
4042
原创 STM32F4 CANopen firmware download -- Application
本篇是STM32F4 CANopen firmware download 系列的第三篇, 主要解释如何给application插入image header文件。处理hex文件的方式和bootloader里相同,也是在python脚本里使用 srec_cat工具。
2024-08-21 11:30:51
560
原创 STM32F4 CANopen firmware download -- Bootloader
CANOPEN 升级固件, hex文件加入image信息。
2024-08-21 09:07:44
1330
原创 STM32F4 CANopen firmware download
STM32F4通过 CANOPEN 下载固件,CANOPEN 节点由bootloader 和 application组成。
2024-08-19 14:02:48
608
1
原创 STM32F429IG SPI FLASH download algorithm
STM32F429IG SPI FLASH download algorithm。
2024-01-15 14:06:27
238
原创 STM32 FLASH error: FLASH_FLAG_PGPERR & FLASH_FLAG_PGSERR
在STM32F429 上用FLASH 模拟 EEPROM,工程是STM32CubeIDE里面创建和生成的。调试时发现第一次写FLASH时总是出错,第二次及之后再写FLASH则没问题。
2023-04-14 13:11:00
6124
5
原创 把驱动编译进内核
驱动路径通常,linux kernel的驱动文件都放在 drivers/ 里面,根据不同驱动类型放置在不同文件里, 如字符设备驱动 放置在 drivers/char/ 文件夹下。这里,自己创建一个文件夹 para_drv,用来放自己的驱动文件, 具体文件构成如: drivers/para_drv/Makefile drivers/para_drv/Kconfig drivers/para_drv/dtsled/para_dtsled.c drivers/para_drv/dtsl.
2021-12-10 15:33:30
778
原创 ssh 登陆时,报Permission denied (publickey)
网上关于ssh登陆时报Permission denied (publickey)的解决方式有很多,有文件权限问题等,但亲测都无效。以下是我遇到这个问题的解决过程:公私钥是否匹配:通过私钥打印出公钥,并于本地公钥对比#通过私钥打印出公钥ssh-keygen -y -e -f <your-private-key>2. 查看ssh server user(即需要ssh 登陆的 remote host)里的 authorized_keys是否包含上面的pub keycat /home
2021-10-12 14:06:25
5186
原创 systemd 的定时任务
@[TOC](测试脚本设置自己的service设置自己的timer验证timer)前提:想要使用 systemd 的timer 功能,你必须要有几个要件:系统的timer.target 一定要启动要有个sname.service 的服务存在(sname 是你自己指定的名称)要有个sname.timer 的时间启动服务存在测试脚本remove-log.sh#!/bin/bashdate >> /home/xx/remove-logecho "run remo
2021-07-06 12:20:15
715
原创 树莓派中安装docker,并构建自己的镜像
1. 前言最近需要在I.MX6+ubuntu18上运行.net程序,但一直不成功,所以打算在ubuntu中安装docker,在docker中运行。先拿树莓派练手。2. docker的安装这个网上比较多,主要参考菜鸟(https://www.runoob.com/docker/ubuntu-docker-install.html)和docker的官方文档(https://docs.docker.com/engine/install/ubuntu/),有一点需要注意的是,在手动安装时,执行到“***通过
2021-03-05 14:13:44
1204
1
原创 C#RS485通信
C#实现485通信1. 功能心跳检测:心跳1s发一次,上电后一段时间内不检测心跳,此后,每3s检测一次是否收到心跳,若3s内一次都没有收到心跳,认为网络故障。500ms内没收到ack,或者ack包的数据域里有错误代码,重发,重发超过3次,仍没有收到ack, 认为网络故障。两帧间隔10ms:每次发送报文前,延时10ms再发送。若网络故障,则关闭串口通信。2. 设计到的C#知识点串口通信:引用类RJCP.IO.Ports定时器: 引用类System.Timers进程间通信:event
2021-02-19 14:28:12
12954
6
原创 适配器模式(C语言) -- already done
一、介绍适配器模式(Adapter Pattern)是作为多个不兼容的模块之间的桥梁。它结合了多个模块的功能。因C语言没有类和继承等特性,所以本文只讨论接口适配器,至于类适配器和对象适配器不在本文讨论范围。例如,在需要解码的程序中,一个上位机(用户)需要跟解码器通信,但是解码器需要能解码不同通信协议的数据包。二、工作原理将一个模块的接口转换成另一种接口,转换后的接口可以兼容。调用者(用户)不需要知道各模块内部的实现,方便增减模块,可以解耦,方便移植三、适配器图解四、代码示例common.
2020-11-10 09:58:02
715
原创 STM32笔记:TIM
stm32 定时器常用寄存器:1.1 自动重装载寄存器(TIMX_ARR):自动装载寄存器是预先装载的,写或读自动重装载寄存器将访问预装载寄存器。根据在TIMx_CR1寄存器中的自动装载预装载使能位(ARPE)的设置,预装载寄存器的内容被立即或在每次的更新事件UEV时传送到影子寄存器。当计数器达到溢出条件(向下计数时的下溢条件)并当TIMx_CR1寄存器中的UDIS位等于’0’时,产生更新事件。更新事件也可以由软件产生。1.2 预分频器( TIMX_PSC):这个控制寄存器带有缓冲器,它能够在工作时..
2020-10-12 15:33:58
1925
原创 C语言之面向对象
C语言之面向对象_网关概述嵌入式设备与外界通信大多是串口,若想通过以太网、WIFI、BLE等通信,则需要外接对应的模块来实现,但每种通信方式对应的网络协议却不相同,为了实现代码复用及减少模块间的耦合,借用面向对象的方式: 只关注通信的属性:接收,处理,发送; 至于具体的通信行为,则由每个通信协议内部实现。将上述分为两个模块:通信的属性–> 协议解析器; 具体通信行为–> 命令解析器模块解析2.1 协议解析器2.1.1 数据结构 struct ProtocolInte
2020-09-01 12:18:11
767
原创 STM32F429的bootloader跳转到APP时跳转失败,无法进入APP
遇到的问题:1.原有的工程,可以正常从bootloader 跳转到APP,但是在修改了APP里一个结构体后,bootloader无法正常跳转到APP。结构体修改前:typedef struct{uint32_t drugItems[1000];} TS_DRUG_ITEMS_COLLECTION;struct TS_DRUG_CATEGORY{uint32_t category_index;TE_STR_ID default_name_id;uint32_t drug_item_cou
2020-05-28 13:06:59
7026
1
原创 用stmCubeMx创建的stm32f429工程,重写printf
利用stm32CubeMx创建stm32f429的工程,开发环境为IAR。1.初始化串口void MX_USART6_UART_Init(void){/* USER CODE BEGIN USART6_Init 0 *//* USER CODE END USART6_Init 0 *//* USER CODE BEGIN USART6_Init 1 *//* USER CODE...
2020-04-20 09:28:52
635
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅