首页
社区
课程
招聘
[求助]android内核编译问题,多谢
发表于: 2022-6-3 19:03 16308

[求助]android内核编译问题,多谢

2022-6-3 19:03
16308

     我最近尝试对android10内核进行编译,个人感觉现在android内核很难编译,编译出来得都没有触屏功能,早先那些修改内核缺省配置文件: b1c1_defconfig方法好像都失效了。即使将那些必须的触屏加入到这个文件,但是根本无法生效,编译生成的新配置文件和最终的编译结果还是原先的,根本没变。楼主有什么好的方法吗?多谢

       我的手机是pixel3的,打算用android10,所以下载的版本是:  android-msm-crosshatch-4.9-android10

       在ubuntu20.04上编译的,一切正常,顺利的编译完成了。接着我更换了内核。

adb reboot bootloader
fastboot boot Image.lz4-dtb


但当我更换了新的镜像之后,手机完全没有反应,无法操作,无奈刷机恢复:

 

 

      在网上查询,发现原始编译的内核不支持手机触屏,于是,我需要将下面配置定制到手机的配置中,但是,我尝试了很多次,完全做不到。

修改b1c1_defconfig之后,直接编译会报编译错误,

 

#需要修改的配置:

#add by fly

CONFIG_MODVERSIONS=n

CONFIG_MODULE_SIG=n

CONFIG_MODULE_SIG_FORCE=n

CONFIG_MODULE_SIG_SHA512=n

CONFIG_MODULE_SIG_ALL=n

CONFIG_QCA_CLD_WLAN=y

CONFIG_QCACLD_WLAN_LFR3=y

CONFIG_PRIMA_WLAN_OKC=y

CONFIG_PRIMA_WLAN_11AC_HIGH_TP=y

CONFIG_WLAN_FEATURE_11W=y

CONFIG_WLAN_FEATURE_LPSS=y

CONFIG_QCOM_VOWIFI_11R=y

CONFIG_HELIUMPLUS=y

CONFIG_QCOM_TDLS=y

CONFIG_QCOM_LTE_COEX=y

CONFIG_MPC_UT_FRAMEWORK=y

CONFIG_WLAN_OFFLOAD_PACKETS=y

CONFIG_WLAN_FASTPATH=y

CONFIG_WLAN_NAPI=y

CONFIG_WLAN_TX_FLOW_CONTROL_V2=y

CONFIG_WLAN_SYNC_TSF=y

CONFIG_LFR_SUBNET_DETECTION=y

CONFIG_MCC_TO_SCC_SWITCH=y

CONFIG_QCACLD_WLAN_LFR2=y

CONFIG_WLAN_FEATURE_DISA=y

CONFIG_WLAN_SPECTRAL_SCAN=y

 

因为单纯修改了b1c1_defconfig后,编译会直接报错。

savedefconfig does not match

 

所以修改b1c1_defconfig之后需要调整:



  1. 注释掉里面的POST_DEFCONFIG_CMDSbuild.config
    • 这些执行check_defconfigupdate_nocfig_config这将阻止您自定义 defconfig
  2. 我注释掉了 makefile 中如下代码( msm/private/msm-google/Makefile):
    #ifneq ($(KBUILD_SRC),)
    #	@$(kecho) '  Using $(srctree) as source for kernel'
    #	$(Q)if [ -f $(srctree)/.config -o -d $(srctree)/include/config ]; then \
    #		echo >&2 "  $(srctree) is not clean, please run 'make mrproper'"; \
    #		echo >&2 "  in the '$(srctree)' directory.";\
    #		/bin/false; \
    #	fi;
    #endif



接着我执行了如下步骤:

$ cd private/msm-google

$ make ARCH=arm64 b1c1_defconfig

$ make menuconfig

现在编辑内核配置并将其保存为“ .config ”,这是默认的。

完成后:

代码:

$ make savedefconfig

但是当我对比的时候,发现修改根本没有生效。

diff -u .config ./arch/arm64/configs/my_defconfig | diffstat

我编译之后,镜像和原来的大小还是一样的,安装之后,依然没有触屏功能。

无论我怎么操作,这个针对配置文件b1c1_defconfig的修改始终都无法生效,

这样的话也就无法为手机添加触屏功能。

 

请大神们多多指教,多谢。


我添加了调试项:

make ARCH=arm64 b1c1_defconfig --debug

发现修编译中找不到b1c1_defconfig文件

 File 'b1c1_defconfig' does not exist.


GNU Make 4.1

Built for x86_64-pc-linux-gnu

Copyright (C) 1988-2014 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Reading makefiles...

Updating goal targets....

 File 'b1c1_defconfig' does not exist.

   File 'scripts_basic' does not exist.

  Must remake target 'scripts_basic'.

GNU Make 4.1

Built for x86_64-pc-linux-gnu

Copyright (C) 1988-2014 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Reading makefiles...

Updating goal targets....

 File '__build' does not exist.

     File 'FORCE' does not exist.

    Must remake target 'FORCE'.

    Successfully remade target file 'FORCE'.

   Prerequisite 'FORCE' of target 'scripts/basic/fixdep' does not exist.

  Must remake target 'scripts/basic/fixdep'.

  Successfully remade target file 'scripts/basic/fixdep'.

Must remake target '__build'.

Successfully remade target file '__build'.

  Successfully remade target file 'scripts_basic'.

   File 'outputmakefile' does not exist.

  Must remake target 'outputmakefile'.

  Successfully remade target file 'outputmakefile'.

   File 'FORCE' does not exist.

  Must remake target 'FORCE'.

  Successfully remade target file 'FORCE'.

Must remake target 'b1c1_defconfig'.

GNU Make 4.1

Built for x86_64-pc-linux-gnu

Copyright (C) 1988-2014 Free Software Foundation, Inc.

License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.

Reading makefiles...

Updating goal targets....

 File 'b1c1_defconfig' does not exist.

     File 'FORCE' does not exist.

    Must remake target 'FORCE'.

    Successfully remade target file 'FORCE'.

     Prerequisite 'FORCE' of target 'scripts/kconfig/conf.o' does not exist.

    Must remake target 'scripts/kconfig/conf.o'.

    Successfully remade target file 'scripts/kconfig/conf.o'.

     Prerequisite 'FORCE' of target 'scripts/kconfig/zconf.tab.o' does not exist.

    Must remake target 'scripts/kconfig/zconf.tab.o'.

    Successfully remade target file 'scripts/kconfig/zconf.tab.o'.

   Prerequisite 'FORCE' of target 'scripts/kconfig/conf' does not exist.

  Must remake target 'scripts/kconfig/conf'.

  Successfully remade target file 'scripts/kconfig/conf'.

Must remake target 'b1c1_defconfig'.

#

# configuration written to .config

#

Successfully remade target file 'b1c1_defconfig'.

Successfully remade target file 'b1c1_defconfig'.

 

 



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

最后于 2022-6-5 08:37 被david1008编辑 ,原因:
收藏
免费 2
支持
分享
最新回复 (29)
雪    币: 434
活跃值: (2884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
build.config里的check_defconfig删掉
2022-6-4 20:57
0
雪    币: 10
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3

您好,多谢提醒,这个我早就注释掉了,

vim build.config 

DEFCONFIG=b1c1_defconfig
KERNEL_DIR=private/msm-google
. ${ROOT_DIR}/${KERNEL_DIR}/build.config.common.clang
#POST_DEFCONFIG_CMDS="check_defconfig && update_nocfi_config"

function update_nocfi_config() {
  # Disable clang-specific options
  ${KERNEL_DIR}/scripts/config --file ${OUT_DIR}/.config \
    -d LTO \
    -d LTO_CLANG \
    -d CFI \
    -d CFI_PERMISSIVE \
    -d CFI_CLANG
  (cd ${OUT_DIR} && \
    make O=${OUT_DIR} $archsubarch CROSS_COMPILE=${CROSS_COMPILE} olddefconfig)
}

最后于 2022-6-5 08:37 被david1008编辑 ,原因:
2022-6-5 07:56
0
雪    币: 1
活跃值: (1142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我之前也弄过,碰到同样问题,触屏无效
2022-6-6 09:56
0
雪    币: 521
活跃值: (6082)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
5
可以看一下这个帖子 https://www.akr-developers.com/d/526-pixel3-aosp/3
2022-6-6 10:03
0
雪    币: 1
活跃值: (1142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
[軍] 可以看一下这个帖子 https://www.akr-developers.com/d/526-pixel3-aosp/3
这个之前也有看过,还是没搞成功,可能我没看明白把。太繁琐了编译这个内核,放弃了。
2022-6-6 10:22
0
雪    币: 950
活跃值: (1405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi
7
我年前成功了,可惜虚拟机删掉了,确实繁琐,我们用的还是同一个手机,现在记不清怎么解决的了,只能告诉你,能成功
2022-6-6 10:39
0
雪    币: 521
活跃值: (6082)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
8
wx_阿达西 这个之前也有看过,还是没搞成功,可能我没看明白把。太繁琐了编译这个内核,放弃了。
其实就是两步。先让 pixel3 内核将触摸屏驱动集成到内核中,这个可以通过修改 b1c1_defconfig 配置文件开启,开启的选项可以参考这个 https://github.com/kerneltoast/android_kernel_google_floral/commit/c1dcb1be643c1e3f79b59dcc93ecce3eaebb5394。之后就是用 b1c1_init ,将三个提交的内容对应修改到自己的内核。
2022-6-6 17:49
0
雪    币: 12502
活跃值: (3068)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
触屏搞定之后,你会发现网络不能用
2022-6-6 19:40
0
雪    币: 521
活跃值: (6082)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
10
白菜大哥 触屏搞定之后,你会发现网络不能用[em_86]
pixel3 的这样修改可以,网络也是ok的。但是3xl不行
2022-6-6 20:08
0
雪    币: 12502
活跃值: (3068)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
[軍] pixel3 的这样修改可以,网络也是ok的。但是3xl不行
哈哈,我当初弄得就是3xl,修好了触屏还有wifi,惊不惊喜,意不意外。
2022-6-6 21:47
0
雪    币: 27
活跃值: (622)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
12
你需要切到对应的分支然后编译,再刷进去触屏啥的才能正常,方法就是看系统版本里内核版本号,pixel2为例 `4.4.116-g8a6cc9c6abe9`,对应commit就是`8a6cc9c6abe9`,你找到对应的内核代码直接check out过去再编译就行,我之前这样搞的,没啥问题 :D 
2022-6-7 10:55
0
雪    币: 1
活跃值: (1142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
[軍] 其实就是两步。先让 pixel3 内核将触摸屏驱动集成到内核中,这个可以通过修改 b1c1_defconfig 配置文件开启,开启的选项可以参考这个 https://github.com/kernel ...
找时间再试试
2022-6-7 18:13
0
雪    币: 1
活跃值: (1142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
Concord 你需要切到对应的分支然后编译,再刷进去触屏啥的才能正常,方法就是看系统版本里内核版本号,pixel2为例 `4.4.116-g8a6cc9c6abe9`,对应commit就是`8a6cc9c6abe9 ...
so,您的意思是内核分支不对,只要分支对了,直接编译刷机就是?什么问题都不会有?
2022-6-7 18:16
0
雪    币: 348
活跃值: (1618)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
楼主搞好了吗?
2022-6-10 19:06
0
雪    币: 248
活跃值: (291)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
问题本质还是内核驱动模块加载失败了,触屏或者wifi都有一个.ko的内核模块,init的时候会通过vendor的rc脚本insmod进内核,可以通过lsmod查看已加载的模块,会发现一个都没加载进去,可以对比正常内核和自己编译内核前后。最简单方式就是将自己编译内核的所有.ko手动insmod进去,前提是需要移除内核模块加载校验,还可以直接将内核模块编译进内核,不过这种方式我没试过
2022-6-11 11:47
0
雪    币: 2006
活跃值: (550)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
其实就是内核驱动问题,你看看哪个内核正常的合并进去,可以参考cm之类的第三方源码
2022-6-12 21:29
0
雪    币: 950
活跃值: (1405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi
18

参考


2022-6-17 21:39
0
雪    币: 5924
活跃值: (3989)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
大佬。framework改过,mi3刷lineageos。但没编译过内核,顶一下吧
2022-6-18 01:13
0
雪    币: 5005
活跃值: (6653)
能力值: ( LV12,RANK:200 )
在线值:
发帖
回帖
粉丝
20

刷机以后触摸屏无效是因为kernel编译出来不仅有内核镜像,还有一些ko文件,内核镜像和ko文件必须匹配上,这些是开源的,所以可以从源码编译出来.

但是需要集成到系统的vendor.img中,见

https://source.android.com/devices/architecture/kernel/loadable-kernel-modules

而vendor.img是闭源的,系统在编译的时候是直接拷贝厂商的vendor.img,而不是根据你编译出来的ko重打包,所以导致内核镜像和ko不匹配.解决方案是手动将这些ko push到手机的/vendor/lib/module目录下重启.暂时没发现wifi有问题

最后于 2022-7-22 16:30 被飞翔的猫咪编辑 ,原因:
2022-7-22 16:27
0
雪    币: 147
活跃值: (345)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
tmi 参考
大佬想请教你一点模块调用空指针的问题,论坛私信发不了,能否解答一下我的疑惑,先在这里跪谢大佬了
2022-9-1 00:35
0
雪    币: 950
活跃值: (1405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi
22
wuli鸭蛋君 大佬想请教你一点模块调用空指针的问题,论坛私信发不了,能否解答一下我的疑惑,先在这里跪谢大佬了
不懂呀
2022-9-1 09:07
0
雪    币: 147
活跃值: (345)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23

最后于 2022-9-1 17:49 被wuli鸭蛋君编辑 ,原因: 重复发送了
2022-9-1 17:47
0
雪    币: 147
活跃值: (345)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
tmi [em_77]不懂呀
我碰到的是编译出来的模块符号CRC跟系统导出符号的CRC不一样,内核是开源的,版本号什么的都对应的上,内核patch过后也能加载,不过只要一调用就用系统崩溃重启。不知道是不是CRC不一样的原因,还请大佬解答一下疑惑,再次跪谢大佬
2022-9-1 17:49
0
雪    币: 950
活跃值: (1405)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
tmi
25
wuli鸭蛋君 我碰到的是编译出来的模块符号CRC跟系统导出符号的CRC不一样,内核是开源的,版本号什么的都对应的上,内核patch过后也能加载,不过只要一调用就用系统崩溃重启。不知道是不是CRC不一样的原因,还请大 ...
我也不懂,是不是你掉用的函数在kernel里面没有导出,所以调用不到
2022-9-1 18:39
0
游客
登录 | 注册 方可回帖
返回
//