重编译Arduino的bootloader

Arduino是开源的,其所支持的Bootloader可以根据需要修改、编译并在ArduinoIDE中使用。下面将官方16MHz时钟的UNO(定义为UNO@16M)修改为8MHz的UNO(定义为UNO@8M)为例进行说明:
1、 修改boards.txt1)在Arduino安装目录下Arduino\hardware\arduino\boards.txtboards.txt 的说明请 See:http://code.google.com/p/arduino/wiki/Platforms。将uno 一段复制一份后进行如下修改,红色部分为修改内容,修改好后保存(注意安装目录是否有写权限):##############################################################uno@8MHz.name=Arduino Uno@8MHzuno@8MHz.upload.protocol=arduinouno@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 makefileuno@8MHz.bootloader.low_fuses=0xffuno@8MHz.bootloader.high_fuses=0xdeuno@8MHz.bootloader.extended_fuses=0x05uno@8MHz.bootloader.path=optibootuno@8MHz.bootloader.file=optiboot_atmega328_8MHz.hex# modify: use the new bootloader nameuno@8MHz.bootloader.unlock_bits=0x3Funo@8MHz.bootloader.lock_bits=0x0Funo@8MHz.build.mcu=atmega328p uno@8MHz.build.f_cpu=8000000L # modify: It is define the F_CPUwhen compile your sketchuno@8MHz.build.core=arduinouno@8MHz.build.variant=standard

2、 编译BootloaderArduino官方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 @ 8Mhzatmega328_8Mhz: TARGET = atmega328atmega328_8Mhz: MCU_TARGET = atmega328patmega328_8Mhz: CFLAGS += '-DLED_START_FLASHES=3''-DBAUD_RATE=115200'atmega328_8Mhz: AVR_FREQ = 8000000Latmega328_8Mhz: LDSECTIONS = -Wl,--section-start=.text=0x7e00 -Wl,--section-start=.version=0x7ffeatmega328_8Mhz: $(PROGRAM)_atmega328_8Mhz.hexatmega328_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 ?= macosxOS = windows2)在optiboot路径的命令行下执行......\tools\avr\utils\bin\make atmega328_8MHz3)编译成功则会在该目录下生成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和编译下载程序。

ade1.JPG (55.8 KB, 下载次数: 0)

下载附件

保存到相册

2013-11-26 21:15 上传

标签: Arduino教程