18742浏览
查看: 18742|回复: 2

[进阶] 重编译Arduino的bootloader

[复制链接]
Arduino是开源的,其所支持的Bootloader可以根据需要修改、编译并在ArduinoIDE中使用。下面将官方16MHz时钟的UNO(定义为UNO@16M)修改为8MHz的UNO(定义为UNO@8M)为例进行说明:

1、 修改boards.txt
1)在Arduino安装目录下Arduino\hardware\arduino\boards.txt
boards.txt 的说明请 See:http://code.google.com/p/arduino/wiki/Platforms。将uno 一段复制一份后进行如下修改,红色部分为修改内容,修改好后保存(注意安装目录是否有写权限):
##############################################################
uno@8MHz.name=Arduino Uno@8MHz
uno@8MHz.upload.protocol=arduino
uno@8MHz.upload.maximum_size=32256      # = total flash size - AVR Bootloaderarea size(bytes);  AVR Bootloader areasize is defined by FUSE.
uno@8MHz.upload.speed=115200             # the speed is same as the one of bootloader or makefile
uno@8MHz.bootloader.low_fuses=0xff
uno@8MHz.bootloader.high_fuses=0xde
uno@8MHz.bootloader.extended_fuses=0x05
uno@8MHz.bootloader.path=optiboot
uno@8MHz.bootloader.file=optiboot_atmega328_8MHz.hex  # modify: use the new bootloader name
uno@8MHz.bootloader.unlock_bits=0x3F
uno@8MHz.bootloader.lock_bits=0x0F
uno@8MHz.build.mcu=atmega328p         
uno@8MHz.build.f_cpu=8000000L             # modify: It is define the F_CPUwhen compile your sketch
uno@8MHz.build.core=arduino
uno@8MHz.build.variant=standard


2、 编译Bootloader
Arduino官方Bootloader在Arduino的安装目录下,其相对路径是:Arduino\hardware\arduino\bootloaders,其下有若干子目录。[url=mailto:%E5%9C%A8board.txt%E4%B8%AD%E6%89%BE%E5%88%B0uno@8MHz.bootloader.path%3Doptiboot]在board.txt中找到uno@8MHz.bootloader.path=optiboot[/url],则UNO使用的是optiboot子目录下的bootloader,其源程序和makefile也在该目录下。
在board.txt中找到找到uno.bootloader.file=optiboot_atmega328.hex。打开Makefile文件并查找前述红色部分“atmega328:”。将以“atmega328:”所有行复制一份,进行如下修改(红色为修改后的新内容,注意频率和文件名要与board.txt相应内容要保持一致):
#atmega328 @ 8Mhz
atmega328_8Mhz: TARGET = atmega328
atmega328_8Mhz: MCU_TARGET = atmega328p
atmega328_8Mhz: CFLAGS += '-DLED_START_FLASHES=3''-DBAUD_RATE=115200'
atmega328_8Mhz: AVR_FREQ = 8000000L
atmega328_8Mhz: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffe
atmega328_8Mhz: $(PROGRAM)_atmega328_8Mhz.hex
atmega328_8Mhz: $(PROGRAM)_atmega328_8Mhz.lst
保存makefile后,使用make进行编译,这里需要注意的是,你的机器上的可能有多种工具链,建议使用Arduino自带的工具链,这样一般可以保证编译后HEX文件保持和原来的一致,避免用新的编译器导致编译的HEX文件超出FUSE定义的Bootloader空间。  下面以windows为例进行说明:
1)在Makefile找到如下一段,并按你的系统进行设置,以下以windows为例,并建议使用arduino的环境,
# The defaultbehavior is to build using tools that are in the users
# current pathvariables, but we can also build using an installed
# Arduino user IDEsetup, or the Arduino source tree.
# Uncomment thisnext lines to build within the arduino environment,
# using thearduino-included avrgcc toolset (mac and pc)
ENV = arduino
# ENV ?= arduinodev
# OS ?= macosx
OS = windows
2)在optiboot路径的命令行下执行
..\..\..\tools\avr\utils\bin\make atmega328_8MHz
3)编译成功则会在该目录下生成optiboot_atmega328_8Mhz.hex


注:
1)optboot下的说明和makefile是写的很完善和详细的,其它的bootloader目录下可能比较简单,可以参考optboot目录下的README.txt和makefile文件来理解。 工具链的选择在windows也可以在系统环境变量中定义,也可以在makefile中写入相对路径。
2)若编译bootloader超过了熔丝位的bootloader区域限制,则两种措施解决:一是使用原bootloader编译时使用的工具链版本;二是修改makefile中bootloader中的起始地址和board.txt中相应的FUZE位、upload.maximum_size。


3、 下载Bootloader
重新打开Arduino IDE,在tools->board中多了一个“Arduino Uno_8MHz”的单板,可以使用该单板类型烧写bootloader和编译下载程序。
重编译Arduino的bootloader图1


Rockets  NPC

发表于 2013-11-27 11:36:48

好高深的样子。
回复

使用道具 举报

wangwei8888168  学徒

发表于 2015-10-9 17:38:22

编译Bootloader里面不会啊。
【2)在optiboot路径的命令行下执行..\..\..\tools\avr\utils\bin\make atmega328_8MHz】这句看不懂!请教:handshake
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4

© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail