关于Atmega8L的bootloader的基于源代码的重新编译
标签:
it |
分类: 转载 |
| 我做了一个DIY
的基于Atmega8L的arduino的板子,参考了阿古(宫微宏老师)的博客介绍。我外接了8Mhz的晶振,因为Atmega8L手册上说,只允许最大加到8Mhz. 用avr编程器写入的bootloader,一个系列是由optiboot编译而来,这个版本做了一些优化,得到的bootloder跑不起来。思路回到arduino 自带源代码的Atmega8版本的bootloader , 就是在[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\arduino\bootloaders\atmega8文件夹内. http://image.geek-workshop.com/forum/201207/19/081119w2aaawf02qwqfx3m.jpg 可以看到Makefile自动编译配置文件,一个生成的bootloader文件AtmegaBOOT.hex ,还有AtMegaBOOT.c,这个目录就是我们编译所需要的源代码目录。 下面开始配置编译的环境,编译器是arduino自带的avr-gcc(avr-g++)编译器,这一套编译器组件的目录类似[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\tools\avr,实际上是winavr(读作whenever :-))的20081205版本,更多的版本在sourceforge上有,从20021111的第一版到最新的20101100都有,请goole一下。这里我们就不麻烦了,直接用arduino 的。为了方便命令行运行make命令,可以在path 中加入这个编译器的两个可执行文件目录,一个是[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\tools\avr\utils\bin,这个目录就包含了一些工具软件,例如make.exe就在这里头。还有一个可执行文件目录[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\tools\avr\bin,这里头是编译器的各个环节的工具,比如avr-gcc.exe等。下面说说怎么加path,我使用的是winxp,其它的类似。 1、先右击桌面“我的电脑”图标,点击属性 http://image.geek-workshop.com/forum/201207/19/083105w4v2nt2c44ccu2nu.jpg 2、选择“高级”标签页,点击下方的环境变量 http://image.geek-workshop.com/forum/201207/19/083513tkjsvu6wlltuu4s7.jpg 3、选择当前用户的PATH 变量选项,并点击编辑 http://image.geek-workshop.com/forum/201207/19/083906n1hhgw1f9vnfuf09.jpg 4、在变量值内,我们可以看到系统原有的一些目录的路径,各个路径之间用分号隔开,所以,我们在最后增加一个分号,然后再在后面加上我们的两个目录,[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\tools\avr\utils\bin;[D:\arduino\arduinosoftware\]arduino-1.0-windows\arduino-1.0\hardware\tools\avr\bin;注意,方括号内的内容改成你自己的arduino 目录。加好后,点击确定。这样环境变量就改好了。 http://image.geek-workshop.com/forum/201207/19/105608xsei1lax1mqqxo18.jpg 接下来测试编译环境是否正常,点击开始——》运行,输入"cmd.exe",打开命令行窗口。输入命令"make --version"和“avr-gcc 好了,编译环境设置好了,下面回到刚才的源代码目录。 介绍一下这次编译的目标,使bootloader的运行的晶振频率从默认的16Mzh更改为8Mhz,波特率保持官方的19200不变。这个需要修改Makefile 文件了。 需要做3个地方的改动: 1、修改变量DIRAVR, 只需要加入这一行就可以:"DIRAVR = D://arduino/arduinosoftware/arduino-1.0-windows/arduino-1.0/hardware/tools/avr 。 说明:这是编译器组件所在的目录,我们使用的是arduino-1.0-windows所自带的winavr20081205版本,因为avr-gcc 的工具链来自gun平台,目录的斜杆尊重unix的传统,是"/",而不是windows 和dos 的传统"\"。 2、修改晶振频率,找到DEFS 修改为DEFS 3、修改优化参数,这是最重要的一步,也是整篇文章最关键的地方。winavr从20021111版到现在的最新的20100110版,gcc的内核版本,从原来的gcc-3.4.2,发展到了现在的gcc-4.3.2版本。而这个Atmega8BOOT.c 编写于2003年,Makefile的最新版本是2004年,年代太久远了。所以需要修改优化参数。如果不修改,生成的中间代码太大了,然后链接不成最后的hex文件。找到 OPTIMIZE 修改后的Makefile的内容如下: 接下来,就是进行编译的过程了。 1、在打开命令行窗口,修改当前目录到所在的盘。介绍一下Dos 命令,默认打开的命令行窗口是C盘,我们要切换到保持源文件的盘,比如我的是D:盘,在命令行中输入"D:" ,按回车键。更改目录 ,输入" cd http://image.geek-workshop.com/forum/201207/19/100029b0am0rm909z00wus.jpg 2、在atmega8目录下输入命令"make clean" ,这是把以前编译过程的中间代码,结果代码等.o .a .hex 扩展名文件全部清空,为新的编译清理空间。 http://image.geek-workshop.com/forum/201207/19/100409nh69ps1hpqa66ui6.jpg 3、输入命令"make” ,是不是太容易了:)刷刷,编译过程一下子过了,最后生成AtmegaBOOT.hex文件等等,是不是特兴奋? http://image.geek-workshop.com/forum/201207/19/101125zopddpazmoxz1gs0.jpg 打开Atmega8目录,可以看到我们自己搞出来的hex了吧,呵呵。 之后的事情,我想大家各显神通,用编程器把这个hex烧到Atmega8L芯片里头吧。 这个芯片写好了我们自制的bootloader,已经是arduino 的家族成员了。 下面还有一个工作要做,就是把我们的信息加到arduino 的board的参数选项中。打开D:\arduino\arduinosoftware\arduino-1.0-windows\arduino-1.0\hardware\arduino文件夹的boards.txt 文件,进行修改,修改的模板用ATmega8的直接复制修改。参考看下面的代码: 说明:其实就把16000000L改成8000000L。 之后的事情,arduino 人都知道了。 思考题:1、编译过程中出现了一个警告,你打算如何把这个警告消除呢?是不是遵从GPL2.0的标准,改一下AtmegaBOOT.c的代码? 2、烧写bootloader时,avr芯片的熔丝位Hfuse 和Lfuse的数值在哪里可以找到? 最终生成的bootloader,在arduino1.0版测试通过,在arduino-0200版本测试通过,在1.0.1最新版测试通不过:(经过一个下午的努力,在RXD 和TXD(2、3)脚和VCC之间接1K OM的电阻后,在1.0.1版本测试也正常了:) http://www.geek-workshop.com/static/image/filetype/rar.gif |
前一篇:来一个心跳测量模块~~

加载中…