Arduino编译bootloader
最近打算自己定制一个Arduino的板子,改改Arduino的烧写机制。好在bootloader都是有源代码的,说干就干,改写前当然要试试这个源码能不能编译,可是到了bootloader目录就茫然了。。。。。竟然用的是makefile,可是作为一名程序猿当然不能退缩了。。。
1、找到bootloader源码
bootloader的源码都在\arduino-1.6.9\hardware\arduino\avr\bootloaders文件夹下,不同的单片机芯片或者arduino板有不同的文件夹,就拿最廉价的atmega8下手吧,正好我也有很多usbasp的pcb可以改改。进入到atmega8目录,可以看到下边有几个文件,毫无疑问.c文件就是源码了,暂时不修改源码,只是尝试编译一下,所以这次先不讲解.c文件,还有两个.hex的文件,这是实现编译好的hex文件,当新做的arduino板连接到ide烧写bootloader时,就是用的这里的hex,这个hex也没啥好说的。最后一个文件就是makefile了,makefile一般只有牛x的程序员才会编写,我一般都是照葫芦画瓢,但是为了折腾,还是得上。。。。
2、寻找make.exe
虽然没有写过makefile,至少见过makefile,之前没有读过多少书,编译程序次数多了多少也看出来一些门道。每次编译总是需要输入make命令,用ide编译的时候隐约可以看到开始前命令行中有make的影子。所以我如果要编译要先找找make.exe在哪里。于是在arduino的目录中搜索,但是很失望没有。。。。于是挨着翻看了一下arduino的目录,细心的我发现之前的arduino版本都带有winavr,貌似最新版没有了。于是找了个老版本看了看,果不其然老版本中有make.exe,于是赶紧下载一个winavr装上(装在任何目录都可以),终于看到了久违的make.exe。
3、初次尝试编译
既然有了make.exe,那开始编译吧,首先进入atmega8目录,调用make.exe命令(注意winavr安装的路径不同,命令不同,请根据自己安装的目录调整),我调用的命令如下:
c:\winavr-20081205\utils\bin\make.exe
想法总是美好的,可是现实总是残酷的。。。。当然编译bootloader报错了。。。错了。。。了。。。

4、修改makefile
不管怎么样,还是擦干泪水继续奋斗呀,其实仔细看看那个错误信息,似乎也很明确。。。。找不到指定的文件,看看上边的命令/bin/avr-gcc,貌似还真没有这个文件,/分明是linux的路径,我这里可是windows,打开makefile看看,
很快就找到原因所在了。。。
仔细看不难看出avr-gcc的路径是通过DIRAVRBIN来定义的,而DIRAVRBIN又是通过DIRAVR这个变量来获取的,并且文件中这个变量被注释了。。。。如下是修改前的代码
#DIRAVR = /usr/local/avr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = $(DIRAVR)/include
DIRLIB = $(DIRAVR)/avr/lib
既然看出问题所在了,那就修改一下就好了,通过搜索可以找到avr-gcc所在的目录,并且可以确定出avr-gcc所在的目录相对于makefile所在的目录的相对路径是:..\..\..\..\tools\avr\bin,所以makefile修改后如下:
DIRAVR = ..\..\..\..\tools\avr
DIRAVRBIN = $(DIRAVR)/bin
DIRAVRUTILS = $(DIRAVR)/utils/bin
DIRINC = $(DIRAVR)/include
DIRLIB = $(DIRAVR)/avr/lib
再次运行c:\winavr-20081205\utils\bin\make.exe hex终于看到了新的hex文件。。。。
Arduino编译bootloader的更多相关文章
- 浅谈arduino的bootloader
在arduino的板子上,作为核心的avr单片机往往都会烧录一个bootloader,这个叫做bootloader的东东其实是arduino研发团队针对arduino板子开发的一小段代码,借助于这段代 ...
- Pandaboard ES编译bootloader、xloader、内核、以及安卓系统
Building bootloader and kernel Bootloader Startwith building the bootloader. To learn more about the ...
- Arduino、bootloader、BadUSB、及其相关硬件知识入门学习
内容中包含 base64string 图片造成字符过多,拒绝显示
- 基于Proteus仿真的Arduino学习(1)——Arduino Uno最小系统及LED的简单使用
一.前言: A.Arduino简介 Arduino是由一个欧洲开发团队于2005年冬季开发.其成员包括Massimo Banzi.David Cuartielles.Tom Igoe.Gianluc ...
- 在ubuntu14.04上编译android4.2.2系统
原创作品,转载请注明出处,严禁非法转载 copyright:weishusheng 2015.8.1 时下android系统非常流行,下面就来说一下,下载编译一个andro ...
- 【转】高通平台android 环境配置编译及开发经验总结
原文网址:http://blog.csdn.net/dongwuming/article/details/12784535 1.高通平台android开发总结 1.1 搭建高通平台环境开发环境 在高通 ...
- Arduino使用注意问题及编程相关
1.Arduino的概念 arduino是一款便捷灵活方便上手的开源电子原型平台,包含硬件(各种型号的arduino板)和软件(arduino IDE), 是一个基于开放原始码的软硬件平台,构建于开放 ...
- Android 系统编译
最近研究了下Android 的编译系统,下面结合编译我们自己的产品 mobot 来对整个编译系统进行必要的介绍,方便大家今 后对默认编译的修改. 先列出几个觉得重要的Make 文件: build/bu ...
- AVR之BOOTLOADER技术详解(转)
源:http://blog.csdn.net/zhenhua10/article/details/6442412 ATmega128具备引导加载支持的用户程序自编程功能(In-System Progr ...
随机推荐
- [C++]STL容器Vector的内存释放
直接抛出两句话,说明到底应该如何释放Vector占用的内存. “vector的clear不影响capacity,你应该swap一个空的vector.” <Effective STL>中的“ ...
- 关于oracle后导数据的一些小TIPS
今天下午需要把一些数据导入到正式环境中,但是通过Excel拷贝进去行会错位,把excel的每一列的双击让其变为最宽即可解决该问题
- JAVA-随机读写文件
File类通过使用 . 来获取当前路径,从而取得文件. File f = new File(".\\Res\\Temp.txt"); 或者直接使用空构造函数: File f = n ...
- 云计算之路-阿里云上:RDS数据库连接数过万引发故障,主备库切换后恢复正常
非常抱歉!今天 12:03-12:52 ,由于数据库连接数异常突增超过1万,达到了阿里云RDS的最大连接数限制,影响了全站的正常访问.由此给您带来麻烦,请您谅解. 在发现数据库连接数突增的问题后,我们 ...
- git常见操作指令
由于公司用的是git进行版本管理,所以零零散散的学了一些常用到的git指令: 近日把廖雪峰前辈的git教程看了一遍,感觉操作起来更得心应手,在此做个记录,如有错漏望指正: git init //初始化 ...
- tab栏切换,内容为不断实时刷新数据的vue实现方法
先说一下产品需求,就是有几个tab栏,每个tab栏对应的ajax请求不一样,内容区域一样,内容为实时刷新数据,每3s需要重新请求,返回的数据在内容区域展示,每点击一次tab栏需停止其他tab栏ajax ...
- sublime前端开发工具常用技巧
ctrl+N//新建文件夹ctrl+shift+p//打开命令行!,ctrl+E//快速生成html模板ctrl+E//自动补齐ctrl+P(#@)//goto 任何地方,其中#查找元素,@查找样式c ...
- Java在Debug的时候,有些变量能无限展开(循环了)?
抛异常的时候,Java Debug 时,有些变量能无限展开,怎么做到的? 先来一个报错的例子: Exception in thread "main" java.lang.Stack ...
- Elasticsearch实现类似 like '?%' 搜索
在做搜索的时候,下拉联想词的搜索肯定是最常见的一个场景,用户在输入的时候,要自动补全词干,说得简单点,就是以...开头搜索,如果是数据库,一句SQL就很容易实现,但在elasticsearch如何实现 ...
- 【转】JDBC学习笔记(5)——利用反射及JDBC元数据编写通用的查询方法
转自:http://www.cnblogs.com/ysw-go/ JDBC元数据 1)DatabaseMetaData /** * 了解即可:DatabaseMetaData是描述数据库的元数据对象 ...