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 ...
随机推荐
- Oeacle创建表空间
/*第1步:创建临时表空间 */ create temporary tablespace user_temp tempfile 'D:\oracle\oradata\Oracle9i\user_tem ...
- [SinGuLaRiTy] 米勒罗宾素数判定法
[SinGuLaRiTy-1003] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. 背景 数论学家利用费马小定理研究出了多种素数测试办法,M ...
- Android 瘦身之道 ---- so文件
Android 瘦身之道 ---- so文件 [TOC] 1. 前言 目前Android 瘦身只有几个方面可以入手,因为apk的结构就已经固定了. res 目录下的资源文件.(通常是压缩图片,比如 矢 ...
- [Python]peewee使用经验
peewee 使用经验 本文使用案例是基于 python2.7 实现 以下内容均为个人使用 peewee 的经验和遇到的坑,不会涉及过多的基本操作.所以,没有使用过 peewee,可以先阅读文档 正确 ...
- python入门编程之基础
Python, 是一种面向对象.解释型计算机程序设计语言.Python语法简洁清晰,特色之一是强制用空白符作为语句缩进.Python的设计哲学是"优雅"."明确" ...
- T-SQL语句中的转换函数
书接上回 前面讲了聚合函数.字符串函数 今天一起来看下转换函数 首先是 值类型转换 ),degree) 在C#里面是convert,现在在SQL中也是他,convert(转换类型,被转换列)from ...
- R语言与SQL server链接
第一步:创建数据源(方法见下面链接) http://www.2cto.com/database/201412/365396.html 第二步:在R中输入以下代码: #####SQL SERVER与R语 ...
- 天方夜谈·数据结构·Queue
"我在想Y的时候不能想X....." 什么叫做Queue(队列)?"队列是项的集合,对于每一项x和y,如果x在y之前离开对头,那么x一定在y之前进入队列--Sesh·Ve ...
- wcf发布的服务在前端调用时,遇到跨域问题的解决方案
我是使用IIS作为服务的宿主,因此需要在web.config中增加如下配置节: <bindings> <webHttpBinding> <binding name=&qu ...
- 字符型SQL注入
字符型SQL注入 很早就基于DVWA实现了字符型的SQL注入,但是一直感觉自己没有理解的特别清楚,这次又看了一下网上的一些讲解,试着总结一下.以下是我的一写浅薄见解,请大家批判着看. 基本原理 看 ...