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文件。。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM