前面这些版本源码资源以及vendor资源大家应该刷过机的都知道怎么去找和下载,网上也有很多比较详细的教程,不赘述。本文重点对整个编译脚本进行注解,以及解决一部分人遇到的触屏失灵问题。
Image.lz4-dtb Image.lz4-dtb是内核的设备树描述文件,通过此文件编译内核时不会编译冗余的代码,所以要编译某个版本的内核时,应该先将生产的设备树文件拷贝到内核编译前查询的目录:
Image.lz4-dtb是Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥着大量的垃圾代码,相当多数的代码只是在描述板级细节,而这些板级细节对于内核来讲,不过是垃圾,如板上的platform设备、resource、i2c_board_info、spi_board_info以及各种硬件的platform_data。读者有兴趣可以统计下常见的s3c2410、s3c6410等板级目录,代码量在数万行。 社区必须改变这种局面,于是PowerPC等其他体系架构下已经使用的Flattened Device Tree(FDT)进入ARM社区的视野。Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF)。在Linux 2.6中,ARM架构的板极硬件细节过多地被硬编码在arch/arm/plat-xxx和arch/arm/mach-xxx,采用Device Tree后,许多硬件的细节可以直接透过它传递给Linux,而不再需要在kernel中进行大量的冗余编码。
可能出现的问题(我自己遇到的问题,坑的一头雾水那种) 如果每次更换内核版本的时候不能直接在msm下git checkoout 版本来切换,因为会有很多已经生成的文件在下一次编译的时候不会再进行编译,会出错, 一种比较保险的方式就是,git checkout .丢弃本地没有提交的所有修改,返回到最初版本。 此外,另一种最保险的方法是重新
然后checkout到干净的分支,再进行编译。优点是之前一些找不到原因的问题可能会在下次正常操作后不再出现,但是缺点是浪费时间。
建议 脚本中编译内核部分没有对编译内核失败进行报错,因此首次编译内核生成dtb文件的时候最好手动编译。或者单独写个脚本编译;
本文重点解决的大家比较关心的安装大多数网上方法刷完机后触屏失灵问题:
pixel 2的刷机和别的google系列的手机差别并不大,不过值得注意的是如果只替换boot.img,会导致有几个htc驱动的version magic和内核的version magic不一致,从而使得这几个驱动在boot时,不能被insmod,所以刷完之后就会有触摸屏幕没有反应的状况。所以,在pixel 2刷机之前,首先要对内核做一些修改,去掉这个version magic的校验机制 :
方法二,改掉自身编译的内核的version magic, 使得和原本userdebug 版本相匹配 :
3.在module.c里,注释掉check_verion函数:
我自己在实践中发现pixel 2刷其他版本时也遇到类似的问题,同样的方式解决就行。nexus 6p不存在这样的问题。
```
export KERNEL_PATH
=
/
home
/
koozxcv
/
vp
/
Kernel
/
kernel
/
msm
export GCC_PATH
=
/
opt
/
android
-
ndk
-
r15b
/
toolchains
/
aarch64
-
linux
-
android
-
4.9
/
prebuilt
/
linux
-
x86_64
/
bin
/
aarch64
-
linux
-
android
-
export AOSP_PATH
=
/
home
/
koozxcv
/
vp
/
Kernel
/
AOSP_SOURCE
/
android
-
8.0
.
0_r34
export TARGET_PATH
=
$AOSP_PATH
/
out
/
target
/
product
/
walleye
export DEVICE_PATH
=
$AOSP_PATH
/
device
/
google
/
wahoo
-
kernel
export KERNEL_OUT_PATH
=
$KERNEL_PATH
/
arch
/
arm64
/
boot
cd $KERNEL_PATH
rm vmlinux.o
rm vmlinux
sleep
2
export ARCH
=
arm64
export export CROSS_COMPILE
=
$GCC_PATH
make
-
j$(nproc
-
-
all
) wahoo_defconfig
make
-
j$(nproc
-
-
all
)
cp $KERNEL_OUT_PATH
/
Image.lz4
-
dtb $DEVICE_PATH
/
cp $KERNEL_OUT_PATH
/
dtbo.img $TARGET_PATH
/
cd $TARGET_PATH
rm boot.img
rm kernel
cd $AOSP_PATH
source $AOSP_PATH
/
build
/
envsetup.sh
lunch
29
make
-
B bootimage和dtbo.img
cd $TARGET_PATH
adb reboot bootloader
echo
"waiting device"
sleep
8
fastboot flash boot boot.img
fastboot flash dtbo_a dtbo.img
fastboot reboot
```
```
export KERNEL_PATH
=
/
home
/
koozxcv
/
vp
/
Kernel
/
kernel
/
msm
export GCC_PATH
=
/
opt
/
android
-
ndk
-
r15b
/
toolchains
/
aarch64
-
linux
-
android
-
4.9
/
prebuilt
/
linux
-
x86_64
/
bin
/
aarch64
-
linux
-
android
-
export AOSP_PATH
=
/
home
/
koozxcv
/
vp
/
Kernel
/
AOSP_SOURCE
/
android
-
8.0
.
0_r34
export TARGET_PATH
=
$AOSP_PATH
/
out
/
target
/
product
/
walleye
export DEVICE_PATH
=
$AOSP_PATH
/
device
/
google
/
wahoo
-
kernel
export KERNEL_OUT_PATH
=
$KERNEL_PATH
/
arch
/
arm64
/
boot
cd $KERNEL_PATH
rm vmlinux.o
rm vmlinux
sleep
2
export ARCH
=
arm64
export export CROSS_COMPILE
=
$GCC_PATH
make
-
j$(nproc
-
-
all
) wahoo_defconfig
make
-
j$(nproc
-
-
all
)
cp $KERNEL_OUT_PATH
/
Image.lz4
-
dtb $DEVICE_PATH
/
cp $KERNEL_OUT_PATH
/
dtbo.img $TARGET_PATH
/
cd $TARGET_PATH
rm boot.img
rm kernel
cd $AOSP_PATH
source $AOSP_PATH
/
build
/
envsetup.sh
lunch
29
make
-
B bootimage和dtbo.img
cd $TARGET_PATH
adb reboot bootloader
echo
"waiting device"
sleep
8
fastboot flash boot boot.img
fastboot flash dtbo_a dtbo.img
fastboot reboot
```
cp $KERNEL_OUT_PATH
/
Image.lz4
-
dtb $DEVICE_PATH
/
cp $KERNEL_OUT_PATH
/
Image.lz4
-
dtb $DEVICE_PATH
/
git clone https:
/
/
android.googlesource.com
/
kernel
/
msm
git clone https:
/
/
android.googlesource.com
/
kernel
/
msm
CONFIG_MODVERSIONS
=
y
CONFIG_MODULE_SRCVERSION_ALL
=
y
CONFIG_MODVERSIONS
=
y
CONFIG_MODULE_SRCVERSION_ALL
=
y
static
int
check_modinfo(struct module
*
mod, struct load_info
*
info,
int
fla
gs)
{
const char
*
modmagic
=
get_modinfo(info,
"vermagic"
);
int
err;
if
(flags & MODULE_INIT_IGNORE_VERMAGIC)
modmagic
=
NULL;
/
*
This
is
allowed: modprobe
-
-
force will invalidate it.
*
/
if
(!modmagic) {
err
=
try_to_force_load(mod,
"bad vermagic"
);
if
(err)
return
err;
}
else
if
(!same_magic(modmagic, vermagic, info
-
>index.vers)) {
pr_err(
"%s: version magic '%s' should be '%s'\n"
,
mod
-
>name, modmagic, vermagic);
/
/
return
-
ENOEXEC; 【这里注释掉】
}
if
(!get_modinfo(info,
"intree"
))
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
if
(get_modinfo(info,
"staging"
)) {
add_taint_module(mod, TAINT_CRAP, LOCKDEP_STILL_OK);
pr_warn(
"%s: module is from the staging directory, the quality "
"is unknown, you have been warned.\n"
, mod
-
>name);
}
/
*
Set
up license info based on the info section
*
/
set_license(mod, get_modinfo(info,
"license"
));
return
0
;
}
static
int
check_modinfo(struct module
*
mod, struct load_info
*
info,
int
fla
gs)
{
const char
*
modmagic
=
get_modinfo(info,
"vermagic"
);
int
err;
if
(flags & MODULE_INIT_IGNORE_VERMAGIC)
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
最后于 2020-12-15 16:30
被koozxcv编辑
,原因: