嵌入式的几种固件烧录方式
嵌入式的几种固件烧录方式
1. 名词说明
1.1 什么是固件
固件,也成为firmware。下面引用百度的定义:
固件(firmware)一般存储于设备中的电可擦除只读存储器EEPROM(Electrically Erasable Programmable ROM)或FLASH芯片中,一般可由用户通过特定的刷新程序进行升级的程序。一般来说,担任着一个数码产品最基础、最底层工作的软件才可以称之为固件,比如计算机主板上的基本输入/输出系统BIOS(Basic Input/output System),在以前其实更多的专业人士叫它固件。
我的理解为:固件其实就是放在存储介质上的数据,当嵌入式板子启动时,能够从特定的位置找到这些文件,使得板子能够跑起来,这些文件就是固件。那么在嵌入式linux系统中,经常用到的文件如下:
- uboot:如uboot.bin
- kernel:如uImage
- rootfs:如system.yaffs2文件
嵌入式板子上电后,会去特定的位置寻找uboot,uboot初始化内存,初始化串口,设置linux启动参数以后,会将内核从flash中加载到内存。然后内核会去挂载根文件系统并启动init。所以上面所说的三种文件可以理解为固件。
1.2 什么是烧录?
烧录的意思是将一些嵌入式启动所必须的硬件下载到嵌入式的储存设备中,这可能是norflash, 有可能是nandflash,也有可能是SD卡。当这些固件烧录到储存器中,板子下次启动的时候,直接从这些储存器中找到这些文件,嵌入式系统就能够直接跑起来。
2. 烧录哪几个固件
2.1. 开发过程中固件的烧写
2.1.1 只烧录uboot,其他的固件不用烧录?
答案是可以的 。当我们只烧录uboot后,进入uboot模式下,我们可以通过uboot模式下的命令来加载kernel和rootfs。在uboot模式下,我们使用tftp mem_addr kernel_file来加载内核,然后通过nfs来加载rootfs。这样做的前提是你的PC机提供tftp和nfs服务,并且你的开发板需要和PC机在同一网络下。这样做有一个缺点,每次板子上电时都需要去敲命令来加载内核以及nfs。
2.1.2 烧录uboot和内核,rootfs以nfs的形式挂载到PC机上
在开发过程中经常用到的是这种方案。只烧录uboot和kernel,在板子启动时,内核会通过nfs去PC机上寻找文件系统。这种方式有的时候可能会导致系统起来比较慢,可能是因为网络状况不好,这样可能会影响你的体验。
2.1.3 烧录uboot、kernel、rootfs
在常见的烧录方式是将这三个文件全部烧录到板子里,且内核需要支持nfs协议。板子能够从自己的存储器中将系统启动起来而不需要依赖网络。板子启动后,可以利用mount命令,将某一目录挂载到PC机上。当应用程序更新后,只需要将可执行文件拷贝到nfs目录下,板子就可以进行调试了。之前做个某创的FreeRtos项目,调试非常的麻烦,每次程序更新后就需要烧录系统,烧录一次需要5分钟,把脾气都磨没了。linux的调试还是很人性化的。
2.2. 产品发布后的固件升级方式
产品发布后升级固件一般有下面两种方式
对于Nand Flash或者Nor Flash,通过MTD的工具,即mtd-util中的nandwrite等,操作/dev/mtdN将新的固件写入进去
对于SD/MMC,通过操作/dev/mmc设备,将新的固件写入进去
这个部分等后面会专门讲到mtd升级固件的方法。
3. 将固件烧录到存储介质张得方式
3.1 通过uboot烧录(两步到位)
有这么几种情形可以使用uboot进行烧录
内核损坏
文件系统加载不了
存储介质的uboot损坏
就一句话:只要你的uboot起来,你就可以用这种方式来烧录系统。uboot起来就可以通过存储器起来,也可以通过SD卡起来。比如你之前的存储在inand里面的uboot被擦除了,那么此时你的系统是铁定跑步起来的,那么怎么办呢?你可以通过制作一张SD 卡,卡里面放油可以运行的uboot,将嵌入式板子的启动方式打到外部的SD卡启动,那么此时只要你的SD里的uboot启动了,你就可以通过uboot下的工具将内核镜像和文件系统烧录到存储器中。比如使用工具fastboot。(当然你也可以只用一步到位的方式进行烧录)
3.2 通过USB烧录(一步到位)
在工厂量产的环境下,使用USB烧录是做有效也是最简洁的方式。将三个镜像文件准备好,使用特定的烧录工具,将三个文件直接烧录到存储器中。如君正的clone工具。
注释:
linux启动和烧录的区别:linux启动是指linux以哪种方式启动,如从norflash中启动,从inand中启动,从SD卡启动等,可以理解为从哪个地方启动表明uboot放在哪个存储器中。这个是启动而已,但是并不代表启动就一定能够成功。有可能启动到uboot阶段,发现kernel被破坏了。系统起不起来。这个时候就需要重现烧录系统。而l烧录是指将这些固件下载到嵌入式的存储器中。这个两个概念。但是在linux启动uboot后,我们可以通过uboot的命令来烧录系统。
嵌入式的几种固件烧录方式相关推荐
- 嵌入式Linux--Lichee Pi Zero系统烧录方式
目录 dd镜像烧录 分区镜像烧录 SPI Flash系统烧录 Win32DiskImage一键镜像烧录指南 Zero系统烧录 荔枝派Zero的系统烧录主要分以下几种: dd镜像烧录 分区镜像烧录 SP ...
- 嵌入式的固件烧录方式
1.固件 固件,firmware 所谓固件,就是文件,固化在存储介质上的文件,而文件,其实就是数据. 嵌入式开发中,尤其是Linux开发,常见的方式是,从板子(个人用的是arm的板子)上启动,会允许U ...
- 嵌入式 - 单片机三种烧录方式 ISP, IAP, ICP 简述
更新历史 20220315 首次创建文档,就三种 flash 编程方式进行了简单的概念介绍与归类: 20220319 增加 ISP IAP 的差异说明: 文章目录 引言 IAP 方法依赖 ISP 进入 ...
- 单片机ISP、IAP和ICP几种烧录方式的区别
单片机ISP.IAP和ICP几种烧录方式的区别 玩单片机的都应该听说过这几个词.一直搞不太清楚他们之间的区别.今天查了资料后总结整理如下. ISP:In System Programing,在系统编程 ...
- Alcohol 120% 的五种烧录方式各有什么区别
Alcohol 120% 的五种烧录方式各有什么区别 Before reading this post you must know that when you extract an image fro ...
- STM32程序的常用的两种烧录方式
STM32有两种常用的烧录方式,一是利用JLink和STLink调试下载,二是利用串口线直接下载 一.ISP(In-System Programming) 在系统编程,使用引导程序(Bootloade ...
- Android系统固件定制方式
Android系统固件定制方式 一般情况下,一款基于Android的设备,会根据需求定制系统APP,定制的规格往往需要依据设备的具体应用场景.比如,面向通信的设备,那么需要预装phone.tablet ...
- ESP32的MQTT AT固件烧录+STM32以ESP32的MQTT AT固件的AT指令连接EMQX下mqtt服务器实现消息订阅和发布
目录 写在前面 三种方案(利用ESP32连接EMQX下的MQTT) 步骤 ESP32烧录固件并AT指令进行测试. 下载固件 烧录工具下载 烧录固件(选择ESP32) 关于AT 指令与MQTT服务器断开 ...
- 03.OpenWrt-系统固件烧录
03.OpenWrt-系统固件烧录 3.1 tft软件烧录 tftp是运行在windows的软件,是将windows主机作为服务端,OpenWrt开发板作为客户端,通过tftp协议将数据发送到开发板进 ...
最新文章
- proftpd登陆速度慢的解决[转]
- BADI 修改采购订单的shipping point示例
- Vue 使用 screenfull 实现全屏
- 用 matlab 爬取期刊影响因子
- AUTOSAR从入门到精通100讲(四十六)-CANoe工具使用-实现CAN通道的收、发、录、回放报文
- centos7救援模式--单机模式(单用户模式)
- width:100%与绝对定位同时存在,偏移出父级容器
- oracle创建java程序并执行
- Comparable 与 Comparator 比较
- python os.path.splitext()的用法_Python中的os.path路径模块中的操作方法总结
- 常用easyUI -icon 图标
- 物联网“智能水表”产品简要分析——从人民日报官微推送的NB-IoT应用谈起
- mac安装win10_老笔记本加装1T固态硬盘,顺便安装win10 Mac双系统,真香
- python中sinxcosy_编培笔记 | Python:第四班车
- dw打开html不显示表格,利用Dreamweaver处理网页表格方法
- 低碳世界杂志低碳世界杂志社低碳世界编辑部2022年第7期目录
- 一位真正的科学思想家: 纪念人工智能之父Marvin Minsky教授
- Oracle-opatchauto自动安装补丁失败导致RAC集群异常问题
- 夜游灯光秀如何激活城市经济发展
- list中移除元素:用remove(i)方法遇到的坑以及替代方法