2011-11-26 69 views
4

我正在編譯Hello World模塊。我在我的系統中有一個新的Ubuntu,它沒有任何編譯好的內核。如何根據新的源編譯內核模塊

我的內核是:

2.6.32-34-通用

我給下面的Makefile並得到了錯誤:

obj-m += hello-1.o 
all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

# make 
make -C /lib/modules/2.6.32-34-generic/build M=/home/james/Desktop/hello modules 
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-34-generic' 
make[2]: *** No rule to make target `/home/james/Desktop/hello/hello-1.c', needed by `/home/james/Desktop/hello/hello-1.o'. Stop. 
make[1]: *** [_module_/home/james/Desktop/hello] Error 2 
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-34-generic' 
make: *** [all] Error 2 

我/lib/modules/2.6的內容.32-34-generic是

total 3864 
lrwxrwxrwx 1 root root  40 2011-11-05 15:55 build -> /usr/src/linux-headers-2.6.32-34-generic 
drwxr-xr-x 2 root root 4096 2011-11-05 15:49 initrd 
drwxr-xr-x 10 root root 4096 2011-11-05 15:49 kernel 
....................................................... 
....................................................... 

存在文件夾/usr/src/linux-headers-2.6.32-34-generic

由於沒有工作,我下載了linux-headers-2.6.32-34-generic source from Ubuntu,並編譯和改變了我的Makefile文件:

obj-m += hello-1.o 
all: 
    make -C /usr/src/linux-2.6.32/ M=$(PWD) modules 

clean: 
    make -C /usr/src/linux-2.6.32/ M=$(PWD) clean 

#make 
make -C /usr/src/linux-2.6.32/ M=/home/james/Desktop/hello modules 
make[1]: Entering directory `/usr/src/linux-2.6.32' 

    ERROR: Kernel configuration is invalid. 
     include/linux/autoconf.h or include/config/auto.conf are missing. 
     Run 'make oldconfig && make prepare' on kernel src to fix it. 


    WARNING: Symbol version dump /usr/src/linux-2.6.32/Module.symvers 
      is missing; modules will have no dependencies and modversions. 

make[2]: *** No rule to make target `/home/james/Desktop/hello/hello-1.c', needed by `/home/james/Desktop/hello/hello-1.o'. Stop. 
make[1]: *** [_module_/home/james/Desktop/hello] Error 2 
make[1]: Leaving directory `/usr/src/linux-2.6.32' 
make: *** [all] Error 2 

有人能幫助我解決this.http://packages.ubuntu.com/lucid-updates/devel /linux-headers-2.6.32-34-generic

我有一些一般的問題要問。

全新安裝後編譯內核的最佳方式是什麼?在我編譯內核並構建了一個模塊之後,它的工作完美無缺。但是我不可能知道在這種情況下該怎麼做這個

回答

2

make[2]: * No rule to make target /home/james/Desktop/hello/hello-1.c', needed by /home/james/Desktop/hello/hello-1.o'. Stop

你都面臨這個錯誤在第一次編譯,因爲HELLO-1.C文件在/家庭/詹姆斯/桌面/你好/失蹤目錄。

1

你需要在Fedora上安裝一些類似'kernel-devel'的軟件包(對不起,我不是Ubuntu用戶),它提供了頭文件和.config文件來編譯你的內核模塊。

0
  1. 檢查/ home/james/Desktop/hello /目錄中是否存在hello-1.c。
  2. 你需要在你的內核中有modules_enabled。你需要編譯一個新的內核來做到這一點。 以下文章解釋瞭如何很好地構建內核。在內核構建的配置中啓用模塊。

    http://kernelnewbies.org/FAQ/KernelCompilation

0

錯誤:

ERROR: Kernel configuration is invalid. 
     include/linux/autoconf.h or include/config/auto.conf are missing. 
     Run 'make oldconfig && make prepare' on kernel src to fix it. 


    WARNING: Symbol version dump /usr/src/linux-2.6.32/Module.symvers 
      is missing; modules will have no dependencies and modversions. 

僅僅是因爲你的內核源代碼是最新下載和之前未編譯。

這是你應該如何編譯任何內核模塊。

下載內核源代碼後,您必須準備添加任何模塊。

將舊內核的「config-xxxx」文件從/ boot /目錄複製到新的內核源目錄中,並將其重命名爲「.config」。

然後執行「make oldconfig」,該命令會將.config的備份記錄到.config.old文件中,並基於新的內核源文件重新生成一個新的.config文件。只需爲所有默認設置(大量)輸入「ENTER」即可。

接下來是做一個「make」(並等待一段時間) - 它將生成一個新的內核文件「vmlinux」,以及其他許多由模塊編譯過程讀取的文件。

現在你可以去你所在的目錄內核模塊的源代碼的位置,並在下面的Makefile基於:

obj-m += hello-1.o 

default: modules 

modules: 

    make -C /kernel_source/ M=$(PWD) modules 

clean: 
    make -C /kernel_source/ M=$(PWD) clean 

與Makefile文件一起是你的頭文件和源文件,這就是hello-1。 c位於一起。

只是「make」,你的內核模塊應該成功生成。