1. 16 Jul, 2019 3 commits
  2. 15 Jul, 2019 4 commits
  3. 08 Jul, 2019 2 commits
  4. 07 Jul, 2019 8 commits
  5. 05 Jul, 2019 1 commit
  6. 04 Jul, 2019 4 commits
  7. 02 Jul, 2019 1 commit
  8. 01 Jul, 2019 3 commits
  9. 30 Jun, 2019 1 commit
  10. 29 Jun, 2019 2 commits
    • topjohnwu's avatar
      Add separate product partition support · e8b73ba6
      topjohnwu authored
      e8b73ba6
    • topjohnwu's avatar
      Logical Resizable Android Partitions support · f1112fdf
      topjohnwu authored
      The way how logical partition, or "Logical Resizable Android Partitions"
      as they say in AOSP source code, is setup makes it impossible to early
      mount the partitions from the shared super partition with just
      a few lines of code; in fact, AOSP has a whole "fs_mgr" folder which
      consist of multiple complex libraries, with 15K lines of code just
      to deal with the device mapper shenanigans.
      
      In order to keep the already overly complicated MagiskInit more
      managable, I chose NOT to go the route of including fs_mgr directly
      into MagiskInit. Luckily, starting from Android Q, Google decided to
      split init startup into 3 stages, with the first stage doing _only_
      early mount. This is great news, because we can simply let the stock
      init do its own thing for us, and we intercept the bootup sequence.
      
      So the workflow can be visualized roughly below:
      
      Magisk First Stage --> First Stage Mount --> Magisk Second Stage --+
         (MagiskInit)         (Original Init)         (MagiskInit)       +
                                                                         +
                                                                         +
           ...Rest of the boot... <-- Second Stage <-- Selinux Setup  <--+
            (__________________ Original Init ____________________)
      
      The catch here is that after doing all the first stage mounting, /init
      will pivot /system as root directory (/), leaving us impossible to
      regain control after we hand it over. So the solution here is to patch
      fstab in /first_stage_ramdisk on-the-fly to redirect /system to
      /system_root, making the original init do all the hard work for
      us and mount required early mount partitions, but skips the step of
      switching root directory. It will also conveniently hand over execution
      back to MagiskInit, which we will reuse the routine for patching
      root directory in normal system-as-root situations.
      f1112fdf
  11. 27 Jun, 2019 6 commits
  12. 26 Jun, 2019 3 commits
  13. 25 Jun, 2019 2 commits