AVR-GCC w Linuksie - przykład instalacji ze źródeł.pdf

(143 KB) Pobierz
XYZ Hobby Robot-AVR-GCC w Linuksie, cz.1
1 Z 7
Artykuł pochodzi ze strony XYZ HOBBY ROBOT ( xyz.isgreat.org )
AVRGCC w Linuksie przykład instalacji ze źródeł
28.04.10 ABXYZ
Ostatnio aktualizowałem na swoim
PC system Linux Slackware i całe
oprogramowanie. I z tej okazji
opiszę tutaj szczegółowo, krok po
kroku, jak zainstalować kompilator
AVRGCC z plików źródłowych.
Opiszę równieŜ jak zacząć uŜywać AVRGCC: jak skompilować
przykładowy program w języku C i jak zaprogramować pamięć
AVRa. Na pewno przykład ten komuś się przyda.
Aby zbudować środowisko programistyczne AVRGCC (kompilator
języka C i zestaw programów narzędziowych), potrzeba
zainstalować pakiety: binutils, gcc, avrlibc. Przyda się takŜe
program do obsługi programatora ISP, najlepszy jest avrdude. To
jest zestaw minimum pozwalający kompilować programy
i programować AVRy. W drugiej części tego artykułu napiszę na
temat debugowania i symulacji, opiszę instalację: avrgdb,
avrinsight, avarice, simulavr.
KROK 1
Zacząłem od utworzenia na dysku tymczasowego katalogu o nazwie
avrsrc, do którego pobrałem z internetu paczki zawierające pliki
źródłowe instalowanego oprogramowania.
$ mkdir avrsrc
$ cd avrsrc
$ wget ftp.gnu.org/gnu/binutils/binutils2.20.tar.bz2
$ wget ftp.gnu.org/gnu/gcc/gcc4.3.3/gcccore4.3.3.tar.bz2
$ wget http://mirror.lihnidos.org/GNU/savannah/avrlibc/avrlibc
1.6.7.tar.bz2
$ wget http://mirror.lihnidos.org/GNU/savannah/avrdude/avrdude
5.9.tar.gz
Wiem z doświadczenia, Ŝe kompilacja najnowszych wersji gcc dla
AVRów, z jakiś nieznanych powodów, moŜe zakończyć się
niepowodzeniem. Aby uniknąć ewentualnych problemów, pobrałem
z Internetu gcc w tej wersji, jaka jest w aktualnym pakiecie
WinAVR. Zamierzamy programować AVRy tylko w język C (bez
C++), dlatego pobrałem mniejszą paczkę gcccore.
Następnie załoŜyłem nowy katalog dla środowiska AVRGCC,
wszystkie pliki instalowane będą w osobnym katalogu /usr/local/avr
. Przy kolejnej aktualizacji, nie będzie kłopotu z odinstalowaniem
starszej wersji AVRGCC, po prostu usunę stary katalog albo
zmienię jego nazwę na inną. Właścicielem katalogu /usr/local jest
root, więc aby załoŜyć w tam nowym podkatalog, zmieniłem
uŜytkownika systemu na root.
$ su l
# mkdir /usr/local/avr
# exit
$
608087156.007.png 608087156.008.png 608087156.009.png 608087156.010.png
2 Z 7
Dodałem do ścieŜki przeszukiwania podkatalog /usr/local/avr/bin,
tam trafią wszytki plik wykonywalne.
$ export PATH=$PATH:/usr/local/avr/bin
Aby na stałe dodać katalog /usr/local/avr/bin do ścieŜki
przeszukiwania, otworzyłem do edycji plik /etc/profile. UŜywam
edytora tekstu gvim.
$ su l
# gvim /etc/profile
# exit
I na końcu pliku /etc/profile dopisałem polecenie
export PATH=$PATH:/usr/local/avr/bin
KROK 2 instalacja binutils
Rozpakowałem archiwum binutils2.20.tar.bz2 i przeszedłem do
katalogu ze źródłami binutils
$ tar xjvf binutils2.20.tar.bz2
$ cd binutils2.20
Kompilację binutils naleŜy przeprowadzić z podkatalogu, więc
w katalogu ze źródłami binutils załoŜyłem podkatalog objavr.
$ mkdir objavr
$ cd objavr
Będąc w katalogu binutils2.20/objavr uruchomiłem skrypt
configure z odpowiednio dobranymi opcjami.
$ ../configure prefix=/usr/local/avr target=avr disablenls
Skrypt configure zakończył działanie bez błędu, uruchomiłem
kompilację
$ make
Aby skrypt instalacyjny miał dostęp do katalogu /usr/local/avr,
trzeba instalację plików przeprowadzić z konta uŜytkownika root
Zmieniłem uŜytkownika na root i uruchomiłem instalację plików.
$ su l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
$ cd ../..
KROK 3 Instalacja gcc
Rozpakowałem archiwum gcccore4.3.3.tar.bz2 i przeszedłem do
katalogu z plikami źródłowymi gcc
$ tar xjvf gcccore4.3.3.tar.bz2
$ cd gcc4.3.3
Podobnie jak w przypadku binutils, kompilację gcc naleŜy
przeprowadzić z podkatalogu. W katalogu ze źródłami gcc
załoŜyłem podkatalog objavr.
608087156.001.png
3 Z 7
$ mkdir objavr
$ cd objavr
Będąc w katalogu gcc4.3.3/objavr uruchomiłem skrypt configure
z odpowiednimi opcjami.
$ ../configure prefix=/usr/local/avr target=avr enable
languages=c disablenls disablelibssp withdwarf2
Uruchomiłem kompilację
$ make
Zmieniłem uŜytkownika na root i uruchomiłem instalację plików
$ su l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
# cd ../..
KROK 4 insatalacja avrlibc
Rozpakowałem archiwum avrlibc1.6.7.tar.bz2 i przeszedłem do
katalogu ze źródłami avrlibc.
$ tar xjvf avrlibc1.6.7.tar.bz2
$ cd avrlibc1.6.7
Będąc w katalogu avrlibc1.6.7 uruchomiłem skrypt configure
z odpowiednimi opcjami.
$ ./configure prefix=/usr/local/avr build=`./config.guess`
host=avr
Skompilowałem
$ make
Następnie zmieniłem uŜytkownika na root
$ su l
W trakcie instalacji plików avrlibc powinien być juŜ dostępny
działający kompilator avrgcc. Dlatego równieŜ dla uŜytkownika
root dodałem do ścieŜki przeszukiwania katalog /usr/local/avr/bin
# export PATH=$PATH:/usr/local/avr/bin
Uruchomiłem instalacje plików avrlibc
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
# cd ../..
KROK 5 instalacja avrdude
Rozpakowałem archiwum avrdude5.9.tar.gz i przeszedłem do
katalogu ze źródłami avrdude.
$ tar xzvf avrdude5.9.tar.gz
$ cd avrdude5.9
Będąc w katalogu avrdude5.9 uruchomiłem skrypt configure .
$ ./configure prefix=/usr/local/avr
608087156.002.png
4 Z 7
Skompilowałem
$ make
Przeszedłem na konto root i uruchomiłem instalację plików
$ su l
# make install
Wyszedłem z kąta root i wróciłem do katalogu avrsrc
# exit
$ cd ..
Programator USBasp
Ja uŜywam programatora USBasp . W Linuksie nie trzeba instalować
Ŝadnych dodatkowych sterowników, aby korzystać z programatora
USBasp. Jednak programator jest dostępny jedynie dla uŜytkownika
root. śeby dać moŜliwość korzystania z programatora USBasp takŜe
innym uŜytkownikom systemu, zrobiłem następującą rzecz:
zmieniłem uŜytkownika na root, i z pomocą edytora tekstu,
w katalogu /etc/udev/rules.d/, utworzyłem nowy plik o nazwie
60objdev.rules
# su l
# gvim /etc/udev/rules.d/60objdev.rules
I wkleiłem do tego pliku poniŜszą regułkę.
SUBSYSTEM!="usb_device", ACTION!="add", GOTO="objdev_rules_end"
# USBasp
SYSFS{idVendor}=="16c0", SYSFS{idProduct}=="05dc", GROUP="users", MODE="666"
LABEL="objdev_rules_end"
Zapisałem plik i zrestartowałem udev. W Slackware moŜna
zrestartować udev wpisując polecenie
# /etc/rc.d/rc.udev restart
# exit
A na przykład w Ubuntu
$ sudo /etc/init.d/udev restart
Aby to zadziałało trzeba odłączyć na chwilę programator USBasp
z portu USB komputera i podłączyć ponownie.
Test AVRGCC kompilacja przykładowego programiku
Utworzyłem katalog projektu, aby w nim przeprowadzić kompilację
przykładowego programiku, celem sprawdzenia czy kompilator
właściwie działa.
$ mkdir avrgcc_test
$ cd avrgcc_test
W katalogu projektu avrgcc_test, z pomocą edytora tekstu,
utworzyłem nowy plik o nazwie led.c
$ gvim led.c
I wkleiłem do niego poniŜszy kod przykładowego programiku, i
zapisałem.
/* "led.c" programik do testowania środowiska WinAVR */
608087156.003.png 608087156.004.png 608087156.005.png
5 Z 7
/* układ ATmega 1MHz */
/* PB0,PB1 diody LED; PD0 przycisk */
#define F_CPU 1000000L
#include <avr/io.h>
#include <util/delay.h>
int main( void )
{
DDRB |=
|= _BV( 0 )|
)|_BV( 1 );
);
PORTB |=
|= _BV( 0 );
);
PORTB &=
&= ~_BV( 1 );
);
DDRD &=
&= ~_BV( 0 );
);
PORTD |=
|= _BV( 0 );
);
while ( 1 )
{
PORTB ^=
^=_BV( 0 );
);
);
_delay_ms((PIND & _BV( 0 ))?
^=_BV( 1 );
);
))? 1000 : 200 );
);
}
}
Listing przykładowego programu
Animacja poniŜej demonstruje jak powinien działać nasz
przykładowy program.
Efekt działania przykładowego programu. Do portów PB0..PB1 przyłączone są diody LED, do
PD0 przycisk.
Następnie skompilowałem programik z pliku led.c poleceniem:
$ avrgcc mmcu=atmega16 Os Wall led.c o led.out lm
Z wynikowego pliku led.out utworzyłem plik dla programatora
led.hex
$ avrobjcopy O ihex R .eeprom led.out led.hex
Sprawdziłem wielkość kodu wynikowego
$ avrsize led.out
Z pomocą programu avrdude zapisałem kod zawarty w pliku led.hex
do pamięci flash AVRa atmega16
$ avrdude c usbasp p m16 U flash:w:led.hex
Kompilacja przykładowego programu i programowanie pamięci flash
AVRa przebiegło bez problemów, zatem AVRGCC zainstalowany
i programator ISP działa.
Plik Makefile
|=
)|
|=
&=
&=
|=
^=
PORTB ^=
^=
))?
);
608087156.006.png
Zgłoś jeśli naruszono regulamin