【Spiffo】排障:香橙派官方linux源码默认defconfig编译报错

简介:

香橙派官方github下载的全志sun50iw9系列Linux6.1内核下使用默认的配置文件linux_sunxi64_defconfig生成.config后编译会报错ac200_enable,sun50i_ehpy_calibrate_value等函数未定义。

链接:orangepi-xunlong/linux-orangepi at orange-pi-6.1-sun50iw9

现象:

下载解压缩以后生成默认.config

编译后就会看见如图报错

分析:

不想看碎碎念的话可以直接跳到下一节看怎么解决,这里主要提供一点debug思路

这个报错是以太网物理层的问题,根据图示的文件报错位置可以知道报错文件目录

打开这个文件可以知道报错的两个函数是通过这个头文件引入的,而这个头文件的位置在

内核根目录/include/linux/mfd

打开该头文件,发现具体的两个函数有其定义,如图

那么问题必定出在.c文件上,<linux/mfd/xxx>的头文件对应的驱动.c文件存放在

内核根目录/drivers/mfd

初步看是没有ac200.c这个文件的

但是不一定就没有这个定义了,因为ac200.h对应的源文件不一定叫做ac200.c,调用关系与文件名称无关,主要取决于.c文件里是否有include这个头文件,所以我们需要在当前目录搜索一下

grep -rn "ac200.h" ./*

发现这个头文件在sunxi-ac200.c中被引用,这个就是我们要找的文件

经搜索,其中确实有相应的定义(calibrate也一样定义了,这里不再放图

如果所有函数都有其定义,但是整合却找不到,那么就是编译规则有一定问题,经ls列举文件可以发现,我们要找的这个对应的文件并没有被编译成.o文件,所以问题出在Kconfig或者Makefile或者menuconfig上,我们依次查看

首先看Makefile中是否有对应内容

确定Makefile中有其内容,再查看Kconfig是否将其列举到了menuconfig进行配置编译,

回到内核根目录进入menuconfig,搜索对应的标签(有时候完整名称不一定能搜得出来,分别尝试一下AC200,MFD,X-Power之类的关键词即可)

可以看到叫做MFD_AC200的布尔量,其标签为"X-Powers AC200",就是我们想要的,并且此条没有被勾选,所以这就是问题所在

当然,如果不清楚这里为什么要这么排查的话,请阅读此篇内容

【Spiffo】知识细节:Kconfig、Menuconfig和Makefile之间的关系-CSDN博客

解决:

了解问题根源后就可以进行解决了,但是在debug的过程中还发现了其他的一些问题,也顺带修改一下

进入出现问题的目录

cd 内核源码根目录/drivers/net/phy

之前打开报错的sunxi-ephy.c这个文件,可以看到其逻辑并非协议级别,更像是特定设备的特定驱动,但是该目录下的Makefile如图,把它放在libphy这里就不是很合理,我们稍微修改一下

把这个删掉

在最后一行再补上

除此之外还需要在Kconfig中配置相应的内容,为了相对有条理,跟Makefile一样,把这个驱动的条目放在紧跟Xilinx驱动的后面,如图,tristate很有必要,其一是方便待会menuconfig查找,help则随意

完成上述步骤以后,回到内核源码根目录,menuconfig修改配置

同时,还需要勾选我们刚才查看的缺少的前置驱动,

配置完成以后保存并退出,清理目标路径,再次编译就能编译过了

编译通过并生成了对应的镜像

附加:

如果是用zero3、zero2w之类的板子,刚才配置menuconfig还需要勾选这个,不然网口物理层驱动还勾选编译以后才能用以太网口

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值