IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法

问题背景:

        最近在学习IMX6ULL的驱动程序,在用make命令执行编译led驱动程序时,出现以下报错:

make -C /home/book/100ask_imx6ull-sdk/Linux-4.9.88 M=pwd modules 
make[1]: 进入目录“/home/book/100ask_imx6ull-sdk/Linux-4.9.88”

  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.

  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

  CC [M]  /home/book/01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识/source/02_led_drv/00_led_drv_simple/imx6ull/led_drv.o
In file included from :0:0:
././include/linux/kconfig.h:4:10: fatal error: generated/autoconf.h: 没有那个文件或目录
 #include 
          ^~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
scripts/Makefile.build:299: recipe for target '/home/book/01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识/source/02_led_drv/00_led_drv_simple/imx6ull/led_drv.o' failed
make[2]: *** [/home/book/01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识/source/02_led_drv/00_led_drv_simple/imx6ull/led_drv.o] Error 1
Makefile:1499: recipe for target 'module/home/book/01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识/source/02_led_drv/00_led_drv_simple/imx6ull' failed
make[1]: *** [module/home/book/01_all_series_quickstart/05_嵌入式Linux驱动开发基础知识/source/02_led_drv/00_led_drv_simple/imx6ull] Error 2
make[1]: 离开目录“/home/book/100ask_imx6ull-sdk/Linux-4.9.88”
Makefile:13: recipe for target 'all' failed
make: *** [all] Error 2

        很明显,上面出现了两个错误和一个警告:

错误1:
  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.

大意是说内核配置无效。缺少include/generated/autoconf.h或include/config/auto.conf文件。

需要特别注意的是,这里报错提示给出了解决建议:在内核源码的目录下运行make oldconfig && make prepare来修复该报错。

错误2:

././include/linux/kconfig.h:4:10: fatal error: generated/autoconf.h: 没有那个文件或目录
 #include
          ^~~~~~~~~~~~~~~~~~~~~~

意思是说,././include/linux/kconfig.h里没有链接generated/autoconf.h文件。

警告:

  WARNING: Symbol version dump ./Module.symvers
           is missing; modules will have no dependencies and modversions.

大意是说,Linux内核代码的目录下丢失了符号版本信息文件 Module.symvers文件,将会导致模块没有依赖项和版本信息。

解决过程:

       首要考虑是按报错的建议操作去解决,但是到了Linux的源码目录下执行了make oldconfig ,但是它会出现许多需要配置的问答,即使我长按空格按默认答案回答,依然需要很长的时间,在长按了一会儿后,直接Ctrl + C放弃了这个建议。几经周折后,终于找到了一个可行的解决方法。

解决方法:

  1. 首先进入内核源代码目录,执行以下命令:

make mrproper

        这个命令会清除先前的编译结果和配置文件。

        2. 配置内核编译选项和模块,例如执行以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- 100ask_imx6ull_defconfig

        其中,100ask_imx6ull_defconfig是我使用的硬件平台对应的配置文件。如使用其他配置文件,需要根据实际情况修改。

        3. 生成Makefile文件,例如执行以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig

        make menuconfig这个命令会打开一个文本界面的配置工具,可以在里面配置内核编译选项和模块。配置完成后,保存退出即可。

        具体操作为

        (1)、用方向键移动光标至Enalble loadable module support,确保下面的光标在Select处,回车。保证前方的中括号内有*星号。

IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第1张图片

       ( 2)、用方向键左右移动下面的光标至Save处,回车。IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第2张图片

        3、此页面默认OK,直接回车即可。

IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第3张图片   

        (4)、选中Exit,退出menuconfig

IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第4张图片

        4. 运行 'make oldconfig && make prepare' 命令来修复内核配置,执行以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- oldconfig

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- prepare

        

        5.重新编译内核模块,例如执行以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j4

        

        6.如果还有模块依赖于 Module.symvers 文件,则需要先编译内核,例如执行以下命令:

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- modules -j4

注意,在执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4命令时,可能会提示:


LZO     arch/arm/boot/compressed/piggy_data
/bin/sh: 1: lzop: not found
arch/arm/boot/compressed/Makefile:186: recipe for target 'arch/arm/boot/compressed/piggy_data' failed

这是没有安装lzop软件包的缘故,只要执行

sudo apt-get update

sudo apt-get install lzop

IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第5张图片

 

然后再次执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j4即可。

IMX6ULL编译led驱动程序出现fatal error: generated/autoconf.h以及 ERROR: Kernel configuration is invalid.的解决方法_第6张图片

 

你可能感兴趣的:(ubuntu,Linux,驱动开发,驱动开发,linux,运维,ubuntu)