Nu har jag flashat ROMs, mixtrat med hboots, kernels, dalvik m.m. ganska länge utan att egentligen veta vad det är jag mixtrar med. Jag är nyfiken att lära mig hur en Android-telefon fungerar i grunden. Är det möjligt för någon att förenklat förklara de olika beståndsdelarna och dess relation till varandra? Förstår att det är en svår fråga att besvara men skulle uppskatta era försök då det skulle vara intressant att lära sig detta. Vad kickar igång efter det att jag tryckt på powerknappen? Begrepp för mig att reda ut (samt deras relation till varandra): bootloader hboot kernel dalvik samt annat jag inte tagit upp men som skall in ____________________________________________________________________________ Ok, så här långt. Rätta mig gärna om jag har fattat något fel eller om något bör tilläggas. Boot-ROM - När man trycker på Power-knappen ges ström till en enkel kod som är hårdvaukopplad direkt i CPU-kretsen och den kickar igång. Den upptäcker boot-partitionen så att den sedan kan användas. Fas två för Boot-ROMen är att den startar bootloadern (som ligger på bootpartitionen) och kopplar den mot det interna RAM-minnet. Bootloadern tar över efter detta. http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html Bootloader - Ett väldigt enkelt program. Steg ett är att det upptäcker och sätter igång det externa RAM-minnet. I steg två (hboot) kan bootloadern använda RAM-minnet för att initialisera hårdvara och ge vissa inställningar som storlek för systempartitionen, cachepartitionen, datapartitionen o.s.v. I steg tre så startar bootloadern operatisystemkärnan (kernel) som ligger på bootpartitionen. Bootloadern ger kernelen tillgång till det externa RAM-minnet så att den kan börja arbeta. Kernelen tar över efter detta. http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html http://forum.xda-developers.com/archive/index.php/t-1208389.html Kernel - Kärnan i operativsystemet som kopplar övrig hårdvara mot mjukvara (drivrutiner) samt andra grundfunktioner i Android som resurshantering, minneshantering, nätverkshantering så att resten av systemet kan starta fullt ut och användas. Kernelen startar även initsciptet. http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html Initscriptet - Sätter igång initprocessen. Detta är en slags grundprocess som sätter igång. Alla andra processer som sedan körs startar från denna (eller från någon annan process som i sin tur startats av denna). Startar Zygote. http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html http://bootloader.wikidot.com/linux:boot:android Zygote - Startar upp Dalvik och Applications framework/System server. http://www.androidenea.com/2009/06/android-boot-process-from-power-on.html Libraries - Ett lager som hanterar grafik (grafikmotor), pixelhantering, media (olika codecs), fonts, datahantering, webläsarmotor m.m. http://developer.android.com/guide/basics/what-is-android.html http://www.youtube.com/watch?v=QBGfUs9mQYY Android runtime - Består av Dalvik och Core libraries. Dalvik - Verkar vara den del som sedan kör apparna. Dalvik startar en process för varje app som på så vis kan nyttja det som finns i Libraries och därmed hårdvaran. Dessutom verkar Dalvik ha att göra med multitasking, att appar kan köras samtidigt utan att påverka varandra negativt. Dalvik kör igång en Vitual Machine (en process) som sedan en app körs i. Dalvik kan starta flera parallella Virtual machines så olika appar kan köras bredvid varandra utan att påverka varandra om en t.ex. skulle krascha. (Skulle de köras i samma VM så skulle alla appar krascha om en gjorde det). Dalvik gör även om Java-koden apparna är skrivna i för att optimera och effektivisera utnyttjandet av minne och CPU. Core libraries - Tror det är biblioteket för Applications framework/System server. http://developer.android.com/guide/basics/what-is-android.html http://www.youtube.com/watch?v=QBGfUs9mQYY Applications framework/System server - Den första Java-applikationen som startas av Zygot. Den startar kärntjänsterna i Android som ActivityManager, WindowManager, PackageManager etc. Verktygskittet alla appar använder. Hur de hanteras och kommunicerar. Vad de kan göra samt de byggstenar man använder då man bygger appar. http://developer.android.com/guide/basics/what-is-android.html http://www.youtube.com/watch?v=QBGfUs9mQYY Apparna - Behöver kanske inte någon djupare förklaring här. Gjorde en liten bild: ____________________________________________________________________________ Lägger även upp lite info om hur partioneringen ser ut i Android: (Information från http://www.addictivetips.com/mobile/android-partitions-explained-boot-system-recovery-data-cache-misc/) /boot Innehåller bootloadern och kernelen. Ser till att telefonen startar. /system Innehåller resten av operativsystemet samt förinstallerade systemappar. /recovery Är typ en alternativ boot-partition som kan användas vid återställning av telefonen och annat underhåll. Inte till för den "vanlige användaren". /data Innehåller användardata t.ex. kontaker, SMS, inställningar och appar jag installerat. (Det är denna man raderar när man kör en "wipe data/factory reset" i recovery). /cache Här sparas data som används ofta av appar (och systemet tror jag) så att apparna slipper skapa nya varje gång. Dessa kan man radera i recovery-läget. /misc Innehåller diverse systeminställningar, t.ex. vissa hårdvaruinställningar. /sdcard Är ofta utrymmet på ditt SD-kort som du själv kan använda fritt till att lagra filer på. Kan dock även vara en del på det interna minnet om telefonen (eller plattan) saknar SD-kort. Har dock samma funktion då. Vissa appar sparar även data här. /sd-ext Inte en partition som ingår normalt i Android utan har skapats av användaren. Man använder då en del av /sdcard för att "lura" systemet att tro att även denna partition är en del av /data partitionen. Nyttan med denna är att man får plats med fler appar utifall man äger en telefon med lite utrymme för detta och vill utöka detta.
bootloader > filer som gör att den startas upp. hboot > Meny för uppstart Kernel > "Hjärtat/hjärnan" vet inte vad som bäst förklarar
Det finns några filmer på android.com som jag tror kan ge dig lite svar Androidology - Part 1 of 3 - Architecture Overview - YouTube Androidology - Part 2 of 3 - Application Lifecycle - YouTube Androidology - Part 3 of 3 - APIs - YouTube
Ok, så här långt. Kernel - Kärnan i operativsystemet som kopplar hårdvara mot mjukvara (drivrutiner) samt andra grundfunktioner i Android som resurshantering m.m. Libraries - Nästa lager som hanterar grafik (grafikmotor), media (olika codecs), fonts, datahantering, webläsarmotor m.m. Android runtime - Består av Dalvik och Core libraries. Dalvik - Verkar vara den del som sedan kör apparna. Dalvik startar en process för varje app som på så vis kan nyttja det som finns i Libraries och därmed hårdvaran. Dessutom verkar Dalvik ha att göra med multitasking, att appar kan köras samtidigt utan att påverka varandra negativt. Dalvik kör igång en Vitual Machine (en process) som sedan en app körs i. Dalvik kan starta flera parallella Virtual machines så olika appar kan köras bredvid varandra utan att påverka varandra om en t.ex. skulle krascha. (Skulle de köras i samma VM så skulle alla appar krascha om en gjorde det). Dalvik gör även om Java-koden apparna är skrivna i för att optimera och effektivisera utnyttjandet av minne och CPU. Vad Core libraries är för något fattade jag inte men det hade med Java, I/O att göra iaf. Applications framework - Verktygskittet alla appar använder. Hur de hanteras och kommunicerar. Vad de kan göra samt de byggstenar man använder då man bygger appar. Apparna - Behöver kanske inte någon djupare förklaring här. Rätta mig gärna om jag har fattat något fel eller om något bör tilläggas. Jag skulle även vilja ha en tydligare förklaring av bootloader och hboot och hur dessa sedan kopplas mot kernelen. Skulle även uppskatta om någon kunde förklara Core Libraries i Android runtime.
Lite förenklat, men det viktiga iaf. Bootloader är ett väldigt enkelt program som startar först i telefonen (iaf. som vi kan påverka, kan vara flera lager med program inne i processorn). Bootloadern monterar bootpartitionen som innehåller viktiga filer och startar därefter kärnan och initskriptet som har till uppgift att dra igång systemet. Både kärnan och initskriptet ligger på bootpartitionen.
Sugen på att förklara hboot när du ändå är igång? Skulle även uppskatta om någon kunde förklara Core Libraries i Android runtime. Edit: Lägger in allt jag lär mig i första inlägget för att spara på inläggen.
Bra tråd! Har aldrig satt mig in i det men om du ställer upp det så enkelt som du har gjort i första inlägget blir jag helt plötsligt intresserad av att lära mig
Att säga att bootloadern "monterar bootpartitionen" är kanske att förenkla det hela lite väl mycket. Bootloadern brukar vara ett alldeles för simpelt program för att förstå sig på så avancerade saker som filsystem. Bootloadern brukar ligga först på disken och har till uppgift att ladda in och starta kärnan. Sedan är det upp till kärnan att montera root-partitionen och därifrån exekvera init som kör igång initscript. Lite googlande ledde fram till ett par fina förklaringar: Ingående beskrivning: Enea Android Blog: The Android boot process from power on Förenklad tabell: Android boot process - BootLoader m v h Henrik
Bägge länkarna där var mycket bra, speciellt den första då jag själv alltid undrat när dalvik startas och ju mer jag tittar på det desto mer undrar jag varför inte lägga in dalvik som en instruktion i processorn för att android ska slippa starta/köra det.
Vore gött om du kunde länka till sidor och så. Tänkte att om någon nämner en länk så kan du slänga in den i första inlägget.
Tanken på att göra en CPU som kör java har funnits sen länge: Sun conjures Java CPU for media apps Dock tror jag att SUN övergav den tanken, deras java-stationer byggde i stället på generella CPUer: JavaStation - Wikipedia, the free encyclopedia Men det verkar som om tanken på att köra java bytecode direkt i CPUn börjar komma tillbaka, inte minst med tanke på telefon-OS som Android: Jazelle - Wikipedia, the free encyclopedia m v h Henrik
Dalvik är en javamotor som fungerar ungefär som Sun's Java-motor som du säkert har installerat på din PC. Dvs det är ett stort och komplext mjukvaruprogram den tolkar/realtidskompilerar javakoden i apparna och exekverar koden. Det är inget som kan läggas in som en "instruktion" i processorn. (Teoretisk går det göra en hårdvaru-javamotor men otroligt komplicerat och antagligen mkt opraktiskt eftersom den inte går att uppgradera, inget som existerar idag helt enkelt).
Har nu gjort en rejäl uppdatering. Vet dock inte om allt stämmer men det är ju ett "work in progress". Vet fortfarande inte vad hboot är så sitt inte inne med informationen om du har den!
hboot vet jag tyvärr inte vad det är. Jag tror det är tillverkarspecifikt. Det är iaf. inget som jag nånsin har hört talas om på min liquid, och då har jag pillat rätt mycket med system och kärna. EDIT: henca det är möjligt att jag har fel. Men jag är rätt säker på att kärnan kräver ett rootfilsystem. Möjligtvis kan det vara så att det inte är boot partitionen utan någon enkel RAMdisk men nån typ av / finns det. Jag skulle kunna gissa att hboot är en bootloader.
"Alright, HBoot is the bootloader - sort of like BIOS, it tells the phone what to do when I push the power button." [Q] Upgrading and Downgrading HBoot - xda-developers
Hittade lite mer info om hboot nu som jag inte hittat förut. [Q] What's the difference between SPL Hboot and Recovery? [Archive] - xda-developers HBOOT is 2nd stage bootloader. HBoot What it is: This is the hardware initiation or boot stage, much like the BIOS on a PC. Other than a placeholder for specific settings, all the HBoot does is handle the initial hardware initialization for your device. What it does: With S-off (or 'Full Root' as it's also referred to) controls specific settings related to your device: these include the system partition size, cache partition size, data partition size, and more. They are not stored in an editable way, hense the reason for flashing a modified HBoot to get custom system partition sizes.
Nu är äntligen alla begrepp med i min förklaring så det enda arbete som återstår är att finslipa förklaringarna och rätta till eventuella fel. Tusen tack alla och meddela om ni ser några felaktigheter eller om något bör läggas till.