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这个变量来获取的,并且文件中这个变量被注释了。。。。如下是修改前的代码
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相关推荐
- Arduino烧录bootloader,并作为ISP进行下载程序
注:以下流程均在Pro mini 328P上进行. 1.在第一块板子上上传示例中的ArduinoISP程序,该板子成为板子A: 2.等待烧录bootloader的板子成为板子B: 3.板子A的引脚pi ...
- Scratch3.0 Blockly如何对Arduino编译下载
感谢伟大的开源思想,开源是自由的. 今天在这里一下如何使用Scratch3.0 & Blockly去编译Arduino(当然编译其他的原理都一样)这里就以Arduino为例了,正文如下: CM ...
- Ardupilot 编译Bootloader
1.清理之前的编译中间文件,一定要清理一下,能避免很多奇怪的问题 ./waf distclean 2.设置编译目标为针对你的硬件的BootLoader YourBoad是对应你的硬件,例如:CUAVv ...
- 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 ...
- BG2RHE - 用AtmelStudio7给ATMEGA芯片下载Arduino的bootloader的简便方法
Arduino以其简单快速的开发环境一直受到广大极客的欢迎,尤其是控制前端的应用领域,更是其大显身手的地方.但是,自制的板子或者bootloader损坏的Arduino板子想要重新写入bootlo ...
- arduino编译失败_Arduino编译时失败
错误信息: Arduino:1.8.4 (Windows 7), 开发板:"Arduino/Genuino Uno" C:\Program Files\Arduino\arduin ...
- Arduino 编译出错:Pixy2I2C.h: No such file or directory
今天刚安装 Arduino IDE软件,运行了一下越疆公司提供的.ion代码,结果报了此错. 1.原因: Arduino 智能套件 Demo 需用到机械臂.Pixy2 视觉识别模块等,所以调试 Dem ...
- 从Arduino IDE安装到成功控制LED灯光的开发过程|阿里云远程控制灯光案例|Arduino编译缺少python27.dll问题|玉念聿辉
目录 初识Arduino 安装Arduino IDE ESP32 Blink(控制主板led) 安装 FireBeetle Board-ESP32 开发板核心 连接 FireBeetle Board- ...
- 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 ...
最新文章
- HDU3037(卢卡斯定理)
- Logistic Regression逻辑回归
- leetcode 11. Container With Most Water
- python多元回归预测例子_Python机器学习,多元线性回归分析问题
- 自由群,外代数和泛包络代数
- java 多线程下载 开源_Android Downloader是一个开源的多线程,多任务下载框架
- 3.集--LinkedTransferQueue得知
- maven打包插件:maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin详解
- [HTTP] Cookie
- 充电枪cp信号控制板_新能源汽车充电头气密性检测是怎么做的呢?
- ac3168无线网卡驱动下载_计算机基础:网卡
- markdown测试文章
- 16、单片机串口原理与应用
- IEEE1588v2解析(2)--PTP协议概述
- 机器视觉需要掌握的知识
- 删除卸载企业微信后的残留文件
- 程序员的日常生活之人艰不拆真相
- win10蓝牙已配对连接不上_win10蓝牙耳机连接不上怎么办_win10蓝牙耳机连接不上的解决方法...
- 如何用python抓取qq音乐_手把手教你使用Python抓取QQ音乐数据
- 普通路由器改4g路由器_工业远程管理神器,4G无线路由器更方便
热门文章
- Python 列表 append()函数使用详解
- 一文读懂802.1x协议,随便秒杀面试官
- aix Oracle 限制访问,改变AIX上使用oracle的一些限制
- php-fpm容易假死,实现自动重启php服务的脚本 通过后
- 大数据系列博客之 --- 深入简出 Shell 脚本语言(提升篇)
- 部署前端项目 Linux系统的nginx配置
- struts配置json需要的jar包
- VMware中centos6.5 minimal 使用NAT模式联网
- python 轻量级邮件发送库
- Python2.7和3.6之间的区别