求助:3566 kernel/System.map 中__initcall_7s函数指针表含无名非法指针导致跑飞

固件类型:自行编译的固件
SDK包名称:android11
SDK更新到哪个COMMIT:2022-04-16 00:00:00
SDK修改内容:学习阶段,mk config dts改了很多
Log日志:log.txt

do_initcall执行到7s阶段跑飞,查看kernel/System.map文件中__initcall_7s函数指针表格部分片段如下:

ffffff8009889e3c t __initcall_rockchip_clocks_loader_unprotect7s
ffffff8009889e40 t __initcall_mali_module_init7s
(此处本应有一个ffffff8009889e44函数指针,但此处缺失,do_initcall执行到这一项非法指针就跑飞了)
ffffff8009889e48 t __initcall_of_platform_sync_state_init7s
ffffff8009889e4c t __initcall_alsa_sound_last_init7s

搜索kernel所有源码,把所有late_initcall_sync都注释掉,__initcall7s已清空,实际结果如下,还是有一项无名非法指针:
ffffff8009889e44 T __initcall7s_start
ffffff8009889e48 T __con_initcall_start(由于__initcall7s_没有任何指针,此处应为44,不是48)
ffffff8009889e48 T __initcall_end(由于__initcall7s_没有任何指针,此处应为44,不是48)

请教:什么样的错误会导致kernel编译出这种结果?如何解决这个问题?

tchip_askquestions
log.txt (1.4 KB)

  1. 不修改SDK,编译的固件有没有问题?
  2. 根据自己的修改,一点一点撤销修改,排查原因。

sdk源码重新解压,不做任何修改,直接编译3566 roc pc,生成的system.map也有同样的问题
bundle是0416的,我用旧的bundle再试一次

本帖最后由 firefly_zhongw 于 2022-5-12 11:27 编辑

  1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
  2. 第一次解压SDK更新后,进行一次完整编译(不要只单独编译kernel),并烧录固件,不要用很旧的固件只单独烧录 boot.img
./FFTools/make.sh -d rk3566-roc-pc -j8 -l rk3566_roc_pc-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3566_roc_pc-userdebug
  1. 接调试串口,从上电到异常,提供完整的log信息,不要只提供部分

firefly_zhongw 发表于 2022-5-12 11:16

  1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
  2. 第一次 …

我的电脑编译安卓要5个小时,所以只编译了uboot和kernel,用最新和上一版的bundle都一样结果
编译安卓会影响到kernel目录下的system.map吗?

firefly_zhongw 发表于 2022-5-12 11:16

  1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
  2. 第一次 …

干净的SDK编译完看kernel的system.map就不对
ffffff800994be30 T __initcall7s_start
ffffff800994be30 t __initcall_clear_boot_tracer7s
ffffff800994be34 t __initcall_rockchip_csi2_dphy_clr_unready_dev7s
ffffff800994be38 t __initcall_clk_disable_unused7s
ffffff800994be3c t __initcall_rockchip_pd_keepon_release7s
ffffff800994be40 t __initcall_rockchip_pm_drv_register7s
ffffff800994be44 t __initcall_regulator_init_complete7s
ffffff800994be48 t __initcall_rockchip_clocks_loader_unprotect7s
ffffff800994be4c t __initcall_mali_module_init7s
ffffff800994be50 t __initcall_sensor_mod_init7s
ffffff800994be54 t __initcall_rkisp1_clr_unready_dev7s
ffffff800994be58 t __initcall_rkisp_clr_unready_dev7s
(注:此处缺ffffff800994be5c)
ffffff800994be60 t __initcall_of_platform_sync_state_init7s
ffffff800994be64 t __initcall_alsa_sound_last_init7s
ffffff800994be68 T __con_initcall_start
ffffff800994be68 T __initcall_end

本帖最后由 firefly_zhongw 于 2022-5-12 11:48 编辑

  1. 编译步骤是什么?
  2. 烧录最新的公版固件有没有问题?
  3. 接调试串口提供完整的log
  4. 如果SDK没有进行过完整的编译,请先进行完整的编译,详细看维基教程 https://wiki.t-firefly.com/zh_CN/ROC-RK3566-PC/faqs.html#android-sdk-dan-du-bian-yi-sheng-cheng-de-boot-img-yu-dao-wen-ti

firefly_zhongw 发表于 2022-5-12 11:37

  1. 编译步骤是什么?
  2. 烧录最新的公版固件有没有问题?
  3. 接调试串口提供完整的log

编译步骤:
./FFTools/make.sh -d rk3566-roc-pc -j8 -l rk3566_roc_pc-userdebug
编译到Kernel完成后,就查看kernel目录下最新生成的system.map,发现有问题,就没再继续编译安卓(要5个小时),也没有烧录运行

看了kernel源码do_initcall的过程,如果system.map有这样的问题,do_initcall_level_7必定跑飞,除非编完Kernel继续编译安卓会修改kernel以及kernel目录下的system.map,请问能确认这一点吗?

白天电脑还要做别的,等晚上睡觉之前启动完整编一个安卓,明早起来看看

firefly_zhongw 发表于 2022-5-12 11:16

  1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
  2. 第一次 …

1.源码:按照以下这个页面的方法解压SDK,得到commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37

2.编译:
./FFTools/make.sh -d rk3566-roc-pc -j8 -l rk3566_roc_pc-userdebug
./FFTools/mkupdate/mkupdate.sh -l rk3566_roc_pc-userdebug

3.烧片:firmware选择ROC-RK3566-PC_Android11_HDMI_220513.img,eraseflash后upgrade

4.运行:调试口日志显示执行到以下位置死机:
[ 2.040135] rockchip-csi2-dphy0: No link between dphy and sensor
[ 2.040153] rkisp-vir0: update sensor failed
[ 2.042833] v�

对应system.map的initcalls7为:
ffffff800995cedc t __initcall_sensor_mod_init7s
ffffff800995cee0 t __initcall_rkisp1_clr_unready_dev7s
ffffff800995cee4 t __initcall_rkisp_clr_unready_dev7s
(此处缺失ffffff800995cee8,执行到这个非法函数指针后死机)
ffffff800995ceec t __initcall_of_platform_sync_state_init7s
ffffff800995cef0 t __initcall_alsa_sound_last_init7s
log_map.zip (959 KB)

  1. 日志:调试口日志log.txt以及kernel/System.map文件见附件

感谢指导!

本帖最后由 firefly_zhongw 于 2022-5-13 09:53 编辑

  1. ROC-RK3566-PC这个板子的硬件是否有改动过?
  2. 烧录官网最新的固件是否正常?

firefly_zhongw 发表于 2022-5-13 09:42

  1. ROC-RK3566-PC这个板子的硬件是否有改动过?
  2. 烧录官网最新的固件是否正常?

看编译结果system.map明显就有bug,跟跑的板子没有关系,需要解决的是编译结果的bug
OS是ubuntu20,另外一个同事用ubuntu18,编出来的system.map也有这个问题,剩下只能怀疑用apt安装的一堆编译需要的lib哪个不对了

本帖最后由 firefly_zhongw 于 2022-5-13 10:37 编辑

请问你们用的是什么板子???

firefly_zhongw 发表于 2022-5-13 10:34
请问你们用的是什么板子???

我重新装个ubuntu18,按你们这个文档安装lib试试

sudo apt-get update

sudo apt-get install git gnupg flex bison gperf libsdl1.2-dev
libesd-java libwxgtk3.0-dev squashfs-tools build-essential zip curl
libncurses5-dev zlib1g-dev pngcrush schedtool libxml2 libxml2-utils
xsltproc lzop libc6-dev schedtool g+±multilib lib32z1-dev lib32ncurses5-dev
lib32readline-dev gcc-multilib libswitch-perl libssl-dev unzip zip device-tree-compiler
liblz4-tool python-pyelftools python3-pyelftools -y

  1. 如果是官方的板子,请联系售后
  2. 如果不是官方的板子,不做支持

您好!同样遇到内核跑到initcall7s的某处卡死,请问您是如何解决的呢?

您好!遇到同样的问题,内核启动到同样位置卡死,请问您是如何解决的?