編譯Ubuntu10 04的第乙個核心模組

2021-06-06 16:08:46 字數 1568 閱讀 9521

系統:ubuntu10.04

核心版本:2.6.32

自己寫的模組的makefile如下所示

ifneq ($(kernelrelease),)

obj-m := hello_world.o

else

kdir := /usr/src/linux-source-2.6.32

all:

make -c $(kdir) m=$(pwd) modules

clean:

rm -f *.ko *.o *.mod.o *.mod.c *.symvers *.order

endif

編譯自己的模組,可發現出現了以下問題

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.

根據錯誤在/usr/src/linux-source-2.6.32/目錄下執行make oldconfig && make prepare

再回到自己的模組目錄下編譯模組,仍然出現了錯誤:

/bin/sh: scripts/mod/modpost: 沒有那個檔案或目錄

make[1]: *** [__modpost] 錯誤 127

make: *** [modules] 錯誤 2

好吧!它沒有我就編譯,執行make scripts

再編譯模組可以發現編譯成功了,生成了hello_world.ko

此時insmod hello_world.ko 發現又出現問題了

insmod:error inserting 'hello.ko': -1 invalid module format
再通過 tail /var/log/messages/ 檢視一下錯誤的原因,可以發現有"no symbol version for module_layout「

其實很簡單,是因為核心中沒有module.symvers所導致,我們編譯下核心!

執行下make bzimage -j2即可,起初我以為還要編譯模組(make modules),但是在編譯模組的期間我心血來潮地去編譯了下自己寫的模組,發現可以編譯成功,並且可以裝載成功,所以make modules應該不是必須的。

模組的輸出資訊輸出到了/var/log/message中:

may 23 08:47:29 zf kernel: [13848.135778] hello, mini6410 module is installed !
但是,在ubuntu中,我試過將printk的等級設為kern_emerg(0)都不可以在終端顯示,這也許是乙個弊端吧!

所以,我們要比較便捷的方法只能是用dmesg來檢視了,如果資訊太多的話,可以用dmesg -c來清除。

至此,在linux下的第乙個模組安裝成功了!呵呵!

Ubuntu10 04編譯安裝openvz核心

目的 編譯安裝支援openvz的最新版linux核心,使ubuntu支援openvz虛擬化 環境 ubuntu10.04 lts server adm64,kernel 2.6.32.15,openvz budarin kernel patch wget 32.tar.bz2 wget ombine...

ubuntu10 04下編譯glib庫

ubuntu10.04 glib版本 2.32.3 libc指c函式庫,這是乙個通稱,而glibc是gnu實現的libc,至於glib是一組較高層的函式庫,比如鍊錶 hash等,在linux中glib是建立在glibc之上的,qt的庫就叫做qt,也是建立在glibc和其他一些基本庫之上。glib是g...

ubuntu 10 04下安裝arm交叉編譯器

ubuntu 10.04下安裝arm交叉編譯器 1.先將arm linux gcc 4.3.2.tgz的安裝包複製到ubuntu10.04任意目錄中。www.2cto.com 用sudo tar zxvf arm linux gcc 4.3.2.tgz c home解壓到home目錄下。2.安裝標準...