Jump to content

Samsung Galaxy SII (samsung-i9100)

From Nura Wiki
Samsung Galaxy S II
First photo ever released of Nura (from the original introduction post).
First photo ever released of Nura (from the original introduction post).
Manufacturer Samsung
Name Galaxy S II
Codename samsung-i9100
Released 2011
Type handset
Hardware
Chipset Samsung Exynos 4210 Dual
CPU Dual-core 1.2 GHz Cortex-A9
GPU Mali-400 MP4
Display 480x800 AMOLED
Storage 16/32 GB
(up to 128 GB microSDXC)
Memory 1 GB
Architecture armv7
Software
Original software
The software and version the device was shipped with.
Android 2.3.4
Extended version
The most recent supported version from the manufacturer.
Android
Nura
Category testing
Mainline
Instead of a Linux kernel fork, it is possible to run (Close to) Mainline.
yes
Unixbench score
Unixbench Whetstone/Dhrystone score. See Unixbench.
542.5
Device package device-samsung-i9100
Kernel package linux-postmarketos-exynos4
Features
Flashing
Whether 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
Whether charging and battery level reporting work.
Works
Screen
Whether the display works; ideally with sleep mode and brightness control.
Works
Touchscreen
Works
Multimedia
3D Acceleration
Works
Audio
Audio playback, microphone, headset and buttons.
Untested
Camera
Untested
Connectivity
WiFi
Works
Bluetooth
Works
GPS
Untested
Modem
Calls
Untested
SMS
Untested
Mobile data
Untested
Miscellaneous
FDE
Full disk encryption and unlocking with unl0kr.
Partial
Sensors
Accelerometer
Handles automatic screen rotation in many interfaces.
Works
U-Boot
Primary Bootloader
Whether it is possible to replace stock bootloader with U-Boot.
Works
Mainline
Whether latest upstream versions of U-Boot are not broken and it is possible to use them.
Broken
Running Xfce

Contributors

Device Owners

What does not work yet

  • Audio
  • Modem
  • MHL (Video-out)
  • See "Hardware specifications" for ideas how to get them working.

See the call-for-testing reports for more info on features:

Installation

Note WARNING: internal storage installation is broken: https://gitlab.postmarketos.org/postmarketOS/pmaports/-/work_items/3993

From August 2025 (in this MR !6921) samsung-i9100 uses U-Boot as a chainloaded bootloader. The original bootloader boots U-Boot, and U-Boot in turn loads Linux, the initramfs and the dtb and boots. This is done so that we do not need to workaround shortcomings of the original bootloader (like it not supporting boot.img'es).

U-Boot is not installed automatically during a pmbootstrap install, and installing hence requires some manual steps. Both SD card and internal eMMC installations should work in theory, but only SD card has been tested by Grimler.

  1. Run pmbootstrap init and select manufacturer samsung and device i9100.
  2. Retrieve Heimdall in some way. It is most likely packaged by your distro maintainers.
  3. Compile or retrieve U-Boot for samsung-i9100:
    which will generate a u-boot.bin in the .output folder.
    • Alternatively, you can get it from the samsung-i9100 chroot after pmbootstrap install. u-boot.bin is part of the package u-boot-samsung-i9100, and present at path /usr/share/u-boot/trats/u-boot.bin. To setup the chroot and get u-boot.bin, run pmbootstrap install.
  4. Reboot to Download Mode by holding Volume Down+Home+Power and pushing Volume Up in the warning screen.
  5. Flash u-boot.bin to the kernel partition by running
    $ heimdall flash --KERNEL /path/to/u-boot.bin
    
    • The chroot path is something like ~/.local/var/pmbootstrap/chroot_rootfs_samsung-i9100/usr/share/u-boot/trats/u-boot.bin.
    • After flashing, the device will try to boot, which will fail since rootfs is not present. Remove the battery to power it off again.
  6. Prepare or install your rootfs:
    • If you are installing to an SD card, then insert the card and run pmbootstrap install --disk /dev/sdc. Make sure to modify path /dev/sdc to match the actual path on your system. After that, just insert the card and power on the device.
    • If you want to install to internal storage, then reboot to download mode again, and run
      $ pmbootstrap install
      $ pmbootstrap export
      $ heimdall flash --UMS /tmp/postmarketOS-export/samsung-i9100.img
      
    The device should then boot into Nura automatically.

Booting might take a minute. Unfortunately the device does not give many signs of life in some of the boot stages (no working framebuffer in U-Boot), but if nothing appears after 2 minutes, then something has likely gone wrong. Please remove the battery to turn off the device and then report the issue in pmaports.

Usage

Wi-Fi

  • Create conf for wpa_supplicant:
    $ wpa_passphrase "SSID" "password" > wifi
    
    • If you are connecting to a hidden wireless network, make sure to add line "scan_ssid=1" after the ssid line in your generated conf file.
  • Connect to a Wi-Fi AP:
    $ sudo wpa_supplicant -i wlan0 -c wifi &
    
  • From another terminal, get the IP address from DHCP server:
    $ sudo udhcpc -i wlan0
    

To set the Wi-Fi connection to start automatically on boot, please refer to the Wi-Fi article.

Modem

Note This section is severely outdated, being written in September 2017; as of 2026, mobile connection should be handled by the ModemManager daemon.

Using oFono: Best way seems to get Samsung IPC modem support from the patchset https://lists.ofono.org/pipermail/ofono/2012-September/013766.html (but it was not accepted) and does not build https://github.com/tssk/pmbootstrap/commits/device-samsung-i9100_modem . I would appreciate help from someone that understands C.

Second idea was to build Android RIL + Samsung RIL and get oFono working with ofono-ril support - Samsung-RIL

GPS

Setting the hardware clock

If you have already setup chrony and if your hardware clock doesn't have the time set you can set it with:

# hwclock -w # Write the current system time to the hardware clock

Setting the display brightness

To adjust display brightness, write a value between 0-255 to file given below:

# echo 0 > /sys/class/backlight/panel/brightness   # set the display to its lowest brightness
# echo 255 > /sys/class/backlight/panel/brightness # set the display to maximum brightness

Reading Accelerometer sensor

Accelerometer sensor data can be read from the following file:

$ cat /sys/class/accelerometer/accelerometer/acc_file

Hardware specifications

Note This device is supported by Replicant. With some more research we should be able to get most stuff running with their free software userland drivers.
Component Model Notes
SoC Samsung Exynos 4 Dual 45 nm[1] (GT-I9100, SHW-M250S/K/L)
CPU 1.2 GHz dual-core ARM Cortex-A9[1] (GT-I9100, GT-I9105, GT-I9100G, SHW-M250S/K/L)
GPU ARM Mali-400 MP4[1] (GT-I9100, SHW-M250S/K/L)
RAM 1 GB[1]
Wi-Fi/BT Broadcom BCM4330 (SWB-B42)
Supported by the Linux Wireless open-source BCM43xx driver.[2] Its Android firmware is available here.
GPS SiRF GSD4t
Modem Intel XMM 6260[3] Also known as "X-GOLD 626", it's also used in Nexus 7.[4]
A mainline patch series was sent to the LKML on 11 May 2026.
Audio Codec Yamaha MC1N2[5] The Android kernel exposes the ALSA API, but nothing happens when playing with the volume sliders in alsamixer.
USB Switch Fairchild FSA3200UMX[5] Should be all supported to a certain extent in the 4.15 kernel[6] (of course the device is still stuck to 3.0 for the time being)
PMIC Maxim MAX8997[5]
MHL Transmitter Silicon Image 9244
Light/Proximity Capella Microsystems CM3663 No mainline driver. A downstream driver is available here.

Audio

  • /dev/snd/hwC0D0 implements hardware-specific controls (via ioctl)[3] (see the reference for a libre Android userspace driver)
  • We could write a daemon that watches the ALSA sound levels and unmutes channels (speaker, headphones etc.) via hwC0D0 as necessary. (This will only work with the downstream kernel, the sound is probably not implemented in the upstream kernel at all?)
  • Maybe all this is overkill and the strategy from Audio works as well.

Serial / UART

Pressing the Home button during early boot enables bootloader debug output. To get kernel logs through a 619 kΩ Micro-USB serial debugging cable it is required to set the environmental variable SWITCH_SEL to 3 in the bootloader SBL shell. To enter the SBL shell hold the RETURN key in minicom/picocom/your favorite UART program when starting the device, until you get the SBL> prompt. From there you can then change the CMDLINE and boot with:

 setenv SWITCH_SEL 3
 setenv CMDLINE loglevel=7 console=ttySAC2,115200
 saveenv
 boot

Setting SWITCH_SEL somehow enables serial output on the USB connector.

One good guide to open up the device and get access to UART pads is provided by iFixit. Follow this guide until step 5, then proceed with removing the black cover from the circuit board (see first image below).

Physical buttons

All the buttons can be quite easily connected to, if one wants to create another type of button, or hook the phone up to an automatic test setup. Their locations and pins are available in the gallery.

Gallery

Ollieparanoid's photos

References

  1. ↑ 1.0 1.1 1.2 1.3 Samsung Galaxy S II on Wikipedia
  2. ↑ "Broadcom brcmsmac(PCIe) and brcmfmac(SDIO/USB) drivers", Linux Wireless documentation
  3. ↑ 3.0 3.1 "Galaxy S2 Replicant port status update" by Paul Kocialkowski. 4 February 2013.
  4. ↑ "Wanted: Nexus 7 3G Linux Driver?" by Rüdiger Gad. 9 January 2013.
  5. ↑ 5.0 5.1 5.2 "The all-in-one Galaxy S2 Hack Pack" on XDA Forums. 11 May 2012.
  6. ↑ "Non-stock ROM with MHL support" on XDA Forums. 9 October 2017.

External links