最近打算自己定制一个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这个变量来获取的,并且文件中这个变量被注释了。。。。如下是修改前的代码

1 #DIRAVR = /usr/local/avr
2 DIRAVRBIN = $(DIRAVR)/bin
3 DIRAVRUTILS = $(DIRAVR)/utils/bin
4 DIRINC = $(DIRAVR)/include
5 DIRLIB = $(DIRAVR)/avr/lib

  既然看出问题所在了,那就修改一下就好了,通过搜索可以找到avr-gcc所在的目录,并且可以确定出avr-gcc所在的目录相对于makefile所在的目录的相对路径是:..\..\..\..\tools\avr\bin,所以makefile修改后如下:

1 DIRAVR = ..\..\..\..\tools\avr
2 DIRAVRBIN = $(DIRAVR)/bin
3 DIRAVRUTILS = $(DIRAVR)/utils/bin
4 DIRINC = $(DIRAVR)/include
5 DIRLIB = $(DIRAVR)/avr/lib

  再次运行c:\winavr-20081205\utils\bin\make.exe hex终于看到了新的hex文件。。。。

转载于:https://www.cnblogs.com/zhb1190/p/5568647.html

Arduino编译bootloader相关推荐

  1. Arduino烧录bootloader,并作为ISP进行下载程序

    注:以下流程均在Pro mini 328P上进行. 1.在第一块板子上上传示例中的ArduinoISP程序,该板子成为板子A: 2.等待烧录bootloader的板子成为板子B: 3.板子A的引脚pi ...

  2. Scratch3.0 Blockly如何对Arduino编译下载

    感谢伟大的开源思想,开源是自由的. 今天在这里一下如何使用Scratch3.0 & Blockly去编译Arduino(当然编译其他的原理都一样)这里就以Arduino为例了,正文如下: CM ...

  3. Ardupilot 编译Bootloader

    1.清理之前的编译中间文件,一定要清理一下,能避免很多奇怪的问题 ./waf distclean 2.设置编译目标为针对你的硬件的BootLoader YourBoad是对应你的硬件,例如:CUAVv ...

  4. Arduino编译错误解决办法:fork/exec:…\arm-none-eabi-g++.exe: The filename or extension is too long

    编译错误解决办法:fork/exec:-\arm-none-eabi-g++.exe: The filename or extension is too long 解决方案来自Edge Impulse ...

  5. BG2RHE - 用AtmelStudio7给ATMEGA芯片下载Arduino的bootloader的简便方法

      Arduino以其简单快速的开发环境一直受到广大极客的欢迎,尤其是控制前端的应用领域,更是其大显身手的地方.但是,自制的板子或者bootloader损坏的Arduino板子想要重新写入bootlo ...

  6. arduino编译失败_Arduino编译时失败

    错误信息: Arduino:1.8.4 (Windows 7), 开发板:"Arduino/Genuino Uno" C:\Program Files\Arduino\arduin ...

  7. Arduino 编译出错:Pixy2I2C.h: No such file or directory

    今天刚安装 Arduino IDE软件,运行了一下越疆公司提供的.ion代码,结果报了此错. 1.原因: Arduino 智能套件 Demo 需用到机械臂.Pixy2 视觉识别模块等,所以调试 Dem ...

  8. 从Arduino IDE安装到成功控制LED灯光的开发过程|阿里云远程控制灯光案例|Arduino编译缺少python27.dll问题|玉念聿辉

    目录 初识Arduino 安装Arduino IDE ESP32 Blink(控制主板led) 安装 FireBeetle Board-ESP32 开发板核心 连接 FireBeetle Board- ...

  9. Arduino编译Marlin1.1出现 fatal error: U8glib.h: No such file or directory如何解决

    marlin固件发展至今已经形成了三个比较重大的版本:1.0版,1.1版,2.0版. 本文介绍的是Marlin1.1版本的,Arduino用到的版本1.6.7,Marlin1.0版,1.1版都能用Ar ...

最新文章

  1. HDU3037(卢卡斯定理)
  2. Logistic Regression逻辑回归
  3. leetcode 11. Container With Most Water
  4. python多元回归预测例子_Python机器学习,多元线性回归分析问题
  5. 自由群,外代数和泛包络代数
  6. java 多线程下载 开源_Android Downloader是一个开源的多线程,多任务下载框架
  7. 3.集--LinkedTransferQueue得知
  8. maven打包插件:maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin详解
  9. [HTTP] Cookie
  10. 充电枪cp信号控制板_新能源汽车充电头气密性检测是怎么做的呢?
  11. ac3168无线网卡驱动下载_计算机基础:网卡
  12. markdown测试文章
  13. 16、单片机串口原理与应用
  14. IEEE1588v2解析(2)--PTP协议概述
  15. 机器视觉需要掌握的知识
  16. 删除卸载企业微信后的残留文件
  17. 程序员的日常生活之人艰不拆真相
  18. win10蓝牙已配对连接不上_win10蓝牙耳机连接不上怎么办_win10蓝牙耳机连接不上的解决方法...
  19. 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据
  20. 普通路由器改4g路由器_工业远程管理神器,4G无线路由器更方便

热门文章

  1. Python 列表 append()函数使用详解
  2. 一文读懂802.1x协议,随便秒杀面试官
  3. aix Oracle 限制访问,改变AIX上使用oracle的一些限制
  4. php-fpm容易假死,实现自动重启php服务的脚本 通过后
  5. 大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)
  6. 部署前端项目 Linux系统的nginx配置
  7. struts配置json需要的jar包
  8. VMware中centos6.5 minimal 使用NAT模式联网
  9. python 轻量级邮件发送库
  10. Python2.7和3.6之间的区别