1.详解STM32在线IAP升级
2.嵌入式Linux之uboot源码make配置编译正向分析(一)
3.U-Boot工作模式
4.NB-IOT远程升级第3弹:移植代码分析
5.当前在嵌入式系统开发中有哪些常用的源码bootloader
6.uboot驱动是什么意思?
详解STM32在线IAP升级
详解在线升级IAP的基础知识,本文将深入解析从原理到代码编写、解析实验验证的源码全过程,助您深入了解在线升级。解析
什么是源码BootLoader?它类似于引导程序,负责启动正式的解析公众号 管理 源码App应用程序。BootLoader程序与App程序共同组成一个嵌入式系统,源码其中BootLoader用于启动并运行App程序。解析
在STM中,源码程序通常存储在片内Flash中。解析通过使用Keil进行调试,源码可以查看存储的解析代码。
接下来,源码我们将对程序进行分区,解析以FRB-NUCLEO开发板为例,源码其Flash分为三个区域:BootLoader区、App1区和App2区(备份区)。分区的目的是为了便于管理代码。
总体流程图展示了嵌入式系统中在线升级的基本步骤,确保您了解开发流程。
本节将详细介绍BootLoader的编写,包括流程图分析和代码编写。使用BootLoader进行在线升级(OTA)时,关键在于正确设置分区标记,以指示是小米钓鱼源码否有新版本的App程序。
接下来,我们将讲解App1的编写,采用Ymodem协议进行串口传输。流程图分析将帮助您理解协议与代码之间的关系。
所需STM资源包括BootLoader和App1的源代码,以及Ymodem协议的实现。
进行整体测试,验证BootLoader与App的升级功能。提供的源代码可从原作者的gitee获取。
除了YModem协议,您还可以通过蓝牙、WIFI等其他协议传输.bin文件。主要原理相同,关键在于能够传输文件。
通过本教程,您将掌握在线升级的整个过程,包括原理、代码编写和测试验证。除了YModem协议,还可以探索其他传输方式。原文链接和转载自信息提供进一步资源。
嵌入式Linux之uboot源码make配置编译正向分析(一)
嵌入式Linux系统由以下几部分组成:在Flash存储器中,它们的分布一般如下。Bootloader是bas系统源码操作系统运行之前执行的一段小程序,用于初始化硬件设备、建立内存空间映射表,为操作系统内核做准备。Bootloader依赖于CPU体系结构和嵌入式系统板级设备配置。u-boot支持多种架构,适用于上百种开发板。设计与实现包括工程简介、源码结构、编译过程、源码加载等。u-boot源码可以从ftp.denx.de/pub/u-boot/网站下载,DENX网站提供更多信息,u-boot git仓库位于gitlab.denx.de/u-boot/u...。u-boot编译分为配置和编译两步,需要指定交叉工具链、处理器架构。配置过程可以生成.config文件。源码加载使用Source Insight,安装、打开项目、共享文件夹、映射网络驱动器等步骤。
U-Boot工作模式
U-Boot, 一个广泛应用于嵌入式系统的Bootloader,具有两种主要的涨停接力源码工作模式:启动加载模式和下载模式。在嵌入式产品出厂时,Bootloader默认处于启动加载模式,其核心任务是确保设备的正常启动。它会自动地从存储在FLASH中的嵌入式操作系统加载到SDRAM中,然后执行后续的操作流程。 相比之下,下载模式则提供了更为灵活的操作方式。在这种模式下,Bootloader通过特定的通信机制,允许用户从外部PC机将内核映像或根文件系统映像等关键文件传输到目标板的存储介质——通常为FLASH。用户可以利用Bootloader提供的命令接口,进行定制化下载和管理,满足不同的需求和应用场景。扩展资料
U-Boot,全称 Universal Boot Loader,是遵循GPL条款的开放源码项目。从FADSROM、8xxROM、PPCBOOT逐步发展演化而来。其源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是stl锁源码一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。NB-IOT远程升级第3弹:移植代码分析
在物联网项目开发中,远程升级功能(OTA)至关重要,这允许通过WIFI、蓝牙、4G、NB-IOT等方式将升级包传输至MCU,实现代码存储与更新。本文系列将详细介绍基于电信AEP平台的NB-IOT设备远程升级流程,包括STM内部分区、BootLoader编写、软件包制作、升级协议对接等内容。本系列将逐步解析,直至完成。 系列文章大纲如下: 在前两篇中,我们深入探讨了BootLoader编写要点及电信AEP平台软件包制作。在第二篇,我们了解了使用PCP协议的远程升级流程,并通过串口助手模拟升级流程,为代码编写做足准备。 此篇章,我们将通过分析开源FOTA代码,进一步理解PCP协议与远程升级流程,便于各位进行代码移植。源码介绍
本文档以小熊派开发板的ota远程升级代码为例,运行环境如下。结合参考案例代码与上篇内容,能够深化对远程升级的理解,发现过程并不复杂。源码分析
接收数据解析
接收电信AEP平台发送的数据,解析数据以判断是否为PCP协议的远程升级命令。解析信息包括起始标识位、版本号、消息码、校验码、数据区长度与数据区。升级流程状态机
基于消息码的状态机,用于跟踪远程升级流程中的状态变化。设备应答
设备向平台发送应答消息,确认接收与处理能力。设备发送数据
设备将数据发送至平台,执行命令或更新请求。新版本通知
设备收到新版本通知后,向物联网平台返回应答,请求或拒绝升级。请求分片包
设备请求下载完整软件包,以备后续升级。执行升级
设备接收到执行升级指令后,执行更新操作并反馈至平台。上报升级结果
设备完成升级后,向平台报告升级状态。超时处理
针对升级请求或执行过程中可能出现的超时问题,进行妥善处理。踩坑记录
至此,基于电信AEP平台的NB-IOT远程升级系列内容结束。在此过程中,我作为轻松学长,分享了物联网开发的点滴与经验,希望大家能从中获益,共同成长。 分享是一种精神,通过分享,我们不仅传递知识,也传递了生活的态度与乐趣。愿你在物联网开发的道路上越走越远,分享与学习并行,创造更多精彩。当前在嵌入式系统开发中有哪些常用的bootloader
常见bootloader介绍
1.U-BOOT介绍
uboot是一个庞大的公开源码的软件。他支持一些系列的arm体系,包含常见的外设的驱动,是一个功能强大的板极支持包。其代码可以从/developer)
vivi是韩国mizi 公司开发的bootloader, 适用于ARM9处理器。 Vivi有两种工作模式:启动加载模式和下载模式。启动加载模式可以在一段时间后(这个时间可更改)自行启动linux内核,这时vivi的默认模式。在下载模式下,vivi为用户提供一个命令行接口,通过接口可以使用vivi提供的一些命令,如下:
命令
功能
Load
把二进制文件载入Flash或RAM
Part
操作MTD分区信息。显示、增加、删除、复位、保存MTD分区
Param
设置参数
Boot
启动系统
Flash
管理Flash,如删除Flash的数据
vivi代码分析
vivi的代码包括arch,init,lib,drivers和include等几个目录,共多条文件。
Vivi主要包括下面几个目录:
arch:此目录包括了所有vivi支持的目标板的子目录,例如s3c目录。
drivers:其中包括了引导内核需要的设备的驱动程序(MTD和串口)。MTD目录下分map、nand和nor三个目录。
init:这个目录只有main.c和version.c两个文件。和普通的C程序一样,vivi将从main函数开始执行。
lib:一些平台公共的接口代码,比如time.c里的udelay()和mdelay()。
include:头文件的公共目录,其中的s3c.h定义了这块处理器的一些寄存器。Platform/smdk.h定义了与开发板相关的资源配置参数,我们往往只需要修改这个文件就可以配置目标板的参数,如波特率、引导参数、物理内存映射等。
uboot驱动是什么意思?
uboot(Universal Bootloader)是一款自由、开放源代码的嵌入式系统引导程序。其主要功能是加载操作系统内核,即启动 Linux 内核。而uboot驱动则是一种与uboot交互的硬件设备驱动程序,目的是让uboot与设备之间建立起连接,方便uboot对设备进行管理或控制。
uboot驱动的作用与应用场景
在嵌入式系统中,uboot驱动具有重要的作用。通过uboot驱动,开发者可以在uboot引导期间来初始化和控制设备,这对于启动一些嵌入式设备非常关键。例如,在基于ARM架构的嵌入式系统中,uboot驱动可以用来初始化串口、I2C总线、SPI总线等以及读取 FLASH 存储器,以便可以从上面读取内核映像并加载到内存。
uboot驱动的编写与调试
uboot驱动的编写需要具备嵌入式系统的相关技术知识,编写成本较高。RTL(Register Transfer Level)仿真可以帮助开发者进行uboot驱动开发过程中的问题排查。针对uboot驱动的测试还需要使用串行控制器、JTAG调试器和逻辑分析仪等专业工具集成调试,提高开发效率和准确性。需要注意的是,uboot驱动与Linux内核驱动不一样,不能直接复用,因此需要在驱动开发或嵌入式系统设计时进行充分的规划。
linuxuboot
ubootæ¯ä»ä¹ææï¼U-Bootï¼å ¨ç§°UniversalBootLoaderï¼æ¯éµå¾ªGPLæ¡æ¬¾çå¼æ¾æºç 项ç®ãU-Bootçä½ç¨æ¯ç³»ç»å¼å¯¼ãU-Bootä»FADSROMã8xxROMãPPCBOOTéæ¥åå±æ¼åèæ¥ãå ¶æºç ç®å½ãç¼è¯å½¢å¼ä¸Linuxå æ ¸å¾ç¸ä¼¼ï¼äºå®ä¸ï¼ä¸å°U-Bootæºç å°±æ¯æ ¹æ®ç¸åºçLinuxå æ ¸æºç¨åºè¿è¡ç®åèå½¢æçï¼å°¤å ¶æ¯ä¸äºè®¾å¤ç驱å¨ç¨åºï¼è¿ä»U-Bootæºç ç注éä¸è½ä½ç°è¿ä¸ç¹ã
ubootæ¯ä¸ä¸ªæä½ç³»ç»å æ ¸è¿æ¯ä¸æ®µå¼å¯¼ç¨åºï¼
æ¯ä¸æ®µå¼å¯¼ç¨åºã
1ï¼ubootæ¯ç¨æ¥å¹²ä»ä¹çï¼æä»ä¹ä½ç¨ï¼
ubootå±äºbootloaderçä¸ç§ï¼æ¯ç¨æ¥å¼å¯¼å¯å¨å æ ¸çï¼å®çæç»ç®çå°±æ¯ï¼ä»flashä¸è¯»åºå æ ¸ï¼æ¾å°å åä¸ï¼å¯å¨å æ ¸
æ以ï¼ç±ä¸é¢æè¿°çï¼å°±ç¥éï¼UBOOTéè¦å ·æ读åflashçè½åã
2ï¼ubootæ¯ææ ·å¼å¯¼å¯å¨å æ ¸çï¼
ubootåå¼å§è¢«æ¾å°flashä¸ï¼æ¿åä¸çµåï¼ä¼èªå¨æå ¶ä¸çä¸é¨å代ç æ·å°å åä¸æ§è¡ï¼è¿é¨å代ç è´è´£æå©ä½çuboot代ç æ·å°å åä¸ï¼ç¶åuboot代ç åækernelé¨å代ç ä¹æ·å°å åä¸ï¼å¹¶ä¸å¯å¨ï¼å æ ¸å¯å¨åï¼æçæ ¹æ件系ç»ï¼æ§è¡åºç¨ç¨åºã
3ï¼ubootå¯å¨ç大è¿ç¨æ¯æä¹æ ·çï¼
ubootå¯å¨ä¸»è¦å为两个é¶æ®µï¼ä¸»è¦å¨start.sæ件ä¸ï¼ç¬¬ä¸é¶æ®µä¸»è¦åçæ¯ç¡¬ä»¶çåå§åï¼å æ¬ï¼è®¾ç½®å¤çå¨æ¨¡å¼ä¸ºSVC模å¼ï¼å ³éçé¨çï¼å±è½ä¸æï¼åå§åsdramï¼è®¾ç½®æ ï¼è®¾ç½®æ¶éï¼ä»flashæ·è´ä»£ç å°å åï¼æ¸ é¤bss段çï¼bss段æ¯ç¨æ¥åå¨éæåéï¼å ¨å±åéçï¼ç¶åç¨åºè·³è½¬å°start_arm_bootå½æ°ï¼å®£å第ä¸é¶æ®µçç»æã
第äºé¶æ®µæ¯è¾å¤æï¼åçå·¥ä½ä¸»è¦æ¯1.ä»flashä¸è¯»åºå æ ¸ã2.å¯å¨å æ ¸ãstart_arm_bootç主è¦æµç¨ä¸ºï¼è®¾ç½®æºå¨idï¼åå§åflashï¼ç¶åè¿å ¥main_loopï¼çå¾ ubootå½ä»¤ï¼ubootè¦å¯å¨å æ ¸ï¼ä¸»è¦ç»è¿ä¸¤ä¸ªå½æ°ï¼ç¬¬ä¸ä¸ªæ¯s=getenv(bootcmdï¼ï¼ç¬¬äºä¸ªæ¯run_command(s...),æ以è¦å¯å¨å æ ¸ï¼éè¦æ ¹æ®bootcmdç¯å¢åéçå 容å¯å¨ï¼bootcmdç¯å¢åéä¸è¬æ示äºä»æ个flashå°å读åå æ ¸å°å¯å¨çå åå°åï¼ç¶åå¯å¨ï¼bootmã
ubootå¯å¨çå æ ¸ä¸ºuImage,è¿ç§æ ¼å¼çå æ ¸æ¯ç±ä¸¤é¨åç»æï¼çæ£çå æ ¸åå æ ¸å¤´é¨ç»æï¼å¤´é¨ä¸å æ¬å æ ¸ä¸çä¸äºä¿¡æ¯ï¼æ¯å¦å æ ¸çå è½½å°åï¼å ¥å£å°åã
ubootå¨æ¥åå°å¯å¨å½ä»¤åï¼è¦åç主è¦æ¯ï¼1ï¼è¯»åå æ ¸å¤´é¨ï¼2ï¼ç§»å¨å æ ¸å°åéçå è½½å°åï¼3ï¼å¯å¨å æ ¸ï¼æ§è¡do_bootm_linux
do_bootm_linux主è¦åç为ï¼1ï¼è®¾ç½®å¯å¨åæ°ï¼å¨ç¹å®çå°åï¼ä¿åå¯å¨åæ°ï¼å½æ°åå«ä¸ºsetup_start_tag,setup_memory_tag,setup_commandline_tag,setup_end_tagï¼æ ¹æ®ååæ们就ç¥éå ·ä½ç段å åå¨çä¿¡æ¯ï¼memoryä¸ä¸ºæ¿åçå å大å°ä¿¡æ¯ï¼commandline为å½ä»¤è¡ä¿¡æ¯ï¼
2ï¼è·³å°å ¥å£å°åï¼å¯å¨å æ ¸
å¯å¨çå½æ°ä¸ºthe_kernel(0,bd->bi_arch_number,bd->bi_boot_param)
bd->bi_arch_number为æ¿åçæºå¨ç ï¼bd->bi_boot_param为å¯å¨åæ°çå°å
æ»ç»ï¼
1)uboot主è¦ä½ç¨æ¯ç¨æ¥å¯å¨æä½ç³»ç»å æ ¸ãä½ç°å¨ubootæåä¸å¥ä»£ç å°±æ¯å¯å¨å æ ¸ã
2)ubootè¿è¦è´è´£é¨ç½²æ´ä¸ªè®¡ç®æºç³»ç»ãä½ç°å¨ubootæåçä¼ åã
3)ubootä¸è¿ææä½Flashçæ¿åä¸ç¡¬ä»¶ç驱å¨ãä¾å¦ä¸²å£è¦æå°ï¼pingç½ç»æåï¼æ¦é¤ãç§åflashæ¯å¦æåçã
4)ubootè¿å¾æä¾ä¸ä¸ªå½ä»¤è¡çé¢ä¾äººæ¥æä½ãå¾ç®åï¼è³å°ä½ è½çå°ã
ubootå½ä»¤å¦ä½å¼å¯¼linuxï¼
U-Booté¤äºBootloaderçç³»ç»å¼å¯¼åè½,å®è¿æç¨æ·å½ä»¤æ¥å£,å ·å¤å¤ç§å¼å¯¼å æ ¸å¯å¨çæ¹å¼ã常ç¨çgoåbootmå½ä»¤å¯ä»¥ç´æ¥å¼å¯¼Linuxå æ ¸æ åå¯å¨ãU-Bootï¼å ¨ç§°UniversalBootLoaderï¼æ¯éµå¾ªGPLæ¡æ¬¾çå¼æ¾æºç 项ç®ãä»FADSROMã8xxROMãPPCBOOTéæ¥åå±æ¼åèæ¥ãå ¶æºç ç®å½ãç¼è¯å½¢å¼ä¸Linuxå æ ¸å¾ç¸ä¼¼ï¼äºå®ä¸ï¼ä¸å°U-Bootæºç å°±æ¯æ ¹æ®ç¸åºçLinuxå æ ¸æºç¨åºè¿è¡ç®åèå½¢æçï¼å°¤å ¶æ¯ä¸äºè®¾å¤ç驱å¨ç¨åºï¼è¿ä»U-Bootæºç ç注éä¸è½ä½ç°è¿ä¸ç¹ã
å¦ä½ghostlinuxç³»ç»ï¼
使ç¨Ghost软件æ¥å®ç°å¤ä»½åæ¢å¤Linuxç³»ç»ï¼
1ãé¦å ç¨âé¨ææ¨é£GhostXPSP3纯åçY6.0âå çè¿è¡å¼å¯¼ï¼å¹¶ä½¿ç¨å ¶ä¸çPQ软件对硬çè¿è¡ååºï¼åååºä¸ä¸ªååºç¨äºå®è£ DOSç³»ç»ãç¶åéæ©ï¼âè¿è¡YLMFDOSå·¥å ·ç®±âãå³ï¼è¿è¡PQ软件ï¼å¯¹ç¡¬çè¿è¡ååºã
2ãå åä¸ä¸ªååºï¼å¤§å°ä¸ºå¤§çº¦ä¸º4Gï¼ç¨äºå®è£ DOSç³»ç»ä»¥ååæ¾GHOSTæåçå¤ä»½æ件ï¼å½ç¶å®é å½ä¸ï¼åºè¯¥å°è¿ä¸ªååºç大å°è°å¤§ç¹ã
3ãåæ¶è¿éææ°ååºåºæ¥çCçï¼è®¾ç½®ä¸ºâæ´»å¨âï¼ä»¥æ¹ä¾¿å¯å¨æ¶ï¼è½ä»Cçå¯å¨DOSç³»ç»ã
4ãç¨å çè¿è¡å¼å¯¼ï¼å建Cçå¯å¨DOSç³»ç»æ¶æéè¦çæ件ï¼ä»¥åGHOSTç¨åºçå¤å¶å°Cçã
5ãå®è£ Linuxç³»ç»ï¼å¨å®è£ æ¶ï¼å»ºè®®ä¸è¦æGRUBå®è£ MBRä¸ï¼åæ¶å¨ååååºæ¶ï¼å»ºè®®ä¸ºï¼bootãvarãhomeå建åç¬çååºã
6ãä»DOSç³»ç»å¯å¨ï¼ç¶åè¿è¡GHOST软件对Linuxç³»ç»è¿è¡å¤ä»½ã1ï¼ãå¤ä»½Linuxç³»ç»çbootååºï¼â/boot"ï¼ã2ï¼ãå¤ä»½Linuxç³»ç»çæ ¹ååºï¼"/"ï¼7ãLinuxç³»ç»åºç°é®é¢ï¼æ æ³å¯å¨æ³¨æï¼ç±äºä¹åæDOSç³»ç»çååºï¼å³ï¼Cçï¼ï¼è®¾ç½®æâæ´»å¨âï¼æ以è¿éå¿ é¡»ä¿®æ¹ä¸ä¸ï¼è®©â/boot"设置ææ´»å¨çï¼è¿æ ·æè½å¯å¨linuxç³»ç»ã