Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in / Register
Toggle navigation
M
Magisk
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Administrator
Magisk
Commits
3c6c0e67
Commit
3c6c0e67
authored
Dec 24, 2018
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Support EMUI 9.0
parent
01344c45
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
10 deletions
+19
-10
init.cpp
native/jni/misc/init.cpp
+15
-6
util_functions.sh
scripts/util_functions.sh
+4
-4
No files found.
native/jni/misc/init.cpp
View file @
3c6c0e67
...
@@ -54,7 +54,7 @@ static bool mnt_system = false;
...
@@ -54,7 +54,7 @@ static bool mnt_system = false;
static
bool
mnt_vendor
=
false
;
static
bool
mnt_vendor
=
false
;
struct
cmdline
{
struct
cmdline
{
bool
skip_initramfs
;
bool
early_boot
;
char
slot
[
3
];
char
slot
[
3
];
char
dt_dir
[
128
];
char
dt_dir
[
128
];
};
};
...
@@ -75,6 +75,10 @@ static void parse_cmdline(struct cmdline *cmd) {
...
@@ -75,6 +75,10 @@ static void parse_cmdline(struct cmdline *cmd) {
int
fd
=
open
(
"/proc/cmdline"
,
O_RDONLY
|
O_CLOEXEC
);
int
fd
=
open
(
"/proc/cmdline"
,
O_RDONLY
|
O_CLOEXEC
);
cmdline
[
read
(
fd
,
cmdline
,
sizeof
(
cmdline
))]
=
'\0'
;
cmdline
[
read
(
fd
,
cmdline
,
sizeof
(
cmdline
))]
=
'\0'
;
close
(
fd
);
close
(
fd
);
bool
skip_initramfs
=
false
,
kirin
=
false
;
int
enter_recovery
=
0
;
for
(
char
*
tok
=
strtok
(
cmdline
,
" "
);
tok
;
tok
=
strtok
(
nullptr
,
" "
))
{
for
(
char
*
tok
=
strtok
(
cmdline
,
" "
);
tok
;
tok
=
strtok
(
nullptr
,
" "
))
{
if
(
strncmp
(
tok
,
"androidboot.slot_suffix"
,
23
)
==
0
)
{
if
(
strncmp
(
tok
,
"androidboot.slot_suffix"
,
23
)
==
0
)
{
sscanf
(
tok
,
"androidboot.slot_suffix=%s"
,
cmd
->
slot
);
sscanf
(
tok
,
"androidboot.slot_suffix=%s"
,
cmd
->
slot
);
...
@@ -82,16 +86,21 @@ static void parse_cmdline(struct cmdline *cmd) {
...
@@ -82,16 +86,21 @@ static void parse_cmdline(struct cmdline *cmd) {
cmd
->
slot
[
0
]
=
'_'
;
cmd
->
slot
[
0
]
=
'_'
;
sscanf
(
tok
,
"androidboot.slot=%c"
,
cmd
->
slot
+
1
);
sscanf
(
tok
,
"androidboot.slot=%c"
,
cmd
->
slot
+
1
);
}
else
if
(
strcmp
(
tok
,
"skip_initramfs"
)
==
0
)
{
}
else
if
(
strcmp
(
tok
,
"skip_initramfs"
)
==
0
)
{
cmd
->
skip_initramfs
=
true
;
skip_initramfs
=
true
;
}
else
if
(
strncmp
(
tok
,
"androidboot.android_dt_dir"
,
26
)
==
0
)
{
}
else
if
(
strncmp
(
tok
,
"androidboot.android_dt_dir"
,
26
)
==
0
)
{
sscanf
(
tok
,
"androidboot.android_dt_dir=%s"
,
cmd
->
dt_dir
);
sscanf
(
tok
,
"androidboot.android_dt_dir=%s"
,
cmd
->
dt_dir
);
}
else
if
(
strncmp
(
tok
,
"enter_recovery"
,
14
)
==
0
)
{
sscanf
(
tok
,
"enter_recovery=%d"
,
&
enter_recovery
);
}
else
if
(
strncmp
(
tok
,
"androidboot.hardware"
,
20
)
==
0
)
{
kirin
=
strstr
(
tok
,
"kirin"
)
!=
nullptr
;
}
}
}
}
cmd
->
early_boot
=
skip_initramfs
||
(
kirin
&&
enter_recovery
);
if
(
cmd
->
dt_dir
[
0
]
==
'\0'
)
if
(
cmd
->
dt_dir
[
0
]
==
'\0'
)
strcpy
(
cmd
->
dt_dir
,
DEFAULT_DT_DIR
);
strcpy
(
cmd
->
dt_dir
,
DEFAULT_DT_DIR
);
LOGD
(
"cmdline:
skip_initramfs[%d] slot[%s] dt_dir[%s]
\n
"
,
cmd
->
skip_initramfs
,
cmd
->
slot
,
cmd
->
dt_dir
);
LOGD
(
"cmdline:
early_boot[%d] slot[%s] dt_dir[%s]
\n
"
,
cmd
->
early_boot
,
cmd
->
slot
,
cmd
->
dt_dir
);
}
}
static
void
parse_device
(
struct
device
*
dev
,
const
char
*
uevent
)
{
static
void
parse_device
(
struct
device
*
dev
,
const
char
*
uevent
)
{
...
@@ -377,7 +386,7 @@ int main(int argc, char *argv[]) {
...
@@ -377,7 +386,7 @@ int main(int argc, char *argv[]) {
root
=
open
(
"/"
,
O_RDONLY
|
O_CLOEXEC
);
root
=
open
(
"/"
,
O_RDONLY
|
O_CLOEXEC
);
if
(
cmd
.
skip_initramfs
)
{
if
(
cmd
.
early_boot
)
{
// Clear rootfs
// Clear rootfs
const
char
*
excl
[]
=
{
"overlay"
,
".backup"
,
"proc"
,
"sys"
,
"init.bak"
,
nullptr
};
const
char
*
excl
[]
=
{
"overlay"
,
".backup"
,
"proc"
,
"sys"
,
"init.bak"
,
nullptr
};
excl_list
=
excl
;
excl_list
=
excl
;
...
@@ -389,7 +398,7 @@ int main(int argc, char *argv[]) {
...
@@ -389,7 +398,7 @@ int main(int argc, char *argv[]) {
}
}
// Do not go further if system_root device is booting as recovery
// Do not go further if system_root device is booting as recovery
if
(
!
cmd
.
skip_initramfs
&&
access
(
"/sbin/recovery"
,
F_OK
)
==
0
)
{
if
(
!
cmd
.
early_boot
&&
access
(
"/sbin/recovery"
,
F_OK
)
==
0
)
{
// Remove Magisk traces
// Remove Magisk traces
rm_rf
(
"/.backup"
);
rm_rf
(
"/.backup"
);
exec_init
(
argv
);
exec_init
(
argv
);
...
@@ -402,7 +411,7 @@ int main(int argc, char *argv[]) {
...
@@ -402,7 +411,7 @@ int main(int argc, char *argv[]) {
struct
device
dev
;
struct
device
dev
;
char
partname
[
32
];
char
partname
[
32
];
if
(
cmd
.
skip_initramfs
)
{
if
(
cmd
.
early_boot
)
{
sprintf
(
partname
,
"system%s"
,
cmd
.
slot
);
sprintf
(
partname
,
"system%s"
,
cmd
.
slot
);
setup_block
(
&
dev
,
partname
);
setup_block
(
&
dev
,
partname
);
xmkdir
(
"/system_root"
,
0755
);
xmkdir
(
"/system_root"
,
0755
);
...
...
scripts/util_functions.sh
View file @
3c6c0e67
...
@@ -68,8 +68,8 @@ find_block() {
...
@@ -68,8 +68,8 @@ find_block() {
for
uevent
in
/sys/dev/block/
*
/uevent
;
do
for
uevent
in
/sys/dev/block/
*
/uevent
;
do
local
DEVNAME
=
`
grep_prop DEVNAME
$uevent
`
local
DEVNAME
=
`
grep_prop DEVNAME
$uevent
`
local
PARTNAME
=
`
grep_prop PARTNAME
$uevent
`
local
PARTNAME
=
`
grep_prop PARTNAME
$uevent
`
for
p
in
"
$@
"
;
do
for
BLOCK
in
"
$@
"
;
do
if
[
"
`
toupper
$
p
`
"
=
"
`
toupper
$PARTNAME
`
"
]
;
then
if
[
"
`
toupper
$
BLOCK
`
"
=
"
`
toupper
$PARTNAME
`
"
]
;
then
echo
/dev/block/
$DEVNAME
echo
/dev/block/
$DEVNAME
return
0
return
0
fi
fi
...
@@ -185,9 +185,9 @@ run_migrations() {
...
@@ -185,9 +185,9 @@ run_migrations() {
find_boot_image
()
{
find_boot_image
()
{
BOOTIMAGE
=
BOOTIMAGE
=
if
[
!
-z
$SLOT
]
;
then
if
[
!
-z
$SLOT
]
;
then
BOOTIMAGE
=
`
find_block
boot
$SLOT
ramdisk
$SLOT
`
BOOTIMAGE
=
`
find_block
ramdisk
$SLOT
recovery_ramdisk
$SLOT
boot
$SLOT
`
else
else
BOOTIMAGE
=
`
find_block
boot ramdisk
boot_a kern-a android_boot kernel lnx bootimg
`
BOOTIMAGE
=
`
find_block
ramdisk recovery_ramdisk boot
boot_a kern-a android_boot kernel lnx bootimg
`
fi
fi
if
[
-z
$BOOTIMAGE
]
;
then
if
[
-z
$BOOTIMAGE
]
;
then
# Lets see what fstabs tells me
# Lets see what fstabs tells me
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment