首页
社区
课程
招聘
[求助]编译pixel xl踩坑记录,求助
发表于: 2020-11-4 21:52 7359

[求助]编译pixel xl踩坑记录,求助

2020-11-4 21:52
7359

如题。编译asop以后编译内核。pixel 3 xl,已经编译出了dtc和mkdtimg,放入/usr/bin目录,编译asop最后几个app卡住了。。但是Boot.img生成了,也可以make bootimage生成新的boot.img,总体来说asop问题不大。。

 

但是编译kernel的时候,出现了坑。

1
2
3
4
  DTBOIMG arch/arm64/boot/dtbo.img
create image file: arch/arm64/boot/dtbo.img...
Can not read file: arch/arm64/boot/dts/google/sdm845-v2-b1c1-devboard.dtbo
make[2]: *** [../arch/arm64/boot/Makefile:71: arch/arm64/boot/dtbo.img] Error 255

提示下面这行报错

1
/arch/arm64/boot/Makefile:71

打开对应文件

1
2
$(obj)/dtbo.img: $(obj)/dts/dtboimg.cfg $(DTBO_OBJS) FORCE
    $(call if_changed,mkdtimg,4096) # align dtbo.img to 4kB

想到是我的mkdtimg没执行成功,参数不对,于是改为

1
2
$(obj)/dtbo.img: $(obj)/dts/dtboimg.cfg $(DTBO_OBJS) FORCE
    $(call if_changed,mkdtimg --page_size 4096) # align dtbo.img to 4kB

接着继续编译,出现

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  CHK     kernel/config_data.h
  GEN     .version
  LD      vmlinux.o
  MODPOST vmlinux.o
  CHK     include/generated/compile.h
  UPD     include/generated/compile.h
  CC      init/version.o
  LD      init/built-in.o
drivers/built-in.o: In function `cam_actuator_power_down':
/mnt/f/msm/msm/out/../drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_core.c:155: undefined reference to `clearRearVCMInitDownload'
drivers/built-in.o: In function `cam_actuator_i2c_pkt_parse':
/mnt/f/msm/msm/out/../drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/cam_actuator_core.c:582: undefined reference to `checkRearVCMLTC'
drivers/built-in.o: In function `cam_ois_calibration':
/mnt/f/msm/msm/out/../drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_core.c:31: undefined reference to `GyroReCalib'
/mnt/f/msm/msm/out/../drivers/media/platform/msm/camera/cam_sensor_module/cam_ois/cam_ois_core.c:36: undefined reference to `WrGyroOffsetData'
make[1]: *** [/mnt/f/msm/msm/Makefile:1099: vmlinux] Error 1
make[1]: Leaving directory '/mnt/f/msm/msm/out'
make: *** [Makefile:152: sub-make] Error 2
 
#### failed to build some targets (01:34 (mm:ss)) ####

字面意思,undefined reference to `clearRearVCMInitDownload'
打开对应文件。是extern进去的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <linux/module.h>
#include <cam_sensor_cmn_header.h>
#include "cam_actuator_core.h"
#include "cam_sensor_util.h"
#include "cam_trace.h"
#include "cam_res_mgr_api.h"
 
 
/* Implemented in fw_update.c */
extern int checkRearVCMLTC(struct camera_io_master *io_info);
extern void clearRearVCMInitDownload(struct camera_io_master *io_info);
 
 
int32_t cam_actuator_construct_default_power_setting(
        struct cam_sensor_power_ctrl_t *power_info)
{

那么他的实现应该在别的文件里面,这里提示是在fw_update.c里面,这个文件位于
drivers/media/platform/msm/camera/cam_sensor_module/cam_fw_update
这个目录,
而原始文件位于
drivers/media/platform/msm/camera/cam_sensor_module/cam_actuator/
于是引入头文件,并且取消cam_actuator_dev.c的
struct intf_params {
int32_t device_hdl;
int32_t session_hdl;
int32_t link_hdl;
struct cam_req_mgr_kmd_ops ops;
struct cam_req_mgr_crm_cb *crm_cb;
};
这个定义,因为他在h文件重复定义了
=======================以上是过程=============================================================================================================
但是现在就出现一个悖论,fw_update依赖cam_actuator_dev(include方式引入头文件,需要里面的结构体等内容),cam_actuator_dev又反过来需要fw_update的实现函数。这种情况如何处理。。。。pixel 3xl的pie-qpr1版本。
而且不止这一个模块。其他很多模块也是这种情况,a需要引入b,b又需要使用a,a和b都是两个独立文件。
====================以上问题暂时不知道怎么解决,无奈只能在Makefile里面去掉这个camera的特殊模块,camera_module里面很多模块,去掉两个就可以,然后编译,make -j4

=================结果安卓出来了PE+文件,对,你没有看错。就是pe,然后打开ida看那个内核文件,结果里面真的是x86指令。。对,不是x64也不是arm64,是x86指令。。还是标准的pe格式也是x86指令=======================================

解决方法是 make sdm845_perf_defconfig而不是make sdm845_defconfig,不然出来x86指令会笑死的。

这些坑折腾完之后,终于编译出来了,看到他们的头,ArmD这种头,ida64载入以后,看到的,是正常内核的文件,里面有ptrace等的实现,都是arm64的指令,然后也有service_locator_svc_exit这些内核函数,二进制对比,的的确确是和拆boot.img内核出来的那个zImage格式是一样的,都是armd开头,然后里面有内核函数,比如chmod等实现。但是编译出来的大小,足足和原始内核差了5mb,尝试刷进去。开不了机。。。尴尬,求指点


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

最后于 2020-11-5 10:52 被白菜大哥编辑 ,原因:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 477
活跃值: (1412)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
但凡你要改源码,就表示之前那一步没对了
2020-11-4 23:01
0
雪    币: 129
活跃值: (4520)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
老哥知道怎么把编译出来的arm64镜像在arm电脑跑吗
2020-11-5 09:34
0
雪    币: 891
活跃值: (591)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
源码是不需要改动的,报了源码哪里错误大概率就是你环境没配置好。
2020-11-5 10:20
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
源码是不需要改动的,报了源码哪里错误大概率就是你环境没配置好。
求指点。。用的asop的编译器和环境,
source build/envsetup.sh,
lunch 18,
make -j4
make dtc
make mkdtimg
切换到msm的目录
export ARCH=arm64.
export SUBARCH=arm64,
export CROSS_COMPILE=那个交叉编译器
export CROSS_COMPILE_ARM32=arm那个交叉编译器
make sdm845_defconfig
make -j4
2020-11-5 10:31
0
雪    币: 891
活跃值: (591)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
参考官网文档
https://source.android.google.cn/setup/build/building-kernels-deprecated?hl=zh-cn
2020-11-5 15:18
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
楼主解决了吗?我也遇到了同样的问题
2021-7-13 13:50
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
wx_zzz_587 楼主解决了吗?我也遇到了同样的问题
解决了触碰,又有网络不能用。真的坑
2021-7-13 14:53
0
游客
登录 | 注册 方可回帖
返回
//