柚坛社区
你的玩机资源库
1 | adb reboot fastboot BASH |
1 | fastboot flash rawdump ArchLinuxARM-APS1.img BASH |
1 | fastboot flash boot dualboot.img BASH |
1 | fastboot reboot BASH |
功能 | 可用性 | 备注 |
---|---|---|
GPU | ✅ | |
DP | ✅ | |
扬声器 | ✅ | |
麦克风 | ✅ | |
游戏控制器 | ✅ | |
亮度调节 | ✅ | 睡眠有问题,概率开机没背光 |
风扇 | ✅ | |
SD卡 | ✅ | |
触摸 | ✅ | |
WiFi | ✅ | |
蓝牙 | ❌ | |
传感器 | ❌ | |
指纹 | ❌ |
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 | &gpu_opp_table { /* Additional speedbin for Adreno A32 719000000 RPMH_REGULATOR_LEVEL_SVS_L2 746000000 RPMH_REGULATOR_LEVEL_NOM 794000000 RPMH_REGULATOR_LEVEL_NOM_L1 827000000 RPMH_REGULATOR_LEVEL_TURBO 860000000 RPMH_REGULATOR_LEVEL_TURBO_L1 1000000000 RPMH_REGULATOR_LEVEL_TURBO_L2 */ opp-719000000 { opp-hz = /bits/ 64 <719000000>; opp-level = <RPMH_REGULATOR_LEVEL_SVS_L2>; opp-peak-kBps = <10687500>; // Level 7 }; opp-746000000 { opp-hz = /bits/ 64 <746000000>; opp-level = <RPMH_REGULATOR_LEVEL_NOM>; opp-peak-kBps = <10687500>; // Level 7 }; opp-794000000 { opp-hz = /bits/ 64 <794000000>; opp-level = <RPMH_REGULATOR_LEVEL_NOM_L1>; opp-peak-kBps = <14398438>; // Level 8 }; // opp-827000000 { // opp-hz = /bits/ 64 <827000000>; // opp-level = <RPMH_REGULATOR_LEVEL_TURBO>; // opp-peak-kBps = <16500000>; // Level 9 // }; // opp-860000000 { // opp-hz = /bits/ 64 <860000000>; // opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L1>; // opp-peak-kBps = <16500000>; // Level 9 // }; // opp-1000000000 { // opp-hz = /bits/ 64 <1000000000>; // opp-level = <RPMH_REGULATOR_LEVEL_TURBO_L2>; // opp-peak-kBps = <16500000>; // Level 9 // }; }; C |
通常你可能需要安装dkms或者需要修改内核config,这里给出方法
1 2 | git clone --depth=1 https://github.com/sunflower2333/linux linux-aps cd linux-aps BASH |
1 | sudo apt install base-devel xmlto kmod bc libelf git cpio tar xz BASH |
1 | sudo pacman -S base-devel xmlto kmod bc libelf git cpio tar xz BASH |
1 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=$PWD/../OUT -j$(nproc) menuconfig BASH |
1 | make ARCH=arm64 LLVM=1 LLVM_IAS=1 O=$PWD/../OUT -j$(nproc) menuconfig BASH |
1 2 3 4 | # 编译内核 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=$PWD/../OUT -j$(nproc) # 打包deb,没在arch上面测试过 make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=$PWD/OUT -j$(nproc) q_defconfig bindeb-pkg BASH |
1 | make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- O=$PWD/../OUT -j$(nproc) savedefconfig BASH |
可能有些人会比较好奇dualboot镜像是如何打包的,当然也可能没有人。
介绍两个我们Project Aloha的项目,分别是mu_aloha_platforms和十分明显的是,这个boot里面塞了一个安卓内核和一个uefi,然后uefi里面塞了一个linux内核和设备树。
至于为什么不用ABL+KernelWrapper直接启动,因为ABL要实现continous splash,不会关闭MDP的
时钟和IOMMU,所以我要用UEFI把这些东西关掉,不然起不来GPU。至于为什么不直接用ABL启动,除了
上面的原因外,还有需要擦dtbo分区等一大堆烂事,秉持着从简的原则(其实就是懒),你也
不想备份和擦除一些乱七八糟的分区吧。
1 | cp ~/kernel/OUT/arch/arm64/boot/dts/qcom/sm8550-ayaneo-ps.dtb ~/mu_aloha_platforms/Platforms/Device/ayaneo-aps/DeviceTreeBlob/Linux/ BASH |
1 | cp ~/kernel/OUT/arch/arm64/boot/Image ~/mu_aloha_platforms/Platforms/AndromedaPkg/UFP/ufpdevicefw.efi BASH |
1 2 3 4 5 6 7 8 | -Size = 0x00400000|gArmTokenSpaceGuid.PcdFdSize #The size in bytes of the FLASH Device +Size = 0x03400000|gArmTokenSpaceGuid.PcdFdSize #The size in bytes of the FLASH Device ... -NumBlocks = 0x400 +NumBlocks = 0x3400 ... -0x00000000|0x00400000 +0x00000000|0x3400000 DIFF |
1 2 3 4 5 6 7 8 9 | --- a/build_cfg/sm8550.json +++ b/build_cfg/sm8550.json @@ -3,6 +3,6 @@ "package": "KailuaPkg", "bootshim": { "UEFI_BASE": "0xC7CC0000", - "UEFI_SIZE": "0x00400000" + "UEFI_SIZE": "0x03400000" } DIFF |
1 2 | -gAndromedaPkgTokenSpaceGuid.PcdDisplayCallerExitDisableDisplay|FALSE +gAndromedaPkgTokenSpaceGuid.PcdDisplayCallerExitDisableDisplay|TRUE DIFF |
1 2 3 4 5 6 7 8 9 | INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/Binaries/QcomPkg/Drivers/DDRInfoDxe/DDRInfoDxe.inf + INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/PatchedBinaries/DisplayDxe.inf + INF AndromedaPkg/Driver/DisplayCallerDxe/DisplayCallerDxe.inf # INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/Binaries/QcomPkg/Drivers/TzDxe/FeatureEnablerDxe.inf ... - INF AndromedaPkg/Driver/SimpleFbDxe/SimpleFbDxe.inf + #INF AndromedaPkg/Driver/SimpleFbDxe/SimpleFbDxe.inf DIFF |
1 2 3 4 5 6 7 8 | -INF AndromedaPkg/Driver/SimpleFbDxe/SimpleFbDxe.inf +#INF AndromedaPkg/Driver/SimpleFbDxe/SimpleFbDxe.inf INF AndromedaPkg/Driver/RamPartitionDxe/RamPartitionDxe.inf ... INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/PatchedBinaries/PmicDxeLa.inf #INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/PatchedBinaries/QcomChargerDxeLA.inf +INF $(PACKAGE_NAME)/Device/$(TARGET_DEVICE)/PatchedBinaries/DisplayDxe.inf +INF AndromedaPkg/Driver/DisplayCallerDxe/DisplayCallerDxe.inf DIFF |
1 2 | - USE_SCREEN_FOR_SERIAL_OUTPUT = 0 + USE_SCREEN_FOR_SERIAL_OUTPUT = 1 DIFF |
1 2 | # 临时启动 fastboot boot Build/KailuaPkg/ayaneo-aps.img BASH |
1 2 3 4 | # 刷入测试 adb reboot fastboot fastboot flash boot Build/KailuaPkg/ayaneo-aps.img fastboot reboot BASH |
1 | fastboot getvar current-slot BASH |
1 2 3 | mkdir ayaboot && cd ayaboot /path/to/your/magiskboot unpack boot_b cp kernel okernel # 备份原内核 BASH |
1 2 3 4 5 6 7 8 9 10 11 | ❯ ~/magiskboot_x86 unpack boot_b Parsing boot image: [boot_b] HEADER_VER [4] KERNEL_SZ [46955008] RAMDISK_SZ [0] OS_VERSION [13.0.0] OS_PATCH_LEVEL [2023-06] PAGESIZE [4096] CMDLINE [] KERNEL_FMT [raw] VBMETA LOG |
1 2 3 | StackBase=0xC7CC0000 -StackSize=0x00400000 +StackSize=0x03400000 DIFF |
1 | Usage: <Kernel Image to Patch> <UEFI FD Image> <Patched Kernel Image Destination> <Config File> <Shell Code File> XML |
1 2 | cd DualBootKernelPatcher/out/ ./DualBootKernelPatcher ~/ayaboot/okernel ~/mu_aloha_platforms/Build/KailuaPkg/DEBUG_CLANGPDB/FV/SM8550_EFI.fd ~/ayaboot/kernel ../Config/DualBoot.Sm8550.cfg ShellCode/ShellCode.AYAPS.bin BASH |
1 2 | cd ~/ayaboot /path/to/your/magiskboot repack boot_b newboot SHELL |
1 2 3 | adb reboot fastboot fastboot flash boot boot_b fastboot erase rawdump SHELL |