Skip to content
Permalink
Browse files Browse the repository at this point in the history
remove almost every device from the device tree
Wipe all the compatible strings except for the uarts, and also wipe the device_type and name properties
for a few devices that still matches kexts after the wipe.

This avoids loading most of the drivers, and gets boot to progress further.

This gets the kernel to "Still waiting for root device", but with a 30 second delay during boot since
it tries to wait for a nonexistant RTC device (pmu,d2422, which is removed from the device tree)
  • Loading branch information
zhuowei committed Jul 19, 2018
1 parent 67aa7a5 commit 3247770
Showing 1 changed file with 15 additions and 0 deletions.
15 changes: 15 additions & 0 deletions modifydevicetree.py
@@ -1,5 +1,11 @@
import sys
from devicetreefromim4p import *

#removeCompatibles = [b"aic,1", b"pmgr1,t8015", b"wdt,t8015\x00wdt,s5l8960x", b"gpio,t8015\x00gpio,s5l8960x", b"sochot,s5l8955x", b"tempsensor,t8015", b"aes,s8000"]
keepCompatibles = [b"uart-1,samsung", b"D22AP\x00iPhone10,3\x00AppleARM"]
removeNames = [b"wdt", b"backlight"]
removeDeviceTypes = [b"wdt", b"backlight"]

# pexpert/pexpert/device_tree.h
def u32(a, i):
return a[i] | a[i+1] << 8 | a[i+2] << 16 | a[i+3] << 24
Expand Down Expand Up @@ -43,6 +49,15 @@ def writeproperty(nodebytes, nodeoffset, nodedepth):
print("Removing display-corner-radius")
nodebytes[nodeoffset:nodeoffset + kPropNameLength] = padStringNull("security-domain")
nodebytes[nodeoffset + ptr:nodeoffset + ptr + proplen] = b"\x00" * proplen
if propname == "compatible" and not nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1] in keepCompatibles:
print("removing compatible for", nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1].decode("ascii"))
nodebytes[nodeoffset+ptr:nodeoffset + ptr + proplen - 1] = b"~" * (proplen - 1)
if propname == "name" and nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1] in removeNames:
print("removing name for", nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1].decode("ascii"))
nodebytes[nodeoffset+ptr] = ord("~")
if propname == "device_type" and nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1] in removeDeviceTypes:
print("removing device type for", nodebytes[nodeoffset+ptr:nodeoffset+ptr+proplen-1].decode("ascii"))
nodebytes[nodeoffset+ptr] = ord("~")
ptr += proplen
ptr = (ptr + 0x3) & ~0x3 #round up to nearest 4
return ptr
Expand Down

0 comments on commit 3247770

Please sign in to comment.