lineageのソースツリーに組み込んでboot.imgを作るのが面倒なのでカーネルソースとhacking Toolでどうにかならないかのメモ
lineageのgccは/usr/bin/phython を呼び出すらしい。 /usr/bin/pythonが必要。それもpython3
/usr/bin/pythonは/usr/bin/python3.8 だよと設定する
# update-alternatives --install /usr/bin/python python /usr/bin/python3.8 0 In file included from drivers/gud/TlcTui/platforms/exynos7420/../../../../video/exynos/decon/decon.h:40:0, from drivers/gud/TlcTui/platforms/exynos7420/tui-hal.c:28: drivers/gud/TlcTui/platforms/exynos7420/../../../../video/exynos/decon/dsim.h:167:16: error: duplicate member 'alpm_support' unsigned int alpm_support; // 0 : unsupport, 1 : 30hz, 2 : 1hz diff -u ./drivers/gud/TlcTui/platforms/exynos7420/tui-hal.c dsim.h #ifdef CONFIG_LCD_ALPM unsigned int alpm; unsigned int current_alpm; struct mutex alpm_lock; unsigned char mtpForALPM[36]; unsigned char prev_VT[2]; unsigned char alpm_support; // because zero2 use 2panel(ha2, hf3) #endif #ifdef CONFIG_LCD_DOZE_MODE unsigned int alpm_support; // 0 : unsupport, 1 : 30hz, 2 : 1hz unsigned int hlpm_support; // 0 : unsupport, 1 : 30hz unsigned int alpm_mode; unsigned int curr_alpm_mode; #endif これからするとLCD_ALPMを使う場合は、CONFIG_LCD_DOZE_MODEは使わない設定になる。 -CONFIG_LCD_DOZE_MODE=y +#CONFIG_LCD_DOZE_MODE is not set 他でコンパイルエラーが出る。lineage 15.1 15.1では #CONFIG_LCD_DOZE_MODE is not set にしている TWRPのSprint版からカーネルとdt.img(dtsの集合体)を差し替える まずは https://github.com/xiaolu/mkbootimg_tools で出来るか挑戦 $ git clone https://github.com/xiaolu/mkbootimg_tools unpack先のフォルダ作成 $ cd ~/work $ mkdir test unpack $ ~/mkbootimg_tools/mkboot /mnt/windows/twrp-3.2.1-0-zerofltespr.img test Unpack & decompress /mnt/windows/twrp-3.2.1-0-zerofltespr.img to test board : SYSMAGIC002RU kernel : kernel ramdisk : ramdisk page size : 2048 kernel size : 18304264 ramdisk size : 6394582 dtb size : 720896 base : 0x10000000 kernel offset : 0x00008000 ramdisk offset : 0x01000000 tags offset : 0x00000100 dtb img : dt.img cmd line : ramdisk is gzip format. Unpack completed. unpackはできた感じ。 $ ls dt.img img_info kernel ramdisk ramdisk.packed dt.imgを作る カーネルのmake 終了後、dtbファイルが作成されたことを確認する ls arch/arm64/boot/dts/*.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_00.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_03.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_01.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_04.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_02.dtb ls arch/arm64/boot/ Image Image.gz Image.gz-dtb Makefile dts install.sh Image.gz-dtbってなんだ?grepすると以下のようになっていた。 カーネルと各dtbファイルを連結させているファイルになっている。 使えない。 arch/arm64/boot/.Image.gz-dtb.cmd:cmd_arch/arm64/boot/Image.gz-dtb := (cat arch/arm64/boot/Image.gz arch/arm64/boot/dts/exynos7420-zeroflte_jpn_00.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_01.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_02.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_03.dtb arch/arm64/boot/dts/exynos7420-zeroflte_jpn_04.dtb > arch/arm64/boot/Image.gz-dtb) || (rm -f arch/arm64/boot/Image.gz-dtb; false) dtbToolを実行する dtbtoolは以下のようなコマンド形式になっているが、qcomが前提になっており、exynosには使えなかった。 ./dtbTool -s $(BOARD_KERNEL_PAGESIZE) -o $(OUT_DIR)/arch/$(ARCH)/boot/dtb -p $(OUT_DIR)/scripts/dtc/ $(OUT_DIR)/arch/$(ARCH)/boot/dts/ ~/mkbootimg_tools/dtbTool -s 2048 -o arch/arm64/boot/dt.img -p scripts/dtc/ arch/arm64/boot/dts/ Found file: exynos7420-zeroflte_jpn_00.dtb ... skip, failed to scan for 'qcom,msm-id = <' tag ... exynos用に作っている人を探す git clone https://github.com/kumajaya/mkdtbhbootimg/ mkdir out ~/mkdtbhbootimg/bin/unpackbootimg -i /mnt/windows/twrp-3.2.1-0-zerofltespr.img -o out $ ~/mkdtbhbootimg/bin/mkdtbhbootimg error: no output filename specified usage: mkbootimg --kernel <filename> --ramdisk <filename> [ --second <2ndbootloader-filename> ] [ --cmdline <kernel-commandline> ] [ --board <boardname> ] [ --base <address> ] [ --pagesize <pagesize> ] [ --ramdisk_offset <address> ] [ --dt_dir <dtb path> ] [ --dt <filename> ] [ --signature <filename> ] -o|--output <filename> 使っている例 https://github.com/kumajaya/android_kernel_samsung_universal5422/blob/master/README.md $ mkdtbhbootimg --kernel zImage \ --ramdisk boot/boot.img-ramdisk.gz \ --dt_dir /home/user/android/build/universal5422/arch/arm/boot/dts/ \ -o boot-new.img ~/mkdtbhbootimg/bin/mkdtbhbootimg --kernel android_kernel_samsung_exynos7420-8.1/arch/arm64/boot/Image.gz \ --ramdisk boot/boot.img-ramdisk.gz \ --ramdisk work/out/twrp-3.2.1-0-zerofltespr.img-ramdisk.gz \ --dt_dir android_kernel_samsung_exynos7420-8.1/arch/arm64/boot/dts \ -o boot-new.img mkdtbhbootimg: model_info-platform of \ android_kernel_samsung_exynos7420-8.1/arch/arm64/boot/dts/exynos7420-zeroflte_jpn_00.dtb is invalid, skipping このプログラムは、ソースの中に以下の定義があり合致していないとダメらしい #define DTBH_MAGIC "DTBH" #define DTBH_VERSION 2 #define DTBH_PLATFORM "k3g" #define DTBH_SUBTYPE "k3g_eur_open" /* Hardcoded entry */ #define DTBH_PLATFORM_CODE 0x1e92 #define DTBH_SUBTYPE_CODE 0x7d64f612 DTBH_PLATFORMやDTBH_SUBTYPEをみている、それもコードで model_info-platform = "android"; model_info-subtype = "samsung"; https://github.com/jesec/android_device_samsung_universal9810-common/blob/lineage-16.0/include/samsung_dtbh.h #define DTBH_MAGIC "DTBH" #define DTBH_VERSION 2 #define DTBH_PLATFORM "android" #define DTBH_SUBTYPE "samsung" /* Hardcoded entry */ #define DTBH_PLATFORM_CODE 0x000050a6 #define DTBH_SUBTYPE_CODE 0x217584da /* DTBH_MAGIC + DTBH_VERSION + DTB counts */ #define DT_HEADER_PHYS_SIZE 12 https://github.com/Exhigh/android_device_samsung_exynos7420-common/blob/nx-9.0/include/samsung_dtbh.h #define DTBH_MAGIC "DTBH" #define DTBH_VERSION 2 #define DTBH_PLATFORM "android" #define DTBH_SUBTYPE "samsung" /* Hardcoded entry */ #define DTBH_PLATFORM_CODE 0x000050a6 #define DTBH_SUBTYPE_CODE 0x217584da /* DTBH_MAGIC + DTBH_VERSION + DTB counts */ #define DT_HEADER_PHYS_SIZE 12 つまりこのソースはコンパイルするしかない。そのためにはlineageのソースの中で実装する必要がある Android.mk LOCAL_MODULE := mkdtbhbootimg device.mk に追記するしかない。