This is an old revision of the document!


Session : Kernel activities

Tasks

Descărcați arhiva sesiune-09.

Conectare

Plăcile sunt toate configurate cu un IP static pe interfața WAN, IP-uri din subdomeniul 10.0.1.0/24 Pentru a vă putea conecta la ele, va trebui să puneți un IP adițional pe interfața de rețea a PC-ului de pe care dezvoltați programul (IP pe o subinterfața eth0:1, de exemplu) din același subdomeniu. Încercați IP-uri 10.0.1.1xx pentru a nu avea coliziuni cu plăcile.

scp <fișier> <ușer>@<adresa>:<cale>

NGW-ul rulează implicit un server de samba care se numește netdisk și se găsește în /media. Pentru a copia pe acest share trebuie întâi montat local (demonstrat cu IP 10.0.0.1, schimbați cu IP-ul corespunzător):

smbmount  //10.0.0.1/netdisk board -o ușer=root

sau

mount -t cifs -o ușer=root \\\\10.0.0.1/netdisk board 

apoi

cp fișier board/

În cazul în care sistemul embedded rulează un sistem de fișiere încărcat peste rețea, copierea un fișier pentru a fi disponibil pe sistem se reduce la o copierea în share-ul de pe care este montat sistemul de fișiere.

De exemplu, dacă root-ul sistemului embedded este de fapt /home/student/target pe sistemul de dezvoltare, atunci este de ajuns

 cp fișier /home/andrei/target/subdir

# Interfața /sys/class/leds #* Explorați /sys/class/leds #* /sys/class/leds/a/ este folder-ul asociat led-ului A #* /sys/class/leds/a/brightness/ controlează luminozitatea led-ului #* /sys/class/leds/a/trigger'' declară un eveniment cu care să fie asociată aprinderea led-ului Până acum ați interacționat cu LED-urile prin interfața oferită de un driver în /sys/class/leds. Acum vom avea ocazia să vedem ce se află în spatele acelei interfețe. AP7000 (procesorul de pe plăcuța de dezvoltare) are niște registre pentru “General Purpose I/O”. Pentru fiecare dintre cele 5 porturi (A,B,C,D,E) avem un set de registre, dintre care enunțăm: - PER - pin enable register - OER - output enable register - CODR - clear output data register - SODR - set output data register Registrele sunt pe 32 de biți, fiecare bit configurând un anumit pin, de la cel mai semnificativ (asociat pinului 0), la cel mai nesemnificativ (asociat pinului 31 de pe portul respectiv). Registrele suportă scriere cu măști, astfel încât doar pinii biților 1 vor fi afectați. De exemplu, pentru a aprinde LED-ul de pe pinul 12 al portului E vom scrie: <code> per = 0x00080000 oer = 0x00080000 codr= 0x00080000 </code> * Definiții necesare pentru __raw_writel <code c> #define PORTA 0xffe02800 #define PORTB 0xffe02c00 #define PORTC 0xffe03000 #define PORTD 0xffe03400 #define PORTE 0xffe03800 #define PER 0x0000 #define OER 0x0010 #define SODR 0x0030 #define CODR 0x0034 </code> Toate registrele pentru GPIO ale unui port se găsesc în aceeași locație, cu offset-i diferiți față de aceeași adresă de bază. Atât adresa de bază a fiecărui port cât și offset-ii pentru toți regiștrii se găsesc atât în datasheet cât și ca definiții în header-ele nucleului. Regiștrii se pot modifica direct cu __raw_writel sau cu biblioteca gpio. Biblioteca face în plus verificări de concurență, apoi apelează tot __raw_writel. Funcțiile puse la dispoziție sunt următoarele: * int gpio_direction_input(unsigned gpio) * int gpio_direction_output(unsigned gpio, int value), unde value este valoarea inițială. * void gpio_set_value(unsigned gpio, int value) gpio este un identificator dat fiecărui pin, format cu macro-ul GPIO_PIN_PA(nr) (pentru portul A). Header-ele necesare pentru funcțiile și macrourile enunțate sunt cele din exemplul de mai jos: <code c> #include <asm/gpio.h> #include <mach/at32ap700x.h> … void set_pin() { gpio_direction_output(GPIO_PIN_PA(13),0); configurează pinul 13 de pe portul A ca ieșire și valoarea inițială 0 } … </code>

sesiuni/kernel/embedded.1342099125.txt.gz · Last modified: 2012/07/12 16:18 by avoinescu