Kako podesiti pametne telefone i računare. Informativni portal
  • Dom
  • Greške
  • Kako Android radi. Nosiva elektronika i kućna tehnika

Kako Android radi. Nosiva elektronika i kućna tehnika

Kako Android radi

Saznajte o skrivene mogućnosti softverski sistemi možete razumijevanjem principa njihovog rada. U nekim slučajevima, to je teško učiniti, jer sistemski kod može biti zatvoren, ali unutra Android futrola možemo proučavati ceo sistem iznutra i spolja. U ovom članku neću govoriti o svim nijansama Androida i fokusirat ću se samo na to kako se OS pokreće i koji se događaji odvijaju u intervalu između pritiska na tipku za napajanje i izgleda radne površine.

Usput ću objasniti šta možemo promijeniti u ovom lancu događaja i kako programeri prilagođenog firmvera koriste ove mogućnosti za implementaciju takvih stvari kao što su podešavanje parametara OS-a, proširenje prostora za pohranu aplikacija, zamjena povezivanja, razna prilagođavanja i još mnogo toga. Sve ove informacije mogu se koristiti za kreiranje vlastitog firmvera i implementaciju raznih hakova i modifikacija.

Prvi korak. U-BOOT i pregradni stol

Sve počinje sa primarnim bootloaderom. Nakon uključivanja napajanja, sistem izvršava kod pokretača pohranjen u trajnoj memoriji uređaja. Njegovu ulogu najčešće igraju modificirana verzija u-boot bootloader sa ugrađenom podrškom za fastboot protokol, ali proizvođač mobilnog čipa ili pametnog telefona/tableta ima pravo izabrati bilo koji drugi bootloader po svom ukusu. Na primjer, Rockchip koristi vlastiti bootloader koji nije kompatibilan s fastboot-om i zahtijeva vlasničke alate za flešovanje i upravljanje njime.

Protokol za brzo pokretanje je, zauzvrat, sistem za upravljanje bootloaderom sa računara, koji vam omogućava da izvršite radnje kao što su otključavanje bootloadera, flešovanje novog kernela i oporavak, instaliranje firmvera i mnoge druge. Razlog postojanja brzog pokretanja je mogućnost da se pametni telefon vrati u prvobitno stanje u situaciji kada sva druga sredstva ne uspiju. Fastboot će ostati na mjestu čak i ako, kao rezultat eksperimenata, izbrišete cijeli sadržaj svih NAND memorijskih particija sa svog pametnog telefona, izgubivši pristup i Androidu i oporavku.

Nakon što je primio kontrolu, u-boot provjerava tabelu particija i prenosi kontrolu na kernel fleširan u particiju pod nazivom boot, nakon čega kernel izvlači 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 uslovno potrebnih sekcija:

  • 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 za podešavanja veličine 16 MB;
  • sistem - sadrži Android, u modernim uređajima veličina je najmanje 1 GB;
  • keš memorija - dizajnirana za pohranjivanje keširanih podataka, također se koristi za spremanje firmvera tokom OTA ažuriranja i stoga ima veličinu sličnu sistemska particija;
  • korisnički podaci - sadrži postavke, aplikacije i korisničke podatke, sav preostali NAND memorijski prostor je dodijeljen njemu;
  • misc - sadrži oznaku koja određuje u kom režimu se sistem treba pokrenuti: Android ili oporavak.

U Linux terminologiji, RAM disk je neka vrsta virtual hard disk koji postoji samo u RAM-u. Rano u procesu pokretanja, kernel izdvaja sadržaj diska iz slike i montira ga kao korijenski sistem datoteka (rootfs).

Osim njih, mogu postojati i drugi odjeljci, ali opća oznaka se određuje u fazi dizajna pametnog telefona i, u slučaju u-boot-a, ušivena je u kod pokretača. To znači da: 1) tabela particija ne može biti ubijena, jer se uvijek može vratiti pomoću fastboot komande oem format; 2) da biste promijenili tabelu particija, morat ćete otključati i ponovo promjeniti bootloader s novim parametrima. Međutim, postoje izuzeci od ovog pravila. Na primjer, bootloader istog Rockchipa pohranjuje informacije o particijama u prvom bloku NAND memorije, tako da flešovanje pokretača nije potrebno da bi se to promijenilo.

Posebno je zanimljiv odjeljak za ostalo. Postoji pretpostavka da je prvobitno stvoren za skladištenje razne postavke nezavisno od glavnog sistema, ali u ovog trenutka koristi se samo za jednu svrhu: da ukaže pokretaču sa koje particije sistem treba da se učita - pokretanje ili oporavak. Ovu funkciju, posebno, koristi aplikacija ROM Manager Za automatsko ponovno pokretanje sistemi u oporavku sa automatskom instalacijom firmvera. Mehanizam je izgrađen na njegovoj osnovi dual boot Ubuntu Touch, koji šavove Ubuntu bootloader

u oporavku i omogućava vam da kontrolišete koji sistem ćete sledeći put pokrenuti. Izbrisao razno particiju - Android se učitava, popunio je podacima - učitava oporavak... odnosno Ubuntu Touch.

Dio koda pokretačkog programa koji definira particijsku tablicu:

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

Drugi korak. Boot section

Ako odeljak misc nema oznaku za pokretanje za oporavak, u-boot prenosi kontrolu na kod koji se nalazi u sekciji za pokretanje. Ovo nije ništa drugo do Linux kernel; nalazi se na početku odeljka, a odmah zatim sledi slika RAM diska upakovana pomoću cpio i gzip arhivatora, koja sadrži direktorijume neophodne za rad Androida, sistem za inicijalizaciju i druge alate. Ne postoji sistem datoteka na particiji za pokretanje; kernel i RAM disk jednostavno slijede jedan za drugim. Sadržaj RAM diska je:

  • podaci - direktorij za montiranje istoimene particije;
  • dev - fajlovi uređaja;
  • proc - procfs je montiran ovdje;
  • sbin - skup uslužnih programa i demona (adbd, na primjer);
  • res - set slika za punjač (vidi dolje);
  • sys - sysfs je montiran ovdje;
  • sistem - direktorij za montiranje sistemske particije;
  • punjač - aplikacija za prikaz procesa punjenja;
  • build.prop - postavke sistema;
  • init - sistem inicijalizacije;
  • init.rc - postavke sistema za inicijalizaciju;
  • ueventd.rc - postavke demona uventd uključene u init.

Ovo je, da tako kažemo, kostur sistema: skup direktorijuma za povezivanje sistema datoteka sa NAND memorijskih particija i sistem za inicijalizaciju koji će obaviti ostatak posla oko pokretanja sistema. Centralni element ovdje je init aplikacija i njena init.rc konfiguracija, o kojoj ću detaljnije govoriti kasnije. U međuvremenu, skrećem vam pažnju na fajlove punjača i ueventd.rc, kao i direktorijume sbin, proc i sys.

Datoteka punjača je mala aplikacija čiji je jedini zadatak da prikaže ikonu baterije. Nema nikakve veze sa Androidom i koristi se kada je uređaj priključen na punjač u isključenom stanju. U ovom slučaju, Android se ne učitava, a sistem 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 običnim PNG datotekama unutar res direktorija.

Datoteka ueventd.rc je konfiguracija koja određuje koje datoteke uređaja u sys direktoriju treba kreirati tokom pokretanja sistema. Na bazi kernela Linux sistemi Pristup hardveru se vrši preko posebnih datoteka unutar dev direktorija, a za njihovo kreiranje u Androidu odgovoran je demon ueventd, koji je dio init-a. U normalnoj situaciji radi u automatskom režimu, prihvata komande za kreiranje fajlova iz kernela, ali neke datoteke treba kreirati nezavisno. Oni su navedeni u ueventd.rc.

sbin direktorij stock Android obično ne sadrži ništa osim adbd-a, odnosno ADB demona, koji je odgovoran za otklanjanje grešaka u sistemu sa računara. Pokreće se u ranoj fazi pokretanja OS-a i omogućava vam da identifikujete moguće probleme tokom faze inicijalizacije OS-a. U prilagođenim firmverima, možete pronaći gomilu drugih datoteka u ovom direktoriju, na primjer mke2fs, što može biti potrebno ako particije treba preformatirati u ext3/4. Također, modderi često postavljaju BusyBox tamo, pomoću kojeg možete pozvati stotine Linux komandi.

Tokom procesa pokretanja, Android prikazuje tri različita ekrana za pokretanje: prvi se pojavljuje odmah nakon pritiska na dugme za napajanje i flešuje se u jezgro Linuxa, drugi se prikazuje tokom ranih faza inicijalizacije i snima u datoteci /initlogo.rle (teško da koristi se danas), posljednji se pokreće pomoću aplikacije bootanimation i nalazi se u datoteci /system/media/bootanimation.zip.

Proc direktorij je standardan za Linux; u sljedećim fazama pokretanja, init će se povezati s njim procfs, virtuelni sistem datoteka koji omogućava pristup informacijama o svim procesima na sistemu. Sistem će povezati sysfs sa sys direktorijumom, š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 namijenjena je za pohranjivanje niskog nivoa Android postavke. Kasnije će sistem resetirati ove postavke i prepisati ih vrijednostima iz trenutno nedostupne datoteke system/build.prop.

Drugi korak, alternativa. Sekcija za oporavak

Ako je zastavica za pokretanje sistema za oporavak postavljena u odjeljku razno ili korisnik uključi pametni telefon sa pritisnutim tipkom za smanjivanje jačine zvuka, 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 raspakuje u memoriju i postaje korijen sistema datoteka. Međutim, sadržaj RAM diska je ovdje nešto drugačiji.

Za razliku od boot particija, koji djeluje kao prijelazna veza između različitih faza učitavanja OS-a, odjeljak za oporavak je potpuno samostalan i sadrži minijaturni operativni sistem koji ni na koji način nije povezan sa Androidom. Recovery ima svoju jezgru, svoj skup aplikacija (naredbi) i vlastiti interfejs koji omogućava korisniku da aktivira servisne funkcije.

U standardnom (stock) oporavku obično postoje samo tri takve funkcije: instalacija firmvera potpisanog ključem proizvođača pametnog telefona, brisanje i ponovno pokretanje. Modificirani oporavak trećih strana, kao što su ClockworkMod i TWRP, imaju mnogo više funkcija. Oni mogu formatirati sisteme datoteka, instalirati firmver potpisan bilo kojim ključevima (čitaj: prilagođeni), montirati sistem datoteka na druge particije (za potrebe otklanjanja grešaka u OS) i uključiti podršku za skripte, koja vam omogućava automatizaciju procesa firmvera i mnoge druge funkcije.

Koristeći skripte, na primjer, možete osigurati da se nakon pokretanja, oporavak automatski pronađe na memorijskoj kartici potreban firmver, instalirao ih i ponovo pokrenuo Android. Ovu funkciju koriste ROM Manager i autoflašer alati, kao i automatski CyanogenMod ažuriranja i druge firmvere.

Prilagođeni oporavak također podržava skripte za izradu rezervnih kopija koje se nalaze u /system/addon.d/ direktoriju. Prije oporavak firmvera provjerava skripte i izvršava ih prije flešovanja firmvera. 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 inicijalizacije svih svojih podsistema i drajvera, pokreće init proces, koji započinje inicijalizaciju Androida. Kao što sam već rekao, init jeste konfiguracijski fajl init.rc, iz kojeg proces uči šta tačno mora da uradi da bi pokrenuo sistem. U modernim pametnim telefonima, ova konfiguracija ima impresivnu dužinu od nekoliko stotina linija, a također je opremljena prikolicom od nekoliko podređenih konfiguracija koje su povezane s glavnom pomoću import direktive. Međutim, njegov format je prilično jednostavan i u suštini je skup naredbi podijeljenih u blokove.

Svaki blok definira fazu učitavanja ili, rečeno Android programerskim jezikom, akciju. Blokovi su odvojeni jedan od drugog direktivom on nakon koje slijedi naziv radnje, kao što je na početku pokretanja ili na post-fs. Blok naredbi će se izvršiti samo ako se aktivira istoimeni okidač. Dok se pokreće, init će aktivirati okidače za rano pokretanje, init, early-fs, fs, post-fs, rano pokretanje i pokretanje, čime će pokrenuti odgovarajuće komandne blokove.

Ako konfiguraciona datoteka povuče još nekoliko konfiguracija navedenih na početku (a to je skoro uvek slučaj), tada će se blokovi komandi istog imena unutar njih kombinovati sa glavnom konfiguracijom, tako da kada se okidač pokrene, init će izvršiti naredbe iz odgovarajućih blokova svih datoteka. Ovo se radi radi praktičnosti kreiranja konfiguracijskih datoteka za nekoliko uređaja, kada glavna konfiguracija sadrži naredbe zajedničke za sve uređaje, a one specifične za svaki uređaj su napisane u zasebnim datotekama.

Najznačajnija od dodatnih konfiguracija nosi naziv initrc.device_name.rc gdje se ime varijable određuje automatski na osnovu sadržaja ro.hardverske datoteke. Ovo je konfiguracijska datoteka specifična za platformu koja sadrži komandne blokove specifične za određeni uređaj. Pored naredbi odgovornih za podešavanje kernela, sadrži i nešto poput ovoga:

mount_all ./fstab.device_name

To znači da bi init sada trebao montirati sve sisteme datoteka koji su navedeni u datoteci ./fstab.device_name, koja ima sljedeću strukturu:

Device_name (particija) mount_point file_system fs_options druge opcije

Obično sadrži uputstva za montiranje sistema datoteka sa internih NAND particija u direktorijume /system (OS), /data (postavke aplikacije) i /cache (keširani podaci). Međutim, blagom modifikacijom ove datoteke, možemo prisiliti init da pokrene sistem sa memorijske kartice. Da biste to učinili, samo podijelite 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čitim uređajima različiti su) i zamijenite ih originalna imena uređaja u fstab datoteci.

Na kraju pokretačkog bloka, najvjerovatnije će naići na default naredbu class_start, koja će vas obavijestiti da tada trebate pokrenuti sve usluge navedene u konfiguraciji koje se odnose na zadanu klasu. Opis usluga počinje direktivom usluge, nakon čega slijedi naziv usluge i naredba koja se mora izvršiti da bi se ona pokrenula. Za razliku od komandi navedenih u blokovima, servisi moraju biti pokrenuti cijelo vrijeme, tako da će tokom cijelog vijeka trajanja pametnog telefona init visiti u pozadini i nadgledati ovo.

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

Četvrti korak. Zygote i App_process

U određenoj fazi učitavanja, init će naići na nešto poput ovog bloka 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 sistema koji je odgovoran za inicijalizaciju, pokretanje sistemskih usluga, pokretanje i zaustavljanje korisničkih aplikacija i mnoge druge zadatke. Zygote se pokreće pomoću male aplikacije /system/bin/app_process, koja je vrlo jasno vidljiva u gornjem dijelu konfiguracije. Zadatak app_proccess je pokrenuti Dalvik virtualnu mašinu, čiji se kod nalazi u /system/lib/libandroid_runtime.so dijeljenoj biblioteci, a zatim pokrenuti Zygote na njoj.

Kada se sve ovo uradi i Zygote ima kontrolu, počinje da gradi vreme izvršavanja Java aplikacije učitavanjem svih Java klasa okvira (trenutno preko 2000 njih). Zatim pokreće system_server, koji uključuje većinu sistemskih usluga visokog nivoa (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 početka i kraja aplikacije za signalizaciju.

Nakon toga, Zygote otvara socket /dev/socket/zygote i odlazi u stanje spavanja, čekajući podatke. U ovom trenutku, prethodno pokrenuti Menadžer aktivnosti šalje namjeru emitiranja Intent.CATEGORY_HOME da pronađe aplikaciju odgovornu za kreiranje radne površine i daje njeno ime Zygoteu preko utičnice. Potonji se, zauzvrat, račva i pokreće aplikaciju na vrhu virtuelna mašina. Voila, imamo radnu površinu na našem ekranu, 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, Activity Manager će je primiti i prenijeti naredbu za pokretanje aplikacije Zygote demonu.

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

Na mnogo načina, Android se veoma razlikuje od drugih operativnih sistema i teško je to odmah shvatiti. Međutim, ako shvatite kako sve funkcionira, otvaraju se jednostavno neograničene mogućnosti. Za razliku od iOS-a i Windows Phone, Googleov operativni sistem ima vrlo fleksibilnu arhitekturu koja vam omogućava 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

U prostranstvu Runeta teško je pronaći konstruktivne i dobro predstavljene informacije o dizajnu Android operativnog sistema. Informacije su uglavnom fragmentirane i nepotpune, nema uvodnog dijela osnovni koncepti, što početnicima otežava razumijevanje i razumijevanje. Sa odsustvom osnovno znanje uređaja i operativnog algoritma Android operativnog sistema, nemoguće je otkloniti greške ili prilagoditi firmver, ili razviti za Android OS. To je ono što me je potaknulo da napišem ovaj članak, u kojem ću pokušati, u uobičajenom i jasnim jezikom, prenijeti “teške” stvari.

Materijal je prvenstveno namijenjen proučavanju običnih korisnika i predstavljen je kao uvodni izlet u svijet Android operativnih sistema. Stoga će ovdje biti predstavljene sažete i površne informacije bez tehničkih dubina i nijansi. Ovaj materijalće biti od koristi svima koji se bave flešovanjem i prilagođavanjem firmvera, razvojem za Android OS i popravkom mobilnih telefona kompjuterski sistemi i prosječnog korisnika, radi boljeg razumijevanja principa rada i mogućnosti svog Androida.

Android interne memorijske particije

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

Bootloader- ovdje je program (bootloader) koji vam omogućava da pokrenete operativni sistem Android, oporavak i druge servisne modove.

Oporavak- kao što ime kaže, instaliran je ovdje inženjerski meni oporavak ili samo oporavak.

Boot- srce Android OS-a, ovdje je kernel, drajveri i postavke za upravljanje procesorom i memorijom.

Sistem- sistemska particija, koja sadrži sve datoteke potrebne za rad Android OS-a, to je kao Windows folder na vašem C:\ disku (u daljem tekstu ćemo ga povezati sa Windows OS-om)

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

Korisnik- ovo je dobro poznata sdcard ili, jednostavnije rečeno, mjesto za korisničke datoteke (Moji dokumenti). Ovdje smo prinuđeni da napravimo digresiju, jer postavljanje ove sekcije ima nekoliko opcija:

  • Particija se ne nalazi u internoj memoriji, već se koristi eksterni disk - najpopularnija opcija. (Sl.1)
  • U uređajima sa velikom ugrađenom memorijom, ovaj odeljak se pojavljuje kao sdcard, ali eksternu karticu memorija se vidi kao sdcard2 ili extsd (mogu postojati i druge opcije imena). Obično se nalazi na uređajima koji koriste Android 3.2. (Sl.2 Opcija 1)
  • Ova opcija je zamijenjena prethodna verzija, zajedno sa Androidom 4.0. Odjeljak Korisnik zamijenjen je medijskim folderom u dijelu Podaci, što nam je omogućilo da koristimo svu memoriju koja je dostupna korisniku za instaliranje programa i pohranjivanje podataka, a ne količinu koju nam je dodijelio proizvođač. Drugim riječima, sdcard i podaci su jedno. (Sl.2 Opcija 2)

Sada kada znamo šta je gdje, hajde da shvatimo zašto je tu i kako nam ove informacije mogu biti korisne.

Počnimo sa Bootloaderom. Ovo je bootloader koji pokreće Android, oporavak itd. Kada pritisnemo dugme za napajanje, pokreće se bootloader, a ako ne dodatne komande(pritisnuti tasteri), počinje učitavanje pokretanja. Ako je pritisnuta kombinacija tastera (svaki uređaj ima svoju), onda se pokreće, u zavisnosti od komande, oporavka, brzog pokretanja ili apx-a. Slika ispod jasno pokazuje šta Bootloader pokreće i kako su sekcije međusobno povezane.

Kao što se vidi sa slike 3, particija za oporavak ne utiče na učitavanje Android OS-a, ali zašto je onda potrebna? Pokušajmo to shvatiti.

Recovery je u suštini mali uslužni program baziran na Linux kernelu i učitava se nezavisno od Androida. Njegova standardna funkcionalnost nije bogata: možete resetirati uređaj na tvorničke postavke ili ažurirati firmver (preuzeto na SD karticu). Ali, zahvaljujući narodnim zanatlijama, imamo modificirani oporavak, putem kojeg možete instalirati modificirani (prilagođeni) firmware, konfigurirati Android, kreirati sigurnosne kopije i još mnogo toga. Prisustvo ili odsustvo oporavka, kao i njegova verzija, ne utiču na performanse Android OS-a (veoma često postavljano pitanje na forumima).

Posebno pažljivi čitaoci su možda primijetili određeni Fastboot na slici 3. Ovo je interfejs za direktan rad sa internim memorijskim particijama pomoću komandne linije. Preko njega možete flešovati oporavak, kernel ili novu verziju firmvera, ili formatirati (obrisati sve informacije) jednu ili drugu particiju.

Pošto govorimo o interfejsima, želim da pričam o još jednom prilično poznatom - adb (android debugbridge). Ovo je takozvani mod za otklanjanje grešaka, a nazvan je tako s razlogom - preko njega možete pratiti rad kako sistema u cjelini, tako i pojedinačnih aplikacija. Ali to nije sve, sa adb help dostupan pun pristup na sistem datoteka 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 grešaka jer... moj cilj je da prenesem opšte informacije, ne detaljan pregled o funkcijama određenog načina rada.

Pošto smo shvatili teoriju, hajde da pokrenemo Android OS.

Pritisnemo dugme za napajanje - pokreće se Bootloader, koji učitava kernel (boot), koji zauzvrat pokreće sistem (sistem), pa, i već učitava programe (podatke) i korisnički prostor (korisnik). (Sl.3)

Sada idemo u korijenski direktorij i pogledamo unutrašnjost samog Android OS-a:

U ovom dijagramu dali smo samo direktorije potrebne za referencu. Zapravo, ima ih mnogo više, a pregled samo jednog sistemskog foldera zahtijevao bi cijeli članak.

I tako, folder sa podacima. Kao što ime govori, to ima neke veze sa podacima, ali kakve? Da, kod skoro svih, ovo uključuje podatke o sinhronizaciji i nalozima, lozinke za wifi pristupne tačke i vpn postavke, i tako dalje. Između ostalog, ovdje možete pronaći foldere za aplikacije, podatke i dalvik-cache - pogledajmo njihovu svrhu:

  • aplikacija - ovdje se instaliraju programi i igre.
  • podaci - ovdje se pohranjuju podaci o aplikaciji, njihova podešavanja, spremanja igara i druge informacije.
  • dalvik-cache - softversko područje keš memorije za Dalvik programi. Dalvik je Java virtuelna mašina, što je osnova za rad programa koji imaju *.apk ekstenziju.
  • Da bi se programi pokrenuli brže, kreira se njihova keš memorija.

Sistemski folder čuva sistemske podatke i sve što je potrebno za rad OS-a. Pogledajmo neke od ovih foldera:

  • aplikacija - ovdje su sistemske aplikacije (SMS, telefon, kalendar, postavke itd.), kao i aplikacije koje je instalirao proizvođač uređaja (brendirani widgeti, žive pozadine itd.).
  • fontovi - sistemski fontovi
  • medij - sadrži standardne melodije zvona, obavijesti, alarme i zvukove interfejsa, kao i animaciju pokretanja (bootanimation)
  • build.prop - Ovaj fajl je skoro prvi koji se spominje u razgovorima i člancima o finom podešavanju sistema. Sadrži ogroman broj postavki, kao što su gustina ekrana, vrijeme kašnjenja senzora blizine, wifi kontrola, naziv uređaja i proizvođač i mnogi drugi parametri.

Root prava superkorisnika u Android OS-u

Kao iu svakom sistemu sličnom Linuxu, u Android operativnom sistemu, pristup sistemskim datotekama i direktorijumima je omogućen s pravima Root superkorisnika. U ovom odeljku odlučili smo da razmotrimo princip rada superkorisničkih prava u Android OS-u, mogućnost uređivanja sistemskih datoteka ili logičkih particija prostora datoteka ako imate Root prava superkorisnika.

— Dobro je znati šta se nalazi u kojoj fascikli, ali da li je moguće nešto učiniti po tom pitanju?

- Da! Ali potrebna su vam prava superkorisnika (root) ili, ako povučemo analogiju sa Windowsom, administratorska prava. U početku, svi Android uređaji dolaze bez root prava. krajnji korisnik, tj. Kada kupujemo uređaj, mi nismo punopravni vlasnici istog. Ovo se radi i u cilju zaštite od malware, i od samog korisnika - uostalom, u nevještim rukama, potpuni pristup sistemu može dovesti do "smrti" operativnog sistema i naknadne potrebe za flešovanjem uređaja.

„Pa, ​​čemu služi ovakva opasna stvar?“- pitate.

Sada ćemo vam reći:

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

Ova lista se može nastaviti još dugo, ali mislim da će ovi primjeri biti dovoljni da dobijete predstavu o mogućnostima i širini primjene root privilegija.

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

- Ne. Vi sami odlučujete da dozvolite primanje ove ili one aplikacije root pristup, ili ne. Za to postoji program koji se zove Superuser ili njegova napredna sestra SuperSU. Bez ovog ili sličnog programa nije moguće koristiti root.

Kao što vidite, Android nije toliko komplikovan operativni sistem za razumijevanje korisnika. Ako imate prethodno iskustvo sa operativnim sistemima sličnim Linuxu, naći ćete mnoge sličnosti sa Android sistemima, a te sličnosti su opravdane. Android sistem je izveden i izgrađen na Linux kernelu. Nadam se da ste nakon čitanja članka naučili nešto novo ili dobili odgovor na pitanje koje vas već duže vrijeme 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. Ali, ipak, važno je znati koji hardver pomaže u funkcionisanju vašeg pametnog telefona.

U ovom članku ćemo razložiti bitne dijelove onoga što je postalo jedan od najvažnijih elektroničkih uređaja na tržištu. Pogledajmo od čega se sastoji pametni telefon i zašto je potrebna ova ili ona komponenta. Danas postoji mnogo različitih modela pametnih telefona, različitih dizajna, sa različite karakteristike, trajanje baterije i tako dalje. Ali ako razumijete hardver pametnog telefona, tada će odabir pravog modela biti mnogo lakši.

1. Displej

Jedna od najočitijih komponenti pametnog telefona je njegov ekran. Sve što vidite na ekranu se obrađuje i kontroliše interno. Trenutno postoje dvije tehnologije proizvodnje displeja:

  • Ekrani od tekućih kristala, proizvedeni su korištenjem IPS ili TFT tehnologije;
  • LED ekrani izrađeni pomoću AMOLED ili Super AMOLED.

Ekran sa tečnim kristalima koristi pozadinsko osvetljenje za proizvodnju slika. 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 je posebna LED dioda. Ovde sam ekran stvara svetle i šarene boje. Prednost Super AMOLED-a u odnosu na IPS je u tome što kada je piksel isključen videćete crnu boju, ne troši bateriju. Stoga su pametni telefoni sa AMOLED ekranom efikasniji za trajanje baterije. Ali AMOLED ekrani skuplji od IPS-a, pa će pametni telefon sa takvim ekranom koštati znatno skuplje.

2. Baterija

Pametni telefoni obično koriste litijum-jonske baterije i mogu, ali i ne moraju biti uklonjive. Zahvaljujući ovoj tehnologiji, ne morate kalibrirati ili testirati bateriju kao kod baterija na bazi nikla. Međutim, ove baterije imaju mnogo vlastitih problema.

3. Sistem-na-čipu (SoC)

SoC ili matična ploča sa procesorom, to je najvažnija komponenta vašeg pametnog telefona. Neki korisnici mogu pomisliti da je to procesor uređaja, ali to je više od toga. SoC uključuje ne samo procesor, već i GPU, LTE modem, kontroler ekrana, bežične adaptere i druge silikonske blokove koji omogućavaju da telefon radi.

Postoje pametni telefoni koji koriste SoC kompanije Qualcomm, MediaTek, Samsung, Krirnove čipove, Apple, ali svi koriste istu arhitekturu - ARM. ARM ne samo da proizvodi procesore, već i licencira njihovu arhitekturu drugim kompanijama, tako da svi mogu koristiti istu tehnologiju za kreiranje modernih i moćnih SoC-a.

Neke kompanije objavljuju vlastite arhitektonske linije koje su kompatibilne s ARM-om i mogu se koristiti u pametnim telefonima. Primjeri uključuju Apple skupove čipova koji koriste Cyclone procesore ili Qualcomm Kryo procesore. SoC je glavne komponente koje čine pametni telefon.

4. Interna i RAM memorija

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

LPDDR4 je efikasniji od LPDDR3, a LPDDR4X je efikasniji i ekonomičniji od oba. Tu je i još efikasnija memorija - LPDDR5.

Što se tiče interne memorije, ovde se koristi fleš memorija 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 memorije manja od navedene. Na primjer, kaže se da je disk kapaciteta 64 GB, ali je dostupno 53-55 GB za snimanje. Ovu memoriju zauzimaju operativni sistem i aplikacije.

5. Modemi

Pošto su pametni telefoni i dalje telefoni, potrebne su im komunikacijske komponente za primanje i upućivanje poziva, slanje tekstualne poruke i konekcije na Internet. Za to se koriste modemi. Svaki proizvođač SoC-a ima svoju marku modema, a to su Qualcomm, Samsung, Huawei i drugi.

Svaki proizvođač pokušava da izbaci najbrži LTE čip. Trenutno je najbrži 9-LTE čip, ali nema smisla uzimati ga ako vaša mobilna mreža ne podržava takve brzine.

6. Kamera

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

  • Senzor- detektuje svetlost;
  • Objektiv- koncentriše sliku;
  • Procesor slike.

Broj megapiksela kamere pametnog telefona je i dalje veoma važan kriterijum, ali sada je mnogo manje bitan. Sada je glavni ograničavajući faktor senzor kamere, kao i njena osjetljivost kada svjetlost prođe kroz nju.

Senzor se može ponašati drugačije na svakom pametnom telefonu, tako da će fotografija ili video imati drugačiji kontrast, nijanse i zasićenost u odnosu na druge pametne telefone. Budući da pametni telefoni imaju male veličine senzora, oni imaju tendenciju da rade loše u uslovima slabog osvetljenja.

7. Senzori

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

  • Akcelerometar- koriste aplikacije za određivanje orijentacije uređaja i njegovih kretanja. Na primjer, omogućava vam da koristite protresanje pametnog telefona za prebacivanje muzike;
  • Žiroskop- Radi s akcelerometrom za otkrivanje rotacije vašeg telefona. Korisno za trkačke igre;
  • Digitalni kompas- pomaže u pronalaženju sjevera za normalnu orijentaciju na kartama;
  • Svetlosni senzor- Ovaj senzor vam omogućava da automatski podesite svjetlinu ekrana u zavisnosti od ambijentalnog svjetla i pomaže produžiti vijek trajanja baterije.
  • Senzor blizine- Tokom poziva, ako se uređaj približi vašem uhu, ovaj senzor automatski zaključava ekran kako bi spriječio neželjene dodire.

Sve su to bili osnovni elementi pametnog telefona razni modeli Mogu postojati i drugi senzori, na primjer senzor pulsa, tlaka i temperature, ali su mnogo rjeđi.

zaključci

Pogledali 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 kupovinu upoređujući karakteristike različitih komponenti. Na taj način ćete odabrati najbolji uređaj koji će u potpunosti zadovoljiti vaše potrebe.

Jeste li se ikada zapitali kako funkcioniraju fastboot ili ADB? Ili zašto je gotovo nemoguće pretvoriti pametni telefon koji koristi Android u ciglu? Ili možda već dugo želite da znate gde leži magija Xposed frameworka i zašto su potrebne skripte za pokretanje /system/etc/init.d? Šta je sa konzolom za oporavak? Da li je ovo dio Androida ili stvar za sebe i zašto redovni oporavak nije pogodan za instaliranje firmvera 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 sistema razumijevanjem principa njihovog rada. U nekim slučajevima je to teško izvodljivo, jer sistemski kod može biti zatvoren, ali u slučaju Androida možemo proučiti cijeli sistem iznutra i izvana. U ovom članku neću govoriti o svim nijansama Androida i fokusirat ću se samo na to kako se OS pokreće i koji se događaji odvijaju u intervalu između pritiska na tipku za napajanje i izgleda radne površine.

Usput ću objasniti šta možemo promijeniti u ovom lancu događaja i kako programeri prilagođenog firmvera koriste ove mogućnosti za implementaciju takvih stvari kao što su podešavanje parametara OS-a, proširenje prostora za pohranu aplikacija, zamjena povezivanja, razna prilagođavanja i još mnogo toga. Sve ove informacije mogu se koristiti za kreiranje vlastitog firmvera i implementaciju raznih hakova i modifikacija.

Prvi korak. ABOOT i tabela particija

Sve počinje sa primarnim bootloaderom. Nakon uključivanja napajanja, sistem izvršava kod pokretača pohranjen u trajnoj memoriji uređaja. Zatim prenosi kontrolu na aboot bootloader sa ugrađenom podrškom za fastboot protokol, ali proizvođač mobilnog čipa ili pametnog telefona/tableta ima pravo izabrati bilo koji drugi bootloader po svom izboru. Na primjer, Rockchip koristi vlastiti bootloader koji nije kompatibilan sa brzim pokretanjem i zahtijeva vlasničke alate za flešovanje i upravljanje.

Protokol za brzo pokretanje je, zauzvrat, sistem za upravljanje bootloaderom sa računara, koji vam omogućava da izvršite radnje kao što su otključavanje bootloadera, flešovanje novog kernela i oporavak, instaliranje firmvera i mnoge druge. Razlog postojanja brzog pokretanja je mogućnost da se pametni telefon vrati u prvobitno stanje u situaciji kada sva druga sredstva ne uspiju. Fastboot će ostati na mjestu čak i ako, kao rezultat eksperimenata, izbrišete sve NAND memorijske particije koje sadrže Android i oporavak sa svog pametnog telefona.

Nakon što je primio kontrolu, aboot provjerava tabelu particija i prenosi kontrolu na kernel fleširan u particiju pod nazivom boot, nakon čega kernel izvlači 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 uslovno potrebnih sekcija:

  • 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;
  • sistem - sadrži Android, u modernim uređajima veličina je najmanje 1 GB;
  • keš memorija - dizajnirana za skladištenje keširanih podataka, takođe se koristi za čuvanje firmvera tokom 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 je dodijeljen njemu;
  • misc - sadrži oznaku koja određuje u kom režimu se sistem treba pokrenuti: Android ili oporavak.
Osim njih, mogu postojati i drugi odjeljci, ali opća oznaka se određuje u fazi dizajna pametnog telefona i, u slučaju ponovnog pokretanja, ušiva se u kod pokretača. To znači da: 1) tabela particija ne može biti ubijena, jer se uvijek može vratiti pomoću komande fastboot oem format; 2) da biste promijenili tabelu particija, morat ćete otključati i ponovo promjeniti bootloader s novim parametrima. Međutim, postoje izuzeci od ovog pravila. Na primjer, bootloader istog Rockchipa pohranjuje informacije o particijama u prvom bloku NAND memorije, tako da flešovanje pokretača nije potrebno da bi se to promijenilo.

Dio koda pokretačkog programa koji definira particijsku tablicu


Posebno je zanimljiv odjeljak za ostalo. Postoji pretpostavka da je prvobitno kreiran za pohranjivanje različitih postavki neovisno o glavnom sistemu, ali trenutno se koristi samo u jednu svrhu: da ukaže pokretaču s koje particije treba učitati sistem - pokretanje ili oporavak. Ovu funkciju, posebno, koristi aplikacija ROM Manager za automatsko ponovno pokretanje sistema u oporavak uz automatsku instalaciju firmvera. Na njegovoj osnovi je izgrađen mehanizam za dvostruko pokretanje Ubuntu Touch, koji pokreće Ubuntu bootloader u oporavak i omogućava vam da kontrolišete koji sistem da se pokrene sledeći put. Izbrisao razno particiju - Android se učitava, popunio je podacima - učitava oporavak... odnosno Ubuntu Touch.

Drugi korak. Boot section

Ako odjeljak misc nema oznaku za pokretanje za oporavak, aboot prenosi kontrolu na kod koji se nalazi u dijelu za pokretanje. Ovo nije ništa drugo do Linux kernel; nalazi se na početku odeljka, a odmah zatim sledi slika RAM diska upakovana pomoću cpio i gzip arhivatora, koja sadrži direktorijume neophodne za rad Androida, sistem za inicijalizaciju i druge alate. Ne postoji sistem datoteka na particiji za pokretanje; kernel i RAM disk jednostavno slijede jedan za drugim. Sadržaj RAM diska je:

  • podaci - direktorij za montiranje istoimene particije;
  • dev - fajlovi uređaja;
  • proc - procfs je montiran ovdje;
  • res - set slika za punjač (vidi dolje);
  • sbin - skup uslužnih programa i demona (adbd, na primjer);
  • sys - sysfs je montiran ovdje;
  • sistem - direktorij za montiranje sistemske particije;
  • punjač - aplikacija za prikaz procesa punjenja;
  • build.prop - postavke sistema;
  • init - sistem inicijalizacije;
  • init.rc - postavke sistema za inicijalizaciju;
  • ueventd.rc - postavke demona uventd uključene u init.
Ovo je, da tako kažemo, kostur sistema: skup direktorijuma za povezivanje sistema datoteka sa NAND memorijskih particija i sistem za inicijalizaciju koji će obaviti ostatak posla oko pokretanja sistema. Centralni element ovdje je init aplikacija i njena init.rc konfiguracija, o kojoj ću detaljnije govoriti kasnije. U međuvremenu, skrećem vam pažnju na fajlove punjača i ueventd.rc, kao i direktorijume sbin, proc i sys.

Datoteka punjača je mala aplikacija čiji je jedini zadatak da prikaže ikonu baterije. Nema nikakve veze sa Androidom i koristi se kada je uređaj priključen na punjač u isključenom stanju. U ovom slučaju, Android se ne učitava, a sistem 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 običnim PNG datotekama unutar res direktorija.

Datoteka ueventd.rc je konfiguracija koja određuje koje datoteke uređaja u sys direktoriju treba kreirati tokom pokretanja sistema. U sistemima baziranim na Linux kernelu, pristup hardveru se obavlja preko posebnih datoteka unutar dev direktorija, a za njihovo kreiranje u Androidu odgovoran je demon ueventd, koji je dio init. U normalnoj situaciji radi u automatskom režimu, prihvata komande za kreiranje fajlova iz kernela, ali neke datoteke treba kreirati nezavisno. Oni su navedeni u ueventd.rc.

Sbin direktorij u Androidu obično ne sadrži ništa osim adbd-a, odnosno ADB demona, koji je odgovoran za otklanjanje grešaka u sistemu sa računara. Pokreće se u ranoj fazi pokretanja OS-a i omogućava vam da identifikujete moguće probleme tokom faze inicijalizacije OS-a. U prilagođenim firmverima, možete pronaći gomilu drugih datoteka u ovom direktoriju, na primjer mke2fs, što može biti potrebno ako particije treba preformatirati u ext3/4. Također, modderi često postavljaju BusyBox tamo, pomoću kojeg možete pozvati stotine Linux komandi.

Proc direktorij je standardan za Linux; u sljedećim fazama pokretanja, init će se povezati s njim procfs, virtuelni sistem datoteka koji omogućava pristup informacijama o svim procesima na sistemu. Sistem će povezati sysfs sa sys direktorijumom, š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 dizajnirana je za pohranjivanje Android postavki niskog nivoa. Kasnije će sistem resetirati ove postavke i prepisati ih vrijednostima iz trenutno nedostupne datoteke system/build.prop.

Root dio OUYA TV set-top box


Drugi korak, alternativa. Sekcija za oporavak

Ako je zastavica za pokretanje sistema za oporavak postavljena u odjeljku razno ili korisnik uključi pametni telefon sa pritisnutim tipkom za smanjivanje jačine zvuka, 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 raspakuje u memoriju i postaje korijen sistema datoteka. Međutim, sadržaj RAM diska je ovdje nešto drugačiji.

Za razliku od particije za pokretanje, koja djeluje kao prijelazna veza između različitih faza učitavanja OS-a, particija za oporavak je potpuno samodovoljna i sadrži minijaturni operativni sistem koji ni na koji način nije povezan s Androidom. Recovery ima svoju jezgru, svoj skup aplikacija (naredbi) i vlastiti interfejs koji omogućava korisniku da aktivira servisne funkcije.

U standardnom (stock) oporavku obično postoje samo tri takve funkcije: instalacija firmvera potpisanog ključem proizvođača pametnog telefona, brisanje i ponovno pokretanje. Modificirani oporavak trećih strana, kao što su ClockworkMod i TWRP, imaju mnogo više funkcija. Oni mogu formatirati sisteme datoteka, instalirati firmver potpisan bilo kojim ključevima (čitaj: prilagođeni), montirati sistem datoteka na druge particije (za potrebe otklanjanja grešaka u OS) i uključiti podršku za skripte, koja vam omogućava automatizaciju procesa firmvera i mnoge druge funkcije.

Koristeći skripte, na primjer, možete osigurati da nakon pokretanja, oporavak automatski pronađe potrebni firmver na memorijskoj kartici, instalira ih i ponovo pokrene na Android. Ovu funkciju koriste ROM Manager, alati za automatsko flešerovanje, kao i mehanizam za automatsko ažuriranje za CyanogenMod i drugi firmver.

Prilagođeni oporavak također podržava skripte za izradu sigurnosnih kopija koje se nalaze u direktoriju /system/addon.d/. Prije flešovanja, oporavak provjerava da li postoje skripte i izvršava ih prije flešovanja firmvera. Zahvaljujući takvim skriptama, gapps ne nestaje nakon instaliranja nove verzije firmvera.

Treći korak. Inicijalizacija

Dakle, nakon što je dobio kontrolu, kernel povezuje RAM disk i, nakon inicijalizacije svih svojih podsistema i drajvera, pokreće init proces, koji započinje inicijalizaciju Androida. Kao što sam već rekao, init ima konfiguracionu datoteku init.rc, iz koje proces uči šta tačno mora da uradi da bi pokrenuo sistem. U modernim pametnim telefonima, ova konfiguracija ima impresivnu dužinu od nekoliko stotina linija, a također je opremljena prikolicom od nekoliko podređenih konfiguracija koje su povezane s glavnom pomoću import direktive. Međutim, njegov format je prilično jednostavan i u suštini je skup naredbi podijeljenih u blokove.

Svaki blok definira fazu učitavanja ili, rečeno Android programerskim jezikom, akciju. Blokovi su odvojeni jedan od drugog direktivom on nakon koje slijedi naziv radnje, kao što je na početku pokretanja ili na post-fs. Blok naredbi će se izvršiti samo ako se aktivira istoimeni okidač. Dok se pokreće, init će aktivirati okidače za rano pokretanje, init, early-fs, fs, post-fs, rano pokretanje i pokretanje, čime će pokrenuti odgovarajuće komandne blokove.

Dio init.rc konfiguracije iz CyanogenMod-a


Ako konfiguraciona datoteka povuče još nekoliko konfiguracija navedenih na početku (a to je skoro uvek slučaj), tada će se blokovi komandi istog imena unutar njih kombinovati sa glavnom konfiguracijom, tako da kada se okidač pokrene, init će izvršiti naredbe iz odgovarajućih blokova svih datoteka. Ovo se radi radi praktičnosti kreiranja konfiguracijskih datoteka za nekoliko uređaja, kada glavna konfiguracija sadrži naredbe zajedničke za sve uređaje, a one specifične za svaki uređaj su napisane u zasebnim datotekama.

Najznačajnija od dodatnih konfiguracija nosi naziv initrc.device_name.rc, gdje se ime uređaja određuje automatski na osnovu sadržaja ro.hardware sistemske varijable. Ovo je konfiguracijska datoteka specifična za platformu koja sadrži komandne blokove specifične za uređaj. Pored naredbi odgovornih za podešavanje kernela, sadrži i nešto poput ovoga:

Mount_all ./fstab.device_name

To znači da bi init sada trebao montirati sve sisteme datoteka koji su navedeni u datoteci ./fstab.device_name, koja ima sljedeću strukturu:

Device_name (particija) mount_point file_system fs_options druge opcije

Obično sadrži uputstva za montiranje sistema datoteka sa internih NAND particija u direktorijume /system (OS), /data (postavke aplikacije) i /cache (keširani podaci). Međutim, blagom modifikacijom ove datoteke, možemo prisiliti init da pokrene sistem sa memorijske kartice. Da biste to učinili, samo podijelite memorijsku karticu na tri 4 dijela: 1 GB / ext4, 2 GB / ext4, 1 GB / ext4 i preostali prostor fat32. Zatim morate odrediti nazive particija memorijske kartice u /dev direktoriju (razlikuju se za različite uređaje) i zamijeniti ih originalnim imenima uređaja u fstab datoteci.

Tipičan sadržaj fstab datoteke


Na kraju pokretačkog bloka, najvjerovatnije će naići na default naredbu class_start, koja će vas obavijestiti da tada trebate pokrenuti sve usluge navedene u konfiguraciji koje se odnose na zadanu klasu. Opis usluga počinje direktivom usluge, nakon čega slijedi naziv usluge i naredba koja se mora izvršiti da bi se ona pokrenula. Za razliku od komandi navedenih u blokovima, servisi moraju biti pokrenuti cijelo vrijeme, tako da će tokom cijelog vijeka trajanja pametnog telefona init visiti u pozadini i nadgledati ovo.

Savremeni Android uključuje desetine usluga, ali dva od njih imaju poseban status i određuju cijeli životni ciklus sistema.

Četvrti korak. Zygote i app_process

U određenoj fazi učitavanja, init će naići na nešto poput ovog bloka 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 sistema koji je odgovoran za inicijalizaciju, pokretanje sistemskih usluga, pokretanje i zaustavljanje korisničkih aplikacija i mnoge druge zadatke. Zygote se pokreće pomoću male aplikacije /system/bin/app_process, koja je vrlo jasno vidljiva u gornjem dijelu konfiguracije. Zadatak app_proccess je pokrenuti Dalvik virtualnu mašinu, čiji se kod nalazi u /system/lib/libandroid_runtime.so dijeljenoj biblioteci, a zatim pokrenuti Zygote na njoj.

Kada se sve ovo uradi i Zygote ima kontrolu, počinje da gradi vreme izvršavanja Java aplikacije učitavanjem svih Java klasa okvira (trenutno preko 2000 njih). Zatim pokreće system_server, koji uključuje većinu sistemskih usluga visokog nivoa (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 početka i kraja aplikacije za signalizaciju.

Nakon toga, Zygote otvara socket /dev/socket/zygote i odlazi u stanje spavanja, čekajući podatke. U ovom trenutku, prethodno pokrenuti Menadžer aktivnosti šalje namjeru emitiranja Intent.CATEGORY_HOME da pronađe aplikaciju odgovornu za kreiranje radne površine i daje njeno ime Zygoteu preko utičnice. Potonji se, zauzvrat, račva i pokreće aplikaciju na vrhu virtuelne mašine. Voila, imamo radnu površinu na našem ekranu, 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, Activity Manager će je primiti i poslati naredbu za pokretanje aplikacije Zygote demonu

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

Sistemske usluge i niti kernela


zaključci

Na mnogo načina, Android se veoma razlikuje od drugih operativnih sistema i teško je to odmah shvatiti. Međutim, ako shvatite kako sve funkcionira, mogućnosti su jednostavno beskrajne. Za razliku od iOS-a i Windows Phone-a, Googleov operativni sistem ima vrlo fleksibilnu arhitekturu koja vam omogućava da ozbiljno promijenite njegovo ponašanje bez potrebe za pisanjem koda. U većini slučajeva dovoljno je ispraviti potrebne konfiguracije i skripte.

Oni koji već dugo koriste iPhone, znaju kako su radili prvi. iOS verzije. U stvari, to je bio operativni sistem sa jednim zadatkom koji vam je omogućavao da radite u pozadini ili da prekidate rad trenutnu aplikaciju samo unapred instalirane aplikacije: čitate knjigu, zovu vas - čitač knjiga je minimiziran, a na ekranu se pojavljuje prozor za poziv. I ovdje obrnuti rad nemoguće: čitač knjiga ne samo da ne može prekinuti rad drugih aplikacija, već će i biti ubijen odmah nakon što se minimizira.

Poenta takvog sistema je, naravno, ušteda procesora, RAM-a i baterije. Zahvaljujući njoj (ali ne samo) iPhone je mogao brzo da radi u uslovima ograničenih resursa i bio je veoma pažljiv sa baterijom.

Kako funkcioniše operativni sistem 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 pretraživač, unosite adresu i, dok se stranica učitava, pokrećete svoj email klijent i čitate pisma. Sve je isto kao i na desktopu, sa izuzetkom da ne morate da brinete o zatvaranju aplikacija, sistem će to uraditi sam kada je operativan memorija će učiniti pri kraju, ili neće biti dovoljno za smještaj aplikacije koja se pokreće (naravno, prvo će se koristiti rijetko korištene aplikacije). Ovaj mehanizam se zove lowmemorykiller.

Uz root prava, lowmemorykiller postavke se mogu prilagoditi direktno ili pomoću posebnih aplikacija

Važan element multitasking sistema bile su usluge. Ovo su posebne komponente aplikacija koje mogu raditi u pozadini u apsolutno svim uvjetima: uključen ili isključen ekran, aplikacija minimizirana ili raspoređeno, usluge nije ni briga da li radi roditeljska aplikacija uopšte. Jednostavno je rekao: "Hej Android, trebaju mi ​​resursi procesora, želim da izvršim neke kalkulacije," i dobio je te resurse. U Android terminologiji, takav zahtjev sistemu se zove wakelock(tačnije - wakelock procesora).

Međutim, podrška ovako moćnom i korisnom alatu odigrala je okrutnu šalu na Googleu. Pojavio se ogroman broj aplikacija koje su kreirale usluge za svako kihanje, stalno obavljale neku vrstu posla i nisu dozvoljavale pametnom telefonu da spava. Nakon što je instalirao stotinu aplikacija na pametni telefon, korisnik je dobio nekoliko desetina usluga, od kojih je svaka povremeno nešto radila (ažuriranje Twitter feed-a dok telefon spava je toliko važno).

Stvari su bile toliko loše da kineski proizvođači, nisu opterećeni zadatkom održavanja kompatibilnosti sa originalni Android(ovo je potrebno ako želite da instalirate na svoj Igrajte pametne telefone Store), jednostavno su onemogućili mehanizme održavanja životnog ciklusa usluge za nesistemske aplikacije u svojim pametnim telefonima.

Napredni korisnici su krenuli drugim putem: dobili su root prava i instalirali Greenify aplikaciju, koja im je omogućila da zamrznu usluge odabranih aplikacija kako ih niko ne bi probudio. Postojale su i radikalnije opcije, na primjer, rušenje svih softvera koje koristite manje od jednom dnevno.

Sam Google je također poduzeo neke mjere u borbi protiv toksičnih usluga. Veliki korak u tom pravcu napravljen je u Androidu 4.4, koji je uveo inteligentni mehanizam koji je određivao da li servis radi previše vremena i koristi li previše CPU-a, i, ako jeste, prikovao ga na mjesto i spriječio njegovo pokretanje. Čak i na površan pogled, ova verzija sistema imala je vek trajanja baterije primetno duže od prethodnih.

U Androidu 6.0, Google je otišao još dalje i opremio ga mehanizmom Doze, koji ga je nakon određenog vremena neaktivnosti pametnog telefona (oko sat vremena) prebacio na specijal režim uštede energije. Jedna od karakteristika ovog režima je zabrana wakelocka, odnosno, ni aplikacije ni servisi jednostavno ne mogu probuditi pametni telefon da obavi bilo kakav posao. Na oko, Android 6.0 nije duže živio, pa je nepoznato da li je ovaj mehanizam uopšte radio.


Doze radna vaga

I konačno, u Androidu 8.0 Google je napravio radikalan korak - zabranio je rad pozadinske usluge. Ali sa dva izuzetka:

Aplikacija u nekim slučajevima, na primjer kada je na ekranu, može pokrenuti usluge, ali će ih Android ubiti nakon što aplikacija pređe u stanje mirovanja.
Usluge vidljive korisniku su i dalje dozvoljene. Ovo je tzv usluga u prvom planu, usluga koja je vidljiva na tabli sa obavještenjima i ima ikonu u statusnoj traci.

Čini se da jesu, usluge su zle, ali šta je sa aplikacijama poput protiv krađe, koje bi trebale raditi neprimjetno u pozadini? Ili isti email klijent? Zbog potrebe povremenog provjeravanja e-pošte, treba li da visi na traci s obavijestima?

Ne baš. Google je krenuo ka zabrani servisa od verzije 5.0, gdje je tzv JobScheduler. Ovo je poseban podsistem koji omogućava aplikacijama da zatraže od Androida da izvrši ovaj ili onaj posao u tom i tom trenutku ili kada dođe do tog i takvog događaja (povezivanje na Internet, na primjer). I da, JobScheduler je vrlo sličan sličnoj funkciji iz iOS-a.

Binder

Suprotno popularnom vjerovanju, Android je koristio sandboxove za izolaciju aplikacija od svojih najranijih verzija. I implementirane su na vrlo zanimljiv način. Svaka aplikacija je pokrenuta kao zasebna Korisnik Linuxa i stoga je imao pristup samo svom direktoriju unutar /data/data .

Aplikacije mogu komunicirati jedna s drugom i sa operativnim sistemom samo preko IPC mehanizma Binder, koji je zahtijevao ovlaštenje za obavljanje određene radnje. Isti mehanizam je korišten u nekoliko drugih namjena: uz njegovu pomoć sistem je obavještavao aplikacije o sistemskim događajima, kao što su dolazni poziv, SMS, naplata itd. Aplikacije su primale poruke i mogle su odgovoriti na njih.


Binder pokreće drajver u Linux kernelu i Service Manager

Ova funkcija je dala Androidu veoma bogate mogućnosti automatizacije, za koje znamo zahvaljujući aplikacijama kao što su Tasker, Automate ili Locale. Sve ove aplikacije su dostupne za Android 8, osim što su neke opasne funkcije, kao što je uključivanje/isključivanje načina rada u avionu, sada zabranjene za korištenje redovnim aplikacijama.

Sistem upozorenja se zasniva na namjere, poseban mehanizam implementiran na vrhu Bindera i dizajniran za razmjenu informacija između aplikacija (ili OS i aplikacija), kao i za pokretanje komponenti aplikacije. Koristeći intente, možete obavijestiti aplikacije o događajima, tražiti od sistema da otvori aplikaciju za obradu određenih vrsta podataka (na primjer, za otvaranje određena stranica u pretraživaču je dovoljno poslati namjeru emitiranja sa vezom na stranicu, a na nju će odgovoriti sve aplikacije koje mogu prikazati web stranice, ili samo zadani pretraživač) ili jednostavno pokrenuti komponentu određene aplikacije. Na primjer, aplikacije u Androidu se ne pokreću direktno, već pomoću namjera.

Nažalost, kao i usluge, namjere su postale problem za Google i Android korisnike. Činjenica je da namjere emitiranja, koje se koriste za obavještavanje aplikacija o događajima, odmah dolaze do svih aplikacija koje su izjavile da su u mogućnosti odgovoriti na njih. A da bi aplikacija odgovorila na namjeru, mora biti pokrenuta. Slika ispada ovako: na pametnom telefonu postoji dvadeset aplikacija koje mogu odgovoriti na namjeru android.net.conn.CONNECTIVITY_CHANGE, a svaki put kada se povežete na mrežu i isključite se s nje, sistem pokreće ove aplikacije kako bi one mogle odgovori na namjeru. Zamislite samo kako to utiče na potrošnju energije.

Google je ponovo ispravio ovaj nesporazum u Androidu 8.0. Aplikacije sada mogu registrovati rukovaoce namjerama emitiranja samo dok su pokrenute (sa manjim izuzecima).

Google usluge

Google voli da se razmeće činjenicom da je Android operativni sistem otvorenog koda. Ovo, naravno, nije sasvim tačno. s jedne strane, Android kod je zaista otvoren, i zato imamo pristup tolikom broju različitih prilagođenih firmvera. S druge strane, izgradnjom Androida iz zvaničnih izvora, dobićete sistem bez nekoliko važnih komponenti: 1) odvojene drajvere, čiji izvorni kodovi su skriveni od strane proizvođača kao poslovna tajna, 2) Google usluge, koji su prije svega potrebni za pristup vašem računu, pokrenite Google Play i sigurnosna kopija u oblaku.

Google Mobile Services je također odgovoran za mnoge druge stvari, uključujući podršku za push obavještenja, instant aplikacije, google mape, pristup kalendaru, određivanje lokacije pomoću tornjeva i Wi-Fi rutera, mehanizam Smart Lock, što vam omogućava da otključate svoj uređaj u zavisnosti od određenih uslova.

IN moderne verzije Android usluge Google je preuzeo toliki dio posla da se ispostavilo da je život bez njih moguć, ali vrlo problematičan. A nisu ni zabavne: minimalna verzija GApps paketa (koji sadrži samo Google i Google Play servise) teži više od 120 MB, a sami servisi poznati su po ljubavi prema RAM-u i bateriji. I oni su takođe zatvoreni, odnosno samo Google sam zna šta mogu.


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

Zbog toga je rođen microG projekt, čiji je zadatak rekreirati najvažniju funkcionalnost Googleovih usluga u otvorenom kodu. Već sada microG vam omogućava da pristupite svom nalogu, aktivirate push notifikacije, pristup Google mapama i određivanje lokacije sa tornjeva mobilne telefonije. I sve to sa veličinom od četiri mega i skoro potpuno odsustvo zahtjevi za RAM-om i trajanjem baterije.

Projekat ima sopstvenu verziju LineageOS firmvera, koji iz kutije uključuje microG i sve modifikacije potrebne za njegov rad.

Linux kernel i vrijeme izvođenja

Android je baziran na Linux kernelu. Kernel upravlja resursima pametnog telefona, uključujući pristup hardveru, upravljanje RAM-om i trajnom memorijom, pokretanje, zaustavljanje i prijenos procesa između procesorskih jezgri i mnoge druge zadatke. Kao i svaki drugi OS, kernel je srce Androida, centralni dio bez kojeg će se sve ostalo raspasti.


Layer Cake Android

Prisutnost Linux kernela, kao i djelomično POSIX runtime okruženje (prvenstveno bionička biblioteka, zasnovana na implementaciji standardna biblioteka C jezik iz OpenBSD) čini Android kompatibilnim sa Linux aplikacijama. Na primjer, wpa_supplicant sistem autentikacije koji se koristi za povezivanje na Wi-Fi mreže je ovdje potpuno isti kao u bilo koju distribuciju Linuxa. IN ranije verzije Android je koristio standardni Linux Bluetooth stack nazvan bluez (kasnije zamijenjen Qualcommovom implementacijom pod nazivom Bluedroid). Čak ima i svoju konzolu sa skupom standardnih UNIX/Linux komandi, implementiranih u Toybox set, originalno kreiran za ugrađene Linux sisteme.

Većina konzolnih aplikacija napisanih za Linux može se prenijeti na Android jednostavnom ponovnom kompilacijom pomoću unakrsnog kompajlera (glavna stvar je koristiti statičku kompilaciju kako biste izbjegli sukobe u bibliotekama), a ako imate root prava, možete pokrenuti punopravni . Jedno upozorenje je da mu se može pristupiti samo preko konzole ili pomoću VNC veze. Tu je i Maru OS projekt koji vam omogućava da koristite svoj pametni telefon kao Debian-bazirano računalo kada ste povezani s monitorom. Obećava istu funkciju kada povežete svoje pametne telefone na monitor pomoću DeX priključne stanice.


Stari dobri mc radi na Androidu

Počevši od verzije 4.4, Android može koristiti SELinux sistem prisilne kontrole pristupa za zaštitu od hakovanja i preuzimanja root prava. SELinux je razvila Američka agencija za nacionalnu sigurnost i, ne ulazeći u detalje, omogućava vam da ograničite mogućnosti aplikacija (uključujući komponente sistema niskog nivoa). I ne govorimo o ovlastima koje korisnik daje aplikacijama, već o stvarima kao što su sistemski pozivi i pristup određenim datotekama, uprkos standardnim UNIX pravima pristupa.

Niz Stagefright ranjivosti koje su pogodile Android prije nekoliko godina omogućile su preuzimanje kontrole nad uređajem jednostavnim prisiljavanjem korisnika da otvori dolazni MMS ili posebnu datoteku u pretraživaču. Problem je bio u multimedijskom okviru Stagefright, koji je sadržavao nekoliko ranjivosti prekoračenja bafera. Prilikom otvaranja posebno pripremljene multimedijalne datoteke, eksploatacija je iskoristila ranjivost i pokrenula kod na uređaju u ime Stagefright-a (koji je radio pod root-om).

Google je uspješno zatvorio sve ove greške, a također je radio na modularizaciji framework koda i pokretanju u posebnim SELinux domenima. Ovi domeni sprečavaju komponente za obradu medija da koriste većinu Linux sistemskih poziva, uključujući sistemske pozive execve grupe koji su bili uključeni u pokretanje zlonamjernog koda.

Danas se SELinux koristi za zaštitu skoro svih komponente sistema Android. I to je izazvalo naglo smanjenje broja grešaka pronađenih u Androidu. Ali to je dovelo do toga da su se hakeri fokusirali na kernel, odnosno one vrlo zatvorene drajvere, čiji kod niko nije proveravao i čija sigurnost nije zagarantovana (a on je, kako se ispostavilo, u žalosnom stanju).

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

Najbolji članci na ovu temu