前言
环境介绍:
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