美文网首页
实现串口下载的简单bootloader

实现串口下载的简单bootloader

作者: gcrisis | 来源:发表于2019-04-28 23:04 被阅读0次

拿树莓派学习操作系统,每次新生成的内核文件需要烧到tf卡上,插拔操作频繁,既繁琐又损耗设备。所以用串口实现一个简单的bootloader功能,将新代码加载到内存中运行。

原理比较简单,就是用新代码覆盖原来的代码,之后再重头运行即可。这样可以省去插拔tf卡的过程,不过还是需要冷重启。

实现过程中遇到几个问题:

    1、串口设备刚上电有可能数据缓冲区有数据,会对正常的收发产生影响;

    2、数据覆盖会把串口代码覆盖掉,导致串口通信失败。

所以程序中要保证串口数据的干净和确定,可以正式通信前清空缓存或者用特殊字符作为通信标识。

要将串口等不变化的代码放到代码段前边,这样新代码加载时与老代码一样,不会对函数功能产生影响。

需要改进:

    对代码段没有要求,可任意下载任意代码,包括串口部分代码变动等等;

    实现对sd卡固件的回写,将代码固化;

    只加载改动的部分,bootloader部分保持不动。

    在程序不挂的情况下进入bootloader而不需要冷启动。

    ......(未完待续)    

代码实现:

系统启动后从0地址执行,所以把接收到的新代码放到0地址开始的区域,之后从0地址执行代码。

目前该代码必须放在main函数之前(main函数大小改变),后续完善后不再有这些限制。

默认系统编译把一些串口相关代码放到了代码段末尾,main函数之后,可以在链接文件中修改段分布指定函数存放的位置。

增加了.text.utils :{ *(.text.utils)}段,并在函数实现的地方指定

相关文章

  • 实现串口下载的简单bootloader

    拿树莓派学习操作系统,每次新生成的内核文件需要烧到tf卡上,插拔操作频繁,既繁琐又损耗设备。所以用串口实现一个简单...

  • 嵌入式Linux开发

    嵌入式Linux开发步骤: 1. 主机上编写Bootloader,烧入单板; Bootloader应具有串口传输,...

  • Python编程练习10:串口的打开和关闭

    串口使用时需要打开,使用结束以后需要关闭。 使用python可以简单的来实现串口的打开和关闭操作。首先需要对串口的...

  • QT5串口通信(Hex格式传输)

    参考博客: 博客园-菜头大大:QT串口通信 CSDN-宗师之路:QT实现串口通信(附源码下载) CSDN-xz-c...

  • GO-serial

    GO串口通信实现 1、包名称github.com/tarm/serial 2、简单实现

  • 在面包板上DIY自己的Arduino:Arduino Bootl

    一、什么是Bootloader? 大家都知道,Arduino的本质就是“ATmega单片机最小系统板+USB转串口...

  • jz2440-自己写bootloader

    问:bootloader干什么的?答:启动内核用的 问:要实现启动内核的功能,bootloader需要实现哪些?答...

  • RXTX实现JAVA串口编程

    给大家分项下用RXTX库实现JAVA串口编程。 一 准备工作 1.1 下载资源文件 首先下载RXTX库...

  • 单片机串口数据处理框架

    1、背景 串口通信具有广泛的应用,一方面串口配置简单,仅需3根线(tx、rx、gnd)即可实现通信,另一方面串口具...

  • 2019-07-11

    串口及串口编程 1、串口编程界面 (2)功能效果实现 2、使用串口调试工具实现数据传输 (1)在下拉列表中列出本机...

网友评论

      本文标题:实现串口下载的简单bootloader

      本文链接:https://www.haomeiwen.com/subject/dpusnqtx.html