Jump to content

Samsung Galaxy Express SGH-I437 (samsung-expressatt)

From postmarketOS Wiki
Samsung Galaxy Express SGH-I437
Samsung Galaxy Express SGH-I437
Samsung Galaxy Express SGH-I437
Manufacturer Samsung
Name Galaxy Express SGH-I437
Codename samsung-expressatt
Released 2012
Type handset
Hardware
Chipset Qualcomm Snapdragon S4 Plus (MSM8960)
CPU Dual-core 1.5 GHz Krait
GPU Adreno 225
Display 480x800 AMOLED
Storage 8 GB
Memory 1 GB
Architecture armv7
Software
Original software Android
Original version
The version the device was shipped with.
4.0
Extended version
The most recent supported version from the manufacturer.
4.1
postmarketOS
Category testing
Pre-built images
Whether pre-built images are available here.
no
Mainline
Instead of a Linux kernel fork, it is possible to run (Close to) Mainline.
partial
pmOS kernel
The kernel version that runs on the device's port.
linux-next, linux-lts, linux-edge, linux-stable
Features
Flashing
It is possible to flash the device with pmbootstrap flasher.
Works
USB Networking
After connecting the device with USB to your PC, you can connect to it via telnet (initramfs) or SSH (booted system).
Works
Battery
Charging and battery level reporting works
Untested
Screen
Display works. Ideally with sleep mode and brightness control.
Untested
Touchscreen
Works
Multimedia
3D Acceleration
Untested
Audio
Audio playback, microphone, headset and buttons.
Untested
Camera
Untested
Connectivity
WiFi
Untested
Bluetooth
Untested
GPS
Untested
Modem
Calls
Untested
SMS
Untested
Mobile data
Untested
Miscellaneous
FDE
Full disk encryption and unlocking with unl0kr.
Untested
Sensors
Accelerometer
Auto screen rotation works in desktops e.g. Phosh or Plasma Mobile
Untested


User Quick Start

(Updated as of May 2025. Contact LogicalErzor for an update)

In it's current state, the device is like a headless raspberry pi running the latest Linux kernel. Please see the infobox on the right to see what works on the device. Before you install pmOS, it's a good idea to back up your phone's partitions in case anything goes wrong.

In order to start running pmOS on this device, you will first have to go to lk2nd and download the latest release labeled lk2nd-msm8960.img (minimum version 20.0). Please note that only on version 20.0, buttons will not work.

Poweroff your device. From there, hold the Volume Down button, Home button, and Power button until the phone buzzes. Quickly release the Power button after the buzz to enter Heimdall/Odin mode. Release the Volume Down button and Home button once the warning screen comes up. Click Volume Up on the warning screen.

Plug the phone into a computer. To flash lk2nd onto the device, run:

heimdall flash --BOOT lk2nd-msm8960.img

The phone will reboot to a black screen. To verify lk2nd has been installed, run:

fastboot devices

It should output something to indicate that lk2nd has been installed correctly.

Next, Install pmbootstrap. On your computer run the following commands to install pmOS onto the device:

# Configure pmbootstrap for installation. Select the correct parameters (eg. vendor: samsung, codename: expressatt, ui: none). See the right bar to see what works. Currently linux-next is the most stable (ironically)
pmbootstrap init
# Build the image
pmbootstrap install
# Flash the kernel to the phone
pmbootstrap flasher flash_kernel
# Flash the rootfs to the phone
pmbootstrap flasher flash_rootfs
# Reboots the device
fastboot reboot
# Wait for the phone to boot up completely and try to login to the device. Assuming your username here is `user`
sleep 90 && ssh -o "UserKnownHostsFile=/dev/null" -o "StrictHostKeyChecking=no" user@172.16.42.1

Testing

Unit Tests

This is a list of things that should work.

UART

Head to the UART section below to build a cable for yourself. Next poweroff the device, and plug it into the cable. It should turn on automatically and start outputting text onto the screen

SSH via USB

Follow the User Quick Start section. You should get a prompt at the end.

evtest

Run the following and then continue onto the subheadings. Ctrl+C to exit.

$ evtest
Touchscreen

Select "Atmel maXTouch Touchscreen" and touch the screen to see if there is output.

Power Button

Select "pmic8xxx_pwrkey" and press the power button to see if there is output.

Volume/Home Button

Select "gpio-keys" and press the volume and home buttons to see if there is output.

CPU Temp

Run the following to see if the CPU temperature is reported:

$ paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'

eMMC & SD Card

There should be output with the following commands

$ dmesg | grep mmcblk1 # make sure there is an SD Card in the slot beforehand
$ dmesg | grep mmcblk0

Regressions

Since this device uses a vanilla kernel, it will occasionally hit regressions.

Good thing is that we just need to report when it first occurred and we don't have to fix it ourself! You will need an understanding of git, specifically git bisect, git log, and git clone.

High level overview:

  • git clone the linux kernel
  • if the device can't seemingly boot at all, try enabling debug-shell and see if you can ssh into the device. if this doesn't work, make a UART cable as shown in the UART section below
  • head down to the section called `Developing Mainline Linux on the Expressatt` and compile the kernel locally. Let's see if we can reproduce it
  • if it is reproducible, start using git bisect to narrow down where the problem first occurred
  • report it!

Broken Device :(

pmOS installation broke

Take out the battery to power it off. Go into Heimdall/Odin mode as described in User Quick Start section. Do the following.

# Create a dummy file
$ dd if=/dev/zero of=dummy.file bs=1M count=1
# Flash it to various partitions used by pmOS. Will reboot every time you flash
$ heimdall flash --BOOT dummy.file
$ heimdall flash --USERDATA dummy.file
$ heimdall flash --SYSTEM dummy.file

Now walk through the User Quick Start section again.

Soft Brick Restore

There is a way to enter Odin download mode without the 3 button combo (link). Instead of the resistor in this schematic being 150k or 619k, make it around 300k (which you could easily do with two 150k or 619k resistors). Maybe this works?

Developing Mainline Linux on the Expressatt

LogicalErzor's Brain Dump

faster mainline builds... envkernel.sh doesn't behave nice, so this is 3 separate commands. this basically tells us what configs we are missing in our device.config file in linux-next so that we can add it

pmbootstrap -y zap -a && \
cd ~/linux/ && \
source ~/pmbootstrap/helpers/envkernel.sh
pmbootstrap checksum device-samsung-expressatt linux-next && \
pmbootstrap kconfig edit linux-next --arch armv7 && \
sudo cp ~/pmaports/cache_git/pmaports/device/testing/linux-next/config-generic-trailblazer.armv7 ~/linux/arch/arm/configs/expressatt_defconfig && \
make expressatt_defconfig && \
make -j 20 && \
pmbootstrap build --envkernel linux-next && \
deactivate
sudo cp ~/linux/.output/.config .config && \
make LLVM=1 ARCH=arm -j $(nproc) savedefconfig && \
sudo cp ~/linux/defconfig ~/pmaports/cache_git/pmaports/device/testing/linux-next/defconfig && \
echo "=======================================" && \
while IFS= read -r line; do grep -Fxq "$line" ~/linux/arch/arm/configs/qcom_defconfig ~/pmaports/cache_git/pmaports/device/testing/linux-next/*.config || echo "$line"; done < ~/pmaports/cache_git/pmaports/device/testing/linux-next/defconfig && \
echo "=======================================" && \
sudo rm ~/linux/.output/.config ~/linux/.config ~/linux/defconfig && \
pmbootstrap build --force device-samsung-expressatt && \
# pmbootstrap initfs hook_add debug-shell && \
yes | pmbootstrap install && \
pmbootstrap export && \
cd /tmp/postmarketOS-export/ && \
fastboot flash userdata samsung-expressatt.img # make sure userdata and system partitions dont have anything!

UART

This is useful for other people who want to get UART working on their device. It currently works on this device. Please see the following links and see if this is helpful for you

  1. https://wiki.postmarketos.org/wiki/Qualcomm_Snapdragon_S4_Plus_(MSM8960)#UART
  2. https://wiki.postmarketos.org/wiki/Serial_debugging/Cable_schematics#Raspberry_Pi
  3. https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/341d88e8fe441e56eb5ae01cea53fd4e0c8c1212/device/testing/linux-postmarketos-qcom-msm8960/config-postmarketos-qcom-msm8960.armv7#L488
  4. https://github.com/torvalds/linux/blob/master/arch/arm/boot/dts/qcom/qcom-msm8960-samsung-expressatt.dts

Maintainer(s)

LogicalErzor

Users owning this device


Useful Links (?)

See also