20237| 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和编译下载程序。 |
编译Bootloader里面不会啊。 【2)在optiboot路径的命令行下执行..\..\..\tools\avr\utils\bin\make atmega328_8MHz】这句看不懂!请教:handshake |
© 2013-2024 Comsenz Inc. Powered by Discuz! X3.4 Licensed