Samsung Galaxy SII (samsung-i9100)
|
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 |
|
| Kernel package |
|
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
|
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
|

Contributors
- ollieparanoid
- veggie
- Timbz
- Grimler
Device Owners
- 22lol1167 (Notes: pretty good condition,running lineage os 15)
- 37nx (Notes: Stock.)
- Bastindo (Notes: Good condition, running Android 13)
- Clygro (Notes: 16GB not turning on)
- Debiansh (Notes: Notes: Possible future test subject, bootloader unlocked, running LineageOS 17.1)
- EnderNightLord
- Hacker420 (Notes: LCD not working.)
- Jason123santa (Notes: Samsung Galaxy SII I777)
- JonesV
- Ka33 (Notes: CFW)
- Ka33 (Notes: Gets hot when charging, doesn't work)
- Kekson1a
- KenOokamiHoro (Notes: Running Replicant 6.0)
- Kernel64
- Koalp
- Madhaxbro (Notes: GT-I9100, runs LineageOS. Ready for testing. Scary custom battery to make it usable. U-Boot does not run. The firmware is very annoying. I would like to run TWRP. It does not agree!)
- MartijnBraam
- Newblicious
- Ollieparanoid
- Onny
- Oxr463
- Pairman (Notes: 1+16GB, Android)
- PL (Notes: Fine, but need a battery to start it.)
- Rudloff
- Russanandres (Notes: CyanogenMod 7 non booting)
- Sputnik1973 (Notes: No screen, no power button, no battery and maybe dead motherboard.)
- Stani2000
- Tacokoneko (Notes: Samsung Galaxy S II Epic 4G Touch (d710))
- Timbz
- Titou4 (Notes: GT-I9100P)
- UltrasonicMadness (Notes: GT-I9100P, successfully working with MHL on stock firmware)
- Uvraj
- Vladuwka12 (Notes: 16 GB, Running Replicant 6.0)
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
| 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.
- Run
pmbootstrap initand select manufacturer samsung and device i9100. - Retrieve Heimdall in some way. It is most likely packaged by your distro maintainers.
- Compile or retrieve U-Boot for samsung-i9100:
- Either fetch sources from https://gitlab.com/exynos4-mainline/u-boot, branch
exynos4/i9100_(trats-mod)/2025.10-rc1, and compile with envkernel through:$ source /path/to/pmbootstrap-folder/helpers/envkernel.sh $ make trats_defconfig $ make -j$(nproc)
- which will generate a u-boot.bin in the
.outputfolder.
- 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, runpmbootstrap install.
- Either fetch sources from https://gitlab.com/exynos4-mainline/u-boot, branch
- Reboot to Download Mode by holding ++ and pushing in the warning screen.
- 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.
- The chroot path is something like
- 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/sdcto 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.
- If you are installing to an SD card, then insert the card and run
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
| 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
- "Getting Galaxy S2 GPS to work on Replicant" on Univers Libre
GSD4t on Replicant Wiki
- mnalis/gsd4t_parser on GitHub
- GSD4t development thread on Replicant Forums
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
| This device is |
| 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).
-
Remove black cover (it is only glued)
-
UART is available on pin 10 and 12 on the debug connector
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
-
Xfce desktop
-
Weston-smoke demo running on a d710
-
Volume and power button
-
Home button
Ollieparanoid's photos
- Initramfs asking for the password via telnet
- Nura demo menu (XWayland)
- Firefox (XWayland)
- Weston-smoke demo
References
- ↑ 1.0 1.1 1.2 1.3 Samsung Galaxy S II on Wikipedia
- ↑ "Broadcom brcmsmac(PCIe) and brcmfmac(SDIO/USB) drivers", Linux Wireless documentation
- ↑ 3.0 3.1 "Galaxy S2 Replicant port status update" by Paul Kocialkowski. 4 February 2013.
- ↑ "Wanted: Nexus 7 3G Linux Driver?" by Rüdiger Gad. 9 January 2013.
- ↑ 5.0 5.1 5.2 "The all-in-one Galaxy S2 Hack Pack" on XDA Forums. 11 May 2012.
- ↑ "Non-stock ROM with MHL support" on XDA Forums. 9 October 2017.
External links
- pmaports!1598: Initial MR with mainline, has serial output instructions
Samsung Galaxy S II on Replicant Wiki
Installation page on Replicant Wiki
- !456 netcat installation method
- Schematics, service manual, part list and more on Internet Archive