Android系统启动流程(二)BootLoader引导程序

Android系统启动流程(二)BootLoader引导程序,第1张

上电之后到U-boot的流程

暂不关心CP的启动,而主要关心AP

Android启动流程——1序言、bootloader引导与Linux启动

自制Arduino需要烧写bootloader,这样才能使用Arduino IDE来开发程序。自己烧写Bootloader需要注意以下问题:

1、MCU芯片选型

不是所有的Atmega芯片都支持Arduino的,能够使用的芯片大致如下:

Atmega8、Atmega168、Atmega328、Atmega1280、Atmega2560

还有一些ARM芯片也可以,具体支持的芯片型号,请参考官网说明和IDE环境。

2、硬件接口

烧写Bootloader,需要使用ISP接口和烧写器。

ISP接口:有效管脚6个,分别是MOSI、MISO、SCK、Reset、GND、VCC。不同的MCU,其上述管脚的序号也不同,需要查看具体的芯片手册,正确接出ISP接口,才能实现烧写Bootloader

烧写器:可以使用6类烧写器,分别是:AVR ISP 、AVRISP mkII 、USBtinyISP 、USBasp 、Parallel Programmer 、Arduino as ISP。建议使用最后一个Arduino as ISP,也就是说,可以直接使用手头上的Arduino开发板作为烧写器,将另一块新的板子烧写Bootloader变成Arduino。当然,使用Arduino as ISP,首先需要将开发环境中,文件->示例->ArduinoISP的程序下载到准备当烧写器的Arduino板卡上,并且正确连线。具体的接线说明,在ArduinoISP程序的注释段中有描述。

3、准备烧写

当准备好ISP烧写设备,正确连接ISP接口的6根线后,就可以开始烧写Bootloader了。

首先打开Arduino IDE开发环境,在工具->板卡的子菜单中选择正确的板卡型号。具体选择什么板卡,应该按照准备烧写Bootloader的板子的MCU型号来确定。然后在工具->Processor菜单中选择正确的MCU类型。(有些时候,这个菜单不出现)。然后在工具->编程器菜单中选择Arduino as ISP(使用另一块Arduino设备作为ISP烧写器)。最后,在工具菜单中选择烧写Bootloader。注意观察各种指示灯的闪烁情况,等到指示灯由急促的闪烁变成不闪或慢速的闪烁,且IDE提示烧写成功,则表明Bootloader烧写成功。

4、注意事项

烧写器和被烧写的板子的GND必须共地。

烧写时偶尔会出现失败,重新烧写即可成功。若反复失败无法成功,请检查接线是否正确。

为了恢复Arduino的功能,必须得重新给ATMega328P单片机里烧写bootloader(其实Arduino就是在AVR单片机中预置了一个bootloader程序,这样再配合Arduino开发环境就是所谓的Arduino了,但Arduino这个词本身只留给官方使用)。当然在淘宝上也能买到已经烧写好的AVR单片机,只是自己手上已经有了AVR单片机,就没必要去花那冤枉钱了。

于是马上打开万能的百度,输入关键字“Arduino bootloader”果然,一大堆乱七八糟相关的问题就出来了,经过一轮的筛选,发现许多说的也并不是很清晰,不过让我明白了个大概:一个普通的AVR单片机确实能烧写bootloader之后作为Arduino使用。那么问题来了,如何把bootloader烧录到AVR单片机中去了?这的确是个问题,反正对于不懂AVR开发的我来说是个问题。不过还好之前在淘宝上买了一个USBASP下载器,跟之前擦除bootloader一样,也要用到progisp软件(因为此时的ATMega328P只是一个普通的AVR单片机,用Arduino开发软件是烧写不进去的)。

既然要烧录bootloader,那么什么是bootloader呢?正如你所想,bootloader当然是一个程序,既然要烧录到单片机中去,应该是一个HEX之类的文件。但是,bootloader文件从哪来呢?继续百度。。。找到了,在Arduino软件安装目录中的hardware\arduino中。此文件夹下的“boardstxt”文件很重要,是很重要,其他的或许都可以在百度上找到,但因为这个文件折腾了我大半个晚上,百度上也没有明确的说明。打开文件,找到自己对应的Arduino版本,因为我的是“Arduino Uno”,于是锁定“unoname=Arduino Uno”区域的说明,因为看上去很乱,一定要仔细去看。找到“unobootloaderlow_fuses=0xff"指编程熔丝低位为FF,”unobootloaderhigh_fuses=0xde“指编程熔丝高位为DE,”unobootloaderextended_fuses=0x05“指扩展位为05。这三个值非常重要,是决定你烧录bootloader成功的关键。至于这三个值具体是什么意思,我也不是很不清楚,但AVR单片机的烧录时需要设置熔丝位,而且不能乱设置,这也是AVR跟51单片机的不同之处。

用progisp软件把这三个熔丝位的值写入到AVR单片机中,然后继续浏览”boardstxt“文件往下看,找到”unobootloade旦长测短爻的诧痊超花rpath=optiboot“这就是说要烧录的bootloader文件在bootloaders\option文件夹中,“unobootloaderfile=optiboot_atmega328hex”文件名就是optiboot_atmega328hex,这就是接下来需要烧录到AVR单片机中的程序。用progisp软件调入此文件,然后直接写入到AVR单片机中就行了,一个支持Arduino的AVR就做好了。。。

其实这个问题本身不难,但对于没接触过AVR的人来说,还是要花许多时间的,中间也会存在许许多多各种各样的问题。至于progisp的使用方法很简单,百度上的教程也很多,还有手上必须有一块可以烧录AVR单片机的下载器。我当时就是忽略了那三个熔丝位的值,所以反反复复也没有成功,百度上面也没有对”boardstxt“文件做详细的解释。没设置熔丝位程序是可以正常的烧录进去,但Arduino是不能用的,所以必须要按照官网给出的说明 *** 作。我当时大多数时间主要花在两个问题上,一个是HEX文件具体位置,因为Arduino有不同的版本,所以HEX文件也不同,还有一个就是熔丝位上。

以上就是关于Android系统启动流程(二)BootLoader引导程序全部的内容,包括:Android系统启动流程(二)BootLoader引导程序、求助自制arduino烧写bootloader有困难、如何烧录 arduino 的 bootloader等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10166762.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存