Jump to content

User:Podlajak: Difference between revisions

From HW wiki
Podlajak (talk | contribs)
New page: == Emulace ARM desky pro pedmt Y35PES == === Navod na instalaci a pouziti emulatoru AT91SAM7XC256 na linuxu. === (Windows verzi stahujet z: http://www.emclient.com/temp/qemu-arm-softmm...
 
Podlajak (talk | contribs)
No edit summary
Line 6: Line 6:
==== Repozitář ====
==== Repozitář ====
Naleznete na stránkách: http://repo.or.cz/w/qemu/navara.git . Stáhněte si aktuální verzi emulátoru:
Naleznete na stránkách: http://repo.or.cz/w/qemu/navara.git . Stáhněte si aktuální verzi emulátoru:
  $ git clone git://repo.or.cz/w/qemu/navara.git ./qemu-arm
  $ git clone git://repo.or.cz/w/qemu/navara.git ./qemu-arm


Jak asi ti bystřejší pochopili, je třeba mít nainstalovaný nástroj na správu kodů: git.
Jak asi ti bystřejší pochopili, je třeba mít nainstalovaný nástroj na správu kodů: git.
  $ emerge git
  $ emerge git (gentoo)
  $ apt-get install git
  $ apt-get install git (ubudntu/debian)


==== Kompilace ====
==== Kompilace ====
Když už máme stažený repozitář, zkompilujeme (je vždy dobré ho před kompilací updatovat):
Když už máme stažený repozitář:
 
  $ cd qemu-arm  
  $ cd qemu-arm  
  $ mkdir bin  
  $ mkdir bin  
$ git pull


Pan Píša mi poslal konfiguraci s těmito přepínai. Nemám ozkoušeno, použil jsem až tu následující.
Nakonfigurujeme.  
  $ ./configure --enable-system --enable-linux-user --enable-io-thread
  $ ./configure --target-list=arm-softmmu --prefix=$(pwd)/bin


Němel jsem v jádře zakompilované KVM a qemu si na něj stežovalo, proto jsem ho zákazal při kompilaci. Údajně ho není třeba.
Zkompilujeme.
$ make
----
Troubleshooting: Němel jsem v jádře zakompilované KVM a qemu si na něj stežovalo, proto jsem ho zákazal při kompilaci. Údajně ho není pro emulaci potřeba.
  $ ./configure --target-list=arm-softmmu --disable-kvm --prefix=$(pwd)/bin
  $ ./configure --target-list=arm-softmmu --disable-kvm --prefix=$(pwd)/bin


Pokud jste program už někdy kompilovali, nezapomeňte proistit (nepozornost co může stát dloouhé minuty trápení).
Pan Píša mi poslal konfiguraci s těmito přepínai. Nemám ozkoušeno.
$ ./configure --enable-system --enable-linux-user --enable-io-thread


Poznámka: Pokud jste program už někdy kompilovali, nezapomeňte před kompilací proistit (nepozornost co může stát dloouhé minuty trápení). Je také dobým zvykem před kompilací updatovat repozitář.
$ git pull
  $ make clean
  $ make clean
$ make
 


===Instalace binutils a arm kompilatoru===
===Instalace binutils a arm kompilatoru===
Line 38: Line 41:
  $ wget ftp://rtime.felk.cvut.cz/debian/pool/arm-elf/gcc-arm-elf_4.3.2-1_i386.deb
  $ wget ftp://rtime.felk.cvut.cz/debian/pool/arm-elf/gcc-arm-elf_4.3.2-1_i386.deb


Instalace těchto .dep balíku je popsána na stránce: [[Cross_compilers]]
Instalace těchto .dep balíku je popsána na stránce: '''[[Cross_compilers]]'''


====Troubleshooting====
====Troubleshooting====
Line 48: Line 51:


  # dpkg -i --force-architecture binutils-arm-elf_2.19.50-1_i386.deb
  # dpkg -i --force-architecture binutils-arm-elf_2.19.50-1_i386.deb


===Vlastní projekt===
===Vlastní projekt===
Line 53: Line 57:
  $ cd ../pes-template
  $ cd ../pes-template


Ve starších verzích nesedí velikosti písmen v Makefile, v header includech a na fs. Je potřeba to sladit (přejmenovat soubory, resp. přepsat include i Makefile). Vše potřebné zjistíte z výpisu make.  
Ve starších verzích nesedí velikosti písmen v Makefile, v header includech a ve jménech souborů ve složce .board. Je potřeba to sladit (přejmenovat soubory, resp. přepsat include i Makefile). Vše potřebné zjistíte z výpisu make.  


====Kompilace====
====Kompilace====
Te, když je Makefile hotový, můžeme kompilovat. Zajímají nás pouze '''.elf binárky''', tak si ušetříme práci a přeložíme jen do .elf.
Te, když je Makefile hotový, můžeme kompilovat. Zajímají nás pouze '''.elf binárky''', tak si ušetříme práci a přeložíme jen do .elf.5
 
  $ make clean
  $ make clean
  $ make elf
  $ make elf


Pozn.: To samozrejme neplati pokud chceme projekt programovat na desku. Emulator qemu pouziva jako kernel .elf soubory, kdezto na desku se nahrava az vysledny .bin soubor. Tak ci tak, v Makefile je stejne pro prikaz 'program' dana zavislost 'bin/main.bin'.
Pozn.: To samozřejmě neplatí pokud chceme projekt programovat na desku. Emulátor qemu používá jako kernel .elf soubory, kdežto na desku se náhravá až výsledný .bin soubor. Tak i tak, v Makefile je stejně pro příkaz 'program' dána závislost 'bin/main.bin'.


====Použití emulátoru====
====Použití emulátoru====
Pro soubory qemu-arm/bin/qemu-system-arm (zkompilovaný na zaátku tutoriálu), a námi zkompilovaný vzorový program pes-template/bin/main.elf spustíme emulátor příkazem:
Pro soubory qemu-arm/bin/qemu-system-arm (zkompilovaný na zaátku tutoriálu), a námi zkompilovaný vzorový program pes-template/bin/main.elf spustíme emulátor příkazem:
  $ qemu-system-arm -M at91pes -kernel main.elf
  $ qemu-system-arm -M at91pes -kernel main.elf


Doporuuji si na qemu udělat alias, nebo scriptík. Např. u mě:
Doporuuji si na qemu udělat alias, nebo scriptík. Např. u mě:
$ alias qemu-system-arm="~/qemu-arm/bin/qemu-system-arm -M at91pes -kernel"


$ alias qemu-system-arm="~nardi/fel.pes/qemu-arm/bin/qemu-system-arm -M at91pes -kernel"
Pak (po restartu bashe a kompilaci projektu ve slozce pes-template/ ) pro spuštění qemu staí napsat:
 
Pak (po restartu bashe) pro spuštění qemu staí napsat:
 
  $ qemu-system-arm bin/mail.elf
  $ qemu-system-arm bin/mail.elf


Line 86: Line 85:
* Pokud jste "uvězněni" v QEMU a zmáknete Ctrl+Alt+2, přepnete se do druhé "qemu kozole".  
* Pokud jste "uvězněni" v QEMU a zmáknete Ctrl+Alt+2, přepnete se do druhé "qemu kozole".  
** Napište příkaz help ať zjistíte co umí.. (quit, stop, cont, ...). Z konzole zpět do emulátoru se vrací Ctrl+Alt+1.
** Napište příkaz help ať zjistíte co umí.. (quit, stop, cont, ...). Z konzole zpět do emulátoru se vrací Ctrl+Alt+1.


====Advanced ovladani====
====Advanced ovladani====
 
Na třetí konzoli (CTRL+ALT+3) se nachazí výstup sériového portu. Ten si lze např přidáním parametru (při spuštění qemu):
Na třetí konzoli (CTRL+ALT+3) se nachazí výstup sériového portu. Ten si lze např přidáním parametru (při zpuštění qemu):
 
  -serial tcp::5555,server
  -serial tcp::5555,server


v případě potřeby poslat na TCP a íst např. přes telnet,
v případě potřeby poslat na TCP a íst např. přes telnet,
  $ telnet localhost 5555
  $ telnet localhost 5555


Line 102: Line 97:


==Nahrávání programů na desku přímo z Linuxu==
==Nahrávání programů na desku přímo z Linuxu==
Abstrakt: Když už si dáváme tu práci a kompilujeme a ladíme program pod naším oblíbeným systémem, pro mařit as kopírováním do Win ve strojovně a hledání chyb v programu, který ani nezvýrazňuje syntaxi.
Abstrakt: Když už si dáváme tu práci a kompilujeme a ladíme program pod naším oblíbeným systémem, pro mařit as kopírováním do Win ve strojovně a hledání chyb v programu, který ani nezvýrazňuje syntaxi.


Line 108: Line 102:
====Download====
====Download====
Z Makefile je vidět, že pro nahrávání programů na desku se v laborce používa program sam-ba.exe (SAM Boot Asistant).
Z Makefile je vidět, že pro nahrávání programů na desku se v laborce používa program sam-ba.exe (SAM Boot Asistant).
Verzi pro linux stahujte odsud.
Verzi pro linux stahujte odsud (pokud nefunguje najdete si na [http://www.atmel.com/dyn/products/tools_card.asp?tool_id=3883 stránkách atmelu] poslední verzi - a pokudmožno opravte následující link):
 
  $ wget http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.9_cdc_linux.zip
  $ wget http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.9_cdc_linux.zip
  $ unzip sam-ba_2.9_cdc_linux.zip &&\
  $ unzip sam-ba_2.9_cdc_linux.zip &&\
  rm sam-ba_2.9_cdc_linux.zip &&\
  rm sam-ba_2.9_cdc_linux.zip &&\
  mv sam-ba_2.9_cdc_linux sam-ba
  mv sam-ba_2.9_cdc_linux sam-ba
  $ cd sam-ba
  $ cd sam-ba


====Instalace====
====Instalace====
Vše lze vyíst ze souboru doc/README.linux:
Vše lze vyíst ze souboru doc/README.linux:
  $ cat doc/README.linux
  $ cat doc/README.linux
  (...)
  (...)
Line 146: Line 137:
  => you will have to use /dev/ttyUSBx to connect to your board
  => you will have to use /dev/ttyUSBx to connect to your board


Na gentoo tedy stacilo (jako root) nainstalovat zavyslosti a podle instrukci nahrat do jadra modul usbserial s konkretnimi vendor a product identifikatory.
Na gentoo tedy stailo (jako root) nainstalovat závyslosti a podle instrukcí nahrát do jádra modul usbserial s konkretními vendor a product identifikátory.
 
  # emerge tcl tclx tk
  # emerge -av tcl tclx tk
  # rmmod usbserial
  # rmmod usbserial
  # modprobe usbserial vendor=0x03eb product=0x6124
  # modprobe usbserial vendor=0x03eb product=0x6124


====Úprava Makefile====
====Úprava Makefile (once again)====
  $ cd ../pes-template
  $ cd ../pes-template


Z výpisu '''dmesg''' se po připojení desky dozvíme, že jí najdeme pod '''/dev/ttzUSB0'''
Z výpisu '''dmesg''' (viz. výše) se po připojení desky dozvíme, že jí najdeme pod zařízením '''/dev/ttzUSB0'''.
Změníme tedy zařízení v Makefile stejně jako adresu na sam-ba. Čili po úpravách:
Změníme tedy zařízení v Makefile stejně jako adresu na sam-ba. Čili po úpravách:
  $ cat Makefile
  $ cat Makefile
  (...)
  (...)
Line 164: Line 153:
  (...)
  (...)
  #sam-ba.exe $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)
  #sam-ba.exe $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)
  ../sam-ba/sam-ba $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)
  ~/sam-ba/sam-ba $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)


====Nahrání programu - troubleshooting====
====Nahrání programu - troubleshooting====
A dostáváme se do krizové fáze. Pokud nám kernel našel desku, program se nám zkompiloval, běhá nám v emulátoru a máme v pořádku naintalovaný sam-ba, pokusíme se náš výtvor přesunout na "železo"
A dostáváme se do krizové fáze. Pokud nám kernel našel desku, program se nám zkompiloval, běhá nám v emulátoru a máme v pořádku naintalovaný sam-ba, pokusíme se náš výtvor přesunout na "železo":
 
  $ make program
  $ make program
  You may have to bring the target in bootloader-mode now.
  You may have to bring the target in bootloader-mode now.
Line 188: Line 176:
  -E- Error during FLASH initialization
  -E- Error during FLASH initialization


Thle chyba byla nakonec v knihovnaách pro sam-ba. Řešením je přepsat scripty v nové verzi (SAM-BA-2.9) těmi které jsou k nalezení na windows v uebnách. Pro jednoduchost je přikládám ke stažení.
Thle chyba byla nakonec v knihovnaách pro sam-ba. Řešením je přepsat scripty v nové verzi (SAM-BA-2.9 - stažená dříve v tomto manuálu) těmi které jsou k nalezení na windows v uebnách. Pro jednoduchost je přikládám ke stažení.
 
  $ cd sam-ba/applets/isp-project/tcl_lib/at91sam7x256-ek/
  $ cd sam-ba/applets/isp-project/tcl_lib/at91sam7x256-ek/
  $ mkdir archiv
  $ mkdir archiv

Revision as of 13:42, 27 November 2009

Emulace ARM desky pro předmět Y35PES

Navod na instalaci a pouziti emulatoru AT91SAM7XC256 na linuxu.

(Windows verzi stahujet z: http://www.emclient.com/temp/qemu-arm-softmmu-20091026.zip ).

QEMU

Repozitář

Naleznete na stránkách: http://repo.or.cz/w/qemu/navara.git . Stáhněte si aktuální verzi emulátoru:

$ git clone git://repo.or.cz/w/qemu/navara.git ./qemu-arm

Jak asi ti bystřejší pochopili, je třeba mít nainstalovaný nástroj na správu kodů: git.

$ emerge git (gentoo)
$ apt-get install git (ubudntu/debian)

Kompilace

Když už máme stažený repozitář:

$ cd qemu-arm 
$ mkdir bin 

Nakonfigurujeme.

$ ./configure --target-list=arm-softmmu --prefix=$(pwd)/bin

Zkompilujeme.

$ make

Troubleshooting: Němel jsem v jádře zakompilované KVM a qemu si na něj stežovalo, proto jsem ho zákazal při kompilaci. Údajně ho není pro emulaci potřeba.

$ ./configure --target-list=arm-softmmu --disable-kvm --prefix=$(pwd)/bin

Pan Píša mi poslal konfiguraci s těmito přepínai. Nemám ozkoušeno.

$ ./configure --enable-system --enable-linux-user --enable-io-thread

Poznámka: Pokud jste program už někdy kompilovali, nezapomeňte před kompilací proistit (nepozornost co může stát dloouhé minuty trápení). Je také dobým zvykem před kompilací updatovat repozitář.

$ git pull 
$ make clean


Instalace binutils a arm kompilatoru

Stažení a instalace

Z ftp ftp://rtime.felk.cvut.cz/debian/pool/arm-elf/ stáhněte binutils a gcc. x86 resp. 64bit podle vaší architektury.

$ wget ftp://rtime.felk.cvut.cz/debian/pool/arm-elf/binutils-arm-elf_2.19.50-1_i386.deb
$ wget ftp://rtime.felk.cvut.cz/debian/pool/arm-elf/gcc-arm-elf_4.3.2-1_i386.deb

Instalace těchto .dep balíku je popsána na stránce: Cross_compilers

Troubleshooting

V případě, že dpkg nádavá, že vám nesedí architektura, tak mu ji natvrdo přikažte, nebo nainstalujte přes ar a tar jak je uvedeno v návodu (odkaz o dva řádky výše).

# dpkg -i binutils-arm-elf_2.19.50-1_i386.deb		
dpkg: error processing binutils-arm-elf_2.19.50-1_i386.deb (--install):
 package architecture (i386) does not match system ()
# dpkg -i --force-architecture binutils-arm-elf_2.19.50-1_i386.deb


Vlastní projekt

Úprava projektu z moodle

$ cd ../pes-template

Ve starších verzích nesedí velikosti písmen v Makefile, v header includech a ve jménech souborů ve složce .board. Je potřeba to sladit (přejmenovat soubory, resp. přepsat include i Makefile). Vše potřebné zjistíte z výpisu make.

Kompilace

Te, když je Makefile hotový, můžeme kompilovat. Zajímají nás pouze .elf binárky, tak si ušetříme práci a přeložíme jen do .elf.5

$ make clean
$ make elf

Pozn.: To samozřejmě neplatí pokud chceme projekt programovat na desku. Emulátor qemu používá jako kernel .elf soubory, kdežto na desku se náhravá až výsledný .bin soubor. Tak i tak, v Makefile je stejně pro příkaz 'program' dána závislost 'bin/main.bin'.

Použití emulátoru

Pro soubory qemu-arm/bin/qemu-system-arm (zkompilovaný na zaátku tutoriálu), a námi zkompilovaný vzorový program pes-template/bin/main.elf spustíme emulátor příkazem:

$ qemu-system-arm -M at91pes -kernel main.elf

Doporuuji si na qemu udělat alias, nebo scriptík. Např. u mě:

$ alias qemu-system-arm="~/qemu-arm/bin/qemu-system-arm -M at91pes -kernel"

Pak (po restartu bashe a kompilaci projektu ve slozce pes-template/ ) pro spuštění qemu staí napsat:

$ qemu-system-arm bin/mail.elf

Časem bude snad tahle možnost přímo v Makefile (třeba pod 'make emulate').

Základní ovládání QEMU

  • Při spuštění programu se vám objeví display 20x4.
  • Rotaní kodér je namapovaný na šipkách doleva a doprava.
  • Klávesnice je mapovaná na tlaítka 0-9A-D, znak '-' a levý Shift.
  • Pokud na běžící display kliknete, "sežere" vám myš! Myš se uvolňuje dvojhmatem Ctrl+Alt.
  • Pokud jste "uvězněni" v QEMU a zmáknete Ctrl+Alt+2, přepnete se do druhé "qemu kozole".
    • Napište příkaz help ať zjistíte co umí.. (quit, stop, cont, ...). Z konzole zpět do emulátoru se vrací Ctrl+Alt+1.

Advanced ovladani

Na třetí konzoli (CTRL+ALT+3) se nachazí výstup sériového portu. Ten si lze např přidáním parametru (při spuštění qemu):

-serial tcp::5555,server

v případě potřeby poslat na TCP a íst např. přes telnet,

$ telnet localhost 5555

nebo íst na téhle konzoli přímo v qemu. Posílání debuging hlášek uritě vytete ze vzorových zdrojáků.


Nahrávání programů na desku přímo z Linuxu

Abstrakt: Když už si dáváme tu práci a kompilujeme a ladíme program pod naším oblíbeným systémem, pro mařit as kopírováním do Win ve strojovně a hledání chyb v programu, který ani nezvýrazňuje syntaxi.

SAM Boot Asistant

Download

Z Makefile je vidět, že pro nahrávání programů na desku se v laborce používa program sam-ba.exe (SAM Boot Asistant). Verzi pro linux stahujte odsud (pokud nefunguje najdete si na stránkách atmelu poslední verzi - a pokudmožno opravte následující link):

$ wget http://www.atmel.com/dyn/resources/prod_documents/sam-ba_2.9_cdc_linux.zip
$ unzip sam-ba_2.9_cdc_linux.zip &&\
  rm sam-ba_2.9_cdc_linux.zip &&\
  mv sam-ba_2.9_cdc_linux sam-ba
$ cd sam-ba

Instalace

Vše lze vyíst ze souboru doc/README.linux:

$ cat doc/README.linux
(...)
Install :
You just have to unzip the 'sam-ba_cdc_x.y.linux_zz.zip' archive in a folder
of your choice.
Note : packages needed : tcl8.4 tclx8.4 tk8.4 .
USB CDC Serial driver mount procedure :
1/ Login with administrator rights
2/ Unload usbserial module if it is already running
#rmmod usbserial
3/ Load usbserial kernel module
#modprobe usbserial vendor=0x03eb product=0x6124
4/ Verify that the USB connection is established
#lsusb -d 03eb:6124
Bus 004 Device 006: ID 03eb:6124 Atmel Corp
5/ Know which USB connection is established
#dmesg
...
kernel: usb 4-2: new full speed USB device using uhci_hcd and address 5
kernel: usb 4-2: configuration #1 chosen from 1 choice
kernel: usbserial_generic 4-2:1.0: generic converter detected
kernel: usbserial_generic: probe of 4-2:1.0 failed with error -5
kernel: usbserial_generic 4-2:1.1: generic converter detected
kernel: usb 4-2: generic converter now attached to ttyUSBx
=> you will have to use /dev/ttyUSBx to connect to your board

Na gentoo tedy stailo (jako root) nainstalovat závyslosti a podle instrukcí nahrát do jádra modul usbserial s konkretními vendor a product identifikátory.

# emerge tcl tclx tk
# rmmod usbserial
# modprobe usbserial vendor=0x03eb product=0x6124

Úprava Makefile (once again)

$ cd ../pes-template

Z výpisu dmesg (viz. výše) se po připojení desky dozvíme, že jí najdeme pod zařízením /dev/ttzUSB0. Změníme tedy zařízení v Makefile stejně jako adresu na sam-ba. Čili po úpravách:

$ cat Makefile
(...)
#SAM_BA_INTERFACE=\usb\ARM0
SAM_BA_INTERFACE=/dev/ttyUSB0
(...)
#sam-ba.exe $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)
~/sam-ba/sam-ba $(SAM_BA_INTERFACE) AT91SAM7X256-EK $(TCL_FILE) $(OUTPUT_BIN)/$(TARGET).bin $(SRAM_ORIGIN)

Nahrání programu - troubleshooting

A dostáváme se do krizové fáze. Pokud nám kernel našel desku, program se nám zkompiloval, běhá nám v emulátoru a máme v pořádku naintalovaný sam-ba, pokusíme se náš výtvor přesunout na "železo":

$ make program
You may have to bring the target in bootloader-mode now.
./sam-ba /dev/ttyUSB0 AT91SAM7X256-EK board/prog_sram.tcl bin/main.bin 0x202000
-I- Waiting ...
-I- TCL platform : Linux
-I- SAM-BA CDC 2.9 rc6 on : linux
-I- Retrieved arguments from command line :
-I- argv 0 : /dev/ttyUSB0
-I- argv 1 : AT91SAM7X256-EK
-I- argv 2 : board/program_sram.tcl
-I- Connection : /dev/ttyUSB0 (target(comType) = 1)
-I- Board : at91sam7x256-ek
-I- Traces Level : 4
-I- target(handle) : file5
Read device Chip ID at 0xfffff240 --- get 0x275b0940
-I- Found processor : at91sam7x256 (Chip ID : 0x275b0940)
-I- Loading applet isp-flash-at91sam7x256.bin at address 0x202000
-E- Error during FLASH initialization

Thle chyba byla nakonec v knihovnaách pro sam-ba. Řešením je přepsat scripty v nové verzi (SAM-BA-2.9 - stažená dříve v tomto manuálu) těmi které jsou k nalezení na windows v uebnách. Pro jednoduchost je přikládám ke stažení.

$ cd sam-ba/applets/isp-project/tcl_lib/at91sam7x256-ek/
$ mkdir archiv
$ mv * archiv
$ wget http://nardi.alt.cz/at91sam7x256-ek.tcl_lib.tar.gz
$ tar xzvf at91sam7x256-ek.tcl_lib.tar.gz

Od téhle chvíle by mělo fungovat make program.

Thx: Ing. Pavel Píša, Bc. Filip Navara, Ing. Ondřej Špinka & co.
Author:podlajak@fel.cvut.cz