Skip to content
Permalink
Browse files

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 3247770de1e06285458f64cb130d064529bccaca
Showing with 15 additions and 0 deletions.
  1. +15 −0 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
@@ -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

0 comments on commit 3247770

Please sign in to comment.
You can’t perform that action at this time.