我有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
然后再次尝试构建模块。
- 如果没有,请尝试
sudo modprobe configs
再次检查。如果您在尝试加载该模块时遇到错误(请参阅 参考资料man modprobe
),因为它不存在,那么您就不走运了。