Samsung Galaxy Express SGH-I437 (samsung-expressatt)
![]() 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 |
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
button, button, and button until the phone buzzes. Quickly release the button after the buzz to enter Heimdall/Odin mode. Release the button and button once the warning screen comes up. Click 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
- https://wiki.postmarketos.org/wiki/Qualcomm_Snapdragon_S4_Plus_(MSM8960)#UART
- https://wiki.postmarketos.org/wiki/Serial_debugging/Cable_schematics#Raspberry_Pi
- https://gitlab.postmarketos.org/postmarketOS/pmaports/-/blob/341d88e8fe441e56eb5ae01cea53fd4e0c8c1212/device/testing/linux-postmarketos-qcom-msm8960/config-postmarketos-qcom-msm8960.armv7#L488
- 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 (?)
- https://www.infineon.com/dgdl/Infineon-CYUSB301X_CYUSB201X_EZ-USB_FX3_SUPERSPEED_USB_CONTROLLER-DataSheet-v01_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0eca1e7442aa
- https://arxiv.org/abs/1707.05082
- https://www.infineon.com/dgdl/Infineon-CY7C65223D-32LTXI-DataSheet-v01_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0eea2d36730a
- https://www.infineon.com/dgdl/Infineon-CYUSB301X_CYUSB201X_EZ-USB_FX3_SUPERSPEED_USB_CONTROLLER-DataSheet-v21_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0eca1e7442aa
- https://www.infineon.com/dgdl/Infineon-CYUSBS236_User_Guide-UserManual-v01_00-EN.pdf?fileId=8ac78c8c7d0d8da4017d0ef8d1be0e5a