GTI9100GBootloaderFreedom » History » Version 35
Denis 'GNUtoo' Carikli, 03/27/2020 01:17 AM
1 | 1 | Denis 'GNUtoo' Carikli | h1. I9100GBootloader |
---|---|---|---|
2 | |||
3 | 9 | Denis 'GNUtoo' Carikli | {{toc}} |
4 | 3 | Denis 'GNUtoo' Carikli | |
5 | 23 | Denis 'GNUtoo' Carikli | h2. Findings, TODO and status |
6 | |||
7 | 35 | Denis 'GNUtoo' Carikli | See [[OMAPBootrom]] for more information on the OMAP restricted boot. |
8 | 23 | Denis 'GNUtoo' Carikli | |
9 | 24 | Denis 'GNUtoo' Carikli | * I've extracted the MLO but I'm unsure of its size and when I sent it through USB to the bootrom it failed. It might be because of the sram size limit but anyway as I don't know how to parse signatures yet (I need to look at the wiki for breaking motorolla restricted boot) I'm unsure of the exact binary size to send. Once I can parse that stuff, I will know the exact size of the signed area and so of the binary. |
10 | 23 | Denis 'GNUtoo' Carikli | * I've not managed to get any difference by booting from mmc1 |
11 | 1 | Denis 'GNUtoo' Carikli | * I've not dumped yet the usual register for booting configuration like SYS_BOOT |
12 | 25 | Denis 'GNUtoo' Carikli | |
13 | TODO while reading the TRM: |
||
14 | * check the device's OMAP4 the sram size limit |
||
15 | * check the load address / memory mapping of MLO in case of USB boot or boot from eMMC. |
||
16 | * Check mmc1 booting constraint (card size, look if < 4GiB works) |
||
17 | * Read about SYS_BOOT and booting, though fuse infos is most probably missing |
||
18 | |||
19 | 28 | Denis 'GNUtoo' Carikli | TODO while reading code: |
20 | * check if chipsec has infos on OMAP fuses |
||
21 | |||
22 | 1 | Denis 'GNUtoo' Carikli | TODO other readings: |
23 | * Read more on the wiki against motorolla |
||
24 | * Try to find a way to access the OMAP wiki and look if there is any stuff on fuses and restricted boot |
||
25 | |||
26 | Upstreaming: |
||
27 | * If infos about fuses are ever found, ideally write drivers and upstream them in Linux, u-boot, Barebox and crucible |
||
28 | * Look if crucible is good for adding infos about OM pins, SYS_BOOT etc. Not sure if Linux exports such registers and where |
||
29 | 29 | Denis 'GNUtoo' Carikli | |
30 | Last news 27/03/2919: |
||
31 | hpagseddy and GNUtoo tried several tests on their respective devices, and the device always ended up going to the battery charging screen: |
||
32 | * Building xloader and loaing it with omap-usb-boot through USB |
||
33 | * Same with the addition of a for(;;) loop in the code to see if it hangs (it's supposed to if the code runs) |
||
34 | * Same but with the watchdog being configured to reboot after 1 second (it's supposed to reboot if the code is correct and runs) |
||
35 | |||
36 | hpagseddy and GNUtoo also found that when using odin to flash the MLO partition, odin interface makes the user think that the MLO partition was flashed correctly, while odin didn't flash anything. That may be due to the partition being set Read-Only and/or to the "File Offset" and "File Size" being 0. |
||
37 | <pre> |
||
38 | -- Entry #0 --- |
||
39 | Binary Type: 0 (AP) |
||
40 | Device Type: 2 (MMC) |
||
41 | Identifier: 1 |
||
42 | Attributes: 0 (Read-Only) |
||
43 | Update Attributes: 0 |
||
44 | Partition Block Size/Offset: 0 |
||
45 | Partition Block Count: 0 |
||
46 | File Offset (Obsolete): 0 |
||
47 | File Size (Obsolete): 0 |
||
48 | Partition Name: X-loader |
||
49 | Flash Filename: MLO |
||
50 | FOTA Filename: |
||
51 | </pre> |
||
52 | |||
53 | 30 | Denis 'GNUtoo' Carikli | We know that nothing was successfuly flashed as we dumped MLO, and verified that the binary was signed by looking if it contained the strings that indicate that (PRIMAPP, KEYS, CertPK_) |
54 | 23 | Denis 'GNUtoo' Carikli | |
55 | 32 | Denis 'GNUtoo' Carikli | h2. MLO versions |
56 | |||
57 | |_. Device |_. Android version |_. String | Signed | |
||
58 | | I9100G_CHN_CHN | Android 2.3.6 | Texas Instruments X-Loader 1.41 (Mar 20 2012 - 11:20:26) | Yes | |
||
59 | | ? | Android 4.1.2 | Texas Instruments X-Loader 1.41 (Jun 27 2013 - 18:34:17) | Yes | |
||
60 | |||
61 | 11 | Denis 'GNUtoo' Carikli | h2. How to check if you have a signed bootloader |
62 | 3 | Denis 'GNUtoo' Carikli | |
63 | 11 | Denis 'GNUtoo' Carikli | h3. How to check from the bootloader interface to install the recovery. |
64 | 7 | Denis 'GNUtoo' Carikli | |
65 | 8 | Denis 'GNUtoo' Carikli | To do that you need to get into the ODIN MODE that is typically used to install the Replicant recovery: |
66 | 1 | Denis 'GNUtoo' Carikli | |
67 | 7 | Denis 'GNUtoo' Carikli | # Start the device by holding the following key combination: *Volume down, Select, Power*, |
68 | # Hold the key combination until the device shows a *Warning* message. |
||
69 | # Confirm that you want to download a custom OS using volume up |
||
70 | # Make sure the device is in *Downloading* mode |
||
71 | |||
72 | When this is done, it should show some text: |
||
73 | <pre> |
||
74 | ODIN MODE |
||
75 | PRODUCT NAME: GT-I9100G_CHN_CHN |
||
76 | </pre> |
||
77 | |||
78 | 10 | Denis 'GNUtoo' Carikli | Here CHN_CHN probably refers to the Chinese version. And it looks like that version has a signed bootloader: According to "a thread on the XDA developers forum":https://forum.xda-developers.com/galaxy-s2/development/guide-repair-totally-sleep-dead-boot-t1701471 "Means that you own a chinese bootloader locked I9100G. You can't flash any other bootloader than the chinese one." |
79 | 1 | Denis 'GNUtoo' Carikli | |
80 | 12 | Denis 'GNUtoo' Carikli | h3. How to check with command line utilities |
81 | 5 | Denis 'GNUtoo' Carikli | |
82 | 1 | Denis 'GNUtoo' Carikli | To get the bootrom to try to boot on USB, you need to do the following: |
83 | * Connect the USB cable to the device but make sure it's not connected on the computer. |
||
84 | * Power off the device |
||
85 | * Connect the USB cable |
||
86 | |||
87 | If we do that, we get the following in the kernel log of your laptop: |
||
88 | <pre> |
||
89 | usb 1-1: new high-speed USB device number 24 using ehci-pci |
||
90 | usb 1-1: unable to get BOS descriptor or descriptor too short |
||
91 | usb 1-1: New USB device found, idVendor=0451, idProduct=d00f, bcdDevice= 0.00 |
||
92 | usb 1-1: New USB device strings: Mfr=33, Product=37, SerialNumber=0 |
||
93 | usb 1-1: Product: OMAP4430 |
||
94 | usb 1-1: Manufacturer: Texas Instruments |
||
95 | </pre> |
||
96 | |||
97 | 22 | Denis 'GNUtoo' Carikli | Note that your kernel might need to be compiled with CONFIG_USB_ANNOUNCE_NEW_DEVICES=y |
98 | to print that. In Parabola CONFIG_USB_ANNOUNCE_NEW_DEVICES=y is enabled. |
||
99 | |||
100 | 1 | Denis 'GNUtoo' Carikli | We can also try to get a bit more infos with omap-usb-boot: |
101 | <pre> |
||
102 | $ sudo omap-usb-boot -v -w boot invalidbootmedia |
||
103 | Finding and opening USB device |
||
104 | Found and opened omap4 USB device: OMAP4430 |
||
105 | ASIC device id: 4430, HS device |
||
106 | Booting from device invalidbootmedia... |
||
107 | Booting device invalidbootmedia not found |
||
108 | Booting from device failed |
||
109 | </pre> |
||
110 | |||
111 | Here we know the device is signed because it's a "HS device". |
||
112 | If it was not signed it would print "GP device" instead. |
||
113 | 9 | Denis 'GNUtoo' Carikli | |
114 | 11 | Denis 'GNUtoo' Carikli | h3. Using the Android version or other devices properties? |
115 | 9 | Denis 'GNUtoo' Carikli | |
116 | 15 | Denis 'GNUtoo' Carikli | "hpagseddy/i9100g_xloader":https://github.com/hpagseddy/i9100g_xloader is based on "ths-backup/i9100g_xloader":https://github.com/ths-backup/i9100g_xloader which has an ics (Icecream Sandwitch, an Android version) branch only. According to hpagseddy, that branch is also used for Android Jelly brean. |
117 | 9 | Denis 'GNUtoo' Carikli | |
118 | It's still unclear if there is some correlation between Android version and signed bootloaders. |
||
119 | |||
120 | The device that was given to [[People#Denis-GNUtoo-Carikli|GNUtoo]] that has a signed bootloader also has the following characteristics: |
||
121 | |||
122 | *Software state*: Running the stock OS, unmodified |
||
123 | *Android version*: Android 2.3.6 |
||
124 | *Baseband version*: IG9100GZCLC2 |
||
125 | *Build number*: GINGERBREAD.ZCLC2 |
||
126 | *Kernel version*: 2.6.35.7 se.infra@SEI-30#2 |
||
127 | |||
128 | 18 | Denis 'GNUtoo' Carikli | According to "a thread on XDA":https://forum.xda-developers.com/galaxy-s2/development/bootloader-t1754158 there is a corelation between the @Baseband version@ and the geographic zone that is targeted. And as we can see above, the @Build number@ seem to be related to the @Baseband version@ as well. While the list of baseband versions is incomplete, we can still use it to avoid the Chinese version (CHN_CHN) which has a signed bootloader. |
129 | 17 | Denis 'GNUtoo' Carikli | |
130 | At this point it's also still unclear if any of the other characteristics above correlate to signed or unsigned bootloaders. |
||
131 | 2 | Denis 'GNUtoo' Carikli | |
132 | 20 | Denis 'GNUtoo' Carikli | As the binaries are under the GPLv2 or later, It would also be a good idea to collect all of them, match them with the device characteristics like the @Build@ number and @Baseband version@, and verify if they are signed or not with some free software tool. |
133 | 19 | Denis 'GNUtoo' Carikli | |
134 | 21 | Denis 'GNUtoo' Carikli | We could even publish the unsigned versions. As for the signed versions, if they cannot run on devices that don't enforce bootloader signatures, it would probably not be a good idea to publish them as the binaries wouldn't respect the 4 freedoms, but we can still check with the FSF if they have good ideas on that point. |
135 | |||
136 | 2 | Denis 'GNUtoo' Carikli | h2. Source code |
137 | |||
138 | * https://github.com/hpagseddy/i9100g_xloader This got rebuilt and flashed, and it worked on the device it was tested on. |
||
139 | * https://blog.the-leviathan.ch/?p=408 |
||
140 | |||
141 | 1 | Denis 'GNUtoo' Carikli | h2. TODO |
142 | |||
143 | 16 | Denis 'GNUtoo' Carikli | * Document the various firmware version mentioned here: https://www.sammobile.com/samsung/galaxy-s2/firmware/#GT-I9100G |
144 | 1 | Denis 'GNUtoo' Carikli | * Understand how to get unsigned versions (Android version, serial number, etc) |
145 | 13 | Denis 'GNUtoo' Carikli | * Get a device with an unsigned bootloader and u-boot and ask samsung for source code |
146 | 14 | Denis 'GNUtoo' Carikli | * Check the boot order on unsigned devices (is it possible to boot from USB easily?) |
147 | 6 | Denis 'GNUtoo' Carikli | * Try to boot the xloader nevertheless, as the device could be in some "verify but not enforce mode" for signatures |