Firefly开源社区

标题: 求助:3566 kernel/System.map 中__initcall_7s函数指针表含无名非法指针导致跑飞 [打印本页]

作者: nde    时间: 2022-5-11 17:34
标题: 求助:3566 kernel/System.map 中__initcall_7s函数指针表含无名非法指针导致跑飞
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, 下载次数: 3, 下载积分: 灯泡 -1 , 经验 -1


作者: firefly_zhongw    时间: 2022-5-12 09:27
1. 不修改SDK,编译的固件有没有问题?
2. 根据自己的修改,一点一点撤销修改,排查原因。
作者: nde    时间: 2022-5-12 09:37
sdk源码重新解压,不做任何修改,直接编译3566 roc pc,生成的system.map也有同样的问题
bundle是0416的,我用旧的bundle再试一次
作者: firefly_zhongw    时间: 2022-5-12 11:16
本帖最后由 firefly_zhongw 于 2022-5-12 11:27 编辑

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


作者: nde    时间: 2022-5-12 11:32
firefly_zhongw 发表于 2022-5-12 11:16
1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
2. 第一次 ...

我的电脑编译安卓要5个小时,所以只编译了uboot和kernel,用最新和上一版的bundle都一样结果
编译安卓会影响到kernel目录下的system.map吗?
作者: nde    时间: 2022-5-12 11:35
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:37
本帖最后由 firefly_zhongw 于 2022-5-12 11:48 编辑

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

作者: nde    时间: 2022-5-12 12:25
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,请问能确认这一点吗?

白天电脑还要做别的,等晚上睡觉之前启动完整编一个安卓,明早起来看看
作者: nde    时间: 2022-5-13 09:35
firefly_zhongw 发表于 2022-5-12 11:16
1. 最新的SDK应该是:对应 bundle 的最新 commit 为 98ba077b368738f17996e8ef2e5df75e8df2bc37
2. 第一次 ...

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

https://wiki.t-firefly.com/zh_CN/ROC-RK3566-PC/compile_android11.0_firmware.html

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 (958.52 KB, 下载次数: 1)


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

感谢指导!


作者: firefly_zhongw    时间: 2022-5-13 09:42
本帖最后由 firefly_zhongw 于 2022-5-13 09:53 编辑

1. ROC-RK3566-PC这个板子的硬件是否有改动过?
2. 烧录官网最新的固件是否正常?
作者: nde    时间: 2022-5-13 10:32
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:34
本帖最后由 firefly_zhongw 于 2022-5-13 10:37 编辑

请问你们用的是什么板子???
作者: nde    时间: 2022-5-13 11:01
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
作者: firefly_zhongw    时间: 2022-5-13 11:10
1. 如果是官方的板子,请联系售后
2. 如果不是官方的板子,不做支持
作者: majinhui    时间: 2023-9-19 08:44
您好!同样遇到内核跑到initcall7s的某处卡死,请问您是如何解决的呢?
作者: majinhui    时间: 2023-9-19 12:40
您好!遇到同样的问题,内核启动到同样位置卡死,请问您是如何解决的?




欢迎光临 Firefly开源社区 (https://dev.t-firefly.com/) Powered by Discuz! X3.1