diff --git a/.ci/shellcheck.sh b/.ci/shellcheck.sh index 6437b3536358af33bf7241aaffd647204aaa7b6b..d32f1f56832c867ef90ebe5ea50022f4ab6ad4c9 100755 --- a/.ci/shellcheck.sh +++ b/.ci/shellcheck.sh @@ -27,6 +27,7 @@ sh_files=" ./main/unl0kr/unlock.sh ./main/msm-firmware-loader/*.post-install ./device/community/soc-qcom-sdm845/call_audio_idle_suspend_workaround.sh + ./device/testing/device-samsung-starqltechn/*.sh $(find . -path './main/postmarketos-ui-*/*.sh') $(find . -path './main/postmarketos-ui-*/*.pre-install') diff --git a/device/testing/device-samsung-starqltechn/APKBUILD b/device/testing/device-samsung-starqltechn/APKBUILD index ef3991303c00d2c1f2ff623c73b0e8d1e8901634..544d6b0a69967d6c6147e32326ff8735b5aa1eec 100644 --- a/device/testing/device-samsung-starqltechn/APKBUILD +++ b/device/testing/device-samsung-starqltechn/APKBUILD @@ -2,14 +2,23 @@ pkgname=device-samsung-starqltechn pkgdesc="Samsung Galaxy S9 SM-G9600" pkgver=0.2 -pkgrel=2 +pkgrel=3 url="https://postmarketos.org" license="MIT" arch="aarch64" options="!check !archcheck" depends="postmarketos-base linux-postmarketos-qcom-sdm845 mkbootimg u-boot-starqltechn u-boot-tools dtc" makedepends="devicepkg-dev dtc" -source="deviceinfo boot_image.its payload_mock.dts bootscript.sh" +source=" + android_boot_image.its + boot_image.its + bootscript.sh + bootscript_android.sh + deviceinfo + find_image_and_boot.its + find_image_and_boot.sh + payload_mock.dts +" build() { devicepkg_build $startdir $pkgname @@ -27,12 +36,20 @@ package() { "$pkgdir"/usr/share/u-boot/starqltechn/ install -D -m644 "$srcdir/"bootscript.sh \ "$pkgdir"/usr/share/u-boot/starqltechn/ + install -D -m644 "$srcdir/"bootscript_android.sh \ + "$pkgdir"/usr/share/u-boot/starqltechn/ + install -D -m644 "$srcdir/"find_image_and_boot.sh \ + "$pkgdir"/usr/share/u-boot/starqltechn/ } sha512sums=" -1a51b1a75a7ab23b0011d2952e716b6d98a3a395578a99e278d8eda4c921ce015ce1f0e386a88b89e9f657edc867f00fffd11e550a91ec9ede2769d8cbfd1718 deviceinfo +31dc6cf933881ac4f9512d3e78e73c151420a307058227028c4a62f8121d6b37d0f89eb9ffa3d871a0cc50767ca1ee16e0167e82021ba61562222e94969c233b android_boot_image.its 8ecd6621738b14fecfb8bb32f06fa86053649f46d6ef7e50cdc6dd44175d459a8b5f185e0b1d6168d23d6b8474ea31ae9aaf306385eb106df6489e6838b4fbe1 boot_image.its +0b70e43e7a0d27f04fa82bcf4f6c787f28741ac02ef24baf76eddc55e09cb98022631ba1f55301074dc60dd4333995a60570ad409fe9b264b3e3d4cc4de26e6f bootscript.sh +f34880ad5645de16967f36c3c357ee258f8ae6aa31ab7bb26507e4742417ef53c4ffc90e6c5e3ad87da7400d6a4e236df12750bccf4e2caf2786654f2d76c5d7 bootscript_android.sh +c6df794c1da78d8ab0d5ddf31a7591d6fb98d15a5c72e9b335c1c21004ef78648b1b8b18c3c960fed80dc698494f8d00e2d12ec0af60820d3ddce99824dea0b3 deviceinfo +26bb890f50b6430917bb0c79fe198aa2ca8e36c618560d3867f3135bec57fd8b2dd6467c7e5d9389ac8159ccbe24f629a9c845488741fba2aa53e38b7887f6a1 find_image_and_boot.its +072bf1f3110ba57c8ee8a60c5698d0c4418c1adb7ceda894e700a098132be5b3db32e56d195022e0f059e23f7d55b7c983c611919c7ea056818a4f272e56f108 find_image_and_boot.sh ba782c324c14cf0947c752b51a607ae1b08def885b0cf0afe89d1fcade3491ab2f547551eb08bd8074f608dac46bdcdf75c5c633bd7a15e6eb63a10f30994c82 payload_mock.dts -fc9a353946a061b964b8d85ba40a55aabd5dc51ad079ce9013473fb2031f2bea7f987dc437f3e7b515e7f1eccc16c7ba0c616926f59f98382b1193e6875b50f3 bootscript.sh " diff --git a/device/testing/device-samsung-starqltechn/android_boot_image.its b/device/testing/device-samsung-starqltechn/android_boot_image.its new file mode 100644 index 0000000000000000000000000000000000000000..a49434dd1ac75d5e45c82fc467f6e37f1979fa1a --- /dev/null +++ b/device/testing/device-samsung-starqltechn/android_boot_image.its @@ -0,0 +1,68 @@ +/dts-v1/; + +/ { + description = "Samsung S9 SM-G9600 starqltechn Android FIT Image"; + #address-cells = <1>; + + images { + prebootscript { + description = "pre Boot script"; + data = /incbin/("bootscript_android.sh"); + type = "script"; + compression = "none"; + load = <0x90000000>; + entry = <0x90000000>; + hash { + algo = "sha1"; + }; + }; + bootscript { + description = "Boot script"; + data = /incbin/("bootscript_android.sh"); + type = "script"; + compression = "none"; + load = <0x90000000>; + entry = <0x90000000>; + hash { + algo = "sha1"; + }; + }; + kernel { + description = "Kernel"; + data = /incbin/("vendor_android_boot/vendor_boot.img-kernel"); + type = "kernel"; + arch = "arm64"; + os = "linux"; + compression = "gzip"; + load = <0x80200000>; + entry = <0x80200000>; + hash { + algo = "sha1"; + }; + }; + initrd { + description = "Initrd"; + compression = "none"; + data = /incbin/("vendor_android_boot/vendor_boot.img-ramdisk"); + type = "ramdisk"; + arch = "arm64"; + load = <0x84000000>; + os = "linux"; + hash { + algo = "sha1"; + }; + }; + }; + + configurations { + default = "standard"; + standard { + description = "Standard Boot"; + kernel = "kernel"; + ramdisk = "initrd"; + hash { + algo = "sha1"; + }; + }; + }; +}; diff --git a/device/testing/device-samsung-starqltechn/bootscript.sh b/device/testing/device-samsung-starqltechn/bootscript.sh index 1c50c62be9e871b8a925292d165be13a191849d2..5e445b5047dbf9790049cad9066ffa75dc6d4fb3 100644 --- a/device/testing/device-samsung-starqltechn/bootscript.sh +++ b/device/testing/device-samsung-starqltechn/bootscript.sh @@ -1,3 +1,7 @@ +#!/bin/sh + +# shellcheck disable=SC2154 + setenv bootargs 'console=tty1 loglevel=15 clk_ignore_unused' -bootm $prevbl_initrd_start_addr +bootm "$image_address" diff --git a/device/testing/device-samsung-starqltechn/bootscript_android.sh b/device/testing/device-samsung-starqltechn/bootscript_android.sh new file mode 100644 index 0000000000000000000000000000000000000000..127e519cae5d47a2c5cde7210cff87ef447eb201 --- /dev/null +++ b/device/testing/device-samsung-starqltechn/bootscript_android.sh @@ -0,0 +1,22 @@ +#!/bin/sh + +# shellcheck disable=SC2154 + +echo "Booting Android" +echo "searching for KASLR address..." + +addr=0x80000000 + +until cmp "$relocaddr" "$addr" 0x100; do + setexpr addr $addr + 0x1000 +done +echo "KASLR address is 0x$addr" +setenv bootm_low "0x$addr" +setenv bootm_size 0x5000000 + +fdt addr "$prevbl_initrd_start_addr" +fdt set "/images/kernel" "load" "<0x$addr>" +fdt set "/images/kernel" "entry" "<0x$addr>" +fdt addr "$prevbl_fdt_addr" +fdt print "/chosen" +bootm "$image_address#standard $image_address#standard $prevbl_fdt_addr" diff --git a/device/testing/device-samsung-starqltechn/deviceinfo b/device/testing/device-samsung-starqltechn/deviceinfo index 63ea8a315363971db9aae09b9ca3cf74070355a3..6f5b9ce9c93b58875df8d0dcc8a56801855b3fca 100644 --- a/device/testing/device-samsung-starqltechn/deviceinfo +++ b/device/testing/device-samsung-starqltechn/deviceinfo @@ -26,7 +26,11 @@ deviceinfo_bootimg_dtb_second="false" deviceinfo_bootimg_override_payload="u-boot.bin" deviceinfo_bootimg_override_payload_compression="gzip" deviceinfo_bootimg_override_payload_append_dtb="payload_mock.dtb" -deviceinfo_bootimg_override_initramfs="boot_image.itb" +deviceinfo_bootimg_override_initramfs="find_image_and_boot.itb android_boot_image.itb boot_image.itb" +deviceinfo_bootimg_override_header_info_using_vendor_image="true" +deviceinfo_bootimg_vendor_android_boot_image="vendor_boot.img" +deviceinfo_bootimg_vendor_dependent="android_boot_image.itb" +deviceinfo_bootimg_vendor_device_tree_identifiers="qcom,msm-id\s*=\s*<0x141\s*0x20001>; qcom,board-id\s*=\s*<0x08\s*0x0e>;" deviceinfo_flash_offset_base="0x00000000" deviceinfo_flash_offset_kernel="0x00008000" deviceinfo_flash_offset_ramdisk="0x02000000" diff --git a/device/testing/device-samsung-starqltechn/find_image_and_boot.its b/device/testing/device-samsung-starqltechn/find_image_and_boot.its new file mode 100644 index 0000000000000000000000000000000000000000..c315e6d5a0c607bc704f6e432472f8ae7fdeb38c --- /dev/null +++ b/device/testing/device-samsung-starqltechn/find_image_and_boot.its @@ -0,0 +1,32 @@ +/dts-v1/; + +/ { + description = "Samsung S9 SM-G9600 starqltechn boot script"; + #address-cells = <1>; + + images { + bootscript { + description = "Boot script"; + data = /incbin/("find_image_and_boot.sh"); + type = "script"; + compression = "none"; + load = <0x90000000>; + entry = <0x90000000>; + hash { + algo = "sha1"; + }; + }; + + prebootscript { + description = "pre boot script"; + data = /incbin/("find_image_and_boot.sh"); + type = "script"; + compression = "none"; + load = <0x90000000>; + entry = <0x90000000>; + hash { + algo = "sha1"; + }; + }; + }; +}; diff --git a/device/testing/device-samsung-starqltechn/find_image_and_boot.sh b/device/testing/device-samsung-starqltechn/find_image_and_boot.sh new file mode 100644 index 0000000000000000000000000000000000000000..2fffed904285eae950c594c177091f59c7103930 --- /dev/null +++ b/device/testing/device-samsung-starqltechn/find_image_and_boot.sh @@ -0,0 +1,54 @@ +#!/bin/sh + +# shellcheck disable=SC2154 +# shellcheck disable=SC3046 +# shellcheck disable=SC2035 +# shellcheck disable=SC1090 + +echo "searching for FIT images..." + +ramdisk_addr=0xa2000000 +image_addresses_start=0x80000000 +image_addresses=$image_addresses_start +image_number=0 + +doodfeed=0xedfe0dd0 +if itest $ramdisk_addr <= 0xa6001000; then + echo "true" +fi + +if itest $ramdisk_addr >= 0xa0001000; then + echo "false" +fi + +while itest $ramdisk_addr <= 0xa6001000; do + if itest *$ramdisk_addr == $doodfeed; then + echo "address at $ramdisk_addr matches" + if itest $image_number != 0; then + echo "######## image $image_number found at $ramdisk_addr ########" + iminfo $ramdisk_addr + mw $image_addresses $ramdisk_addr 1 + setexpr image_addresses $image_addresses + 4 + fi + setexpr image_number $image_number + 1 + fi + setexpr ramdisk_addr $ramdisk_addr + 0x1000 +done + +if itest $image_number <= 1; then + echo "No images found!" +fi + +if itest "${key_vol_down}" -eq "1"; then + echo "key down pressed, booting 2nd image" + setexpr image_address $image_addresses_start + 4 + setexpr image_address *"$image_address" + echo "image_address: $image_address" + source "$image_address":bootscript +else + echo "key down NOT pressed, booting 1st image" + setexpr image_address $image_addresses_start + setexpr image_address *"$image_address" + echo "image_address: $image_address" + source "$image_address":bootscript +fi