Kako postaviti pametne telefone i računala. Informativni portal
  • Dom
  • Pogreške
  • Kako funkcionira android. Nosiva elektronika i kućanski aparati

Kako funkcionira android. Nosiva elektronika i kućanski aparati

Kako Android radi

Raspitajte se o skrivene prilike softverski sustavi moguće je, nakon razumijevanja principa njihovog rada. U nekim je slučajevima to teško učiniti, jer se kod sustava može zatvoriti, ali unutra slučaj android možemo proučavati cijeli sustav gore-dolje. U ovom članku neću govoriti o svim nijansama Androida i usredotočit ću se samo na to kako se OS pokreće i koji se događaji odvijaju u intervalu između pritiska na gumb za uključivanje i pojavljivanja radne površine.

Usput ću vam objasniti što možemo promijeniti u ovom lancu događaja i kako programeri prilagođenih firmware-a koriste te mogućnosti za implementaciju takvih stvari kao što su podešavanje parametara OS-a, proširenje prostora za pohranu aplikacija, swap povezivanja, razne prilagodbe i još mnogo toga. Sve ove informacije mogu se koristiti za izradu vlastitog firmwarea i implementaciju raznih hakova i modifikacija.

Prvi korak. U-BOOT i pregradni stol

Sve počinje s primarnim bootloaderom. Nakon uključivanja napajanja, sustav izvršava bootloader kod zapisan u trajnoj memoriji uređaja. Najčešće njegovu ulogu obavljaju modificirana verzija u-boot bootloader s ugrađenom podrškom za brzo pokretanje, ali proizvođač mobilnog čipa ili pametnog telefona/tableta ima pravo odabrati bilo koji drugi bootloader po svom ukusu. Na primjer, Rockchip koristi svoj vlastiti bootloader bez brzog pokretanja i mora koristiti vlasničke alate za reprogramiranje i upravljanje njime.

Protokol za brzo pokretanje je, zauzvrat, sustav upravljanja bootloaderom s računala koji vam omogućuje izvršavanje radnji kao što su otključavanje bootloadera, bljeskanje nove kernela i oporavak, instaliranje firmware-a i mnoge druge. Razlog postojanja brzog pokretanja je mogućnost vraćanja pametnog telefona u prvobitno stanje u situaciji kada sva druga sredstva ne rade. Fastboot će ostati na mjestu, čak i ako, kao rezultat eksperimenata, izbrišete sav sadržaj svih dijelova NAND memorije sa svog pametnog telefona, izgubivši pristup i Androidu i oporavku.

Nakon što je primio kontrolu, u-boot provjerava tablicu particija i prenosi kontrolu na kernel, koji se flešuje u particiju pod nazivom boot, nakon čega kernel dohvaća RAM sliku iz iste particije u memoriju i počinje učitavati ili Android ili konzolu za oporavak . NAND memorija u Android uređajima podijeljena je u šest uvjetno potrebnih odjeljaka:

  • boot - sadrži kernel i RAM disk, obično veličine oko 16 MB;
  • recovery - konzola za oporavak, sastoji se od kernela, skupa konzolne aplikacije i datoteka postavki, veličine 16 MB;
  • sustav - sadrži Android, u modernim uređajima ima veličinu od najmanje 1 GB;
  • predmemorija - namijenjena je za pohranjivanje predmemoriranih podataka, također se koristi za spremanje firmwarea tijekom OTA ažuriranja i stoga ima veličinu sličnu veličini sistemska particija;
  • korisnički podaci - sadrži postavke, aplikacije i korisničke podatke, sav preostali NAND memorijski prostor dodijeljen mu je;
  • misc - sadrži oznaku koja određuje u kojem načinu se sustav treba pokrenuti: Android ili oporavak.

U Linux terminologiji, RAM disk je vrsta virtualno teško disk koji postoji samo u RAM-u. Rano u fazi pokretanja, kernel izdvaja sadržaj diska iz slike i montira ga kao korijenski datotečni sustav (rootfs).

Osim njih, mogu postojati i drugi odjeljci, međutim, opća oznaka određuje se u fazi dizajna pametnog telefona i, u slučaju u-boot-a, ušivena je u kod pokretača. To znači da: 1) particijska tablica se ne može uništiti, budući da se uvijek može vratiti pomoću naredbe za brzo pokretanje oem format; 2) da biste promijenili particijsku tablicu, morat ćete otključati i ponovno pokrenuti bootloader s novim parametrima. Međutim, postoje iznimke od ovog pravila. Na primjer, bootloader istog Rockchipa pohranjuje informacije o particijama u prvom bloku NAND memorije, tako da ne morate fleširati pokretač da biste ga promijenili.

Posebno je zanimljiv odjeljak za ostalo. Nagađa se da je izvorno stvoren za skladištenje različite postavke bez obzira na glavni sustav, ali u ovaj trenutak koristi se samo za jednu svrhu: da kaže bootloaderu s koje particije treba učitati sustav - boot ili recovery. Ovu priliku, posebice, koristi aplikacija ROM upravitelj za automatsko ponovno pokretanje sustavi u oporavku s automatskom instalacijom firmwarea. Mehanizam je izgrađen na njegovoj osnovi dvostruko opterećenje Ubuntu Touch da šavovi Ubuntu bootloader

u oporavku i omogućuje vam da kontrolirate koji sustav ćete sljedeći put pokrenuti. Obrišite odjeljak razno - Android je učitan, ispunjen podacima - učitava se oporavak ... odnosno Ubuntu Touch.

Dio koda pokretača koji definira particijsku tablicu:

particije statičke struct particije = (("-", 123), ("xloader", 128), ("bootloader", 256), / * particija "razno" potrebna je za oporavak * / ("razno", 128), ("-", 384), ("efs", 16384), ("oporavak", 8 * 1024), ("boot", 8 * 1024), ("sustav", 512 * 1024), ("cache" , 256 * 1024), ("korisnički podaci", 0), (0, 0));

Drugi korak. Odjeljak za podizanje

Ako odjeljak razno nema oznaku za podizanje sustava u obnavljanju, u-boot prenosi kontrolu na kod koji se nalazi u odjeljku za pokretanje. To nije ništa više od Linux kernela; nalazi se na početku odjeljka, a odmah zatim slijedi cpio i gzip komprimirana slika RAM diska koja sadrži direktorije potrebne za rad Androida, init sustav i druge alate. Na particiji za pokretanje nema datotečnog sustava, kernel i RAM disk samo slijede jedan za drugim. Sadržaj RAM diska je sljedeći:

  • podaci - imenik za montiranje istoimene particije;
  • dev - datoteke uređaja;
  • proc - ovdje je montiran procfs;
  • sbin - skup pomoćnih uslužnih programa i demona (adbd, na primjer);
  • res - skup slika za punjač (vidi dolje);
  • sys - ovdje je montiran sysfs;
  • sustav - imenik za montažu sistemske particije;
  • punjač - aplikacija za prikaz procesa punjenja;
  • build.prop - Postavke sustava;
  • init - init sustav;
  • init.rc - init postavke sustava;
  • ueventd.rc - postavke za demon uventd uključen u init.

Ovo je, da tako kažemo, kostur sustava: skup direktorija za povezivanje datotečnih sustava s NAND-memorijskih particija i inicijalizacijski sustav koji će obaviti sav ostatak posla oko učitavanja sustava. Središnji element ovdje je init aplikacija i njezina init.rc konfiguracija, o čemu ću kasnije detaljno raspravljati. U međuvremenu, želim vam skrenuti pozornost na datoteke punjača i ueventd.rc, kao i direktorije sbin, proc i sys.

Datoteka punjača mala je aplikacija čija je jedina svrha prikaz ikone baterije. Nema nikakve veze s Androidom i koristi se kada je uređaj spojen na punjač u isključenom stanju. U ovom slučaju, Android se ne pokreće, a sustav jednostavno učitava kernel, povezuje RAM disk i pokreće punjač. Potonji prikazuje ikonu baterije, čija je slika u svim mogućim stanjima pohranjena u uobičajenim PNG datotekama unutar res direktorija.

Datoteka ueventd.rc je konfiguracija koja određuje koje datoteke uređaja u sys direktoriju trebaju biti kreirane prilikom pokretanja. Na bazi jezgre Linux sustavi Hardveru se pristupa putem posebnih datoteka unutar dev direktorija, a za njihovu izradu u Androidu odgovoran je demon ueventd, koji je dio init. Obično radi u automatskom načinu, prihvaćajući naredbe za stvaranje datoteka iz kernela, ali neke datoteke morate kreirati sami. Navedeni su u ueventd.rc.

Sbin imenik u dionički Android obično ne sadrži ništa osim adbd-a, odnosno ADB demona koji je odgovoran za otklanjanje pogrešaka u sustavu s računala. Pokreće se u ranoj fazi pokretanja OS-a i omogućuje vam da identificirate moguće probleme u fazi inicijalizacije OS-a. U prilagođenim firmware-ima u ovom direktoriju možete pronaći gomilu drugih datoteka, na primjer mke2fs, koji mogu biti potrebni ako se particije trebaju preformatirati u ext3 / 4. Također, modderi često tamo stavljaju BusyBox, s kojim možete pozvati stotine Linux naredbi.

Tijekom procesa pokretanja, Android prikazuje tri različita zaslona za pokretanje: prvi se pojavljuje odmah nakon pritiska na tipku za uključivanje i bljeska u jezgru Linuxa, drugi se prikazuje u ranim fazama inicijalizacije i zapisuje se u datoteku /initlogo.rle (gotovo se ne koristi danas), potonji se pokreće pomoću aplikacije bootanimation i nalazi se u datoteci /system/media/bootanimation.zip.

Proc direktorij za Linux je standardan, u sljedećim fazama pokretanja pokretanja će priložiti procfs, virtualni datotečni sustav koji omogućuje pristup informacijama o svim procesima u sustavu. Sustav će povezati sysfs na sys direktorij, što otvara pristup informacijama o hardveru i njegovim postavkama. Koristeći sysfs, možete, na primjer, staviti uređaj u stanje mirovanja ili promijeniti korišteni algoritam za uštedu energije.

Datoteka build.prop služi za pohranjivanje niske razine Android postavke... Kasnije će sustav resetirati ove postavke i prepisati ih vrijednostima iz datoteke system / build.prop, koja još nije dostupna.

Drugi korak, alternativa. Odjeljak za oporavak

U slučaju da je zastavica za podizanje sustava za oporavak postavljena u odjeljku razno ili je korisnik uključio pametni telefon s pritisnutom tipkom za smanjenje glasnoće, u-boot će prenijeti kontrolu na kod koji se nalazi na početku odjeljka za oporavak. Kao i particija za pokretanje, sadrži kernel i RAM disk, koji se dekomprimira u memoriju i postaje korijen datotečnog sustava. Međutim, ovdje je sadržaj RAM diska nešto drugačiji.

Za razliku od boot particija djeluje kao prijelazna veza između različitih faza pokretanja OS-a, odjeljak za oporavak potpuno samostalan i sadrži minijaturni operativni sustav koji nema nikakve veze s Androidom. Recovery ima svoju jezgru, vlastiti skup aplikacija (naredbi) i vlastito sučelje koje omogućuje korisniku aktiviranje servisnih funkcija.

U standardnom (stockom) oporavku obično postoje samo tri takve funkcije: instalacija firmwarea potpisanog ključem proizvođača pametnog telefona, brisanje i ponovno pokretanje. Modificirani oporavak treće strane kao što su ClockworkMod i TWRP ima mnogo više značajki. Oni znaju formatirati datotečne sustave, instalirati firmware potpisan bilo kojim ključevima (čitaj: prilagođeno), montirati datotečne sustave na druge particije (za otklanjanje pogrešaka OS) i uključiti podršku za skripte koja automatizira proces firmvera i mnoge druge funkcije.

Korištenjem skripti, na primjer, možete osigurati da se nakon učitavanja oporavak automatski pronađe na memorijskoj kartici potreban firmware, instalirao ih i ponovno pokrenuo Android. Ovu značajku koriste ROM Manager, autoflasher alati, kao i automatski CyanogenMod ažuriranja i drugi firmware.

Prilagođeni oporavak također podržavaju skripte za sigurnosno kopiranje koje se nalaze u direktoriju /system/addon.d/. Ispred oporavak firmvera provjerava skripte i izvršava ih prije bljeskanja. Zahvaljujući takvim skriptama, praznine ne nestaju nakon instalacije nova verzija firmware.

Treći korak. Inicijalizacija

Dakle, nakon što je dobio kontrolu, kernel povezuje RAM disk i nakon završetka inicijalizacije svih njegovih podsustava i drajvera pokreće init proces od kojeg počinje inicijalizacija Androida. Kao što sam već rekao, init ima konfiguracijsku datoteku init.rc, iz kojeg proces uči što bi točno trebao učiniti kako bi pokrenuo sustav. U modernim pametnim telefonima, ova konfiguracija ima impresivnu duljinu od nekoliko stotina redaka, a također je opremljena prikolicom od nekoliko podređenih konfiguracija koje su povezane s glavnom pomoću uvozne direktive. Ipak, njegov je format prilično jednostavan i zapravo je skup naredbi, podijeljen u blokove.

Svaki blok definira fazu učitavanja ili, na jeziku Android programera, radnju. Blokovi su odvojeni jedan od drugog direktivom on nakon koje slijedi naziv radnje, kao što je rano pokretanje ili post-fs. Blok naredbi će se izvršiti samo ako se aktivira okidač istog imena. Kako se init pokrene, aktivirat će okidače za rano pokretanje, init, rano-fs, fs, post-fs, rano pokretanje i pokretanje, pokrećući odgovarajuće blokove naredbi.

Ako konfiguracijska datoteka povuče još nekoliko konfiguracija navedenih na početku (a to je gotovo uvijek slučaj), tada će se blokovi naredbi istog imena unutar njih kombinirati s glavnom konfiguracijom, tako da kada se okidač pokrene, init će izvršiti naredbe iz odgovarajućih blokova svih datoteka. To je učinjeno radi praktičnosti generiranja konfiguracijskih datoteka za nekoliko uređaja, kada glavna konfiguracija sadrži naredbe zajedničke za sve uređaje, a specifične za svaki uređaj se zapisuju u zasebne datoteke.

Najznačajnija od dodatnih konfiguracija je initrc.ime_uređaja.rc gdje se naziv varijable određuje automatski na temelju sadržaja ro.hardverske datoteke. To je konfiguracijska datoteka specifična za platformu koja sadrži naredbene blokove specifične za određeni uređaj... Osim naredbi odgovornih za podešavanje kernela, sadrži i naredbu poput ove:

mount_all ./fstab.device_name

To znači da bi init sada trebao montirati sve datotečne sustave navedene u. / Fstab.device_name, koji ima sljedeću strukturu:

Device_name (particija) mount_point datotečni sustav fs_options druge opcije

Obično sadrži upute za povezivanje datotečnih sustava s internih NAND particija na direktorije / system (OS), / data (postavke aplikacije) i / cache (spremljeni podaci). Međutim, laganom izmjenom ove datoteke možemo prisiliti init da pokrene sustav s memorijske kartice. Da biste to učinili, dovoljno je podijeliti memorijsku karticu na tri ili četiri particije: 1 GB / ext4, 2 GB / ext4, 1 GB / ext4 i preostali prostor fat32. Zatim morate odrediti nazive particija memorijske kartice u direktoriju / dev (za različitih uređaja različiti su) i zamijenite ih izvorna imena uređaja u datoteci fstab.

Na kraju bloka pokretanja, init će najvjerojatnije naići na zadanu naredbu class_start, koja će vas obavijestiti da biste tada trebali pokrenuti sve usluge navedene u konfiguraciji koje su povezane sa zadanom klasom. Opis usluge počinje direktivom usluge, nakon čega slijedi naziv usluge i naredba koja se mora izvršiti da bi se ona pokrenula. Za razliku od naredbi navedenih u blokovima, servisi moraju biti pokrenuti cijelo vrijeme, pa će tijekom cijelog životnog vijeka pametnog telefona init visjeti u pozadini i nadzirati ga.

Moderni Android uključuje desetke usluga, ali dvije od njih imaju poseban status i određuju cijeli životni ciklus sustava.

Četvrti korak. Zygote i App_process

U određenoj fazi učitavanja, init će naići na blok poput ovoga na kraju konfiguracije:

service zygote / system / bin / app_process -Xzygote / system / bin --zygote --start-system-server class default socket zygote stream 660 root system onrestart write / sys / android_power / request_state wake onrestart write / sys / power / state on onrestart restart media onrestart restart netd

Ovo je opis usluge Zygote, ključne komponente svakog Android sustava koji je odgovoran za inicijalizaciju, pokretanje usluga sustava, pokretanje i zaustavljanje prilagođenih aplikacija i mnoge druge zadatke. Zygote se pokreće pomoću male aplikacije / sustava / bin / app_process, što se vrlo jasno vidi u gornjem dijelu konfiguracije. Zadatak app_proccess je pokrenuti Dalvik virtualni stroj, čiji se kod nalazi u dijeljenoj biblioteci /system/lib/libandroid_runtime.so, a zatim pokrenuti Zygote na njemu.

Kada je sve to učinjeno i Zygote ima kontrolu, počinje graditi Java runtime okruženje učitavanjem svih Java klasa okvira (sada ih ima preko 2000). Zatim pokreće system_server, koji uključuje većinu sistemskih usluga visoke razine (napisanih u Javi), uključujući Window Manager, Status Bar, Package Manager i, što je najvažnije, Activity Manager, koji će u budućnosti biti odgovoran za primanje pokretanja i isključivanja signali, aplikacije.

Nakon toga, Zygote otvara socket / dev / socket / zygote i odlazi na spavanje, čekajući podatke. U ovom trenutku, prethodno pokrenuti Upravitelj aktivnosti šalje namjeru emitiranja Intent.CATEGORY_HOME da pronađe aplikaciju odgovornu za formiranje radne površine, te daje ime Zygoteu preko utičnice. Potonji se, zauzvrat, račva i pokreće aplikaciju na vrhu virtualni stroj... Voila, imamo radnu površinu na našem zaslonu, koju je pronašao Activity Manager i pokrenuo Zygote, i statusnu traku koju pokreće system_server kao dio usluge Status Bar. Nakon što dodirnete ikonu, radna površina će poslati namjeru s nazivom ove aplikacije, primit će je Upravitelj aktivnosti i poslati naredbu za pokretanje aplikacije Zygote daemonu.

Sve ovo može izgledati malo zbunjujuće, ali najvažnije je zapamtiti tri jednostavne stvari:

Android se po mnogo čemu razlikuje od ostalih operativnih sustava i ne možete to odmah shvatiti. Međutim, ako razumijete kako sve funkcionira, otvaraju se jednostavno beskrajne mogućnosti... Za razliku od iOS-a i Windows Phone Googleov operativni sustav ima vrlo fleksibilnu arhitekturu koja vam omogućuje da ozbiljno promijenite njegovo ponašanje bez potrebe za pisanjem koda. U većini slučajeva dovoljno je ispraviti potrebne konfiguracije i skripte.

][ 05.14

Na otvorenim prostorima Runeta teško je pronaći konstruktivne i dobro prezentirane informacije o uređaju Android operativnog sustava. Uglavnom su informacije fragmentirane i nepotpune, nema uvodnog dijela s Osnovni koncepti, što početnicima otežava razumijevanje i razumijevanje. Bez osnovno znanje uređaja i algoritma operativnog sustava Android, nemoguće je otkloniti pogreške ili prilagoditi firmware, razviti za OS Android. To je ono što me potaknulo da napišem ovaj članak, u kojem ću pokušati, s uobičajenim i razumljiv jezik, prenijeti "teške" stvari.

Materijal je prvenstveno usmjeren na proučavanje običnih korisnika i predstavljen je kao uvodni izlet u svijet Android operativnih sustava. Stoga će ovdje biti iznesene sažete i površne informacije bez tehničkih depresija i nijansi. Ovaj materijal bit će korisno svima koji se bave bljeskanjem i prilagodbom firmwarea, razvojem za Android OS, popravkom mobitela računalni sustavi i običnog korisnika, radi boljeg razumijevanja principa rada i mogućnosti svog Androida "a.

Android interne memorijske particije

Interna memorija Android uređaja podijeljena je na nekoliko logičkih pogona (particija). Evo klasičnog rasporeda memorije:

Bootloader- ovdje je program (bootloader) koji vam omogućuje pokretanje operativnog sustava Android, Recovery i druge servisne načine.

Oporavak- kao što naziv govori, instaliran je ovdje inženjerski izbornik oporavak ili samo oporavak.

Čizma- srce Android OS-a, ovdje je kernel, upravljački programi i postavke za upravljanje procesorom i memorijom.

Sustav- particija sustava, koja sadrži sve datoteke potrebne za rad Android OS-a, to je kao Windows mapa na vašem C:\ pogonu (u nastavku ćete se povezati s Windows OS-om)

Podaci- odjeljak za instaliranje aplikacija i pohranjivanje njihovih podataka. (Programske datoteke)

Korisnik- ovo je dobro poznata sdcard ili, jednostavnije, mjesto za korisničke datoteke (Moji dokumenti). Ovdje moramo napraviti digresiju, jer postavljanje ovog odjeljka ima nekoliko opcija:

  • U internoj memoriji nedostaje particija, a umjesto nje koristi se vanjski pogon - najpopularnija opcija. (Sl. 1)
  • U uređajima s velikom ugrađenom memorijom, ovaj odjeljak vidi kao sdcard, i vanjska kartica memorija se vidi kao sdcard2 ili extsd (mogu postojati i druge varijante imena). Obično se nalazi na Android 3.2 uređajima. (Slika 2 Opcija 1)
  • Ova opcija je zamijenjena prethodna verzija, zajedno s Androidom 4.0. Odjeljak Korisnik zamijenjen je medijskom mapom u odjeljku Podaci, što je omogućilo korištenje cijele memorije koja je dostupna korisniku za instaliranje programa i pohranjivanje podataka, a ne iznos koji nam je dodijelio proizvođač. Drugim riječima, sdcard i podaci su jedno. (Slika 2 Opcija 2)

Sada kada znamo što se i gdje nalazi, shvatimo čemu služi i kako nam ove informacije mogu biti korisne.

Počnimo s Bootloaderom. Ovo je bootloader koji pokreće Android, oporavak itd. Kada pritisnemo tipku za uključivanje, pokreće se bootloader, a ako ne dodatne naredbe(tipke se drže pritisnute), pokreće podizanje sustava. Ako je pritisnuta kombinacija tipki (svaki uređaj ima svoju), tada se pokreće, ovisno o naredbi, oporavku, brzom pokretanju ili apx-u. Slika ispod jasno pokazuje što Bootloader pokreće i kako su odjeljci međusobno povezani.

Kao što možete vidjeti na slici 3, odjeljak Recovery ne utječe na učitavanje Android OS-a, ali zašto je onda potreban? Pokušajmo to shvatiti.

Recovery je u biti mali uslužni program baziran na Linux kernelu koji se učitava neovisno o Androidu. Njegova standardna funkcionalnost nije bogata: možete vratiti uređaj na tvorničke postavke ili ažurirati firmware (unaprijed preuzeti na sdcard). Ali, zahvaljujući narodnim obrtnicima, imamo modificirani oporavak putem kojeg možete instalirati modificirani (prilagođeni) firmware, prilagoditi android, izraditi sigurnosne kopije i još mnogo toga. Prisutnost ili odsutnost oporavka, kao i njegova verzija, ne utječu na performanse Android OS-a (vrlo često pitanje na forumima).

Osobito pažljivi čitatelji mogli su primijetiti Fastboot na slici 3. Ovo je sučelje za izravan rad s particijama interne memorije pomoću naredbenog retka. Putem njega možete bljesnuti oporavak, kernel ili novu verziju firmvera ili formatirati (izbrisati sve informacije) ovaj ili onaj odjeljak.

Budući da govorimo o sučeljima, želim govoriti o još jednom, prilično poznatom, adb (android debugbridge). Ovo je takozvani način otklanjanja pogrešaka i naziva se tako s razlogom - kroz njega možete pratiti rad sustava u cjelini i pojedinačnih aplikacija. Ali to nije sve, s adb pomoć Možeš ga dobiti puni pristup u datotečni sustav uređaja i promijenite sistemske datoteke ili povucite važna informacija kada se vaš uređaj zaglavi u učitavanju. Neću opisivati ​​sve funkcije načina za otklanjanje pogrešaka. moj cilj je prenijeti opće informacije, ne detaljan pregled o funkcijama ovog ili onog načina.

Nakon što smo se pozabavili teorijom, počnimo s Android OS-om.

Pritisnite tipku za napajanje - pokreće se Bootloader, koji učitava kernel (boot), on pak pokreće sustav (sustav), pa, i već učitava programe (podatke) i korisnički prostor (korisnik). (slika 3)

Sada idemo na korijenski direktorij i pogledajmo unutrašnjost samog Android OS-a:

U ovom dijagramu dali smo samo imenike potrebne za upoznavanje. Zapravo, ima ih puno više i za pregled samo jedne mape sustava potreban je cijeli članak.

I tako, mapa podataka. Kao što možete pretpostaviti iz naziva, to je nekako povezano s podacima, ali s kojim podacima? Da, kod gotovo svih, ovo su podaci o sinkronizaciji i računima, lozinke za wifi pristupne točke i vpn postavke, itd. Između ostalog, ovdje možete pronaći mape za aplikacije, podatke i dalvik-cache - razmotrite njihovu svrhu:

  • aplikacija - ovdje se instaliraju programi i igre.
  • podaci - ovdje se pohranjuju podaci aplikacije, njihove postavke, spremanja igara i druge informacije.
  • dalvik-cache - programsko područje predmemorije za Dalvik programi... Dalvik je Java virtualni stroj, što je osnova za rad programa s * .apk ekstenzijom.
  • Kako bi pokretanje programa bilo brže, kreira se njihova predmemorija.

Mapa System pohranjuje podatke sustava i sve što je potrebno za rad OS-a. Pogledajmo neke od ovih mapa:

  • aplikacija - ovdje se nalaze sistemske aplikacije (sms, telefon, kalendar, postavke itd.), kao i aplikacije koje je instalirao proizvođač uređaja (brandirani widgeti, live wallpaperi itd.).
  • fontovi - sistemski fontovi
  • medij - sadrži standardne melodije zvona, obavijesti, alarme i zvukove sučelja, kao i animaciju pokretanja (bootanimation)
  • build.prop - Ova datoteka se spominje, gotovo prva, u razgovorima i člancima o finom podešavanju sustava. Sadrži ogroman broj postavki kao što su gustoća zaslona, ​​vrijeme odgode senzora blizine, wifi kontrola, naziv uređaja i proizvođač te mnogi drugi parametri.

Root prava u Android OS-u

Kao iu svakom sustavu sličnom Linuxu, u Android operativnom sustavu pristup datotekama i direktorijima sustava obavlja se s pravima Root superkorisnika. U ovom odjeljku odlučili smo razmotriti kako funkcioniraju prava superkorisnika za OS Android, mogućnost uređivanja sistemskih datoteka ili logičkih particija prostora datoteka ako imate Root prava superkorisnika.

- Dobro je znati što se nalazi u kojoj mapi, ali možete li učiniti nešto po tom pitanju?

- Da! Ali potrebna su vam prava superkorisnika (root) ili, ako povučemo analogiju sa Windowsima, administratorska prava. U početku svi Android uređaji rade bez root prava za krajnji korisnik, tj. kupujući uređaj, mi nismo njegovi punopravni vlasnici. To se radi radi zaštite od zlonamjernog softvera i od samog korisnika - uostalom, u nevještim rukama, potpuni pristup sustavu može dovesti do "smrti" operativnog sustava i naknadne potrebe za ponovnim pisanjem uređaja.

– Pa, čemu služi takva opasna stvar?- pitaš.

A sad da ti kazemo:

  • Mogućnost izrade sigurnosne kopije podataka i vraćanja ih nakon bljeskanja ili slučajnog brisanja.
  • Fino podešavanje sustava ručno ili pomoću posebnih programa.
  • Uklanjanje sistemskih aplikacija, melodija zvona, pozadina itd.
  • Promjena izgled OS (na primjer, prikaz napunjenosti baterije u postocima)
  • Dodavanje funkcionalnosti (podrška za ad-hoc mreže, na primjer)

Ovaj popis se može nastaviti još dugo, ali mislim da će ovi primjeri biti dovoljni da se razumiju mogućnosti i širina korištenja root privilegija.

- Ovo je sve super, ali sada će bilo koji program moći pristupiti "srcu" operativnog sustava i mojim podacima?

- Ne. Vi odlučujete hoćete li dopustiti primanje ove ili one aplikacije root pristup, ili ne. Za to postoji program Superuser ili njegova napredna sestra SuperSU. Nije moguće koristiti root bez ovog ili sličnog programa.

Kao što vidite, Android nije tako težak. operacijski sustav razumjeti korisnika. Ako ste već imali iskustva s operativnim sustavima sličnim Linuxu, naći ćete mnoge sličnosti s Android sustavima, a ta sličnost je razumna. Android sustav je izveden i izgrađen na vrhu Linux kernela. Nadam se da ste nakon čitanja članka naučili nešto novo ili ste dugo dobili odgovor na pitanje koje vas zanima.

Svaki pametni telefon sastoji se od mnogo složenih komponenti i nećete uvijek razmišljati o njima prije nego što odaberete model uređaja. No, unatoč tome, važno je znati koji hardver pomaže vašem pametnom telefonu da funkcionira.

U ovom ćemo članku raščlaniti glavne dijelove onoga što je postalo jedan od najvažnijih elektroničkih uređaja na tržištu. Razmotrimo od čega se sastoji pametni telefon i čemu služi ova ili ona komponenta. Sada postoji mnogo različitih modela pametnih telefona, različitih dizajna, s različite karakteristike, trajanje baterije i tako dalje. Ali ako razumijete hardversko punjenje pametnog telefona, tada će odabir pravog modela biti mnogo lakši.

1. Zaslon

Jedna od najočitijih komponenti pametnog telefona je njegov zaslon. Sve što vidite na ekranu obrađuje se i kontrolira unutarnje komponente. Sada postoje dvije tehnologije za izradu displeja:

  • Zasloni od tekućih kristala, izrađeni su korištenjem IPS ili TFT tehnologije;
  • LED ekrani izrađeni po AMOLED tehnologiji odn Super AMOLED.

Zaslon s tekućim kristalima koristi pozadinsko osvjetljenje za stvaranje slike. Bijela svjetlost prolazi kroz filtere i zahvaljujući mogućnosti kontrole svojstava kristala, možete vidjeti različite boje... Svjetlo ne stvara sam ekran, stvara ga izvor svjetlosti iza njega.

LED ekran radi drugačije. Svaki piksel koji vidite na ekranu zasebna je LED dioda. Ovdje sam zaslon stvara žive i šarene boje. Prednost Super AMOLED-a u odnosu na IPS je da kada je piksel isključen vidjet ćete crnu boju, ne troši bateriju. Stoga su pametni telefoni s AMOLED-om učinkovitiji za trajanje baterije. Ali AMOLED ekrani skuplji od IPS-a, pa će pametni telefon s takvim zaslonom koštati znatno više.

2. Baterija

Pametni telefoni obično koriste litij-ionske baterije i mogu se ili ne moraju ukloniti. Zahvaljujući ovoj tehnologiji, ne morate kalibrirati ili testirati svoju bateriju kao što to radite s baterijama na bazi nikla. Međutim, ove baterije imaju mnogo vlastitih problema.

3. Sustav na čipu (SoC)

SoC ili matična ploča s procesorom je najvažnija komponenta vašeg pametnog telefona. Neki korisnici mogu misliti da je ovo procesor uređaja, ali ima više toga. SoC uključuje ne samo procesor, već i GPU, LTE modem, kontroler zaslona, ​​bežične adaptere i druge silikonske blokove zbog kojih telefon radi.

Postoje pametni telefoni koji koriste SoC-ove od Qualcomma, MediaTeka, Samsunga, Krirnovih vlastitih čipova, Applea, ali svi koriste istu arhitekturu - ARM. ARM ne samo da proizvodi procesore, već i licencira njihovu arhitekturu drugim tvrtkama, tako da svatko može koristiti istu tehnologiju za stvaranje modernih i moćnih SoC-a.

Nekoliko tvrtki izdaje svoje arhitektonske linije koje su kompatibilne s ARM-om i koje se mogu koristiti u pametnim telefonima. Primjer bi bili Appleovi čipsetovi koji rade na Cyclone procesorima ili Qualcommovim Kryo procesorima. SoC su glavne komponente koje čine pametni telefon.

4. Interni i RAM

Nijedan pametni telefon ne može raditi bez RAM-a i pohrana sustava... Većina uređaja koristi LPDDR3 ili LPDDR4 RAM, a neki vrhunski modeli dolaze s LPDDR4X. Kombinacija LP znači Low Power, napon napajanja ovih mikro krugova je smanjen, a to ih čini učinkovitijima u smislu potrošnje energije.

LPDDR4 je učinkovitiji od LPDDR3, a LPDDR4X je učinkovitiji i ekonomičniji od oba. Tu je i još afektivnija memorija – LPDDR5.

Što se interne memorije tiče, ona koristi flash memoriju od 32 do 256 GB. Zahtjevi korisnika stalno rastu i količine će rasti u skladu s njima. Kada uključite telefon, vidjet ćete da je veličina pohrane manja od navedene. Recimo, kaže se da je pogon 64 GB, a za snimanje je dostupno 53-55 GB. Ovu memoriju zauzimaju operativni sustav i aplikacije.

5. Modemi

Budući da su pametni telefoni još uvijek telefoni, potrebne su im komunikacijske komponente za primanje i upućivanje poziva, slanje tekstualne poruke i veze s internetom. Za to se koriste modemi. Svaki proizvođač SoC-a ima svoju marku modema, a to su Qualcomm, Samsung, Huawei i drugi.

Svaki od proizvođača pokušava izbaciti najbrži LTE čip. Trenutno najbrži 9-LTE čip, ali nema smisla koristiti ga ako vaša mobilna mreža ne podržava tu brzinu.

6. Kamera

Svi pametni telefoni imaju prednju i prednju kameru. Kamere se sastoje od tri glavna dijela:

  • Senzor- detektira svjetlost;
  • Leće- koncentrira sliku;
  • Procesor slike.

Broj megapiksela kamere pametnog telefona i dalje je vrlo važan kriterij, no sada je puno manje važan. Sada je glavni ograničavajući faktor senzor kamere, kao i njezina osjetljivost kada svjetlost prolazi kroz njega.

Senzor se u svakom pametnom telefonu može ponašati drugačije, pa će fotografija ili video imati drugačiji kontrast, nijansu, zasićenost u odnosu na druge pametne telefone. Budući da pametni telefoni imaju malu veličinu senzora, oni imaju tendenciju da rade loše u uvjetima slabog osvjetljenja.

7. Senzori

Većina modernih pametnih telefona ima ugrađenih pet glavnih senzora koji će vam omogućiti praktičnije korištenje pametnog telefona. Evo ih:

  • Brzinomjer- koriste aplikacije za određivanje orijentacije uređaja i njegovih pokreta. Na primjer, omogućuje vam korištenje podrhtavanja pametnog telefona za prebacivanje glazbe;
  • Žiroskop- Radi s akcelerometrom za otkrivanje rotacija vašeg telefona. Korisno za trkaće igre;
  • Digitalni kompas- pomaže pronaći sjever za normalnu orijentaciju na kartama;
  • Svijetli senzor- Ovaj senzor automatski prilagođava svjetlinu zaslona na temelju ambijentalnog svjetla i pomaže produljiti vijek trajanja baterije.
  • Senzor blizine- tijekom poziva, ako se uređaj približi vašem uhu, ovaj senzor automatski zaključava zaslon kako bi spriječio neželjene dodire.

Sve su to bili glavni elementi pametnog telefona, u različiti modeli mogu postojati i drugi senzori, na primjer senzor otkucaja srca, tlaka i temperature, ali su mnogo rjeđi.

zaključke

Ispitali smo od čega se sastoji pametni telefon. Sada kada imate više informacija o složenim komponentama koje čine svaki pametni telefon, možete odabrati svoju buduću kupnju uspoređujući karakteristike različitih komponenti. To će vam pomoći da odaberete najbolji uređaj koji odgovara vašim potrebama.

Jeste li se ikada zapitali kako funkcionira fastboot ili ADB? Ili zašto je Android pametni telefon gotovo nemoguće pretvoriti u ciglu? Ili možda već dugo želite znati gdje leži magija Xposed frameworka i zašto su potrebne skripte za pokretanje /system/etc/init.d? Što je s konzolom za oporavak? Je li to dio Androida ili stvar za sebe i zašto redoviti oporavak nije prikladan za instaliranje firmwarea treće strane? Odgovore na sva ova i mnoga druga pitanja naći ćete u ovom članku.

Kako Android radi

Možete naučiti o skrivenim mogućnostima softverskih sustava razumijevanjem kako oni rade. U nekim slučajevima to je teško učiniti jer se kod sustava može zatvoriti, ali u slučaju Androida možemo ispitati cijeli sustav iznutra i izvana. U ovom članku neću govoriti o svim nijansama Androida i usredotočit ću se samo na to kako se OS pokreće i koji se događaji odvijaju u intervalu između pritiska na gumb za uključivanje i pojavljivanja radne površine.

Usput ću vam objasniti što možemo promijeniti u ovom lancu događaja i kako programeri prilagođenih firmware-a koriste te mogućnosti za implementaciju takvih stvari kao što su podešavanje parametara OS-a, proširenje prostora za pohranu aplikacija, swap povezivanja, razne prilagodbe i još mnogo toga. Sve ove informacije mogu se koristiti za izradu vlastitog firmwarea i implementaciju raznih hakova i modifikacija.

Prvi korak. ABOOT i particijska tablica

Sve počinje s primarnim bootloaderom. Nakon uključivanja napajanja, sustav izvršava bootloader kod zapisan u trajnoj memoriji uređaja. Zatim prenosi kontrolu na aboot bootloader s ugrađenom podrškom za fastboot protokol, ali proizvođač mobilnog čipa ili pametnog telefona/tableta ima pravo odabrati bilo koji drugi bootloader po svom izboru. Na primjer, Rockchip koristi vlastiti bootloader koji nije kompatibilan s brzim pokretanjem, a koji se mora reprogramirati i njime se upravlja pomoću vlasničkih alata.

Protokol za brzo pokretanje je, zauzvrat, sustav upravljanja bootloaderom s računala koji vam omogućuje izvršavanje radnji kao što su otključavanje bootloadera, bljeskanje nove kernela i oporavak, instaliranje firmware-a i mnoge druge. Razlog postojanja brzog pokretanja je mogućnost vraćanja pametnog telefona u prvobitno stanje u situaciji kada sva druga sredstva ne rade. Fastboot će ostati na mjestu, čak i ako eksperimentalno izbrišete sve NAND particije koje sadrže Android i oporavak sa svog pametnog telefona.

Nakon što je primio kontrolu, aboot provjerava tablicu particija i prenosi kontrolu na kernel, koji se spaja u particiju pod nazivom boot, nakon čega kernel dohvaća RAM sliku s iste particije u memoriju i počinje učitavati ili Android ili konzolu za oporavak. NAND memorija u Android uređajima podijeljena je u šest uvjetno potrebnih odjeljaka:

  • boot - sadrži kernel i RAM disk, obično veličine oko 16 MB;
  • recovery - konzola za oporavak, sastoji se od kernela, skupa konzolnih aplikacija i datoteke postavki, veličine 16 MB;
  • sustav - sadrži Android, u modernim uređajima ima veličinu od najmanje 1 GB;
  • predmemorija - namijenjena je za pohranu predmemoriranih podataka, također se koristi za spremanje firmvera tijekom OTA ažuriranja i stoga ima veličinu sličnu veličini sistemske particije;
  • korisnički podaci - sadrži postavke, aplikacije i korisničke podatke, sav preostali NAND memorijski prostor dodijeljen mu je;
  • misc - sadrži oznaku koja određuje u kojem načinu se sustav treba pokrenuti: Android ili oporavak.
Osim njih, mogu postojati i drugi odjeljci, međutim, opća oznaka određuje se u fazi dizajna pametnog telefona i, u slučaju ponovnog pokretanja, ušiva se u kod pokretača. To znači da: 1) tablica particija se ne može uništiti, budući da se uvijek može vratiti pomoću naredbe fastboot oem format; 2) da biste promijenili particijsku tablicu, morat ćete otključati i ponovno pokrenuti bootloader s novim parametrima. Međutim, postoje iznimke od ovog pravila. Na primjer, bootloader istog Rockchipa pohranjuje informacije o particijama u prvom bloku NAND memorije, tako da ne morate fleširati pokretač da biste ga promijenili.

Dio koda pokretača koji definira particijsku tablicu


Posebno je zanimljiv odjeljak za ostalo. Postoji pretpostavka da je izvorno stvoren za pohranjivanje različitih postavki bez obzira na glavni sustav, ali trenutno se koristi samo u jednu svrhu: da naznači bootloaderu s koje particije treba učitati sustav - podizanje ili oporavak. Ovu značajku, posebice, koristi aplikacija ROM Manager za automatsko ponovno pokretanje sustava u oporavak uz automatsku instalaciju firmvera. Na njegovoj osnovi izgrađen je mehanizam za dvostruko podizanje sustava Ubuntu Touch, koji pokreće Ubuntu bootloader u oporavak i omogućuje vam da kontrolirate koji sustav ćete sljedeći put pokrenuti. Izbrišite odjeljak razno - učitavanje Androida, ispunite ga podacima - učitavanje oporavka ... odnosno Ubuntu Touch.

Drugi korak. Odjeljak za podizanje

Ako odjeljak razno nema oznaku za podizanje sustava u obnavljanju, aboot prenosi kontrolu na kod koji se nalazi u odjeljku za pokretanje. To nije ništa više od Linux kernela; nalazi se na početku odjeljka, a odmah zatim slijedi cpio i gzip komprimirana slika RAM diska koja sadrži direktorije potrebne za rad Androida, init sustav i druge alate. Na particiji za pokretanje nema datotečnog sustava, kernel i RAM disk samo slijede jedan za drugim. Sadržaj RAM diska je sljedeći:

  • podaci - imenik za montiranje istoimene particije;
  • dev - datoteke uređaja;
  • proc - ovdje je montiran procfs;
  • res - skup slika za punjač (vidi dolje);
  • sbin - skup pomoćnih uslužnih programa i demona (adbd, na primjer);
  • sys - ovdje je montiran sysfs;
  • sustav - imenik za montažu sistemske particije;
  • punjač - aplikacija za prikaz procesa punjenja;
  • build.prop - postavke sustava;
  • init - init sustav;
  • init.rc - init postavke sustava;
  • ueventd.rc - postavke za demon uventd uključen u init.
Ovo je, da tako kažemo, kostur sustava: skup direktorija za povezivanje datotečnih sustava s NAND-memorijskih particija i inicijalizacijski sustav koji će obaviti sav ostatak posla oko učitavanja sustava. Središnji element ovdje je init aplikacija i njezina init.rc konfiguracija, o čemu ću kasnije detaljno raspravljati. U međuvremenu, želim vam skrenuti pozornost na datoteke punjača i ueventd.rc, kao i direktorije sbin, proc i sys.

Datoteka punjača mala je aplikacija čija je jedina svrha prikaz ikone baterije. Nema nikakve veze s Androidom i koristi se kada je uređaj spojen na punjač u isključenom stanju. U ovom slučaju, Android se ne pokreće, a sustav jednostavno učitava kernel, povezuje RAM disk i pokreće punjač. Potonji prikazuje ikonu baterije, čija je slika u svim mogućim stanjima pohranjena u uobičajenim PNG datotekama unutar res direktorija.

Datoteka ueventd.rc je konfiguracija koja određuje koje datoteke uređaja u sys direktoriju trebaju biti kreirane prilikom pokretanja. Na sustavima koji se temelje na jezgri Linuxa, hardveru se pristupa putem posebnih datoteka unutar dev direktorija, a demon ueventd, koji je dio init, odgovoran je za njihovu izradu na Androidu. Obično radi u automatskom načinu, prihvaćajući naredbe za stvaranje datoteka iz kernela, ali neke datoteke morate kreirati sami. Navedeni su u ueventd.rc.

Sbin direktorij u Androidu obično ne sadrži ništa osim adbd, odnosno ADB daemon koji je odgovoran za otklanjanje pogrešaka sustava s računala. Pokreće se u ranoj fazi pokretanja OS-a i omogućuje vam da identificirate moguće probleme u fazi inicijalizacije OS-a. U prilagođenim firmware-ima u ovom direktoriju možete pronaći gomilu drugih datoteka, na primjer mke2fs, koji mogu biti potrebni ako se particije trebaju preformatirati u ext3 / 4. Također, modderi često tamo stavljaju BusyBox, s kojim možete pozvati stotine Linux naredbi.

Proc direktorij za Linux je standardan, u sljedećim fazama pokretanja pokretanja će priložiti procfs, virtualni datotečni sustav koji omogućuje pristup informacijama o svim procesima u sustavu. Sustav će povezati sysfs na sys direktorij, što otvara pristup informacijama o hardveru i njegovim postavkama. Koristeći sysfs, možete, na primjer, staviti uređaj u stanje mirovanja ili promijeniti korišteni algoritam za uštedu energije.

Datoteka build.prop služi za pohranu niskih razina Android postavki. Kasnije će sustav resetirati ove postavke i prepisati ih vrijednostima iz datoteke system / build.prop, koja još nije dostupna.

Korijenski dio OUYA TV kutije


Drugi korak, alternativa. Odjeljak za oporavak

U slučaju da je zastavica za podizanje sustava za oporavak postavljena u odjeljku razno ili je korisnik uključio pametni telefon s pritisnutom tipkom za smanjenje glasnoće, aboot će prenijeti kontrolu na kod koji se nalazi na početku odjeljka za oporavak. Kao i particija za pokretanje, sadrži kernel i RAM disk, koji se dekomprimira u memoriju i postaje korijen datotečnog sustava. Međutim, ovdje je sadržaj RAM diska nešto drugačiji.

Za razliku od boot particije, koja djeluje kao prijelazna veza između različitih faza pokretanja OS-a, particija za oporavak je potpuno samostalna i sadrži minijaturni operativni sustav koji nema nikakve veze s Androidom. Recovery ima svoju jezgru, vlastiti skup aplikacija (naredbi) i vlastito sučelje koje omogućuje korisniku aktiviranje servisnih funkcija.

U standardnom (stockom) oporavku obično postoje samo tri takve funkcije: instalacija firmwarea potpisanog ključem proizvođača pametnog telefona, brisanje i ponovno pokretanje. Modificirani oporavak treće strane kao što su ClockworkMod i TWRP ima mnogo više značajki. Oni znaju formatirati datotečne sustave, instalirati firmware potpisan bilo kojim ključevima (čitaj: prilagođeno), montirati datotečne sustave na druge particije (za otklanjanje pogrešaka OS) i uključiti podršku za skripte koja automatizira proces firmvera i mnoge druge funkcije.

Na primjer, pomoću skripti možete osigurati da nakon preuzimanja oporavak automatski pronađe potrebni firmware na memorijskoj kartici, instalira ih i ponovno pokrene na Android. Ovu značajku koriste ROM Manager, alati za automatsko bljeskanje, kao i mehanizam za automatsko ažuriranje za CyanogenMod i drugi firmware.

Prilagođeni oporavak također podržava skripte za sigurnosne kopije koje se nalaze u direktoriju /system/addon.d/. Prije flešovanja, oporavak provjerava ima li skripti i izvršava ih prije flešovanja. Zahvaljujući takvim skriptama, praznine ne nestaju nakon instaliranja nove verzije firmvera.

Treći korak. Inicijalizacija

Dakle, nakon što je dobio kontrolu, kernel povezuje RAM disk i nakon završetka inicijalizacije svih njegovih podsustava i drajvera pokreće init proces od kojeg počinje inicijalizacija Androida. Kao što sam već rekao, init ima konfiguracijsku datoteku init.rc, iz koje proces uči što točno treba učiniti kako bi pokrenuo sustav. U modernim pametnim telefonima, ova konfiguracija ima impresivnu duljinu od nekoliko stotina redaka, a također je opremljena prikolicom od nekoliko podređenih konfiguracija koje su povezane s glavnom pomoću uvozne direktive. Ipak, njegov je format prilično jednostavan i zapravo je skup naredbi, podijeljen u blokove.

Svaki blok definira fazu učitavanja ili, na jeziku Android programera, radnju. Blokovi su odvojeni jedan od drugog direktivom on nakon koje slijedi naziv radnje, kao što je rano pokretanje ili post-fs. Blok naredbi će se izvršiti samo ako se aktivira okidač istog imena. Kako se init pokrene, aktivirat će okidače za rano pokretanje, init, rano-fs, fs, post-fs, rano pokretanje i pokretanje, pokrećući odgovarajuće blokove naredbi.

Dio init.rc konfiguracije iz CyanogenMod


Ako konfiguracijska datoteka povuče još nekoliko konfiguracija navedenih na početku (a to je gotovo uvijek slučaj), tada će se blokovi naredbi istog imena unutar njih kombinirati s glavnom konfiguracijom, tako da kada se okidač pokrene, init će izvršiti naredbe iz odgovarajućih blokova svih datoteka. To je učinjeno radi praktičnosti generiranja konfiguracijskih datoteka za nekoliko uređaja, kada glavna konfiguracija sadrži naredbe zajedničke za sve uređaje, a specifične za svaki uređaj se zapisuju u zasebne datoteke.

Najznačajnija od dodatnih konfiguracija je initrc.device_name.rc, gdje se naziv uređaja automatski određuje na temelju sadržaja varijable sustava ro.hardware. To je konfiguracijska datoteka specifična za platformu koja sadrži naredbene blokove specifične za uređaj. Osim naredbi odgovornih za podešavanje kernela, sadrži i naredbu poput ove:

Mount_all ./fstab.device_name

To znači da bi init sada trebao montirati sve datotečne sustave navedene u. / Fstab.device_name, koji ima sljedeću strukturu:

Device_name (particija) mount_point datotečni sustav fs_options druge opcije

Obično sadrži upute za povezivanje datotečnih sustava s internih NAND particija na direktorije / system (OS), / data (postavke aplikacije) i / cache (spremljeni podaci). Međutim, laganom izmjenom ove datoteke možemo prisiliti init da pokrene sustav s memorijske kartice. Da biste to učinili, dovoljno je podijeliti memorijsku karticu na tri 4 particije: 1 GB / ext4, 2 GB / ext4, 1 GB / ext4 i preostali prostor fat32. Zatim morate definirati nazive particija memorijske kartice u / dev direktoriju (razlikuju se za različite uređaje) i zamijeniti ih izvornim nazivima uređaja u fstab datoteci.

Tipičan sadržaj fstab datoteke


Na kraju bloka pokretanja, init će najvjerojatnije naići na zadanu naredbu class_start, koja će vas obavijestiti da biste tada trebali pokrenuti sve usluge navedene u konfiguraciji koje su povezane sa zadanom klasom. Opis usluge počinje direktivom usluge, nakon čega slijedi naziv usluge i naredba koja se mora izvršiti da bi se ona pokrenula. Za razliku od naredbi navedenih u blokovima, servisi moraju biti pokrenuti cijelo vrijeme, pa će tijekom cijelog životnog vijeka pametnog telefona init visjeti u pozadini i nadzirati ga.

Moderni Android uključuje desetke usluga, ali dvije od njih imaju poseban status i određuju cijeli životni ciklus sustava.

Četvrti korak. Zygote i app_process

U određenoj fazi učitavanja, init će naići na blok poput ovoga na kraju konfiguracije:

Usluga zygote / system / bin / app_process -Xzygote / system / bin --zygote --start-system-server class default socket zygote stream 660 root system onrestart write / sys / android_power / request_state wake onrestart write / sys / power / state on onrestart restart media onrestart restart netd

Ovo je opis usluge Zygote, ključne komponente svakog Android sustava koji je odgovoran za inicijalizaciju, pokretanje usluga sustava, pokretanje i zaustavljanje prilagođenih aplikacija i mnoge druge zadatke. Zygote se pokreće pomoću male aplikacije / sustava / bin / app_process, što se vrlo jasno vidi u gornjem dijelu konfiguracije. Zadatak app_proccess je pokrenuti Dalvik virtualni stroj, čiji se kod nalazi u dijeljenoj biblioteci /system/lib/libandroid_runtime.so, a zatim pokrenuti Zygote na njemu.

Kada je sve to učinjeno i Zygote ima kontrolu, počinje graditi Java runtime okruženje učitavanjem svih Java klasa okvira (sada ih ima preko 2000). Zatim pokreće system_server, koji uključuje većinu sistemskih usluga visoke razine (napisanih u Javi), uključujući Window Manager, Status Bar, Package Manager i, što je najvažnije, Activity Manager, koji će u budućnosti biti odgovoran za primanje pokretanja i isključivanja signali, aplikacije.

Nakon toga, Zygote otvara socket / dev / socket / zygote i odlazi na spavanje, čekajući podatke. U ovom trenutku, prethodno pokrenuti Upravitelj aktivnosti šalje namjeru emitiranja Intent.CATEGORY_HOME da pronađe aplikaciju odgovornu za formiranje radne površine, te daje ime Zygoteu preko utičnice. Potonji se zauzvrat račva i pokreće aplikaciju na vrhu virtualnog stroja. Voila, imamo radnu površinu na našem zaslonu, koju je pronašao Activity Manager i pokrenuo Zygote, i statusnu traku koju pokreće system_server kao dio usluge Status Bar. Nakon što dodirnete ikonu, radna površina će poslati namjeru s nazivom ove aplikacije, primit će je Upravitelj aktivnosti i poslati naredbu za pokretanje aplikacije Zygote demonu

Sve ovo može izgledati malo zbunjujuće, ali najvažnije je zapamtiti tri jednostavne stvari:

Usluge sustava i niti kernela


zaključke

Android se po mnogo čemu razlikuje od ostalih operativnih sustava i ne možete to odmah shvatiti. Međutim, ako razumijete kako sve funkcionira, jednostavno postoje beskrajne mogućnosti. Za razliku od iOS-a i Windows Phonea, Googleov operativni sustav ima vrlo fleksibilnu arhitekturu koja vam omogućuje da ozbiljno promijenite njegovo ponašanje bez potrebe za pisanjem koda. U većini slučajeva dovoljno je ispraviti potrebne konfiguracije i skripte.

Dugogodišnji korisnici iPhonea znaju kako su radili prvi dani iOS verzija... Zapravo, to je bio operativni sustav s jednim zadatkom koji vam je omogućio rad u pozadini ili prekid rada. trenutnu primjenu samo unaprijed instalirane aplikacije: čitate knjigu, zovu vas - čitač knjiga je minimiziran, a na ekranu se pojavljuje prozor za poziv. Ali obrnuti rad nemoguće: čitač knjiga ne samo da ne može prekinuti rad drugih aplikacija, već će također biti ubijen odmah nakon minimiziranja.

Razlog postojanja takvog sustava je, naravno, ušteda procesora, RAM-a i baterije. Zahvaljujući njoj (ali ne samo), iPhone je mogao brzo raditi u uvjetima ograničenih resursa i vrlo je pazio na bateriju.

Kako radi operativni sustav Android

Android je uvijek radio drugačije. Ovdje možete pokrenuti mnogo različitih aplikacija i sve će ostati u memoriji i čak mogu raditi u pozadini. Otvarate preglednik, unosite adresu i, dok se stranica učitava, pokrećete mail klijent i čitate pisma. Sve je kao na desktopu, s iznimkom da ne morate brinuti o zatvaranju aplikacija, sustav će to učiniti sam kada bude u funkciji. pamćenje će učiniti do kraja ili neće biti dovoljno ugostiti aplikaciju koja se pokreće (naravno, prije svega će se potrošiti rijetko korištene aplikacije). Ovaj mehanizam se zove lowmemorykiller.

Kao root, lowmemorykiller postavke se mogu prilagoditi izravno ili pomoću posebnih aplikacija

Važan element multitasking sustava bile su usluge. To su posebne komponente aplikacija koje bi mogle raditi u pozadini u apsolutno svim uvjetima: na ekranu ili izvan njega, minimizirana primjena ili raspoređene, usluge uopće ne mare je li pokrenut roditeljska aplikacija općenito. Samo je rekao: "Hej, Android, trebaju mi ​​resursi procesora, želim malo matematike", i primio je te resurse. U Android terminologiji takav se zahtjev sustavu zove budnica(točnije, wakelock procesora).

Međutim, podrška tako moćnom i korisnom alatu odigrala je okrutnu šalu na Googleu. Pojavio se ogroman broj aplikacija koje su proizvodile usluge za svako kihanje, stalno radile nekakav posao i nisu puštale pametni telefon da spava. Nakon što je instalirao stotinu aplikacija na pametni telefon, korisnik je dobio nekoliko desetaka usluga, od kojih je svaka povremeno nešto radila (ažuriranje Twitter feeda dok telefon spava je toliko važno).

Stvari su bile toliko žalosne da kineski proizvođači nisu bili opterećeni zadatkom održavanja kompatibilnosti originalni Android(ovo je potrebno ako želite instalirati na svoj Igrajte pametne telefone Store), jednostavno su onemogućili mehanizme za održavanje životnog ciklusa usluga za nesustavne aplikacije u svojim pametnim telefonima.

Napredni korisnici otišli su drugim putem: dobili su root privilegije i instalirali aplikaciju Greenify, koja im je omogućila da zamrznu usluge odabranih aplikacija kako ih nitko ne bi mogao probuditi. Postojale su i radikalnije opcije, na primjer, da se uništi sav softver koji koristite manje od jednom dnevno.

Sam Google također je poduzeo mjere u borbi protiv otrovnih usluga. Veliki korak u tom smjeru napravljen je u Androidu 4.4, gdje se pojavio inteligentni mehanizam koji je određivao radi li neka usluga predugo i opterećuje li procesor previše, a ako se pokazalo da je tako, prikovao ga mjestu i spriječio njegovo pokretanje. Čak i na površan pogled, ova verzija sustava živjela je na bateriji puno dulje od prethodnih.

U Androidu 6.0 Google je otišao još dalje i opremio ga mehanizmom Drijemaj, što ga je nakon određenog vremena neaktivnosti pametnog telefona (oko sat vremena) pretočilo u specijal način uštede energije... Jedna od značajki ovog načina rada je zabrana wakelocka, odnosno ni aplikacije ni usluge jednostavno ne mogu probuditi pametni telefon da obavi bilo kakav posao. Na oko, Android 6.0 nije duže živio, pa se ne zna je li ovaj mehanizam uopće funkcionirao.


Doze radni bar

Konačno, u Androidu 8.0, Google je napravio radikalan korak – zabranio rad pozadinske usluge... Ali uz dvije iznimke:

Aplikacija u nekim slučajevima, na primjer, kada je na ekranu, može pokrenuti usluge, ali će ih Android ubiti nakon što aplikacija ode u stanje mirovanja.
Usluge koje su vidljive korisniku i dalje su dopuštene. Ovo je tzv usluga u prvom planu, usluga koja je vidljiva na ploči s obavijestima i ima ikonu u statusnoj traci.

Čini se, da, usluge su zlo, ali kako sada mogu biti aplikacije poput protukrađe, koje bi trebale raditi nevidljivo u pozadini? Ili isti klijent e-pošte? Zbog potrebe da povremeno provjeravate svoju poštu, treba li ona visjeti na traci obavijesti?

Ne baš. Google je krenuo u zabranu servisa od verzije 5.0, gdje je tzv Raspored poslova... Ovo je poseban podsustav koji omogućuje aplikacijama da zatraže od Androida da obavi određeni posao u određeno vrijeme ili kada se dogodi takav i takav događaj (na primjer, internetska veza). I da, JobScheduler vrlo podsjeća na sličnu funkciju iz iOS-a.

Vezivo

Suprotno uvriježenom mišljenju, Android je koristio sandboxove za izolaciju aplikacija od najranijih verzija. I provedene su na vrlo zanimljiv način. Svaka aplikacija pokrenuta je kao zasebna Korisnik Linuxa i tako je imao pristup samo svom imeniku unutar /podataka/podataka.

Aplikacije su mogle komunicirati jedna s drugom i s operativnim sustavom samo putem IPC mehanizma Vezivo, što je zahtijevalo ovlaštenje za izvođenje radnje. Isti mehanizam korišten je u nekoliko drugih namjena: uz njegovu pomoć sustav obavještava aplikacije o događajima u sustavu, kao što su dolazni poziv, dolazni SMS, priključenje na struju i tako dalje. Aplikacije su primale poruke i mogle su odgovoriti na njih.


Binder osigurava upravljački program u Linux kernelu i Service Manager

Ova značajka dala je Androidu vrlo bogate mogućnosti automatizacije za koje znamo iz aplikacija kao što su Tasker, Automate ili Locale. Sve ove aplikacije dostupne su i za Android 8, osim što su neke opasne značajke, kao što je uključivanje/isključivanje načina rada u zrakoplovu, sada zabranjene za uobičajene aplikacije.

Sustav upozorenja se temelji na namjera, poseban mehanizam implementiran na vrhu Bindera i dizajniran za razmjenu informacija između aplikacija (ili OS-a i aplikacija), kao i za pokretanje komponenti aplikacije. Pomoću intenta možete obavijestiti aplikacije o događajima, zatražiti od sustava da otvori aplikaciju za obradu određenih vrsta podataka (na primjer, za otvaranje određenu stranicu u pregledniku je dovoljno poslati namjeru emitiranja s vezom na stranicu, a na nju će odgovoriti sve aplikacije koje mogu prikazati web stranice ili samo zadani preglednik) ili jednostavno pokrenuti komponentu aplikacije. Na primjer, aplikacije u Androidu ne pokreću se izravno, već pomoću namjera.

Nažalost, kao i usluge, namjere su postale problem za korisnike Googlea i Androida. Činjenica je da namjere emitiranja koje se koriste za obavještavanje aplikacija o događajima odmah idu svim aplikacijama koje su izjavile da su sposobne odgovoriti na njih. A da bi aplikacija mogla reagirati na namjeru, mora se pokrenuti. Slika izgleda ovako: na pametnom telefonu postoji dvadeset aplikacija koje mogu odgovoriti na namjeru android.net.conn.CONNECTIVITY_CHANGE, a svaki put kada se povežete s mrežom i isključite se s nje, sustav pokreće te aplikacije kako bi one mogle odgovoriti u namjeru. Kako to utječe na potrošnju energije – zamislite sami.

Google je ponovno ispravio ovaj nesporazum u Androidu 8.0. Aplikacije sada mogu registrirati rukovaoce namjerama emitiranja samo dok su pokrenute (uz nekoliko iznimaka).

Googleove usluge

Google se voli pohvaliti da je Android operativni sustav otvorenog koda. To, naravno, nije sasvim točno. s jedne strane, android kod stvarno otvoren, i zato imamo pristup tolikom broju različitih prilagođenih firmware-a. S druge strane, izgrađujući Android iz službenih izvora, dobivate sustav bez nekoliko važnih komponenti: 1) pojedinačnih upravljačkih programa čiji izvorni kod proizvođač skriva kao poslovnu tajnu, 2) Googleove usluge, koji su prije svega potrebni za pristup vašem računu, pokrenuti Google play i sigurnosna kopija u oblaku.

Google Mobile Services također je odgovoran za mnoge druge stvari, uključujući podršku za push obavijesti, instant aplikacije, Google karte, pristup kalendaru, određivanje lokacije po tornjevima i Wi-Fi usmjerivačima, mehanizam Smart Lock, što vam omogućuje otključavanje uređaja ovisno o određenim uvjetima.

V moderne verzije Android usluge Google je preuzeo toliki dio posla da se ispostavilo da je život bez njih, iako moguć, vrlo problematičan. A ni s njima nije zabavno: minimalna verzija GApps paketa (koji sadrži samo usluge Google i Google Play) teži više od 120 MB, a sami servisi poznati su po ljubavi prema RAM-u i bateriji. A i oni su zatvoreni, odnosno samo Google sam zna što mogu.


Preuzmite paket s uslugama i Google aplikacije za prilagođeni firmware možete s web stranice opengapps.org (riječ otvoren ne znači da su otvoreni)

Zato je rođen projekt microG, čiji je zadatak rekreirati najvažniju funkcionalnost Googleovih usluga u otvorenom kodu. microG vam već sada omogućuje pristup vašem računu, aktiviranje push obavijesti, pristup Google kartama i određivanje lokacije po tornjevima. I sve to u veličini od četiri mega i skoro potpuna odsutnost Zahtjevi za RAM i bateriju.

Projekt ima vlastitu montažu LineageOS firmware-a, koji izvan kutije uključuje microG i sve modifikacije potrebne za njegov rad.

Linux kernel i vrijeme izvođenja

Android se temelji na Linux kernelu. Kernel upravlja resursima pametnog telefona, uključujući pristup hardveru, upravljanje RAM-om i memorijom samo za čitanje, pokretanje, zaustavljanje i prijenos procesa između jezgri procesora i mnoge druge zadatke. Kao i kod svakog OS-a, kernel je srce Androida, jezgra bez koje bi se sve ostalo raspalo.


Layer Pie Android

Prisutnost jezgre Linuxa, kao i djelomično POSIX-kompatibilnog runtime okruženja (prvenstveno bioničke knjižnice temeljene na implementaciji standardna biblioteka C jezik iz OpenBSD) čini Android kompatibilnim s Linux aplikacijama. Na primjer, wpa_supplicant sustav provjere autentičnosti koji se koristi za povezivanje s Wi-Fi mrežama potpuno je isti kao u bilo koju distribuciju Linuxa... V ranim verzijama Android je koristio standardni Linux bluetooth stog nazvan bluez (kasnije zamijenjen Qualcommovom implementacijom pod nazivom Bluedroid). Čak ima i vlastitu konzolu sa skupom standardnih UNIX / Linux naredbi implementiranih u Toybox setu, izvorno stvorenom za ugrađene Linux sustave.

Većina konzolnih aplikacija napisanih za Linux može se prenijeti na Android jednostavnom ponovnom kompilacijom pomoću unakrsnog prevoditelja (glavna stvar je koristiti statičku kompilaciju kako ne bi došlo do sukoba u knjižnici), a ako imate root prava, možete pokrenuti punopravni jedan na Android uređaju bez ikakvih problema. Jedno upozorenje - bit će mu moguće pristupiti ili samo putem konzole ili pomoću VNC veze. Tu je i Maru OS projekt koji vam omogućuje da koristite svoj pametni telefon kao Debian-bazirano računalo kada je spojen na monitor. Ista funkcija obećava kada povežete svoje pametne telefone s monitorom pomoću DeX priključne stanice.


Stari dobri mc radi na Androidu

Počevši od verzije 4.4 Android može koristiti SELinux sustav prisilne kontrole pristupa za zaštitu od hakiranja i dobivanja root prava... SELinux je razvila Američka agencija za nacionalnu sigurnost i, ne ulazeći u detalje, omogućuje vam da ograničite mogućnosti aplikacija (uključujući komponente sustava niske razine). I ne radi se o dopuštenjima koja korisnik dodjeljuje aplikacijama, već o takvim stvarima kao što su sistemski pozivi i pristup određenim datotekama, bez obzira na standardne UNIX dozvole.

Niz Stagefright ranjivosti koje su pogodile Android prije nekoliko godina omogućile su stjecanje kontrole nad uređajem jednostavnim prisiljavanjem korisnika da otvori primljeni MMS ili posebnu datoteku u pregledniku. Problem je bio s multimedijskim okvirom Stagefright koji je sadržavao višestruke ranjivosti prelijevanja međuspremnika. Prilikom otvaranja posebno pripremljene multimedijske datoteke, exploit je iskoristio ranjivost i pokrenuo kod na uređaju u ime Stagefrighta (koji je radio pod root-om).

Google je uspješno zatvorio sve te bugove, a također je radio na modularizaciji framework koda i pokretanju u posebnim SELinux domenama. Ove domene sprječavaju medijske komponente da koriste većinu poziva sustava Linux, uključujući sistemske pozive execve grupe koji su bili uključeni u pokretanje zlonamjernog koda.

SELinux se danas koristi za zaštitu gotovo svih komponente sustava Android. I to je bio razlog naglog smanjenja broja grešaka pronađenih u Androidu. Ali to je dovelo do fokusa krekera na kernel, odnosno one vrlo zatvorene drajvere, čiji kod nije bio revidiran i čija sigurnost nije zajamčena (a on je, kako se pokazalo, u žalosnom stanju).

(1 procjene, prosjek: 5,00 od 5)

Vrhunski povezani članci