Make 不编译模块。错误:构建模块,第 2 阶段。MODPOST 0 模块

Make 不编译模块。错误:构建模块,第 2 阶段。MODPOST 0 模块

我有banana pi并安装了debian,内核为3.19.3-bananapihttp://www.igorpecovnik.com/2014/09/07/banana-pi-debian-sd-image/

所以我想编译一个模块,所以我从 kernel.org 下载了内核,当我尝试编译任何模块时,例如我在内核树的根目录中并执行sudo make M=drivers/android modules

我收到错误:

Building modules, stage 2.
  MODPOST 0 modules

这是调试 V=1 时的输出

user1@bananapi:~/linux-3.19.3$ sudo make M=drivers/android modules V=1
test -e include/generated/autoconf.h -a -e include/config/auto.conf || (       \
        echo >&2;                                                       \
        echo >&2 "  ERROR: Kernel configuration is invalid.";           \
        echo >&2 "         include/generated/autoconf.h or include/config/auto.conf are missing.";\
        echo >&2 "         Run 'make oldconfig && make prepare' on kernel src to fix it.";      \
        echo >&2 ;                                                      \
        /bin/false)
mkdir -p drivers/android/.tmp_versions ; rm -f drivers/android/.tmp_versions/*
make -f ./scripts/Makefile.build obj=drivers/android
(cat /dev/null; ) > drivers/android/modules.order
make -f ./scripts/Makefile.modpost
  find drivers/android/.tmp_versions -name '*.mod' | xargs -r grep -h '\.ko$' | sort -u | sed 's/\.ko$/.o/' | scripts/mod/modpost   -i ./Module.symvers -I drivers/android/Module.symvers  -o drivers/android/Module.symvers -S -w  -s -T -

我尝试将 GREP_OPTIONS='--color=always' 更改为 never 和 auto 并得到相同的错误。

uname -r 的输出是 3.19.3-bananapi 我的标头已安装。

dpkg -l linux* 的输出

user1@bananapi:~/linux-3.19.3$ dpkg -l linux\*
Desired=Unknown/Install/Remove/Purge/Hold
| Status=Not/Inst/Conf-files/Unpacked/halF-conf/Half-inst/trig-aWait/Trig-pend
|/ Err?=(none)/Reinst-required (Status,Err: uppercase=bad)
||/ Name           Version      Architecture Description
+++-==============-============-============-=================================
ii  linux-dtb-3.19 2.6          armhf        Linux DTB, version 3.19.3-bananap
un  linux-firmware <none>                    (no description available)
un  linux-headers  <none>                    (no description available)
un  linux-headers- <none>                    (no description available)
ii  linux-headers- 2.6          armhf        Linux kernel headers for 3.19.3-b
un  linux-image    <none>                    (no description available)
un  linux-image-2. <none>                    (no description available)
ii  linux-image-3. 2.6          armhf        Linux kernel, version 3.19.3-bana
un  linux-kernel-h <none>                    (no description available)
un  linux-kernel-l <none>                    (no description available)
ii  linux-libc-dev 2.6          armhf        Linux support headers for userspa
un  linux-modules- <none>                    (no description available)
un  linux-sound-ba <none>                    (no description available)
ii  linux-u-boot-3 2.6          all          Uboot loader
un  linux32        <none>                    (no description available)

答案1

如果这些是外部模块,请首先尝试针对内核进行构建,然后modules_install按如下所述进行安装。确保您正在构建内核源代码的路径。

https://www.kernel.org/doc/Documentation/kbuild/modules.txt

--- 2.1 命令语法

构建外部模块的命令是:

  $ make -C <path_to_kernel_src> M=$PWD

由于命令中给出的“M=”选项,kbuild 系统知道正在构建外部模块。

要针对正在运行的内核进行构建,请使用:

  $ make -C /lib/modules/`uname -r`/build M=$PWD

然后要安装刚刚构建的模块,请将目标“modules_install”添加到命令中:

  $ make -C /lib/modules/`uname -r`/build M=$PWD modules_install

modules_install解释:

modules_install
安装外部模块。默认位置是 /lib/modules/<kernel_release>/extra/,但可以使用 INSTALL_MOD_PATH 添加前缀(在第 5 节中讨论)。


如果您打算将该模块安装在主内核目录下的自定义目录中(而不是/extra),请使用INSTALL_MOD_DIR.

--- 5.2 安装_MOD_目录

外部模块默认安装到 /lib/modules/$(KERNELRELEASE)/extra/ 下的目录中,但您可能希望在单独的目录中找到特定功能的模块。为此,请使用 INSTALL_MOD_DIR 指定“extra”的替代名称。

  $ make INSTALL_MOD_DIR=gandalf -C $KDIR \
         M=$PWD modules_install       
  => Install dir: /lib/modules/$(KERNELRELEASE)/gandalf/

答案2

/proc/config.gz检查一下香蕉上是否有当系统运行时(如果不存在,它就不会存在)。它很可能确实存在。1将其复制到源树的顶层,然后:

make clean
gunzip -c config.gz > .config
make oldconfig

然后再次尝试构建模块。


  1. 如果没有,请尝试sudo modprobe configs再次检查。如果您在尝试加载该模块时遇到错误(请参阅 参考资料man modprobe),因为它不存在,那么您就不走运了。

相关内容