Atmel AVR Mikrocontroller mit OpenSuse: Tools

Man kann unter Linux und unter Windows Code für den AVR entwickeln. In meinen Texten ist das Linux-Umfeld beschrieben. Man kann zahlreiche Entwicklungsumgebungen und Tools verwenden, hier beschreibe ich meine Umgebung. Benötigt werden die folgenden Tools:

  • avr-gcc (Cross Compiler für C, erzeugt AVR Code). Dieser Compiler nutzt die avr-libc, eine libc-Implementierung für die AVR Plattform.
  • Eclipse (integrierte Entwicklungsumgebung) mit CDT (C/C++ Development Plugins) und AVR-Eclipse Plugin
  • avrdude (Kommandozeilentool für Code-Upload auf den Mikrocontroller, bedient ISP-Schnittstelle des Controllers, damit werden also die erzeugten Programme in den Controller geladen) und/oder Ponyprog (mit graphischer Oberfläche)

Die Installation der Tools unter OpenSuse geht einfach via Yast. In älteren Versionen war die avr-gcc Toolchain für AVRs im Hauptrepository vorhanden, mittlerweile muss man das AVR-Repository per Hand hinzufügen (YaST -> Software Repositories), zu finden für die jeweiligen Versionen unter:

http://download.opensuse.org/repositories/CrossToolchain:/avr/

die Repos-URL für OpenSuse 12.1 ist z.B.

http://download.opensuse.org/repositories/CrossToolchain:/avr/openSUSE_12.1/

Alle genannten Tools können nach Hinzufügen dieser Repositories einfach installiert werden. Nur Ponyprog (das es für Windows und Linux gibt) habe ich direkt von dessen Homepage (http://www.lancos.com/) geladen. Unter http://www.mikrocontroller.net/articles/AVR_Eclipse ist die Installation für verschiedene andere Linuxe beschrieben.

Vorgehen bei der Entwicklung

Der C-Code wird mit Eclipse erzeugt. avr-gcc führt das Cross-Compiling für die AVR-Plattform durch und erzeugt alle benötigten Dateien. Der eigentliche Code -als .hex-Datei- wird dann mittels avrdude oder Ponyprog über die ISP-Schnittstelle des AVRs in den AVR hineingeladen (ISP=In System Programming). Es gibt zahlreiche Möglichkeiten den Controller an den PC anzubinden (seriell, parallel, USB, …). Ich habe mir ein serielles Kabel gelötet, das war am einfachsten.

Code compiliert nicht? Für neueren Source-Code kann es notwendig sein, dass man eine aktuellere Version der avr-libc verwenden muss. Diese steht u.U. nicht als RPM o.ä. zur Verfügung, weil zu neu. Ein Vorgehen, wie das unter OpenSuse funktioniert, habe ich hier beschrieben.

Erstellen und Compilieren des Programms

Die Erstellung der C Source erfolgt mit dem Editor innerhalb von Eclipse. Mit diesem Tool kann unter Project die Compilierung mittels ‚make‘ direkt angestoßen werden („Build Project“), Ergebnis ist ein oder zwei HEX (.hex) Files. Eines geht in den Flash-Speicher, eines in den EEPROM-Speicher des Controllers. Nicht immer wird ein EEPROM-Teil benötigt.

AVR programmierung mit Eclipse
Erstellung des Codes für den AVR. Aus der C Source test.c wird die Hex-Datei flash.hex erzeugt.

Laden des Programms in den Controller

Eclipse legt alle Dateien in einem Workspace ab. Innerhalb des Workspaces erfolgt die Organisation nach Projekten. Hier ein Listing für mein erstes Testprojekt:

soc:/home/dennis/avr-eclipse-ws/avrtest000/Standard # ls -l
 insgesamt 48
 -rwxr-xr-x 1 dennis users 5892 28. Nov 21:50 avrtest000.elf
 -rw-r--r-- 1 dennis users   13 28. Nov 21:50 eeprom.hex
 -rw-r--r-- 1 dennis users  414 28. Nov 21:50 flash.hex
 -rw-r--r-- 1 dennis users 1028 28. Nov 21:50 makefile
 -rw-r--r-- 1 dennis users 9295 28. Nov 21:50 .map
 -rw-r--r-- 1 dennis users  229 28. Nov 20:49 objects.mk
 -rw-r--r-- 1 dennis users  343 28. Nov 21:50 sources.mk
 -rw-r--r-- 1 dennis users  589 28. Nov 21:50 subdir.mk
 -rw-r--r-- 1 dennis users 3976 28. Nov 21:50 test.obj

Wenn innerhalb von Eclipse der avrdude richtig konfiguriert wird, kann mittels des Eclipse-Buttons  der Code direkt auf den Controller geladen werden. Für mein besonderes Kabel musste ich die Pinbelegung für avrdude erst richtig definiere. Dies erfolgt in der Datei /opt/cross/etc/avrdude.conf. ich habe folgendes eingefügt:

programmer
 id    = "pony";
 desc  = "serial port banging ponyprog cable by DD";
 type  = serbb;
 reset = ~3;
 sck   = 7;
 mosi  = 4;
 miso  = 8;
 ;

 

(Übrigens habe ich später gesehen, dass genau diese Konfiguration unter der Namen „ponyser“ schon existiert…)

Ein „händischer“ Test von avrdude kann noch ohne Eclipse, wie folgt erfolgen (testweises Auslesen des AVRs, hier für einen atmega32, wenn ISP über die serielle Schnittstelle /dev/ttyS0 erfolgt):

avrdude -v -p m32 -P /dev/ttyS0 -c pony -U flash:r:ttt.hex:i

Das Schreiben erfolgt mittels

avrdude -v -p m32 -P /dev/ttyS0 -c pony -U flash:w:led01.hex:i

Unter OpenSuse muss der Nutzer in der Gruppe „uucp“ sein, um auf die serielle Schnittstelle als Non-Root zuzugreifen. Auch ein einfaches „chmod 666 /dev/ttyS0“ half bei mir nicht, erst das Hinzufügen der Gruppe erlaubte das Ausführen von avrdude.

Wenn avrdude per Hand funktioniert, kann die avrdude-Einbindung in Eclipse korrekt eingestellt werden. In meinem Fall sieht das wie folgt aus:


Konfiguration des avrdude-Programms innerhalb der Eclipse Preferences: Öffnen der Preferences mittels rechter Maustaste auf dem Projekt im Project Explorer View von Eclipse. Zunächst muß der zu verwendende ISP-Programmer definiert werden.

Als nächstes wird die genutzte Hardware (AVR-Typ) und die Taktfrequenz des AVRs eingetragen. Der Taktfrequenzwert steht im Programm als Define (F_CPU) zur Verfügung.

Bei den Build Settings sicherstellen, dass alle notwendigen HEX-Files miterzeugt werden.

Danach können alle Aktionen mit dem AVR innerhalb von Eclipse durchgeführt werden.

Nutzung von ponyprog: Ponyprog ist ein tolles Programm, um „mal schnell“ auf den AVR zuzugreifen. Man muss keine Manpages lesen und in Foren suchen, und kann in wenigen Minuten einen ersten Upload machen. Ponyprog läuft unter Windows und Linux. Ponyprog muss vor der Nutzung korrekt konfiguriert (wie ist der Controller angebunden, Setup -> Interface Setup) und kalibriert werden (Setup -> Calibration).

Hier Bilder zum Setup:


Einstellen des Controller-Typs (AVR micro) und des AVR-Typs (ATmega32).

Einstellen des Zugangs zum AVR, bei mir seriell über /dev/ttyS0, was COM1 entspricht

Danach kann ein HEX-File in Ponyprog eingeladen werden(Open Device File) und auf den Controller überspielt werden (Write Device). Es wird immer der komplette Speicher (also z.B. 8 Kbyte beim ATMega8) übertragen, auch wenn das eigentliche Programm nur ein paar Bytes lang ist. Nach dem Schreiben findet noch ein Verify statt. Das Programm startet unmittelbar nach dem Verify.


Herunterlesen des Codes von einem AVR auf den PC.

Im Erfolgsfall wird die Anzahl der übertragenen Bytes ausgegeben

Das Einladen des kompletten Speichers dauert beim ATMega8 mit 12MHz ca. 40 Sekunden, beim ATMega32 kann es entsprechend länger dauern.

Nutzung eines USB Programmers von Atmel

Mangels serieller Schnittstellen an neueren PCs (besonders bei Notebooks) bietet sich eher die Nutzung eines solchen Programmers an.


Der AVR ISP mkII von Atmel

Das Innere des Programmers – wesentlich komplexer als der triviale serielle Programmer

Falls bei Nutzung des USB-Programmers der Programmer nicht gefunden wird, sind eventuell die Regelkn für den Zugriff auf USB nicht ausreichend. Dazu die Datei /etc/udev/rules.d/15-usbavr.rules neu anlegen und dort  hineinschreiben:

# Atmel AVR ISP mkII SUBSYSTEM==“usb“, SYSFS{idVendor}==“03eb“, SYSFS{idProduct}==“2104″, GROUP=“users“, MODE=“0660″

Austausch der vorhandenen avr-libc durch eine neuere Version

Falls man Quellcode aus dem Internet bezieht, kann es vorkommen, dass dieser mit neueren Versionen der avr-libc entwickelt wurde. Man merkt das daran, dass Funktionen vom Compiler und dem Linker als unbekannt gemeldet werden. Man kann dann versuchen, ein neueres Paket für seine Plattform zu installieren. Wenn man OpenSuse und Yast regelmäßig nutzt, hat man allerdings schon das neueste Paket für diese Plattform. Man kann dann aber die avr-libc selbst compilieren. Ich habe dies wie folgt gemacht:

  1. Download der neuesten avr-libc von http://www.nongnu.org/avr-libc/. Die Source findet man unter  http://download.savannah.gnu.org/releases/avr-libc/
  2. Compilieren der avr-libc. Hier kann man nach dem README und dem INSTALL vorgehen. Diesen Schritt würde ich als Non-Root machen, um zu verhindern, dass man sich mit falschen Parametern die vorhandene avr-libc zerschießt. Ich habe das configure-Kommando wie folgt aufgerufen:
    ./configure –build=`./config.guess` –host=avr –prefix=/home/dennis/avrlibc
    Damit wird die libc unterhalb meines Homeverzeichnisses gebaut.
  3. Statt einem „make install“ habe ich dann per Hand die beiden erzeugten Verzeichnisse (avr/include, avr/lib) in das Verzeichnis kopiert, in dem die alte Bibliothek liegt. Dies ist bei OpenSuse /opt/cross. Die dort vorhandenen Verzeichnisse avr/lib und avr/include habe ich vorher gesichert.
  4. Zum Schluss noch aus dem gesicherten lib-Verzeichnis die ldscripts in das neue lib-Verzeichnis kopieren:
    cp -a ./lib.orig/ldscripts ./lib

Danach sollte ein Kompileren wieder möglich sein und die neue Bibliothek wird benutzt.

OpenSuse 11.3 ohne avrlibc-Paket

Aus mir unbekannten Gründen ist die avrlibc in OpenSuse 11.3 nicht dabei. Wie weiter oben beschrieben kann diese aber relativ einfach nachinstalliert werden. Erst nach mehreren Versuchen habe ich eine libc-Version gefunden, die mit dem gcc 4.5, der in 11.3 als Cross Compiler dabei ist, auch kompilierbar ist. Dies ist die Version 1.6.7 (nicht gingen bei mir: 1.7.0, 1.6.5, 1.6.9)

Der compilierte Inhalt unterhalb von …/avr/include muß nach/lib64/gcc/avr/4.5/include, der von …/avr/lib  nach /lib64/gcc/avr/4.5/.
Danach lässt sich AVR Code compilieren und Linken.

Zurück zur Hauptseite

Linux auf dem Thin Client IBM Netvista 2200

Der Thin Client NetVista kann als Linux-Gerät mit sehr geringem Stromverbrauch (~10Watt) etwa als Webserver oder Download-Station, verwendet werden.

Der Netvista 2200 ist ein Thin Client, den IBM in den Jahren 1999-2000 vertrieben hat. Die Hardware des Netvista ist weitgehend kompatibel zu einem normalen PC, wobei der Netvista sehr klein gebaut ist:
Netvista von aussen, vorn

Netvista von aussen, hinten

Die Tatsache, dass von IBM Turbolinux als Client-OS verwendet wurde, zeigt, dass Linux prinzipiell auf dieser Hardware laufen kann. Das Turbolinux kommt allerdings mit einem 2.2-er Kernel, der sehr veraltet ist. Es wäre eine Herausforderung, auf dieser Plattform heute Software überhaupt noch compiliert zu bekommen. Außerdem hat sich seitdem so viel in der Kernel-Weiterentwicklung getan, dass es schade wäre, auf dieser Uralt-Plattform aufzusetzen.

Turbolinux kann heute noch bei Lenovo/IBM heruntergeladen werden. Es gibt auch diverse Infos wie Handbücher bei Lenovo. Die Links sind aber nicht stabil, daher am besten über die Suche gehen:
http://www.lenovo.com/Search/?q=NetVista+8363

Die Hardware

Es gibt mehrere Typen des Thin Clients, wobei die Hardware praktisch immer gleich ist:

  • Exx: mit Turbolinux als Client-OS, Ethernet Anschluss
  • Wxx: mit Windows CE als Client OS, Ethernet Anschluss
  • Txx: Token Ring Anschluss (heute nicht mehr von Interesse, Tokenring ist tot, oder?)
Netvista 2200 von innen, ohne CF und ohne RAM
Der geöffnete Netvista. Der Chip mit dem Kühlkörper ist die Geode-CPU, oben links der SiS 900 Chip fürs LAN. Der Chip unten Links ist der Companion Chip CS 5530. Die vier Chips rechts neben der RAM-Schiene sind die eingebauten 32 MByte RAM. Oben mittig ist der CF-Card Adapter zu sehen. Ganz rechts am Gehäuse ist ein kleiner Lautsprecher angebracht. Links die Anschlüsse und Buchen. Oben links vom CF Card Adapter ist eine „Mini PCI“-Buchse vorhanden mit 2×60 Anschlüssen. Rechts vom CF Card Adapter ist ganz oben der Flash-Speicher für das BIOS zu sehen.

CPU: Die CPU ist ein National Geode GXLV mit 233 Mhz und 16KByte L1 Cache. Die CPU kommt mit einem „Companion Chip “ CS 5530, einer Art „South Bridge“ für die CPU. Der Companion Chip übernimmt die Ansteuerung für 2 IDE Kanäle UDMA/33, Stereo Sound nach AC 97, 2 USB Controller mit insgesamt 4 Ports und den IR Controller.

RAM: Als RAM sind 32 MByte Speicher fest eingebaut. Es existiert aber ein Slot für DIMM SDRAM PC100 (2 Kerben, 168 Pin), in den bis zu 256MB zusätzlicher Speicher eingesteckt werden kann. Ein DDR1-RAM PC100 (1 Kerbe) passt leider nicht, aber ein alter 128MB-SDRAM Riegel passt, so dass der Netvista damit 128+32=160MB Speicher hat. PC133 soll auch laufen.

Flash-Speicher: Eine Art BIOS für den Thin Client wird im Flash Speicher gehalten.

Nichtflüchtiger Speicher: Der Netvista besitzt einen internen CF Card-Slot. In diesen kann man handelsübliche CF-Karten einschieben. Der Netvista kann von sich auf auf ext2- (und damit auch auf ext3-) Dateisysteme sowie FAT16-Dateisysteme zugreifen. Ich habe eine 1GByte CF Karte in Verwendung. Im Internet habe ich gelesen, dass auch Microdrives (8GByte) funktionieren. Was prinzipiell nicht zu gehen scheint, ist per Adapter eine Harddisk anzuschließen (während das Umgekehrte, also eine CF-Karte an einem IDE-Slot anzuschließen, kein Problem ist).
Der Netvista kann vom Flash-Speicher booten.

Audio und Video: Der Netvista besitzt einfaches Stereo Audio. Das Video-Teil der CPU kann 1024×768 in 16Bit darstellen. 1280×1024 geht leider nur mit 256 Farben. Es kann 3 MByte (shared) Video-RAM verwalten.

Netzwerk: Mittels SiS 900 LAN-Chip kann eine 10/100 MBit Vollduplex Verbindung aufgebaut werden.

USB: Der Netvista besitzt 2 USB 1.1 Anschlüsse (12MBit-fähig). Es können jeweils Geräte mit einem Stromverbrauch von 1,25 A an 5 V angeschlossen werden.

Maus und Tastatur: Keine Anschlüsse vorhanden, diese müssen über USB angeschlossen werden. Ein Adapter (1x USB auf 2x PS/2 für Maus und Tastatur) verbraucht nur einen der beiden USB-Anschlüsse, so dass man noch eine externe Harddisk oder einen USB Switch anschliessen kann. Via USB kann auch eine schnurlose Maus+Tastatur angeschlossen werden.

Realtime Clock: Möglicherweise im Gerät vorhanden, wird aber hardwaremäßig nicht eingebunden und ist daher nicht nutzbar.

Netzteil: Der Netvista läuft mit einem IBM Netzteil, das 12 Volt mit 5 Ampere liefert. Der Stecker hat ein Außendurchmesser von 5,5mm und einen Innendurchmesser von 2,5 mm. Da der Netvista nur ca. 10 Watt verbraucht, ist das mitgelieferte Netzteil stark überdimensioniert.

System: Der Netvista besitzt ein IBM-eigenes BIOS, welches einige Einstellungen erlaubt. Man kann zwischen Netzwerkboot und Boot vom Flash umstellen, den Flash-Speicher updaten, Netzwerkeinstellungen konfigurieren und einiges andere. Es handelt sich um kein vollwertiges PC-BIOS.

Sonstiges: Der Netvista besitzt eine mit „PCI“ gekennzeichnete Buchse. Diese hat 2×60 Pin. Im Internet habe ich gelesen, das in dieser Buchse für die Baureihe Txx der Token-Ring-Adapter steckt. Anderswo habe ich gelesen, das diese Buchse wohl nicht mit dem „Mini PCI“-Standard kompatibel ist, ansonsten könnte man hier weitere Peripherie anschließen.

Linux auf dem Netvista

Die Installation von Linux für den Netvista ist an diversen Stellen beschrieben und sieht grundsätzlich immer gleich aus:

  1. Update des Flashspeichers auf das „aktuellste“ Bios vom 29.02.2002
  2. Formatierung der CF-Karte, auf die das Linux installiert werden soll, als ext3
  3. Aufspielen des Linux. Dieser Schritt muss so erfolgen, dass die Karte irgendwie an einen anderen Rechner angeschlossen ist, der die CF-Karte als Laufwerk ansprechen kann. Ein einfacher Kartenadapter reicht, man kann das unter Linux oder auch Windows machen.
Netvista innen mit RAM und CF-Karte
Netvista, nun mit eingesetzter CF-Karte und RAM-Riegel

Dialog für das Updaten der Firmware. Die alte Firmware (Datum 17.07.2000) wird durch die neueste (29.07.2002) ersetzt.

Dialog zur Umstellung des Bootens, so dass vom Flash-Speicher gebootet wird.

Kernel 2.4, Linux 2200

Mit Linux 2200 steht ein Linux zur Verfügung, welches auf dem 2.4er Kernel basiert. Beschreibungen hierzu gibt es an den folgenden Stellen:

Erfahrungen mit Linux 2200: Das Linux bootet in ca. 40 Sekunden bis ins X WIndow System hoch, also sehr flott. Software lässt sich auf dem System leider nur schlecht zum Laufen bringen. Ein Compiler steht nicht zur Verfügung und der alte Kernel sowie die alten Bibliotheken verhindern das einfache Überspielen fertiger Proramme plus Bibliotheken. Es gibt immerhin ein rdesktop und noch ein paar andere Sachen, die man auf dieser Plattform zum Laufen bekommt. Basis für die Standard UNIX Kommandos ist die busybox, d.h. die Kommandos sind nur eingeschränkt implementiert. Audio funktioniert, ein xmms ist im Linux 2200 dabei, ebenso der rudimentäre Browser „dillo“. Limewire bekomme ich zum Laufen, es läuft allerdings sehr zäh. Die Transfergeschwindigkeit mit Limewire pendelt um 100KByte/s, was ganz ok ist. Opera 9.3 lässt sich als static binary installieren, ist aber zäh an der GUI. Das in Opera integrierte torrent-Downloadsystem ist unbrauchbar langsam und bringt lächerliche 4-20KByte/s. Ist aber eher ein Opera-Problem.


dillo und xterm mit Linux 2200 auf dem Netvista

Kernel 2.6, Debian von „scooby“

Weiteres Stöbern im Internet fördert eine spanische Site zu Tage, auf der die Installation eines Debian-Systems mit aktuellem Kernel beschrieben ist. Mittels babelfish.altavista.com kann man sich die Seite mit Kommentaren von Spanisch ins Englische übersetzen lassen.

Beschreibung hierzu:
http://coredump.es/2007/06/25/debian-testing-kernel-2620-para-netvista-2200/ (Spanisch!) Übersetzung der URL mittels Babelfish http://babelfish.altavista.com möglich.

Das Debian ist ziemlich minimalistisch, kommt dafür aber mit ca. 100MB Plattenplatz aus. Da es sich um eine ganz normale Debian-Installation handelt, kann man alles weitere nachinstallieren. Ich installiere als Debian-Ahnungsloser mittels aptitude/apt-get noch X und Xvnc und ein paar weitere Dinge wie JRE 1.6 und Azureus hinzu. Auch ein Systemupdate („apt-get update“) funktioniert wunderbar.

Debian Screen auf Netvista 2200
Das Linux 2.6 von scooby mit fluxbox als Window Manager, aufgerufen via vncviewer von einem anderen Rechner aus.

Erfahrungen damit: Das System funktioniert sehr gut und nicht anders als ein normales Desktop-Linux. Vor der Installation von KDE schrecke ich zurück und installiere mir fluxbox als Window-Manager. Ich kann dann mittels vncviewer von einem anderen Rechner auf dem als Xvnc laufenden  X Server zugreifen und brauche damit keinen lokalen Monitor und auch keine Maus/Tastatur mehr. Eine Harddisk lässt sich extern anschließen, ich nehme eine 2,5“ HD vom Notebook mit 80 GByte, die vom Netvista sauber mit Strom versorgt wird. Ein Azureus-Download der openSuse-10.3-DVD bringt Download-Geschwindigkeiten von um die 200KByte/s, was nur geringfügig langsamer ist als Azureus auf meinem Desktop-Rechner. Das Ziel, eine Downloadmaschine zu haben, die mit sehr geringem Stromverbrauch und lautlos läuft, ist damit erreicht.

Einschränkungen:

  • Beim Hochfahren braucht der Boot lange, weil irgendwelche DMA-Fehler auftreten. CF-Karten können wohl kein DMA. Wie man das abstellt, weiss ich nicht, man kann sicher den Kernel passend compilieren.  Es können keine Kernel-Parameter auf der Kommandozeile mitgegeben werden, dies erlaubt das BIOS nicht.
  • Den X Server, der auf der lokalen Hardware läuft, bekomme ich auf die Schnelle nicht zum laufen. Sowohl „vesa“ als auch „ncd…“ Treiber funktionieren bei mir nicht. Da ich ohnehin keinen Monitor an das Gerät anschließen will, sondern immer mit Xvnc zugreife, verfolge ich das Thema zunächst nicht weiter.

Performance: Kommandozeilentools sind flott und auch X Windows Programme sind unproblematisch und gut zu bedienen. Bei Transferversuchen mit wget im LAN bekomme ich 1,5MByte/s, was ganz ordentlich ist. Java-basierte Programme (Azureus, Limewire) reagieren an der GUI nur sehr zäh. Man muss bedenken, dass die CPU nur 233 Mhz hat. Dafür finde ich es erstaunlich flott, wie gesagt, nur Java-GUIs sind wirklich langsam.

OpenSuse 10.3

2009 habe ich beim Stöbern zufällig eine Website gefunden, auf der jemand ein OpenSuse 10.3 übersetzt hat. X11 funktioniert und die lange Pause beim Booten (wie beim scooby-Linux) tritt auch nicht auf. Ich bin ziemlich begeistert von der Distribution. Hier der Link:
http://www.urbana.fm/~antocm/projects.html#netvista

Gemessener Stromverbrauch:

<noch offen>

Kernelübersetzung

Der Kernel muss nach dem Compile gepatcht werden, dies ist in Spanisch hier beschrieben: http://coredump.es/2007/06/18/compilando-el-kernel-26-para-el-netvista-2200/.
Der Trick ist dabei, dass nach dem üblichen Kernel Compile noch ein binärer Patch im Kernel Image durchgeführt werden muss.

Das BIOS kann nur uncompresste Kernel starten, also ist ein „make vmlinux“ statt „make bzImage“ erforderlich. Das .xconfig-File kann hier heruntergeladen werden. Zur Sicherheit habe ich hier eine lokale Kopie.