Fixup Mountpoints

Итак, по многочисленным опросам и вопросам fixup-mountpoints это самая частая магия, которую не понимают при портировании sailfish os. Добро пожаловать под кат и будем разбираться, что это за магия.
Fixup Mountpoints

Первопричины

Итак, хоть и Android и линукс, но немного не линукс и системы инициализации разные. Поэтому, когда мы в андроиде пытаемся обратится по пути /dev/block/bootdevice/by-name/system во время загрузки, то это норм, но сейлфиш не сможет к нему обратится, до загрузки systemd. Однако, процесс инициализации sailfish подразумевает switch_root - тоесть смену корневой файловой системы. А чтобы её сменить надо знать точный блок девайс. Для этог, ну и ещё, чуть для перепрошивки надо и править fixup-mountpoints.

Как узнать

Итак, Вы столкнулись с ошибкой:
Код BASH:
  1. hybris/hybris-boot/Android.mk:71: ********************* /boot appears to live on
  2. hybris/hybris-boot/Android.mk:72: ********************* /data appears to live on
Или тому подобное. Эта статья для Вас.

Сперва мы должны узнать соотношения между by-name устройствами и блочными названиями.
Идём в исходники андройда $ANDROID_ROOT/device/$VENDOR/$DEVICE и ищем все fstab файлы. Они могут называться fstab.qcom или device.fstab. Короче ищем все fstab. Должно найтись что то такое:
Код FSTAB:
  1. # Android fstab file.
  2. # The filesystem that contains the filesystem checker binary (typically /system) cannot
  3. # specify MF_CHECK, and must come before any filesystems that do specify MF_CHECK
  4.  
  5. #<src> <mnt_point> <type> <mnt_flags and options> <fs_mgr_flags>
  6. /dev/block/bootdevice/by-name/system / ext4 ro,barrier=1,discard wait,slotselect
  7. /dev/block/bootdevice/by-name/userdata /data f2fs nosuid,nodev,noatime,discard,fsync_mode=nobarrier wait,check,encryptable=footer,quota
  8. /dev/block/bootdevice/by-name/userdata /data ext4 nosuid,nodev,noatime,noauto_da_alloc wait,check,encryptable=footer,quota,formattable
  9. /dev/block/bootdevice/by-name/persist /mnt/vendor/persist ext4 nosuid,nodev,noatime wait,check
  10. /dev/block/bootdevice/by-name/dsp /vendor/dsp ext4 ro,nosuid,nodev wait
  11. /dev/block/bootdevice/by-name/modem /vendor/firmware_mnt vfat ro,shortname=lower,uid=1000,gid=1000,dmask=227,fmask=337,context=u:object_r:firmware_file:s0 wait,slotselect
  12. /dev/block/bootdevice/by-name/misc /misc emmc defaults defaults
  13. /dev/block/bootdevice/by-name/config /frp emmc defaults defaults
  14.  
  15. /devices/platform/soc/7864900.sdhci/mmc_host* auto auto defaults wait,voldmanaged=sdcard1:auto,noemulatedsd,encryptable=userdata
  16. /devices/platform/soc/7000000.ssusb/7000000.dwc3/xhci-hcd.0.auto* auto auto defaults
После этого, НА АНДРОЙДЕ ПОД РУТОМ делаем:
Код BASH:
  1. # adb shell
  2. #su
  3. #ls -la /dev/block/bootdevice/by-name/
ВАЖНО: путь by-name может быть другой, важно чтобы он был такой, как в fstab. И получаем такой выхлоп:
Код BASH:
  1. device:/ $ ls /dev/block/bootdevice/by-name -la
  2.  
  3. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 boot -> /dev/block/mmcblk0p8
  4. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 cache -> /dev/block/mmcblk0p24
  5. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 expdb -> /dev/block/mmcblk0p11
  6. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 flashinfo -> /dev/block/mmcblk0p26
  7. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 frp -> /dev/block/mmcblk0p18
  8. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 items -> /dev/block/mmcblk0p5
  9. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 keystore -> /dev/block/mmcblk0p15
  10. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 lk -> /dev/block/mmcblk0p6
  11. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 logo -> /dev/block/mmcblk0p10
  12. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 metadata -> /dev/block/mmcblk0p21
  13. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 nvdata -> /dev/block/mmcblk0p19
  14. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 nvram -> /dev/block/mmcblk0p2
  15. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 odmdtbo -> /dev/block/mmcblk0p20
  16. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 oemkeystore -> /dev/block/mmcblk0p13
  17. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 para -> /dev/block/mmcblk0p7
  18. lrwxrwxrwx 1 root root 23 2019-11-20 10:28 preloader_a -> /dev/block/mmcblk0boot0
  19. lrwxrwxrwx 1 root root 23 2019-11-20 10:28 preloader_b -> /dev/block/mmcblk0boot1
  20. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 proinfo -> /dev/block/mmcblk0p1
  21. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 protect1 -> /dev/block/mmcblk0p3
  22. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 protect2 -> /dev/block/mmcblk0p4
  23. lrwxrwxrwx 1 root root 20 2019-11-20 10:28 recovery -> /dev/block/mmcblk0p9
  24. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 seccfg -> /dev/block/mmcblk0p12
  25. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 secro -> /dev/block/mmcblk0p14
  26. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 system -> /dev/block/mmcblk0p23
  27. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 tee1 -> /dev/block/mmcblk0p16
  28. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 tee2 -> /dev/block/mmcblk0p17
  29. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 userdata -> /dev/block/mmcblk0p25
  30. lrwxrwxrwx 1 root root 21 2019-11-20 10:28 vendor -> /dev/block/mmcblk0p22
Вот и получили наше соответствие между названиями и блочными устройствомами

Как поправить

Идём в наш fixup_mountpoints и добавляем в него секцию:
Код BASH:
  1. "имя устройства")
  2. sed -i
  3. -e 's динный_путь короткий_путь '
  4. "$@"
  5. ;;
Где длинный путь это: block/bootdevice/by-name/boot
А короткий путь это: mmcblk0p8

И так далее. И так нужно сделать для каждой строки, что вы получили выше, запустив команду ls /dev/block/bootdevice/by-name -la

Всё! Можем идти дальше.

Однако

Бывают нерадивые вендоры, у которых пути разные в разных fstab тоесть boot в одном fstab может выглядеть как
/dev/block/bootdevice/by-name/boot а в другом как /devices/platform/soc/7864900.sdhci/mmc_host/boot надо привести к одному виду. Или просто удалить дубли.

Бывают другие вендоры, у которых вообще нет fstab и все разделы прописаны в ядре или где то ещё. Тогда надо стздать fake.fstab где прописать правильные пути к 2 разделам /boot и /data (/userdata) и всё заработает.
Комментарии (0)

Нет комментариев. Ваш будет первым!

Copyright 2016-2020 NeoChapay