ບົດນຳກ່ຽວກັບການພອດ (Porting)

ພາກທຳອິດນີ້ຈະແນະນຳລາຍລະອຽດຂອງການພອດ Ubuntu Touch ໄປຫາອຸປະກອນ Android. ຄູ່ມືນີ້ຂຽນຂຶ້ນສຳລັບບຸກຄົນທົ່ວໄປ ບໍ່ແມ່ນພຽງແຕ່ນັກພັດທະນາທີ່ມີປະສົບການເທົ່ານັ້ນ. ໃນພາກຕໍ່ໆໄປ ພວກເຮົາໄດ້ພະຍາຍາມຮັກສາເນື້ອຫາໃຫ້ກະທັດຮັດສຳລັບຜູ້ອ່ານທີ່ມີປະສົບການ ແລະ ໃຫ້ລິ້ງອ່ານເພີ່ມເຕີມສຳລັບຜູ້ເລີ່ມຕົ້ນ.

ຄູ່ມືນີ້ຖືກຂຽນຕາມລຳດັບຂັ້ນຕອນໃນອຸດົມຄະຕິ. ແນວໃດກໍຕາມ, ການພອດມັກຈະມີສິ່ງທີ່ຄາດເດົາບໍ່ໄດ້ ແລະ ຫຍຸ້ງຍາກ. ອຸປະກອນແຕ່ລະລຸ້ນມີຄວາມແຕກຕ່າງກັນ ແລະ ໃນຄວາມເປັນຈິງ ທ່ານອາດຈະຕ້ອງເຮັດບາງຂັ້ນຕອນຊ້ຳ ຫຼື ຂ້າມບາງຂັ້ນຕອນ ແລະ ພົບກັບສິ່ງທ້າທາຍໃໝ່ໆທີ່ບໍ່ມີໃນເອກະສານ.

Ubuntu Touch ແມ່ນຫຍັງ?

Ubuntu Touch ແມ່ນລະບົບປະຕິບັດການແບບໂອເພນຊອດ (open source) ສຳລັບອຸປະກອນມືຖື. ມັນສາມາດພອດໄປຫາອຸປະກອນທີ່ມາພ້ອມກັບລະບົບ Android ໄດ້. ແຕ່ໜ້າເສຍດາຍທີ່ອຸປະກອນສ່ວນໃຫຍ່ເຫຼົ່ານີ້ຍັງຕ້ອງອາໄສຊອບແວທີ່ມີລິຂະສິດ (proprietary software) ໃນລະດັບໃດໜຶ່ງ.

ເວົ້າໃຫ້ຊັດເຈນຄື ຜູ້ຜະລິດອຸປະກອນມັກຈະເກັບໂຄ້ດທີ່ຕິດຕໍ່ກັບຮາດແວໂດຍກົງ (low level drivers) ໄວ້ເປັນຄວາມລັບ. ສ່ວນປະກອບເຫຼົ່ານີ້ມັກຖືກເອີ້ນວ່າ vendor 'blobs'. ເຊິ່ງຈຳເປັນຕ້ອງລວມເຂົ້າໃນພອດ Ubuntu Touch. ໝາຍເຫດວ່າສ່ວນປະກອບເຫຼົ່ານີ້ແມ່ນສະເພາະສຳລັບແຕ່ລະອຸປະກອນ ແລະ ແຕ່ລະເວີຊັນຂອງ Android, ດັ່ງນັ້ນຈຶ່ງຈຳເປັນຕ້ອງມີເວີຊັນທີ່ຖືກຕ້ອງໃນການສ້າງພອດ.

ນີ້ແມ່ນເຫດຜົນທີ່ Ubuntu Touch ບໍ່ສາມາດສ້າງຈາກຊອດໂຄ້ດ (source code) ໄດ້ທັງໝົດສຳລັບອຸປະກອນທີ່ມີຂາຍທົ່ວໄປ. ແຕ່ການພອດຈະເປັນການລວມເອົາ vendor blobs ເຂົ້າກັບສ່ວນທີ່ເຫຼືອຂອງລະບົບທີ່ສ້າງມາຈາກຊອດໂຄ້ດ.

ອົງປະກອບຕໍ່ໄປຄື root filesystem ທີ່ຖືກຄອມໄພລ໌ (compile) ໄວ້ແລ້ວ. ອົງປະກອບນີ້ບໍ່ໄດ້ຕິດຕໍ່ກັບຮາດແວໂດຍກົງ ແຕ່ຈະຕິດຕໍ່ຜ່ານ Hardware Abstraction Layer (HAL) ທີ່ຕ້ອງສ້າງຂຶ້ນສະເພາະສຳລັບແຕ່ລະອຸປະກອນ. ອົງປະກອບນີ້ເອີ້ນວ່າ Halium ແລະ ມີຫຼາຍເວີຊັນທີ່ສອດຄ່ອງກັບເວີຊັນຕ່າງໆຂອງ Android.

ໂຄງການ Halium ຊ່ວຍໃຫ້ລະບົບ Linux ສາມາດເຮັດວຽກເທິງຮາດແວ Android ໄດ້. ມັນເປັນຄວາມພະຍາຍາມຮ່ວມກັນຂອງຫຼາຍລະບົບປະຕິບັດການ ເຊັ່ນ: Lune OS, Droidian ແລະ Ubuntu Touch.

ການພອດ Ubuntu Touch ແມ່ນສ້າງຂຶ້ນເທິງ Halium GSI. ໃນບາງຄັ້ງ ການທົດສອບກັບລະບົບປະຕິບັດການອື່ນອາດຈະຊ່ວຍໃນການແກ້ໄຂບັນຫາ (debug) ຈາກຫຼາຍມຸມມອງໄດ້.

Halium ແມ່ນສ່ວນສຳຄັນທີ່ຂາດບໍ່ໄດ້ ແລະ ເປັນຊອບແວໂອເພນຊອດ. ການພັດທະນາ Halium ເວີຊັນໃໝ່ເປັນວຽກທີ່ໜັກຫຼາຍ, ດັ່ງນັ້ນຈຶ່ງມີພຽງບໍ່ເທົ່າໃດເວີຊັນ. ແຕ່ລະພອດຂອງ Ubuntu Touch ຕ້ອງອີງຕາມເວີຊັນ Halium ທີ່ມີຢູ່ ແລະ vendor blobs ຈາກ Android ເວີຊັນທີ່ກ່ຽວຂ້ອງ.

ດັ່ງນັ້ນ, ພອດ Ubuntu Touch ຈຶ່ງປະກອບດ້ວຍອົງປະກອບເຫຼົ່ານີ້:
  • Ubuntu Touch (UT) root filesystem (rootfs)

  • Halium (ບັນຈຸຢູ່ໃນ boot ແລະ system images)

  • Vendor blobs

ທ່ານໃນຖານະຜູ້ພອດ (porter) ຈຳເປັນຕ້ອງສ້າງ Halium kernel ເພື່ອຕິດຕັ້ງຮ່ວມກັບ rootfs ແລະ Halium GSI ເພື່ອໃຫ້ໄດ້ພອດ Ubuntu Touch ທີ່ໃຊ້ງານໄດ້.

ເວີຊັນ Android ແລະ Halium

Halium is built using source code for a modified version of the Android operating system called LineageOS (see the LineageOS website and wiki). The required source code is available online and needs to be downloaded and configured to build the correct Halium version for each individual device port. The table below shows which versions are required for the different Halium versions.

ເວີຊັນ Android

ເວີຊັນ Halium

Lineage OS (LOS)

7.1

7.1

14.1

9.0

9.0

16.0

10.0

10.0

17.1

11.0

11.0

18.1

12.0

12.0

19.1

13.0

13.0

20.0

ຕັ້ງແຕ່ເວີຊັນ 20.04, ພອດ Ubuntu Touch ປົກກະຕິແລ້ວຈະອີງຕາມ Halium 9.0 ຫຼື ໃໝ່ກວ່າ. ເວີຊັນເກົ່າຖືວ່າລ້າສະໄໝ ແລະ ບໍ່ຮອງຮັບສຳລັບພອດໃໝ່ແລ້ວ.

Generic System Image (GSI)

ເລີ່ມແຕ່ Android 9.0 ເປັນຕົ້ນມາ ມີການປ່ຽນແປງສະຖາປັດຕະຍະກຳຄັ້ງໃຫຍ່. Vendor blobs ຈະຖືກແຍກໄປຢູ່ partition ຕ່າງຫາກ. ການແຍກໂຄ້ດສະເພາະອຸປະກອນອອກຈາກໂຄ້ດທົ່ວໄປນີ້ເຮັດໃຫ້ເກີດສິ່ງທີ່ເອີ້ນວ່າ Generic System Image (GSI).

GSI ແມ່ນ system image ທີ່ສ້າງຂຶ້ນມາເພື່ອໃຫ້ໃຊ້ງານໄດ້ກັບອຸປະກອນທີ່ຫຼາກຫຼາຍ. ສຳລັບຂໍ້ມູນເພີ່ມເຕີມ ເບິ່ງໄດ້ທີ່ Android Developer pages

The development of the Android GSI architecture also cleared the way for the now available generic Halium 9.0 arm64 system image (hereafter referred to as the Halium GSI, or simply the GSI) which is used for Ubuntu Touch. This, however, is somewhat different from the Android GSI. For a more detailed explanation of the Halium GSI, please refer to the wiki page on Gitlab CI builds of the generic Halium system image.

ສິ່ງນີ້ມີຄວາມໝາຍແນວໃດສຳລັບຂະບວນການພອດ?

ເນື່ອງຈາກ GSI ເປັນສ່ວນປະກອບທີ່ສ້າງໄວ້ແລ້ວ ແລະ ບໍ່ຂຶ້ນກັບອຸປະກອນ, ມັນຈຶ່ງຊ່ວຍໃຫ້ການສ້າງພອດງ່າຍຂຶ້ນ ໂດຍການລຸດຜ່ອນວຽກທີ່ລະອຽດ ແລະ ໃຊ້ເວລາດົນໃນການຄອມໄພລ໌ vendor blobs ໃຫ້ເຂົ້າກັບ system image.

ສິ່ງທ້າທາຍໃນຂະບວນການພອດ

ການສ້າງອົງປະກອບທີ່ຈຳເປັນ ແລະ ການເຮັດໃຫ້ພວກມັນເຮັດວຽກຮ່ວມກັນໄດ້ດີ ມັກຈະກ່ຽວຂ້ອງກັບການແກ້ໄຂໂຄ້ດ, ການຕັ້ງຄ່າ ແລະ ການທົດສອບຢູ່ສະເໝີ.

ໂຊກດີທີ່ມີຊຸມຊົນຜູ້ພອດທີ່ພ້ອມຊ່ວຍເຫຼືອ. ເມື່ອທ່ານພົບບັນຫາ, ຄວນຄົ້ນຫາຈາກແຫຼ່ງຂໍ້ມູນ (ການຂໍຄວາມຊ່ວຍເຫຼືອຈາກຊຸມຊົນ) ວ່າເຄີຍມີໃຜແກ້ໄຂບັນຫານັ້ນມາກ່ອນຫຼືບໍ່. ນອກຈາກນີ້ຍັງມີກຸ່ມ Telegram ທີ່ທ່ານສາມາດເຂົ້າຮ່ວມເພື່ອຂໍຄວາມຊ່ວຍເຫຼືອໄດ້.

Note

ໃນອະດີດເຄີຍມີວິທີການພອດທີ່ຫຼາກຫຼາຍ. ສາມາດເບິ່ງຂໍ້ມູນຍ້ອນຫຼັງໄດ້ໃນ deprecated porting section.

ຄວາມຮູ້ ແລະ ທັກສະພື້ນຖານ

ຄູ່ມືນີ້ບໍ່ໄດ້ບັງຄັບວ່າທ່ານຕ້ອງມີຄວາມຮູ້ລະດັບສູງໃນດ້ານໃດໜຶ່ງ. ແຕ່ຢ່າງໜ້ອຍທ່ານຄວນຄຸ້ນເຄີຍກັບຄຳສັ່ງ shell ພື້ນຖານ ແລະ ການໃຊ້ terminal ໃນ Linux. ຫາກມີຄວາມຮູ້ດ້ານການຂຽນໂປຣແກຣມ (ໂດຍສະເພາະ C/C++) ກໍຈະເປັນປະໂຫຍດຫຼາຍ. ນອກຈາກນີ້ຄວນໃຊ້ git ເປັນ ແລະ ມີບັນຊີ Github ຫຼື Gitlab ເພື່ອຕິດຕາມການປ່ຽນແປງຂອງໂຄ້ດ.

ພວກເຮົາພະຍາຍາມໃຫ້ຄຳອະທິບາຍໄປນຳ, ແຕ່ຄູ່ມືນີ້ບໍ່ແມ່ນເອກະສານອ້າງອີງແບບລົງເລິກເຖິງສະຖາປັດຕະຍະກຳພາຍໃນຂອງ Ubuntu Touch. ການທີ່ຈະເຂົ້າໃຈໄດ້ເລິກເຊິ່ງກວ່ານີ້ ທ່ານອາດຈະຕ້ອງໄດ້ຄົ້ນຄວ້າດ້ວຍຕົນເອງຕື່ມ.

ການຂໍຄວາມຊ່ວຍເຫຼືອຈາກຊຸມຊົນ

ເມື່ອທ່ານພົບບັນຫາ, ໃຫ້ລອງເບິ່ງຈາກແຫຼ່ງຂໍ້ມູນເຫຼົ່ານີ້:

ຄຳແນະນຳທົ່ວໄປ

ຍິ່ງທ່ານຈົດບັນທຶກຂັ້ນຕອນການເຮັດວຽກໄດ້ລະອຽດເທົ່າໃດ, ທ່ານກໍຈະຍິ່ງປະຢັດເວລາໃນການຫາສາເຫດຂອງບັນຫາໄດ້ຫຼາຍຂຶ້ນ. ເມື່ອພົບບັນຫາ ຄວນແກ້ໄຂເທື່ອລະຢ່າງ. ຫາກແກ້ໄຂຫຼາຍຢ່າງພ້ອມກັນ ທ່ານຈະບໍ່ຮູ້ວ່າການປ່ຽນແປງໃດທີ່ແກ້ບັນຫາໄດ້ແທ້ ແລະ ອາດເຮັດໃຫ້ລະບົບພັງໃນພາຍຫຼັງ.

ຫາກທ່ານຍັງບໍ່ທໍ້ຖອຍຫຼັງຈາກອ່ານຈົບ, ພວກເຮົາຂໍສະໜັບສະໜູນຄວາມພະຍາຍາມຂອງທ່ານ ແລະ ຂໍໃຫ້ໂຊກດີ!

ພາກຕໍ່ໄປຈະເປັນຂໍ້ມູນສຳຄັນສຳລັບສ່ວນທີ່ເຫຼືອຂອງຄູ່ມືນີ້.