User:Podlajak: Difference between revisions
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... |
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ář | Když už máme stažený repozitář: | ||
$ cd qemu-arm | $ cd qemu-arm | ||
$ mkdir bin | $ mkdir bin | ||
Nakonfigurujeme. | |||
$ ./configure -- | $ ./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í | 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 | ||
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 | ||
===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 | 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 | 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" | |||
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 | |||
-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 &&\ | |||
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 | 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 | |||
# 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) | |||
====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
(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