Porting android 4

Porting android 4

Android ICS 4.0.3 de la Texas Instruments pe modulul procesor SomIQ-AM37

În această distribuție există surse pentru 3 platforme:

Suntem interesați doar de suportul Beagleboard și mai târziu de AM37EVM pentru a adăuga WLAN.







Care sunt obiectivele:
1) Android pornește și afișează grafică pe monitorul HDMI
2) Mouse-ul funcționează
3) Rețeaua Ethernet funcționează
4) Lucrări de utilități, repere din ansamblu

Pasul 1: Portul kernel-ului Linux

În continuare este descris un proces de adaptare nucleu destul de general Linux de la o platformă la alta platforma similară, astfel încât regulile prezentate aici pot fi aplicabile nu numai pentru Android ICS și SomIQ-AM37, dar, de asemenea, la alte platforme.

Kernel-ul Linux este un ansamblu de diverse utilități de sistem cum ar fi planificatorul de sarcini, gestionarea memoriei, sistemul de fișiere și așa mai departe. Aceste părți sunt comune pentru toate platformele și nu necesită (de obicei) modificări pentru o platformă individuală, deoarece sunt independente de hardware. Ce este hardware-dependent în Linux:

  • inițializarea inițială a hardware-ului
  • setul de șoferi

Initializarea inițială a platformei este efectuată într-un fișier (considerăm doar arhitectura ARM, procesoare TI Cortex-A8) / arc / arm / mach-omap2 /<название платформы>.c. De exemplu, pentru Beagleboard, inițializarea este efectuată în fișierul "arch / arm / mach-omap2 / board-omap3beagle.c". Deoarece schema SomIQ-AM37 se bazează pe schema Beagleboard, vom folosi BSP (pachetul de suport) pentru Beagleboard.

Pasul 1.1 Adăugați arhitectura SOMIQ_AM37 la kernel-ul Linux

Pasul 1.2 Adăugați fișierul de bord pe kernel

Următorul pas este să copiați fișierul inițial de inițializare Beagleboard la cel nou și să-l remediați. În directorul "arch / arm / mach-omap2", copiați fișierul board-omap3beagle.c la board-somiq_am37.c

Acum adăugați un fișier nou în Makefile. Deschideți Makefile-ul în același director "arch / arm / mach-omap2" și găsiți liniile legate de BEAGLE:

Copiați aceste linii și înlocuiți în copii CONFIG_MACH_OMAP3_BEAGLE pe CONFIG_MACH_SOMIQ_AM37, și să înlocuiască numele de bord-fișier:

De asemenea, în acest fișier Makefile există includerea unui fișier pentru a sprijini camerele foto, dar nu avem nevoie de ele încă.

Acum trebuie să adăugați arhitectura SOMIQ_AM37 KConfig fișier de configurare. Deschideți fișierul în directorul KConfig «arc / braț /-Mach omap2» și găsiți secțiunea referitoare la Beagle:

Copiați aceste linii și să înlocuiască MACH_OMAP3_BEAGLE pe MACH_SOMIQ_AM37 și OMAP_PACKAGE_CBB pe OMAP_PACKAGE_CUS. Ultimul înlocuitor este necesar, deoarece Beagleboard utilizează un procesor în cazul CBB, în timp ce SomIQ-AM37 utilizează procesoare în pachetul CUS. Această setare este necesară pentru a configura corect codul PIN MUX în kernel. PIN MUX este alegerea uneia dintre cele șapte funcții care aparțin fiecărui pin de procesor. Ca rezultat, veți adăuga următoarele fișiere în fișier:

1.3 Editarea unui fișier de bord

În primul rând, există un bloc de fișier antet include:

Apoi vine o bucată de cod responsabil pentru conectarea dispozitivului prin USB (aici nu vom schimba nimic):

Apoi, codul legat de platforma Beagleboard începe:

pentru că Beagleboard-ul evoluează de mai mulți ani, după care schema sa schimbat de multe ori, procesoarele, memoria, locația liniilor GPIO etc. s-au schimbat. Pentru a avea un singur nucleu care să gestioneze toate aceste configurații, dezvoltatorii Beagleboard au alocat 3 linii de procesoare, pe care le-au stabilit pentru revizuirea tabloului. Prin urmare, primul lucru pe care BSP Beagleboard îl determină pe ce bord operează. Modulul SomIQ-AM37 rulează într-o singură configurație (deocamdată) și, prin urmare, nu este necesară revizuirea plăcii. Prin urmare, ștergem următorul cod:

Următoarea descriere a secțiunilor de pe blițul NAND, dacă este prezentă pe placă (lăsați neschimbată):

Apoi, codul direct legat de diferitele dispozitive periferice de pe tablă începe. Aici adăugați funcții pentru a lucra cu controlerul procesorului DSS, care este responsabil pentru afișarea graficelor pe dispozitivul destinație. Beagleboard-ul direct poate funcționa doar cu un televizor prin intermediul unui S-Video sau a unui display HDMI / DVI, deci pentru ele totul este reglat:







  • Funcția beagle_enable_dvi / beagle_disable_dvi - rândul său, respectiv și oprirea monitorului (controlat procesorul linie GPIO care este conectat la TFP410 cip, intrare-Power jos cip de transfer Ie în putere în jos modul dezactivează ieșirea monitorului ;.
  • creați obiecte din structura omap_dss_device și descrieți dispozitivele fizice: beagle_tv_device (TV) și beagle_dvi_device (monitor DVI);
  • legați regulatoarele de tensiune la ieșirile TV și DVI: beagle_vdac_supply și beagle_vdvi_supply. Acest lucru este necesar pentru a reduce cât mai mult consumul de energie și a opri regulatorul corespunzător dacă nu este utilizat;
  • funcția beagle_display_init () accesează linia GPIO pentru a activa / dezactiva afișarea DVI. Numărul GPIO este stocat în câmpul de structură beagle_dvi_device.reset_gpio

DSS finalizat și setat cardul MMC, este SD:

Rețineți că există un câmp gpio_wp (Write Protect from card SD) din structura creată, dar există un slot pentru cartelă MicroSD pe placa de transport Somiqboard care nu are linia Write Protect. Prin urmare, în loc să atribuim numărul GPIO al liniei 29, vom scrie "-EINVAL", informând astfel conducătorul MMC că nu avem un astfel de semnal. De asemenea, puteți elimina semnalul MMC_CAP_8_BIT_DATA, deoarece avem o carte de 4 biți. După corecții:

Acum legați regulatorii de tensiune fizică la șoferi:

beagle_vmmc1_supply rezervă și elimină beagle_vsim_supply, beagle_vaux3_supply, beagle_vaux4_supply în condiții de siguranță, deoarece Vsim, VAUX3, VAUX4 au doar TPS65950 controler de putere, și utilizate de către noi TPS65920 acestea sunt absente fizic. Totuși, aceste definiții ale autorităților de reglementare pot fi lăsate, de exemplu. ei nu vor interfera cu lucrarea, dar nu are nici un sens din partea lor.

Acum configurați GPIO-ul, care este legat de cipul de alimentare TPS65920 (dispune de o serie de funcții în afară de putere). În funcția beagle_twl_gpio_setup (), ștergeți următoarele linii:

În acest fragment, configurați linia Write Protect, pe care nu o folosim

Ștergem menționarea controlerului VSIM, deoarece nu o avem fizic:

Apoi, scoateți comanda pentru cheia de alimentare USB, deoarece pe Somiqboard nu este:

De asemenea, ștergeți din același motiv:

Acum această funcție atribuie linia de control de închidere TFP410, deși această linie este legată de procesor, mai degrabă decât de TPS65920:

Vom păstra continuitatea, dar vom aloca o altă linie (pe linia Somiqboard + SomIQ-AM37 este linia GPIO_10) și vom șterge restul, lăsând:

Ștergeți complet următorul bloc:

Lăsăm liniile de control LED pe modulul SomIQ-AM37, marcat ca RDY. Acesta include u-boot și se stinge atunci când boot-ul kernel-ului.

Următorul bloc este șters complet:

Cu ajutorul funcției beagle_twl_gpio_setup terminat și apoi lăsați structura beagle_gpio_data neschimbată.

Acum regulatoarele de tensiune sunt reglate și conectate la dispozitive specifice:

  • beagle_vmmc1 - lăsați neschimbată
  • beagle_vsim - șterge întreaga structură, deoarece nu avem un organism de reglementare
  • beagle_vdac - lăsați neschimbată
  • beagle_vpll2 - lăsați neschimbată
  • beagle_vaux3 - ștergeți
  • beagle_vaux4 - ștergeți

Acum configurați codecul audio în TPS65950, dar pe SomliQ-AM37 este TPS65920, care nu are un codec audio, așa că ștergem:

Și, în final, în structura descrierii TPS65920 (TWL) ștergem liniile pe care le-am șters deja mai devreme și obținem:

În plus, structurile beagle_i2c_boardinfo, beagle_i2c_eeprom și funcția omap3_beagle_i2c_init sunt lăsate neschimbate. În structura gpio_leds, ștergeți liniile care descriu LED-urile usr0 și usr1, deoarece de la nu la Somiqboard.

Următoarea este atribuirea liniei GPIO la care este conectat butonul USER de pe Beagleboard și Somiqboard - lăsați nemodificați:

Mergeți la funcția omap3_beagle_init_irq () și eliminați intrarea omap3_beagle_version, obținem:

În această structură, pentru Beagleboard este alocată o linie GPIO_147 pentru resetarea USB PHY. Pe modulul SomIQ-AM37, linia 186 este folosită pentru acest lucru, deci corectă 147 pentru 186.

Acum mergeți la funcția principală pe care kernel-ul o apelează atunci când inițializează placa: omap3_beagle_init (). Eliminăm apelul funcției omap3_beagle_init_rev () - determină ce revizie a Beagleboard. Apoi înlocuiți numerele de 170 cu 10, deoarece este linia 10 care controlează includerea TFP410 (HDMI):

Acum trebuie să modificați ID-ul mașinii în acest fișier, astfel încât funcțiile din acest fișier să fie apelate atunci când transferul de la u-boot este transferat. Uită-te la cel mai recent bloc din fișier:

Macro-ul MACHINE_START specifică Machine ID - OMAP3_BEAGLE și un șir de text care este tipărit de kernel la momentul încărcării. Să le înlocuim cu următoarele:

În acest stadiu, am finalizat aproape complet activitatea de creare a BSP-ului nostru pentru modulul SomIQ-AM37. Cu toate acestea, avem încă o funcție de rețea Ethernet nerealizată. Pe modulul SomIQ-AM37 este instalat controllerul Ethernet Micrel KSZ8851SNLI, conectat la procesorul SPI1. Prin urmare, adăugați următoarele rânduri înainte de a apela funcția omap3_beagle_init ():

De asemenea, trebuie să includeți fișierul antet irq.h astfel încât să puteți lucra cu întreruperi. Adăugați următoarea linie la începutul fișierului, unde toate incluziunile merg "#include. "

Acum trebuie să adăugați inițializarea controlerului Ethernet la funcția omap3_beagle_init (). Adăugați un apel către somiq_ks8851_init () înainte de șirul beagle_display_init ():

În cele din urmă, puteți să corectați cuvintele "beagle" la "somiq", pentru a nu fi confuz mai târziu.

Pasul 1.4 Crearea unui fișier de configurare

Ultimul pas este crearea unui fișier de configurare. Pentru a face acest lucru, vom folosi configurația gata făcută pentru Beagleboard și o vom rezolva. La radacina surselor de kernel executați comanda:

Apare un fișier .config, care conține întreaga configurație a kernel-ului. Prin mâini acest fișier nu este corect, dar trebuie să executați comanda:

Apare un meniu structurat întreg, care conține configurația kernel-ului. Mergeți la System Type-> TI OMAP 2/3/4 Specific Features-> și scoateți bara de spațiu de pe Beagleboard și invers adăugați un asterisc în opoziție cu SomIQ-AM37. În continuare, din meniu, mergeți la root și selectați Device Drivers-> Network device support-> Ethernet (10 sau 100Mbit). Aici notăm elementul "Micrel KS8851 SPI" cu un asterisc.

Asta e tot. Acum apăsăm EXIT de mai multe ori până la întrebarea "Salvați modificările în configurație?" Apare - alegeți YES. Acum puteți compila kernel-ul.







Articole similare

Trimiteți-le prietenilor: