无题
|字数总计:1.4k|阅读时长:7分钟|阅读量:|
安装 pmbootstrap 工具
1 2 3 4 5 6 7
| cd ~/y927 git clone https://gitlab.postmarketos.org/postmarketOS/pmbootstrap.git --depth 1 cd pmbootstrap uv tool install .
pmbootstrap --version
|
克隆 pmaports
1 2
| cd ~/y927 git clone https://gitlab.postmarketos.org/postmarketOS/pmaports.git --depth 1
|
生成 pmbootstrap 配置文件
1 2 3 4 5
| mkdir -p ~/y927/pmbootstrap-workdir && cd ~/y927/pmbootstrap-workdir pmbootstrap -w ~/y927/pmbootstrap-workdir \ -p ~/y927/pmaports \ --details-to-stdout \ init
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| 路径:默认回车确认 Release channel:edge Vendor:vivo Device Name: y927 Type: mainline arch: aarch64 manufacturer: vivo name: vivo Y927 year: 2015 chassis: handset flash method: fastboot boot.img:/home/zzq/y927/linux/boot-phase-8.img user: user audio: pulseaudio (default) wifi: wpa_supplicant (default) usb mode: developer (default) UI:buffyboard systemd: default 附加包:vim,curl,htop,ethtool,tcpdump,usbutils 时区:Asia/Shanghai locale: en_US hostname: vivo-y927 编译旧包:y 清空旧 chroot:y
|
1 2 3 4 5
| pmbootstrap -c ~/.config/pmbootstrap_v3.cfg config kernel linux-postmarketos-y927 pmbootstrap -c ~/.config/pmbootstrap_v3.cfg config build_default_device_arch true pmbootstrap -c ~/.config/pmbootstrap_v3.cfg config systemd never pmbootstrap -c ~/.config/pmbootstrap_v3.cfg config locale en_US cat ~/.config/pmbootstrap_v3.cfg
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| [pmbootstrap] aports = /home/zzq/y927/pmaports build_default_device_arch = True device = vivo-y927 extra_packages = vim,curl,htop,ethtool,tcpdump,usbutils is_default_channel = False kernel = linux-postmarketos-y927 locale = en_US systemd = never timezone = Asia/Shanghai ui = buffyboard work = /home/zzq/y927/pmbootstrap-workdir
[providers]
[mirrors]
|
补充 deviceinfo 文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| DEVINFO=~/y927/pmaports/device/testing/device-vivo-y927/deviceinfo
sed -i 's|^deviceinfo_dtb=""$|deviceinfo_dtb="qcom/msm8916-vivo-y927"|' "$DEVINFO"
cat >> "$DEVINFO" << 'EOF' deviceinfo_drm="true" deviceinfo_screen_width="720" deviceinfo_screen_height="1280" EOF
cat "$DEVINFO"
|
修改APKBUILD文件
1 2 3
| sed -i 's|linux-CHANGEME|linux-postmarketos-y927|' \ ~/y927/pmaports/device/testing/device-vivo-y927/APKBUILD cat ~/y927/pmaports/device/testing/device-vivo-y927/APKBUILD
|
填sha512sums
1 2 3 4 5 6
| pmbootstrap -c ~/.config/pmbootstrap_v3.cfg \ -p ~/y927/pmaports \ checksum device-vivo-y927
cat ~/y927/pmaports/device/testing/device-vivo-y927/APKBUILD
|
建立 modules-initfs
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| MODULES=~/y927/pmaports/device/testing/device-vivo-y927/modules-initfs
if [ ! -f "$MODULES" ]; then cat > "$MODULES" << 'EOF'
kernel/net/cdc_ncm.ko kernel/drivers/usb/gadget/function/usb_f_ncm.ko kernel/drivers/usb/gadget/function/usb_f_ecm.ko kernel/drivers/usb/gadget/function/usb_f_rndis.ko kernel/drivers/usb/gadget/libcomposite.ko kernel/drivers/usb/gadget/g_ether.ko
kernel/drivers/usb/host/xhci-plat-hcd.ko EOF fi
|
建立 linux-postmarketos-y927/APKBUILD 文件(7.0 移植版)
7.0 内核直接使用 ~/y927/linux 本地仓库(不推 GitHub),通过 git archive 打包出 tarball,APKBUILD 的 prepare() 自动检测并更新。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
|
maintainer="zzq <i@zhangzqs.cn>" _flavor="postmarketos-y927" pkgname=linux-$_flavor pkgver=7.0 pkgrel=0 pkgdesc="Mainline 7.0 kernel for vivo Y927 (msm8916-mainline local fork)" arch="aarch64" url="https://github.com/msm8916-mainline/linux" license="GPL-2.0-only" options="!strip !check !tracedeps pmb:cross-native pmb:kconfigcheck-community pmb:kconfigcheck-uefi pmb:kconfigcheck-usb "
makedepends=" bison findutils flex gmp-dev mpc1-dev mpfr-dev openssl-dev perl postmarketos-installkernel python3 zstd "
_local_repo="$HOME/y927/linux" _local_branch="y927/7.0" _local_tarball="linux-7.0-msm8916.tar.gz"
source=" $_local_tarball config-$_flavor.aarch64 "
_carch="arm64" builddir="$srcdir/linux-7.0-msm8916"
prepare() { if [ ! -f "$srcdir/$_local_tarball" ] || \ [ "$_local_repo/.git/HEAD" -nt "$srcdir/$_local_tarball" ]; then echo "[prepare] Archiving $_local_repo (branch $_local_branch)" cd "$_local_repo" git checkout "$_local_branch" >/dev/null 2>&1 git archive --format=tar.gz --prefix=linux-7.0-msm8916/ HEAD \ > "$srcdir/$_local_tarball" fi
default_prepare cp "$srcdir/config-$_flavor.aarch64" .config }
build() { unset LDFLAGS make ARCH="$_carch" CC="${CC:-gcc}" \ KBUILD_BUILD_VERSION=$((pkgrel + 1)) }
package() { mkdir -p "$pkgdir"/boot
_install_targets="modules_install dtbs_install"
if [ -e "$builddir/arch/$_carch/boot/vmlinuz.efi" ]; then install -Dm644 "$builddir/arch/$_carch/boot/vmlinuz.efi" \ "$pkgdir/boot/linux.efi"
install -Dm644 "$builddir/arch/$_carch/boot/vmlinuz" \ "$pkgdir/boot/vmlinuz" elif [ "$_carch" = "arm64" ]; then echo "WARNING: CONFIG_ZBOOT not enabled!" install -Dm644 "$builddir/arch/$_carch/boot/Image.gz" \ "$pkgdir/boot/vmlinuz" fi
make $_install_targets \ ARCH="$_carch" \ INSTALL_PATH="$pkgdir"/boot \ INSTALL_MOD_PATH="$pkgdir" \ INSTALL_MOD_STRIP=1 \ INSTALL_DTBS_PATH="$pkgdir"/boot/dtbs rm -f "$pkgdir"/lib/modules/*/build "$pkgdir"/lib/modules/*/source
install -D "$builddir"/include/config/kernel.release \ "$pkgdir"/usr/share/kernel/$_flavor/kernel.release }
sha512sums=" SKIP $_local_tarball <CONFIG_SHA512> config-$_flavor.aarch64 "
|
准备 config 和 tarball(第一次 build 前必做)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| cd ~/y927/linux git checkout y927/7.0
make defconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
./scripts/config --enable CONFIG_DRM_PANEL_HX8394A ./scripts/config --enable CONFIG_BACKLIGHT_GPIO ./scripts/config --enable CONFIG_TOUCHSCREEN_GOODIX ./scripts/config --enable CONFIG_BATTERY_PM8916_BMS_VM ./scripts/config --enable CONFIG_CHARGER_PM8916_LBC ./scripts/config --enable CONFIG_WCNSS_CORE ./scripts/config --enable CONFIG_WCN36XX ./scripts/config --enable CONFIG_DRM_MSM ./scripts/config --enable CONFIG_DRM_MSM_GPU_STATE ./scripts/config --enable CONFIG_USB_CDC_NCM ./scripts/config --enable CONFIG_USB_NET_RNDIS_HOST ./scripts/config --enable CONFIG_USB_ETH ./scripts/config --enable CONFIG_SND_SOC_APQ8016_SBC ./scripts/config --enable CONFIG_SND_SOC_LPASS_CPU ./scripts/config --enable CONFIG_SND_SOC_LPASS_PLATFORM ./scripts/config --enable CONFIG_SND_SOC_LPASS_APQ8016 ./scripts/config --enable CONFIG_SND_SOC_MSM8916_WCD_DIGITAL ./scripts/config --enable CONFIG_SND_SOC_MSM8916_WCD_ANALOG ./scripts/config --enable CONFIG_SND_SOC_TFA989X ./scripts/config --enable CONFIG_SND_SOC_AK4375 ./scripts/config --enable CONFIG_REGULATOR_FIXED_VOLTAGE ./scripts/config --enable CONFIG_INPUT_EVDEV ./scripts/config --enable CONFIG_USB_G_NCM ./scripts/config --enable CONFIG_USB_GADGET
make savedefconfig ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu-
cp defconfig ~/y927/pmaports/device/testing/linux-postmarketos-y927/config-postmarketos-y927.aarch64
cd ~/y927/linux git archive --format=tar.gz --prefix=linux-7.0-msm8916/ HEAD \ > ~/y927/pmaports/device/testing/linux-postmarketos-y927/linux-7.0-msm8916.tar.gz
cd ~/y927/pmaports/device/testing/linux-postmarketos-y927 sha512sum config-postmarketos-y927.aarch64
|
第一次 build
1 2 3 4
| cd ~/y927 pmbootstrap -c ~/.config/pmbootstrap_v3.cfg \ -p ~/y927/pmaports \ build linux-postmarketos-y927 --force
|
后续 build(更简单)
1 2 3 4 5 6 7 8 9 10
| cd ~/y927/linux
git add -A && git commit -m "y927: ..."
cd ~/y927 pmbootstrap -c ~/.config/pmbootstrap_v3.cfg \ -p ~/y927/pmaports \ build linux-postmarketos-y927 --force
|
刷入测试
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| pmbootstrap -c ~/.config/pmbootstrap_v3.cfg \ -p ~/y927/pmaports \ export
fastboot flash boot ~/y927/pmbootstrap-workdir/chroot_native/tmp/postmarketOS-boot-vivo-y927.img fastboot reboot
ssh user@172.16.42.1
|