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
f5d054b9
Commit
f5d054b9
authored
Oct 09, 2019
by
topjohnwu
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Add support for PXA DTBs
parent
d25ae5e0
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
13 deletions
+49
-13
dtb.cpp
native/jni/magiskboot/dtb.cpp
+49
-6
format.cpp
native/jni/magiskboot/format.cpp
+0
-4
format.h
native/jni/magiskboot/format.h
+0
-3
No files found.
native/jni/magiskboot/dtb.cpp
View file @
f5d054b9
...
@@ -10,12 +10,14 @@ extern "C" {
...
@@ -10,12 +10,14 @@ extern "C" {
#include <map>
#include <map>
#include "magiskboot.h"
#include "magiskboot.h"
#include "format.h"
using
namespace
std
;
using
namespace
std
;
constexpr
int
MAX_DEPTH
=
32
;
#define DTB_MAGIC "\xd0\x0d\xfe\xed"
static
bitset
<
MAX_DEPTH
>
depth_set
;
#define QCDT_MAGIC "QCDT"
#define DTBH_MAGIC "DTBH"
#define PXADT_MAGIC "PXA-DT"
#define PXA_19xx_MAGIC "PXA-19xx"
struct
qcdt_hdr
{
struct
qcdt_hdr
{
char
magic
[
4
];
/* "QCDT" */
char
magic
[
4
];
/* "QCDT" */
...
@@ -54,6 +56,24 @@ struct bhtable_v2 {
...
@@ -54,6 +56,24 @@ struct bhtable_v2 {
uint32_t
space
;
/* 0x00000020 */
uint32_t
space
;
/* 0x00000020 */
}
__attribute__
((
packed
));
}
__attribute__
((
packed
));
struct
pxadt_hdr
{
char
magic
[
6
];
/* "PXA-DT" */
uint32_t
version
;
/* PXA-DT version */
uint32_t
num_dtbs
;
/* Number of DTBs */
}
__attribute__
((
packed
));
struct
pxa_19xx_hdr
{
char
magic
[
8
];
/* "PXA-19xx" */
uint32_t
version
;
/* PXA-DT version */
uint32_t
num_dtbs
;
/* Number of DTBs */
}
__attribute__
((
packed
));
struct
pxa_table_v1
{
uint32_t
cpu_info
[
2
];
/* Some CPU info */
uint32_t
offset
;
/* DTB offset in PXA-DT */
uint32_t
len
;
/* DTB size */
}
__attribute__
((
packed
));
struct
dtb_blob
{
struct
dtb_blob
{
void
*
fdt
;
void
*
fdt
;
uint32_t
offset
;
uint32_t
offset
;
...
@@ -83,6 +103,9 @@ private:
...
@@ -83,6 +103,9 @@ private:
template
<
class
Iter
>
template
<
class
Iter
>
inline
fdt_map_iter
<
Iter
>
make_iter
(
Iter
j
)
{
return
fdt_map_iter
<
Iter
>
(
j
);
}
inline
fdt_map_iter
<
Iter
>
make_iter
(
Iter
j
)
{
return
fdt_map_iter
<
Iter
>
(
j
);
}
constexpr
int
MAX_DEPTH
=
32
;
static
bitset
<
MAX_DEPTH
>
depth_set
;
static
void
pretty_node
(
int
depth
)
{
static
void
pretty_node
(
int
depth
)
{
if
(
depth
==
0
)
if
(
depth
==
0
)
return
;
return
;
...
@@ -282,7 +305,7 @@ static int dtb_patch(const Header *hdr, const char *in, const char *out) {
...
@@ -282,7 +305,7 @@ static int dtb_patch(const Header *hdr, const char *in, const char *out) {
}
}
// Patch tables
// Patch tables
auto
tables_rw
=
reinterpret_cast
<
Table
*>
(
addr
+
sizeof
(
qcdt_hd
r
));
auto
tables_rw
=
reinterpret_cast
<
Table
*>
(
addr
+
sizeof
(
Heade
r
));
for
(
int
i
=
0
;
i
<
hdr
->
num_dtbs
;
++
i
)
{
for
(
int
i
=
0
;
i
<
hdr
->
num_dtbs
;
++
i
)
{
auto
&
blob
=
dtb_map
[
tables_rw
[
i
].
offset
];
auto
&
blob
=
dtb_map
[
tables_rw
[
i
].
offset
];
tables_rw
[
i
].
offset
=
blob
.
offset
;
tables_rw
[
i
].
offset
=
blob
.
offset
;
...
@@ -295,6 +318,8 @@ static int dtb_patch(const Header *hdr, const char *in, const char *out) {
...
@@ -295,6 +318,8 @@ static int dtb_patch(const Header *hdr, const char *in, const char *out) {
return
0
;
return
0
;
}
}
#define MATCH(s) (memcmp(dtb, s, sizeof(s) - 1) == 0)
static
int
dtb_patch
(
const
char
*
in
,
const
char
*
out
)
{
static
int
dtb_patch
(
const
char
*
in
,
const
char
*
out
)
{
if
(
!
out
)
if
(
!
out
)
out
=
in
;
out
=
in
;
...
@@ -304,7 +329,7 @@ static int dtb_patch(const char *in, const char *out) {
...
@@ -304,7 +329,7 @@ static int dtb_patch(const char *in, const char *out) {
mmap_ro
(
in
,
dtb
,
dtb_sz
);
mmap_ro
(
in
,
dtb
,
dtb_sz
);
run_finally
f
([
&
]{
munmap
(
dtb
,
dtb_sz
);
});
run_finally
f
([
&
]{
munmap
(
dtb
,
dtb_sz
);
});
if
(
memcmp
(
dtb
,
QCDT_MAGIC
,
4
)
==
0
)
{
if
(
MATCH
(
QCDT_MAGIC
)
)
{
auto
hdr
=
reinterpret_cast
<
qcdt_hdr
*>
(
dtb
);
auto
hdr
=
reinterpret_cast
<
qcdt_hdr
*>
(
dtb
);
switch
(
hdr
->
version
)
{
switch
(
hdr
->
version
)
{
case
1
:
case
1
:
...
@@ -319,7 +344,7 @@ static int dtb_patch(const char *in, const char *out) {
...
@@ -319,7 +344,7 @@ static int dtb_patch(const char *in, const char *out) {
default
:
default
:
return
1
;
return
1
;
}
}
}
else
if
(
memcmp
(
dtb
,
DTBH_MAGIC
,
4
)
==
0
)
{
}
else
if
(
MATCH
(
DTBH_MAGIC
)
)
{
auto
hdr
=
reinterpret_cast
<
dtbh_hdr
*>
(
dtb
);
auto
hdr
=
reinterpret_cast
<
dtbh_hdr
*>
(
dtb
);
switch
(
hdr
->
version
)
{
switch
(
hdr
->
version
)
{
case
2
:
case
2
:
...
@@ -328,6 +353,24 @@ static int dtb_patch(const char *in, const char *out) {
...
@@ -328,6 +353,24 @@ static int dtb_patch(const char *in, const char *out) {
default
:
default
:
return
1
;
return
1
;
}
}
}
else
if
(
MATCH
(
PXADT_MAGIC
))
{
auto
hdr
=
reinterpret_cast
<
pxadt_hdr
*>
(
dtb
);
switch
(
hdr
->
version
)
{
case
1
:
fprintf
(
stderr
,
"PXA-DT v1
\n
"
);
return
dtb_patch
<
pxa_table_v1
>
(
hdr
,
in
,
out
);
default
:
return
1
;
}
}
else
if
(
MATCH
(
PXA_19xx_MAGIC
))
{
auto
hdr
=
reinterpret_cast
<
pxa_19xx_hdr
*>
(
dtb
);
switch
(
hdr
->
version
)
{
case
1
:
fprintf
(
stderr
,
"PXA-19xx v1
\n
"
);
return
dtb_patch
<
pxa_table_v1
>
(
hdr
,
in
,
out
);
default
:
return
1
;
}
}
else
{
}
else
{
vector
<
uint8_t
*>
fdt_list
;
vector
<
uint8_t
*>
fdt_list
;
for
(
int
i
=
0
;
i
<
dtb_sz
;
++
i
)
{
for
(
int
i
=
0
;
i
<
dtb_sz
;
++
i
)
{
...
...
native/jni/magiskboot/format.cpp
View file @
f5d054b9
...
@@ -44,8 +44,6 @@ format_t check_fmt(const void *buf, size_t len) {
...
@@ -44,8 +44,6 @@ format_t check_fmt(const void *buf, size_t len) {
return
LZ4_LEGACY
;
return
LZ4_LEGACY
;
}
else
if
(
MATCH
(
MTK_MAGIC
))
{
}
else
if
(
MATCH
(
MTK_MAGIC
))
{
return
MTK
;
return
MTK
;
}
else
if
(
MATCH
(
DTB_MAGIC
))
{
return
DTB
;
}
else
if
(
MATCH
(
DHTB_MAGIC
))
{
}
else
if
(
MATCH
(
DHTB_MAGIC
))
{
return
DHTB
;
return
DHTB
;
}
else
if
(
MATCH
(
TEGRABLOB_MAGIC
))
{
}
else
if
(
MATCH
(
TEGRABLOB_MAGIC
))
{
...
@@ -77,8 +75,6 @@ const char *Fmt2Name::operator[](format_t fmt) {
...
@@ -77,8 +75,6 @@ const char *Fmt2Name::operator[](format_t fmt) {
return
"lz4_legacy"
;
return
"lz4_legacy"
;
case
MTK
:
case
MTK
:
return
"mtk"
;
return
"mtk"
;
case
DTB
:
return
"dtb"
;
default
:
default
:
return
"raw"
;
return
"raw"
;
}
}
...
...
native/jni/magiskboot/format.h
View file @
f5d054b9
...
@@ -38,11 +38,8 @@ typedef enum {
...
@@ -38,11 +38,8 @@ typedef enum {
#define LZ41_MAGIC "\x03\x21\x4c\x18"
#define LZ41_MAGIC "\x03\x21\x4c\x18"
#define LZ42_MAGIC "\x04\x22\x4d\x18"
#define LZ42_MAGIC "\x04\x22\x4d\x18"
#define MTK_MAGIC "\x88\x16\x88\x58"
#define MTK_MAGIC "\x88\x16\x88\x58"
#define DTB_MAGIC "\xd0\x0d\xfe\xed"
#define LG_BUMP_MAGIC "\x41\xa9\xe4\x67\x74\x4d\x1d\x1b\xa4\x29\xf2\xec\xea\x65\x52\x79"
#define LG_BUMP_MAGIC "\x41\xa9\xe4\x67\x74\x4d\x1d\x1b\xa4\x29\xf2\xec\xea\x65\x52\x79"
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
#define DHTB_MAGIC "\x44\x48\x54\x42\x01\x00\x00\x00"
#define QCDT_MAGIC "QCDT"
#define DTBH_MAGIC "DTBH"
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
#define SEANDROID_MAGIC "SEANDROIDENFORCE"
#define TEGRABLOB_MAGIC "-SIGNED-BY-SIGNBLOB-"
#define TEGRABLOB_MAGIC "-SIGNED-BY-SIGNBLOB-"
#define NOOKHD_RL_MAGIC "Red Loader"
#define NOOKHD_RL_MAGIC "Red Loader"
...
...
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