为我的路由器的内核版本编译特定的内核模块

时间:2016-09-29 15:12:09

标签: c linux linux-kernel cross-compiling buildroot

我是运行Linux内核版本2.6.33的路由器,它没有支持tun / tap支持。 cpu是MIPSlittle endien。我设置了一个buildroot并成功了 编译" Hello world"路由器的程序。

我试图从linux-kernel-2.6.33 / drivers / net / tun.c编译tun.c作为独立的内核对象。 但我还没有成功! 我使用buildroot获取内核的头文件(通过make menuconfig)并为tun.c设置Makefile:

obj-m := tun.o
KDIR=/opt/buildroot/output/build/linux-kernel-2.6.33
PWD=$(shell pwd)
default:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules

clean:
    $(MAKE) -C $(KDIR) SUBDIRS=$(PWD) clean

我用

运行make文件
  

make ARCH = mips CROSS_COMPILE = / opt / buildroot / output / bin / buildroot-compiler -

我收到了警告和错误:

  

警告:缺少符号版本转储/opt/buildroot/output/build/linux-kernel-2.6.33/Module.symvers;模块没有依赖关系和modversions。

     

include / linux / mmzone.h:18:30:fatel error:generated / bounds.h。没有这样的或目录   。#include

我的哪一步是错的?

1 个答案:

答案 0 :(得分:2)

我打赌你正试图建立一个纯粹的模块, 未配置的内核源代码树。你不能这样做。你的内核树 必须,在非常至少,配置,而不是,它 应该make modules_prepare运行在顶层。

运行cd /usr/src/linux && make modules_prepare可以解决您的问题。

相关问题