Samsung Galaxy S9 (samsung-starqltechn): Difference between revisions
Dsankouski (talk | contribs) |
Dsankouski (talk | contribs) add device photo |
||
Line 3: | Line 3: | ||
| name = Galaxy S9 (SM-G9600/DS) | | name = Galaxy S9 (SM-G9600/DS) | ||
| codename = samsung-starqltechn | | codename = samsung-starqltechn | ||
| image = | | image = File:SM-G9600.jpg | ||
| imagecaption = | | imagecaption = SM-G9600 | ||
| releaseyear = 2018 | | releaseyear = 2018 | ||
| originalsoftware = Android 8 - 10 | | originalsoftware = Android 8 - 10 |
Revision as of 18:09, 20 February 2022
![]() SM-G9600 | |
Manufacturer | Samsung |
---|---|
Name |
Galaxy S9 (SM-G9600/ DS) |
Codename | samsung-starqltechn |
Released | 2018 |
Hardware | |
Chipset | Qualcomm SDM845 Snapdragon 845 |
CPU | Octa-core (4x 2.8 GHz Kryo 385 Gold & 4x 1.7 GHz Kryo 385 Silver) |
GPU | Adreno 630 |
Display | 5.8 inch 18.5:9, 2960 x 1440 pixel 568 PPI, capacitive touchscreen, 10 multi-touch points, Super AMOLED, Corning Gorilla Glass 5, glossy: yes |
Storage | 64 GB |
Memory | 4 GB |
Architecture | aarch64 |
Software | |
Original software | Android 8 - 10 |
postmarketOS | |
Category | testing |
Pre-built images | no |
Mainline | no |
Flashing |
Broken |
---|---|
USB Networking |
Works |
Internal storage |
No data |
SD card |
No data |
Battery |
No data |
Screen |
Broken |
Touchscreen |
No data |
Multimedia | |
3D Acceleration |
No data |
Audio |
No data |
Camera |
No data |
Camera Flash |
No data |
Connectivity | |
WiFi |
Broken |
Bluetooth |
No data |
GPS |
No data |
NFC |
No data |
Modem | |
Calls |
No data |
SMS |
No data |
Mobile data |
No data |
Miscellaneous | |
FDE |
No data |
USB OTG |
No data |
HDMI/DP |
No data |
Sensors | |
Accelerometer |
No data |
Magnetometer |
No data |
Ambient Light |
No data |
Proximity |
No data |
Hall Effect |
No data |
Haptics |
No data |
Barometer |
No data |
Contributors
- dsankouski
Maintainer(s)
Users owning this device
- Dsankouski
- Retrocountry (Notes: (almost) Running PostmarketOS!)
- Zephyr1112 (Notes: Backup device, AOSP 13, 4/64GB)
How to enter flash mode
Installation
Flash boot image from TWRP
adb push $BOOT_IMAGE_PATH /tmp/boot.img && adb -d shell 'dd of=/dev/block/platform/soc/1d84000.ufshc/by-name/boot if=/tmp/boot.img'
Mainline
Mainline kernel can be booted with stock bootloader. Logs may be viewed only from pstore(ramoops) You need to assemble android boot image.
Assembling boot image
- clone mainline sources
- build kernel. See also Compiling_kernels_with_envkernel.sh
- append dtb to gzipped kernel image
- pushd .output/arch/arm64/boot
cat Image.gz dts/qcom/sdm845-samsung-starqltechn.dtb > Image.gz-dtb
- generate initramfs image
- make android bootimage
mkbootimg --base 0x0 --kernel_offset 0x00008000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize 4096 --second_offset 0x00f00000 --ramdisk "$INITRAMFS" --kernel Image.gz-dtb -o boot.img
Boot
Flash boot image from twrp to boot partition. Reboot to system. Phone will stay on manufacturer logo. Check logs in pstore. If there's only twrp logs in pstore, try to reboot phone with power+volume down, after rebooting to system from twrp.
U-boot
U-boot can be used as a second stage bootloader, and also a tool to experiment with uart on usb.
Using u-boot as a second stage bootloader involves packing u-boot with it's payload in a single file. That file is used as a payload for stock bootloader.
Second stage bootloader
In this section, we'll generate an android boot image with u-boot as second stage bootloader for linux kernel in FIT image format. Kernel logs accessible via pstore(ramoops) and framebuffer console.
Build u-boot
- clone u-boot repo
- apply save previous bootloader data patch series
- run
make starqltechn_defconfig && make
- create payload for SBOOT by gzipping and appending dtb:
gzip -k u-boot.bin
cat u-boot.bin.gz u-boot.dtb > u-boot.gz-dtb
Build kernel
- build starqltechn kernel with envkernel.sh
Generate android boot image
- create bootscript.sh file:
bootm $prevbl_initrd_start_addr
- build ramdisk
- create boot.its file, describing u-boot's payload:
/dts-v1/; / { description = "Samsung S9 SM-G9600 starqltechn FIT Image"; #address-cells = <1>; images { bootscript { description = "Boot script"; data = /incbin/("bootscript.sh"); type = "script"; compression = "none"; load = <0x90000000>; entry = <0x90000000>; hash { algo = "sha1"; }; }; kernel { description = "Kernel"; //data = /incbin/("Image.gz"); data = /incbin/(".output/arch/arm64/boot/Image.gz"); type = "kernel"; arch = "arm64"; os = "linux"; compression = "gzip"; load = <0x80000000>; entry = <0x80000000>; hash { algo = "sha1"; }; }; fdt { description = "DTB"; data = /incbin/(".output/arch/arm64/boot/dts/qcom/sdm845-samsung-starqltechn.dtb"); type = "flat_dt"; arch = "arm64"; compression = "none"; load = <0x82a80000>; entry = <0x82a80000>; hash { algo = "sha1"; }; }; initrd { description = "Initrd"; data = /incbin/("<ramdisk path>"); type = "ramdisk"; arch = "arm64"; os = "linux"; compression = "none"; hash { algo = "sha1"; }; }; }; configurations { default = "standard"; standard { description = "Standard Boot"; kernel = "kernel"; fdt = "fdt"; ramdisk = "initrd"; hash { algo = "sha1"; }; }; }; };
- build u-boot payload
mkimage -f boot.its boot.itb
- make android boot image:
mkbootimg --base 0x0 --kernel_offset 0x00008000 --ramdisk_offset 0x02000000 --tags_offset 0x01e00000 --pagesize 4096 --second_offset 0x00f00000 \
--ramdisk boot.itb \
--kernel u-boot.gz-dtb -o boot.img
Running
- flash android boot image.
- Reboot to system, give it some time to boot
- Read logs. See Getting logs from pstore
Development
See also Initramfs_development
Experimenting: procedure with usb-uart cable
This intendent for getting uart console at u-boot stage, with ability to load and boot kernel to RAM via uart. Initramfs console in possible. This way also allows you to use phone as daily driver during development, since storage is not touched
Building
- build u-boot.bin file. Follow u-boot docs installation section
- build mainline kernel
- clone sources
source /home/dzmitry/side/pmos/pmbootstrap/helpers/envkernel.sh
make defconfig
make
- assemble initramfs
TODO: assemble u-boot fit image: Installing
This section is useless for now, because currently there's no way to tell if something is alive, when you boot from the flash. See next section.
Booting kernel and getting console
Is performed with kexec-similar stuff for now. See guide for that method. Remember, you should have a cable from in `UART USB-debug cable schematic` section of Samsung_Galaxy_A5_2017_(samsung-a5y17lte)#Notes, and 1.8V compatible uart adapter
- Download prebuilt twrp image, with kexec and manual muic switching support
- Boot into twrp
- Connect uart-usb cable
- Switch muic uart on usb, and run u-boot.
- go to Advanced -> Terminal
- run
/exec.sh
command. It will switch uart on usb, load u-boot(it's included in twrp image) in RAM, and run it. - You are in u-boot console now ;)
- Load u-boot payload via kermit (you may use my high speed version for linux at 921600bps)
- in u-boot prompt run
loadb 0x90000000
- in u-boot prompt run
- in u-boot prompt run
bootm 0x90000000
command
TODO: how to setup initramfs console Notes
Uart
`/dev/ttyHS8` can be exposed on USB D+D- lines. It's configured in data mover mode by downstream kernel.
Getting logs from pstore
Boot to twrp, and check
/sys/fs/pstore
folderStock bootloader
Loads payload into ram at random physical address (for security reason?). Physical address range determination attempts:
- 0x80160000
- 0x80090000
- 0x8012c000
Initramfs physical load address is 0xa2000000 both for boot image and recovery image
See also