前言

Linux驱动编译和安装经常会遇到各种问题,上篇帖子

ubuntu cp210x(USB转串口)驱动安装教程

介绍了下载某官方驱动编译时编译不通过的问题,原因是代码问题。本篇主要讲系统环境引起的安装失败的问题。主要涉及错误点:Kernel configuration is invalidInvalid module format

1. Kernel configuration is invalid

详细报错信息:
ERROR: Kernel configuration is invalid.
include/generated/autoconf.h or include/config/auto.conf are missing.
Run ‘make oldconfig && make prepare’ on kernel src to fix it.

但是当执行make oldconfig && make prepare命令时可能仍会出错。如错误信息,缺少相关的系统配置文件,如果确实缺少可通过

 make menuconfig              #自己配置
然后在源码目录下执行 /usr/src/<kernel-version>
 e.g.  /usr/src/linux-headers-5.15.0-88-generic
 make oldconfig
 make prepare
 make scripts

注:有时执行make menuconfig也会出错,错误如果类似

LEX scripts/kconfig/lexer.lex.c
/bin/sh: 1: flex: not found
make[1]: *** [scripts/Makefile.host:9: scripts/kconfig/lexer.lex.c] Error 127

此时可能因为缺少词法解析器flex,和语法解析器bison,可通过下述命令安装

sudo apt install flex
sudo apt install bison

2. Invalid module format

安装驱动文件可能会出现 Invalid module format现象

insmod: ERROR: could not insert module cp210x.ko: Invalid module format

出错后,使用dmesg查看错误日志,如下:

dmesg      
module: x86/modules: Skipping invalid relocation target, existing value is nonzero for type 1.....

2.1 第一种情况:内核模块编译的环境与现在insmod想要运行的环境不一致

也就是说,编译时内核的版本和现在安装的内核版本不一致。可能由于系统存在多个版本的内核,编译时运行的内核和安装时的内核版本不一致。可以检查是否出现编译后重启系统进入了其他版本的内核,或者makefile里面的内核是否写的正确,

KERNEL_DIR := /lib/modules/$(shell uname -r)/build

2.2 第二种情况:内核编译的问题

实际上,上述可能很多问题都是由于内核编译的问题,如果上述都不能解决问题,需要重新编译内核版本

sudo apt update && sudo apt upgrade
sudo apt remove --purge linux-headers-<kernel-version>
sudo apt autoremove && sudo apt autoclean
sudo apt install linux-headers-<kernel-version>
e.g. linux-headers-5.15.0-88-generic

结束

结束后重新编译和安装驱动即可

make
cp cp210x.ko to /lib/modules/<kernel-version>/kernel/drivers/usb/serial
insmod /lib/modules/<kernel-version/kernel/drivers/usb/serial/usbserial.ko
insmod cp210x.ko
Logo

更多推荐