Android OS uppbyggnad

Diskussion i 'Allmänt' startad av Iamfree, 23 nov 2011.

  1. -Henric

    -Henric Senior Droid Medlem

    Blev medlem:
    21 apr 2011
    Inlägg:
    1 705
    Mottagna gillanden:
    349

    MINA ENHETER

    Jag kan dessvärre inte bidra med något nödvändigt till tråden men jag tycker att det var ett väldigt väldigt bra initiativ! Du är inte den enda där ute som inte förstår riktigt vad man egentligen gör och vad saker och ting betyder... utan vi har bara accepterat "det bara är så".

    Nu blir det ännu intressantare med att hålla på med Android!

    Som någon annan skrev här så tycker även jag att Swedroid borde skriva om det hela hur allt egentligen fungerar :)
     
  2. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 335
    Mottagna gillanden:
    211

    MINA ENHETER

    Nu är inte jag någon Android-expert som lattjat med att koka ihop egna ROM eller liknande, mina Linux-erfarenheter kommer mest från generella datorer.

    Det stämmer att kärnan kräver en root-partition vid boot. Vilken enhet som skall användas som root-partition kan ges som ett argument då kärnan bootas. Om inget argument ges används ett default-värde. Detta default-värde (t ex /dev/sda1) anges redan vid kompilering av kärnan, men det kan också modifieras senare med kommandot rdev.

    När kärnan sedan bootar kommer den försöka montera sin root-partition. För att detta skall lyckas krävs det att ett antal förutsättningar är uppfyllda:

    1) Att den fysiska disken med root-partition verkligen finns (naturligtvis).
    2) Att kärnan har drivrutiner för att nå den fysiska disken.
    3) Att kärnan har stöd för det filsystem som root-partitionen har.

    Om något av ovanstående villkor saknas kommer man drabbas av en "kernel panic" vid boot och systemet kommer inte upp.

    Root-partitionen måste innehålla en del viktiga kataloger med innehåll. Exempel på sådana kataloger är /etc som innehåller inställningar som t ex fstab som berättar vilka övriga partitioner som skall monteras. Även /sbin behövs som innehåller de verktyg som krävs för att montera övriga partitioner. Sedan måste även /dev-katalogen ligga i root-partitionen då den innehåller devices som pekar ut övriga partitioner. Det finns även andra kataloger som inte kan flyttas bort från root-partitionen.

    Åtminstone historiskt sett har det varit väldigt viktigt att vara rädd om sin root-partition. Om dess filsystem skulle drabbas av ett logiskt fel blir hela systemet oanvändbart. Därför har man försökt hålla root-partitionen liten och undviker att ha onödiga kataloger i den partitionen som det skrivs till. /tmp och /var skrivs det mycket till, därför brukar de få bli egna partitioner. /usr och /opt kan bli stora, därför kan de också placeras på egna partitioner. Idag när man har journalförande filsystem är det kanske inte lika viktigt att hålla root-partitionen "ren" på detta vis.

    Vad är då en boot-partition? En gång för länge sedan ansågs det inte behövs någon boot-partition. Det var standard att placera kärnan vmlinuz under /, i toppen på root-partitionen och peka ut kärnan med lilo. När hårddiskarna växte fick lilo plötsligt problem att addressera hela hårddisken. Då började en del distributioner skapa en boot-partition som låg i början på disken som lilo garanterat kunde addressera. Själv har jag aldrig haft /boot-katalogen i en egen partition, jag har den i stället i min lilla root-partition som ligger på början av disken.

    Sen version 2.6.någonting av Linux-kärnan har det tillkommit ett ytterligare fenomen: initrd. Tanken med initrd är att kärnan inte skall behöva ha allt det inbyggda stöd som krävs för att montera root-partitionen. I stället byggs ett filträd upp med moduler som innehåller de drivrutiner och funktionaliteter som krävs för att montera den riktiga root-partitionen. Detta filträd placeras inte på någon partition utan i en packad arkiv-fil i cpio-format komprimerad med gzip, det ger ungefär samma funktionalitet som en zip-fil. Denna initrd pekas ut med bootloadern som ger den till kärnan vid boot. Dock har jag inte själv experimenterat med initrd, jag brukar föredra stora generella kärnor på desktop-system. Kanske har jag blandat ihop en del fakta ovan om initrd med initramfs.

    Om man kör lilo som bootloader måste lilo köras om varje gång man byggt en ny kärna eller byggt om en initrd. Detta eftersom den lilo som körs vid boot inte vet något om filsystem, den pekar bara ut hårdkodade adresser på hårddisken.

    m v h Henrik
     
  3. Iamfree

    Iamfree Adult Droid Medlem

    Blev medlem:
    5 aug 2010
    Inlägg:
    973
    Mottagna gillanden:
    102
    Telefon:
    Google Nexus 5

    MINA ENHETER

    Telefon:
    Google Nexus 5
    ROM:
    Stock Lollipop
    Platta:
    Google Nexus 7
    ROM:
    Stock Lollipop
    Såvida det inte är några fel i första inlägget så tror jag att jag nöjer mig där. Tanken var att förenklat förklara de olika beståndsdelarna. Nästa fråga blir istället: Vad ska man använda denna kunskap till nu när man ändå gjort sig besväret att gräva fram den? Blir lite sugen på att försöka lära mig skriva appar och kanske annat dev-stuff (har iofs gjort en Hello World och moddat lite widgets men det räknas knappt). Frågan är hur tids- och energikrävande det är att fördjupa sig så mycket.. Får se hur det blir. :)
     
  4. henca

    henca Senior Droid Medlem

    Blev medlem:
    30 dec 2009
    Inlägg:
    1 335
    Mottagna gillanden:
    211

    MINA ENHETER

    Kunskapen om hur telefonen bootar är nog att betrakta som överinlärning om du bara skall skriva appar. För app-makeri vore en java-kurs mera lämpad.

    Detaljerna om de olika boot-stegen är nog mera nödvändig kunskap om du har planer på att koka ihop din egen ROM.

    m v h Henrik
     
  5. Iamfree

    Iamfree Adult Droid Medlem

    Blev medlem:
    5 aug 2010
    Inlägg:
    973
    Mottagna gillanden:
    102
    Telefon:
    Google Nexus 5

    MINA ENHETER

    Telefon:
    Google Nexus 5
    ROM:
    Stock Lollipop
    Platta:
    Google Nexus 7
    ROM:
    Stock Lollipop
    Jo, förstår det. Har börjat snegla på Java redan men det var nog mest min nyfikenhet som gjorde att jag ville förstå alla led i processen. Har alltid varit så att jag vill förstå grunderna och helheten innan jag grottar ner mig i detaljer. Kanske inte blir appar heller, kanske blir att koka ihop en ROM som du säger, eller så blir det ingen praktisk användning alls av kunskapen. Fast just nu har jag en drivkraft att gå vidare och det lutar åt Java och appar (eller lite allt möjligt). o_O