加载.ko的时候报Unknown symbol v4l2_i2c_subdev_init (err -2)

前言

环境介绍:

1.编译环境

Ubuntu 18.04.5 LTS

2.SDK

orangepi Linux 5.4 SDK

3.uboot

v2020.04

4.gcc

gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf

5.单板

orangepi pc plus


一、问题

最近想把gc2035移植到Linux 5.4,加载ko的时候报如下错误

root@ubuntu:~/gc2035# insmod gc2035.ko
[  324.117388] gc2035: loading out-of-tree module taints kernel.
[  324.123449] gc2035: module verification failed: signature and/or required key missing - tainting kernel
[  324.132913] gc2035: Unknown symbol v4l2_i2c_subdev_init (err -2)
[  324.138963] gc2035: Unknown symbol v4l2_async_unregister_subdev (err -2)
[  324.145690] gc2035: Unknown symbol v4l2_ctrl_handler_init_class (err -2)
[  324.152418] gc2035: Unknown symbol v4l2_event_subdev_unsubscribe (err -2)
[  324.159219] gc2035: Unknown symbol v4l2_ctrl_auto_cluster (err -2)
[  324.165418] gc2035: Unknown symbol v4l2_ctrl_handler_setup (err -2)
[  324.171693] gc2035: Unknown symbol v4l2_async_register_subdev_sensor_common (err -2)
[  324.179476] gc2035: Unknown symbol media_entity_pads_init (err -2)
[  324.185680] gc2035: Unknown symbol v4l2_ctrl_subdev_subscribe_event (err -2)
[  324.192751] gc2035: Unknown symbol v4l2_ctrl_new_std_menu (err -2)
[  324.198947] gc2035: Unknown symbol __v4l2_find_nearest_size (err -2)
[  324.205316] gc2035: Unknown symbol v4l2_ctrl_subdev_log_status (err -2)
[  324.211945] gc2035: Unknown symbol v4l2_ctrl_new_std (err -2)
[  324.217700] gc2035: Unknown symbol v4l2_ctrl_handler_free (err -2)
[  324.223902] gc2035: Unknown symbol v4l2_fwnode_endpoint_parse (err -2)
[  324.230447] gc2035: Unknown symbol v4l2_ctrl_new_std_menu_items (err -2)
insmod: ERROR: could not insert module gc2035.ko: Unknown symbol in module

通过排查应该是依赖的ko没有加载导致,想起正点原子有提过通过modinfo 可以查看模块依赖包信息,奈何文件系统没有配置编译进去。

打开busybox 配置管理界面

linux Module Utilities
	[*]depmod

在这里插入图片描述
重新编译即可

root@ubuntu:~/gc2035# modinfo gc2035.ko
filename:       /root/gc2035/gc2035.ko
license:        GPL
description:    OV5640 MIPI Camera Subdev Driver
alias:          i2c:ov5640
alias:          of:N*T*Covti,ov5640C*
alias:          of:N*T*Covti,ov5640
depends:        videodev,v4l2-fwnode,mc
name:           gc2035
vermagic:       5.4.65-sunxi SMP mod_unload ARMv7 thumb2 p2v8
parm:           virtual_channel:MIPI CSI-2 virtual channel (0..3), default 0 (uint)

依赖包为videodev,v4l2-fwnode,mc,通过查找内核文件,得到依赖包文件路径

drivers/media/v4l2-core/videodev.ko
drivers/media/v4l2-core/v4l2-fwnode.ko
drivers/media/mc/mc.ko

通过查看各依赖包依赖关系,确定他们先后加载的顺序如下:

/lib/modules/5.4.65-sunxi # modprobe mc.ko
modprobe: module mc.ko not found in modules.dep
/lib/modules/5.4.65-sunxi # depmod
/lib/modules/5.4.65-sunxi #
/lib/modules/5.4.65-sunxi # modprobe mc.ko
[ 1025.628703] mc: Linux media interface: v0.10
/lib/modules/5.4.65-sunxi # modprobe videodev.ko
[ 1043.484250] videodev: Linux video capture interface: v2.00
/lib/modules/5.4.65-sunxi # modprobe v4l2-fwnode.ko
/lib/modules/5.4.65-sunxi # modprobe gc2035.ko
[ 1059.333564] gc2035: loading out-of-tree module taints kernel.
[ 1059.340505] gc2035_1
[ 1059.342702] gc2035_1
[ 1059.345087] sun8i-h3-pinctrl 1c20800.pinctrl: 1c20800.pinctrl supply vcc-pg not found, using dummy regulator
[ 1059.355163] gc2035_2
/lib/modules/5.4.65-sunxi #

成功加载gc2035.ko并正常执行!
参考这里的
buildroot缺少命令 modprobe: can‘t open ‘modules.dep‘: No such file or directory

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值