Вътрешността на андроида (ние разкрие робота) - (Джентри)

Вътрешността на андроида (ние разкрие робота) - (Джентри)

Как Android

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

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

Първа стъпка. U-BOOT, и таблицата на дяловете

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

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

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

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

в процес на възстановяване, и това ви позволява да контролирате коя система да се зареди следващия път. Изтри част от разни - зареден Android, изпълнена с данни - възстановяване зареден. т.е. Ubuntu Touch.

Част от кода на буутлоудъра, който определя таблицата на дяловете:

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

Ако секцията разни не е необходимо да изтеглите флаг във възстановяването, ф-обувка предава управлението на код се намира под ботуша. Това не е нищо подобно на ядрото на Линукс; тя е в началото на раздела, и веднага последван от опаковани с помощта на архиватор 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-команди.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Етап Четири. 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.

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

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