Информативна и практичен поглед върху архитектурата на андроид

Как Android

Научете повече за скритите възможности на софтуерни системи може да бъде, да знаеш как те работят. В някои случаи, това го прави трудно, тъй като кодът на системата може да бъде затворен, но в случая с Android, ние можем да проучи цялата система отвътре и отвън. В тази статия няма да говоря за всички нюанси на Android и ще се съсредоточи само върху това как стартирането на операционната система и на предстоящите събития, които се провеждат в интервала между натискането на бутона за захранване и външния вид на работния плот.

По пътя, аз отивам да се обясни, че можем да се промени в тази верига от събития и как обичай фърмуер програмисти използват тези функции да изпълнява такива неща като настройка на операционната система параметри, разширяване на пространството за съхранение на приложения, размените свързването на различни персонализации и много други. Цялата тази информация може да се използва за създаване на собствени фърмуер и прилагане на различни хакове и модификации.

Първа стъпка. ABOOT и таблицата на дяловете

След получаване на управлението, контрола aboot таблицата на дяловете и предава управлението на ядрото, зашит на секцията с името не се стартира, след което ядката извлича памет RAM-образа на една и съща секция и започва товарене или Android, или конзолата за възстановяване. NAND-памет Android-устройства се разделят на шест секции условно необходими:

  • зареждане - съдържа ядрото и RAM-диск, обикновено е с площ от около 16 MB;
  • възстановяване - конзолата за възстановяване се състои от един основен набор от конзолни приложения, както и размера на настройка на файлове от 16 MB;
  • система - включва Android, в съвременната devaysakh е с размер от най-малко 1 GB;
  • кеш - предназначен за съхраняване на кеширани данни също се използва за съхраняване на фърмуера в OTA надстройване и следователно е с размер, подобен на размера на системния дял;
  • UserData - съдържа настройки, приложения и потребителски данни, той отстранява всички останали пространство NAND-памет;
  • Разни - съдържа флаг, който определя какъв режим на системата е да се зареди: Android или възстановяване.

Информативна и практичен поглед върху архитектурата на андроид
Част от кода на буутлоудъра, който определя таблицата на дяловете

Особено интересен е сечение на Misc. Има спекулации, че тя е била първоначално предназначена за съхраняване на различни настройки независимо от основната система, но в момента се използва само за една цел: да се уточни зареждане на ОС, от който да превозва системния дял - багажника или възстановяване. Тази възможност, по-специално, използва приложението ROM Мениджър за автоматично рестартиране на системата в процес на възстановяване с автоматичното инсталиране на фърмуера. На същото основание го построили механизъм за Ubuntu Touch две операционни системи Ubuntu зареждане на ОС, която шие в възстановяване и ви позволява да контролирате коя система да се зареди следващия път. Изтрито раздел Други - зареден Android, изпълнена с данни - зареден възстановяване ... това е, Ubuntu Touch.

Втора стъпка. дял за зареждане

Ако частта от разни не си струва да свали флага на възстановяването, aboot контрол трансфери код се намира под ботуша. Това не е нищо подобно на ядрото на Линукс; тя е в началото на раздела, и веднага последван от опаковани с помощта на архиватор GZIP и CPIO изображение RAM-диск, съдържащ необходимите директории за Android, инициализация първоначален система и други инструменти. Не файловата система на зареждащия дял не е налице, ядрото и RAM-диск просто следвайте една от друга. Съдържанието на RAM-диск е:

  • данни - за монтиране на едноименната секция;
  • Дев - файловете за устройства;
  • Proc - тук монтирани procfs;
  • ВЕИ - набор от изображения за зарядното устройство (виж по-долу).
  • sbin - набор от помощни средства и демони (adbd, например);
  • Сис - тук монтирани sysfs;
  • система - за монтиране на системния дял;
  • зарядно - приложение за показване на процеса на зареждане;
  • build.prop - системни настройки;
  • първоначален - инициализиране на системата
  • init.rc - определяне на инициализиране на системата
  • ueventd.rc - създаване демон uventd, която е част от първоначален.

Това е, така да се каже, скелета на системата: набор от директории за свързване на файловата система на дяла за NAND-памет и инициализиране на системата, която ще се занимава с останалата част от работата по стартиране на системата. Централният елемент тук - първоначален заявлението и неговата конфигурация init.rc, от които всички подробности ще ти обясня по-късно. В същото време, аз искам да обърна внимание на файловете и зарядно ueventd.rc и sbin директории, Proc и SYS.

зарядно образ - е малко приложение, чиято единствена задача - да се покаже иконата на батерията. Той няма нищо общо с Android и се използва, когато устройството е свързано към зарядното устройство на разстояние. В този случай, за Android изтегляне не се случват, а системата просто зарежда ядрото стойки RAM-диск и започва зарядното устройство. Последно дисплеи иконата на батерията, по-голям от които във всички възможни състояния се съхранява в конвенционалните PNG файлове вътре присъдено папката.

ueventd.rc файл е конфигурация, която определя какво трябва да се създават файлове на устройства в SYS на стартиране на системата. Linux-базиран достъп до системата на ядрото до хардуера чрез специални файлове в директория DEV, и тяхното установяване в Android е отговорен ueventd демон, който е част от първоначален. В една нормална ситуация е в автоматичен режим, като екипът за създаване на файлове от ядрото, но някои от файловете, които трябва да създадете своя собствена. Те са изброени в ueventd.rc.

указател Sbin в Android katabatic обикновено съдържа нищо друго освен adbd, т.е. ADB демон, който е отговорен за отстраняване на грешки на системата с компютър. Той започна в началото на OS товарене и позволява да се идентифицират възможни проблеми на етапа на инициализация OS. обичай фърмуер в този каталог можете да намерите един куп други файлове, като например mke2fs, които могат да бъдат необходими, ако трябва да се преформатира дялове в ext3 / 4. Също модернизиране често поставя BusyBox, с която може да донесе стотици Linux-команди.

Proc директория за Linux стандарт, етапите на следната първоначален натоварване свързани с него procfs, виртуална файлова система, която осигурява достъп до информация за всички процеси в системата. Каталог на стоките система сис е свързан sysfs, отваряне на достъпа до информация за хардуера и настройки. С sysfs може, например, да се изпрати на устройството да спи или да промените се използва алгоритъм за пестене на енергия.

build.prop файл е предназначен за съхранение на настройките от ниско ниво на Android. По-късно, системата ще се рестартира настройките и да ги презаписва със стойности от недостъпното до система / build.prop файл.

Информативна и практичен поглед върху архитектурата на андроид
Root дял приемници за цифрова Ouya

Разпродажба от текста

Етап два алтернативни. дял за възстановяване

За разлика от раздел не се стартира, в качеството на преходен връзка между различните етапи на операционната система се зарежда, дял за възстановяване е напълно самостоятелен и включва миниатюрна операционна система, която няма нищо общо с Android. В основата на нейното възстановяване, набор от приложения (команди) и интерфейс, който позволява на потребителя да активирате функцията за обслужване.

С скриптове, например, можете да направите възстановяване след натоварването автоматично се намери на картата с памет желания фърмуера, да ги инсталира и рестартира в Android. Тази функция се използва инструменти ROM мениджър, авто-мигач, и механизъм за автоматично актуализиране на CyanogenMod и други фърмуера.

Rekaveri също подкрепя обичай архивиране на скриптове, които се намират в /system/addon.d/ директория. Преди да мига за възстановяване проверки скриптове и да ги изпълни, преди да направят фърмуера. С тези скриптове не Gapps изчезне след инсталирането на новия фърмуер.

fastboot команда

На екрана ще се покаже името на устройството. Други налични команди:

  • fatsboot OEM отключване - отключване на буутлоудъра на Nexus;
  • fayl.zip актуализация - инсталиране на фърмуера;
  • флаш обувка boot.img - фърмуер образ обувка сечение;
  • флаш памет за възстановяване recovery.img - фърмуер раздел възстановяване на изображението;
  • флаш система system.img - фърмуер образ на системата;
  • зареждане recovery.img - изтегляне на възстановяване на изображението без фърмуера;
  • OEM формат - възстановяване на повредени таблицата на дяловете;
  • рестартира - рестартиране.

Трета стъпка. инициализация

Всяка единица определя етапа на зареждане или в говор на Android разработчиците действие. Блокове са разделени една от друга директива, последвано от името на действие, например за ранно първоначален или след FS. Блок команда се изпълнява само ако работата, озаглавена спусъка. Като първоначален на стартиране на свой ред ще активиране води началото първоначален, първоначален, ранни FS, FS, пост-FS, ранно стартиране на багажника, предизвиквайки по този начин съответните елементи на команди.

Информативна и практичен поглед върху архитектурата на андроид
Част конфигурационния init.rc на CyanogenMod

Ако конфигурационния файл дърпа още няколко конфигурационни файлове, изброени в началото (което е почти винаги е така), че едноименната блок команди в тях ще се слеят с главния конфигурационен файл, така че, когато се появи на спусъка първоначален изпълнява команди от съответните елементи на всички файлове. Това се прави за удобство на формирането на конфигурационните файлове за множество устройства, когато главния довереник съдържа обща за всички устройства екип, както и специфични за всяко устройство се запазва в отделни файлове.

Най-съществените от допълнителната довереник е кръстен initrc.imya_ustroystva.rc където името на устройството се определя автоматично въз основа на система за променливо съдържание ro.hardware. Тази платформа специфични конфигурационен файл, който съдържа блокове от команди, които са специфични за конкретно устройство. Освен команди отговаря за настройка на ядрото, тя също така съдържа приблизително следната команда:

Това означава, че сега трябва да се свърже първоначален всички файловите системи, изброени в ./fstab.imya_ustroystva файл, който има следната структура:

Обикновено тя съдържа инструкции за свързване на файловата система на вътрешните NAND сечения на директории / система (OS), / данни (настройките на приложението) и / кеш (кеширани данни). Въпреки това, леко модифициране на този файл, можем да получим първоначален да зареди системата от карта с памет. Достатъчно е да се прекъсне картата памет 4 в три секции: 1 Gb / ext4, 2 GB / ext4, 1 GB / ext4 а останалите пространство FAT32. На следващо място, трябва да се определи имената на карта с памет преградни в директория / сътрудничество (за различни устройства те са различни) и да ги замени оригиналните имена на устройствата във файла fstab.

Информативна и практичен поглед върху архитектурата на андроид
Типичен съдържание fstab файл

Модерен Android включва десетки услуги, но две от тях имат специален статут и да определи целия жизнен цикъл на системата.

Екипът init.rc

Процесът на първоначален е изградила набор от команди, много от които се повтарят стандартен набор от Linux команди. Най-съществените от тях:

  • на EXEC / път / до / команда - да работи на външен команда;
  • ifup интерфейс - изберете мрежов интерфейс;
  • class_start CLASS_NAME - че услугите, свързани с определен клас;
  • class_stop CLASS_NAME - спрете услуга;
  • на insmod / път / до / модул - зареждане на модул на ядрото;
  • FS монтиране директория устройство - свързване на файловата система;
  • име setprop стойност - за да настроите променливата на система;
  • SERVICENAME започнете - тичам посочената услуга;
  • Име на спусъка - ключ спусък (тече определения команден блок);
  • пиша / път / до / файл низ - низ да пише на файла.

Етап Четири. Zygote и app_process

На определен етап на натоварване първоначален отговарят приблизително в края на такъв блок довереник:

Това описание Zygote услуга, ключов компонент на всяка Android-система, която е отговорна за инициализиране, като се започне системни услуги, пускане и спиране на потребителски приложения, както и много други задачи. Zygote се управлява от малка програма / система / хамбар / app_process, което е много ясно се вижда в горната част на довереник. Задача app_proccess - тичам виртуалната машина Dalvik, който е кода в споделена библиотека /system/lib/libandroid_runtime.so, а след това работи над него Zygote.

След това Zygote открива гнездо / сътрудничество / гнездо / зигота и отива да спи, в очакване на данните. По това време диспечера на дейностите, по-рано стартира предавания намерение Intent.CATEGORY_HOME, за да намерите приложението, което е отговорно за създаването на работния плот, и дава името на Zygote контакт. Последният, от своя страна, forkan и работи молба на върха на виртуална машина. Voila, ние сме се показва на работния плот, намерени на диспечера на дейностите и работи Zygote, и работи system_server на лентата на състоянието в рамките на лентата за обслужване на състоянието. След тапа върху намерението на иконите на работния плот ще изпрати името на това приложение, ще отнеме на диспечера на дейностите и да даде команда, за да стартирате приложението демон Zygote

В Linux терминология RAM диск - един вид виртуална твърд диск, който съществува само в паметта. Рано зареждане ядрото извлича съдържанието на образа на диска и да го монтира като основната файлова система (rootfs).

Докато изтегляне Android показва три различни обувка екран: първо се появява веднага след натискане на бутона за захранване и зашит в ядрото на Linux, а вторият се появява в ранните етапи на инициализация и запазена във файла /initlogo.rle (днес едва ли някога се използва), последно започнете да използвате приложението bootanimation и се съдържа в /system/media/bootanimation.zip файл.

Наред с другите неща, Мениджър на дейностите се занимава и с убийството на работещи приложения на компютъра няма достатъчно памет. Стойностите на свободните прагове памет, съдържащи се в файл / сис / модул / lowmemorykiller / параметри / minfree.

Всичко това може да се появи малко по-ясно, но най-важното - не забравяйте три прости неща:

  • Официален init.rc документация в източник Android: goo.gl/QciYVW
  • Описание на файла формат / сис / модул / lowmemorykiller / параметри / minfree: goo.gl/gKdGPT
  • Android cataloqgue структура: goo.gl/363Sq6
  • Описание на услугите на заден план: goo.gl/rtmGgf

В много отношения, Android е много различна от други операционни системи, и се нахвърли, че не може да разбере. Все пак, ако се разбере как работи, просто отвори неограничени възможности. За разлика от IOS и Windows Phone, от операционната система на Google има гъвкава архитектура, която ви позволява да сериозно да промени поведението си, без да се налага да пишете код. В повечето случаи, поправете необходимите конфигурации и скриптове.

Покажете тази статия на приятел: