快轉到主要內容

pmbootstrap建置自訂系統image,修改核心APKBUILD設定

智慧型手機 真Linux手機 PostmarketOS Linux Kernel
🗓️ 民國113年 甲辰年
✍ 切換正體/簡體字
目錄

Building your own custom postmarketOS image with custom kernels and settings. Then flash it to the device or build an image.

在安裝postmarketOS的文章中,我提過 pmbootstrap建立映像檔的作法。這個作法實際上是使用pmboostrap,從官方Gitlab儲存庫下載各個機型的設定檔,再使用程式手工建置出來的。

pmbootstrap也提供移植新機型的功能。使用者可以自行新增機型,進行 移植工作

不過我今天要講的是修改現有機型的設定檔,達到在建置系統時修改配置的目的。比如把額外驅動編譯進Linux核心,新增預設套件的操作,這個是pmbootstrap init無法幫我們完成的東西,必須修改APKBUILD檔案。

文末再附上安裝修改後系統的步驟,以及建置postmarketOS映像檔的方法。

1. 尋找機型設定檔位置
#

APKBUILD檔案是告訴pmbootsrrap如何處理Linux核心的一個指令稿。

那要在哪裡找到你要的機型的APKBUILD呢?

當我們使用pmbootstrap init指令的時候,pmbootstrap會複製一份Gitlab儲存庫下來。

所有機型設定檔位於此處: ~/.local/var/pmbootstrap/cache_git/pmaports/device/

postmarketOS每個機型都有對應的linux-device-開頭的目錄

linux-裡面寫的是Linux核心編譯相關的設定。

-device開頭的目錄則是該裝置的硬體資訊。

例如這是pine64-pinetab2的情況(註解:撰文當下,Pinetab2的APKBUILD還沒進入Gitlab儲存庫,這是我從pull request手動clone下來的)

├── device-pine64-pinetab2
│   ├── APKBUILD
│   ├── deviceinfo
│   └── uboot-script.cmd
└── linux-pine64-pinetab2
    ├── APKBUILD
    └── config-pine64-pinetab2.aarch64

因為不可能每台裝置都用主線核心,postmarketOS每個裝置都有自己的Linux核心設定檔案。在postmarketOS的設計下,大部分裝置的Linux核心都是一個APK套件,叫做"Downstream kernel specific package",對應上文說的linux-開頭的目錄。

已經移植進入Gitlab儲存庫的裝置,核心通常也會收錄在postmarketOS的edge branch套件庫,不需要手動編譯。

相對應的,device-開頭的目錄就叫做"Device specific package"了,該套件包含了這部裝置的其餘設定檔。

既然我們說要自訂編譯配置,那麼我們就來做點修改。每個裝置都有記載編譯方法的APKBUILD檔案,我們要改的就是這個。

2. 修改核心的APKBUILD
#

  1. 首先跑完pmbootstrap,指定建置的裝置為pine64-pinetab2

  2. 進入目錄~/.local/var/pmbootstrap/cache_git/pmaports/device/linux-pine64-pinetab2

  3. 可以看到APKBUILD檔案,裡面的檔案內容簡單易懂,相信寫過bash的應該都能看懂。

└── linux-pine64-pinetab2
    ├── APKBUILD
    └── config-pine64-pinetab2.aarch64
  1. 根據 官方Wiki Downstream kernel specific package的說明,你可以往APKBUILD裡面加入自訂的編譯指令、指定GCC版本、額外打patch。

  2. 首先要關心的是如何取得核心原始碼的,像PineTab2就是從維護者自己的儲存庫下載targ.gz檔案再交給pmbootstrap編譯。

# Source
_tags="v6.6.4-danctnix2"
_config="config-$_flavor.$arch"
source="
	$pkgname-$_tags.tar.gz::https://github.com/dreemurrs-embedded/linux-pinetab2/archive/$_tags.tar.gz
	$_config
"
builddir="$srcdir/linux-pinetab2-${_tags:1}"
_outdir="out"
  1. 每次核心原始碼網址一有變更,通常就得重新產生雜湊值,因此請在終端機執行指令,讓pmbootstrap自動算出雜湊值並回填APKBUILD
pmbootstrap checksum linux-pine64-pinetab2
  1. 之後就可以對核心原始碼操作了。如果只是要開啟幾個核心選項,那麼進入kconfig就行:
pmbootstrap kconfig edit linux-pine64-pinetab2
  1. kconfig編輯完成後的核心選項會儲存到同一目錄下的config-開頭的檔案。

  2. 之後嘗試重新編譯核心。pmbootstrap編譯核心是在ARM chroot裡面做cross-compile的。

# 確認核心有符合postmarketOS要求
pmbootstrap kconfig check

# 編譯時可以加上-j8加快速度
pmbootstrap build linux-pine64-pinetab2
  1. 若你要使用截然不同的核心原始碼編譯,那麼你就得自己準備一個放在其他目錄(chroot裡面的東西不方便存取),並使用--src告訴pmbootstrap核心原始碼的路徑
pmbootstrap build linux-pine64-pinetab2 --src=/home/user/Downloads/linux-pinetab2-kernel

3. 修改裝置的APKBUILD
#

  1. 進入目錄~/.local/var/pmbootstrap/cache_git/pmaports/device/device-pine64-pinetab2,有以下內容
├── device-pine64-pinetab2
│   ├── APKBUILD
│   ├── deviceinfo
│   └── uboot-script.cmd
  1. deviceinfo主要是機型硬體方面的資訊, APKBUILD的檔案則是裝置的設定。裡面的內容參考 Wiki Device specific package的說明

  2. 比如,在subpackages新增安裝額外套件的指令(多個套件用空格分開)。這裡引用Wiki的例子,新增一個叫做$pkgname-x11的subpackage,並新增x11()函數,指示安裝xf86-video-qxl的套件。

subpackages="
$pkgname-kernel-v0:kernel_v0
$pkgname-kernel-v2:kernel_v2
$pkgname-x11
"

x11() {
	install_if="$pkgname=$pkgver-r$pkgrel xorg-server"
	depends="xf86-video-qxl"
	mkdir "$subpkgdir"
}
  1. 接著,建立device pacakge
pmbootstrap build device-pine64-pinetab2

4. 建立完整系統映像檔
#

是時候把改好的系統裝到裝置上了。

建置postmarketOS的步驟,請參考 pmbootstrap建立映像檔。通常有以下建置方法:

  1. 安裝至SD卡
  2. 用fastboot刷入
  3. 用刷機包刷入

後二個方法是給前Android裝置用的。像我的PineTab 2裝置是支援U-boot的開發板,那麼把系統寫入到SD卡或eMMC就行了。

將SD卡插到電腦上,用lsblk確認分區,並取消掛載

lsblk

sudo umount /mnt/sdcard

執行以下指令,告訴pmbootstrap直接把系統寫入到SD卡分區。中間需要設定密碼。

pmbootstrap install --dev=/dev/mmcblk0

或者只建立image映像檔

pmbootstrap install

再從tmp目錄取出映像檔

pmbootstrap export

cd /tmp/postmarketOS-export

cp *.img /home/user/Downloads

手動用dd把映像檔內容寫入到SD卡:

sudo dd if=pine64-pinetab2.img of=/dev/mmcblk0 bs=1M status=progress conv=fsync

相關文章

適合Linux觸控螢幕裝置的幾個桌面環境
智慧型手機 真Linux手機 Phosh SXMO KDE Plasma Mobile PostmarketOS Ubuntu Touch
postmarketOS通用安裝教學
智慧型手機 真Linux手機 PostmarketOS Alpine Linux
postmarketOS安裝多重桌面環境:GNOME、KDE、XFCE
智慧型手機 真Linux手機 PostmarketOS

留言板

此處提供二種留言板。點選按鈕,選擇您覺得方便的留言板。要討論程式碼請用Giscus,匿名討論請用Disqus。

這是Giscus留言板,需要Github帳號才能留言。支援markdown語法,若要上傳圖片請貼Imgur連結。您的留言會在Github Discussions向所有人公開。

這是Disqus留言板,您可能會看到Disqus強制投放的廣告。有時留言可能會被系統判定需審核,導致延遲顯示,請見諒。