Project

General

Profile

NexusSI902xBootloader » History » Version 2

Paul Kocialkowski, 01/16/2015 03:09 PM

1 1 Paul Kocialkowski
h1. Nexus S (I902x) Bootloader
2
3 2 Paul Kocialkowski
The Nexus S (I902x) ships with a set of proprietary bootloaders: the Samsung Primitive Bootloader (PBL), executed first by the bootrom, followed by the Samsung Secondary Bootloader (SBL). These bootloaders are proprietary software.
4 1 Paul Kocialkowski
5
h2. Secure boot
6
7
The bootrom and the bootloaders appear to be implementing secure boot mechanisms that enforce signature checks on each bootloader.
8
However, there is no signature check enforced regarding the Linux kernel.
9
10
Changing a single byte on the first bootloader ended up in the system refusing to boot. In addition, a few messages from the bootloaders output suggest that such signature checks are enforced: @IROM e-fused - Secure Boot Version@.
11
12
Since signature checks are enforced by the bootrom and provided that there is apparently no easy way of replacing the public key the signatures are checked against, running a free software bootloader on the Nexus S (I902x) seems impossible.
13
14
h2. Stock bootloaders output
15
16
<pre>
17
-----------------------------------------------------------
18
   Samsung Primitive Bootloader (PBL) v3.0
19
   Copyright (C) Samsung Electronics Co., Ltd. 2006-2010
20
-----------------------------------------------------------
21
22
Muxed [[OneNAND]] 512MB (0x50) Sync
23
Scanning Bad Block .......
24
Bad Block 77 (5)
25
Bad Block 295 (5)
26
Bad Block 1232 (5)
27
Bad Block 1646 (5)
28
Bad Block 1831 (5)
29
Bad Block 2047 (0)
30
SBL loadding success
31
32
Set cpu clk. from 400MHz to 800MHz.
33
OM=0x9, device=OnenandMux(Audi)
34
IROM e-fused - Secure Boot Version.
35
36
-----------------------------------------------------------
37
   Samsung Secondary Bootloader (SBL) v3.0
38
   Copyright (C) Samsung Electronics Co., Ltd. 2006-2010
39
40
   Board Name: HERRING REV 52
41
   Build On: Jan 20 2011 17:19:41
42
-----------------------------------------------------------
43
44
MMC SEM16G 15188 MB
45
Re_partition: magic code(0x0)
46
Muxed [[OneNAND]] 512MB (0x50) Sync
47
Scanning Bad Block .......
48
Bad Block 77 (5)
49
Bad Block 295 (5)
50
Bad Block 1232 (5)
51
Bad Block 1646 (5)
52
Bad Block 1831 (5)
53
Bad Block 2047 (0)
54
Partitions loading success
55
Read image(PARAM) from flash .......
56
Done
57
init_fuel_gauge: vcell = 4083mV, soc = 94
58
PMIC_IRQ1    = 0xc0 
59
PMIC_IRQ2    = 0x0 
60
PMIC_IRQ3    = 0x0 
61
PMIC_IRQ4    = 0x0 
62
PMIC_STATUS1 = 0x0 
63
PMIC_STATUS2 = 0x0 
64
PMIC_STATUS3 = 0x0 
65
PMIC_STATUS4 = 0x0 
66
PMIC_STATUS5 = 0x0 
67
PMIC_SMPL    = 0x0 
68
Key scan = 0x0
69
message.command = 
70
message.status = 
71
message.recovery = 
72
73
BOOT_MODE_NORMAL (SW_RST(0x00000004), INFORM(0x000000ee))
74
LCD ID = 0x0060a953
75
Done
76
Kernel(boot.img) read success from partition no.5
77
Setting param.serialnr = 0x3733bab6 0x6de200ec
78
Setting param.board_rev = 0x34
79
Setting param.cmdline = console=ttyFIQ0 no_console_suspend androidboot.serialno=3733BAB66DE200EC androidboot.bootloader=I9020XXKA3 androidboot.baseband=I9020XXKB3 androidboot.info=0x4,0xee,1 androidboot.carrier=EUR gain_code=3 s3cfb.bootloaderfb=0x34a00000 mach-herring.lcd_type=0x00000000 oem_state=unlocked 
80
Setting param.initrd_start = 0x31000000, param.initrd_size = 0x23265
81
82
Starting kernel at 0x30008000...
83
84
Uncompressing Linux... done, booting the kernel.
85
</pre>