單個檔案編譯乙個模組:
ifneq ($(kernelrelease),)
obj-m := mini2440_leds.o
else
kdir := /opt/friendlyarm/mini2440/linux-2.6.32.2/
all:
make -c $(kdir) m=$(pwd) modules arch=arm cross_compile=arm-linux-
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.symvers
endif
將mini2440_leds.c編譯為mini2440_leds.ko 檔案 ,kdir為linux核心路徑。
多個檔案編譯成為乙個模組:
我們對多個 *.c 檔案情況做乙個說明:我們希望建立乙個模組的名字叫做hello,我們有三個*.c檔案,分別為hello.c, file1.c和file2.c。這樣是有問題的,
因為在makefile中 obj-m := hello.o,這是指定模組的名稱,
hello-objs := file1.o file2.o hello.o,這裡是說hello模組包括的的obj檔案,
如果我們在裡面不填寫hello.o,那麼實際並沒有編譯hello.c,而是在cc[m] file1.o和file2.o,通過ld[m]得到模組hello.o,
如果我們在這裡填寫了hello.o,那麼在obj-m和hello-objs中都含有hello.o,對make來講會產生迴圈和混淆,因此也不能這樣書寫。
如果我們由多個c檔案來構造乙個模組,那麼c檔案的名字不能和模組名字一樣,在這個例子中我們可以將hello.c改名為hello_main.c,在makefile中obj-m := hello.o,hello-objs = file1.o file2.o hello_main.o。
比如,當前目錄下有如系檔案:
hide_file.c hook.c k_file.c config.h hook.h k_file.h
想編譯為模組 root.ko 其中hook.c 為主檔案,makefile 可以用如下辦法寫:
extra_cflags := -g -o2
ifneq ($(kernelrelease),)
obj-m = root.o
root-objs := hide_file.o hook.o k_file.o
else
kdir := /home/sina/work/rootkit/linux-3.0.1
all:
make -c $(kdir) m=$(pwd) kbuild_extra_symbols=./module.symvers modules
clean:
rm -f *.ko *.o *.mod.o *.mod.c *.order *~ *.symvers
endif
kdir 也可以寫成如下形式:
kvers=$(shell uname -r)
kdir :=/lib/modules/$(kvers)/build
單獨編譯乙個核心模組的方法
單獨編譯核心模組的方法 安裝kernel devel包 rpm ivh kernel 3.10.0 957.el7.src.rpm 這裡以該版本核心為例 在 root目錄下會生成rpmbuild目錄,具體情況如下圖所示 進入到rpmbuild spec目錄,該目錄下會有核心原始碼解壓出來的spec檔...
linux 單獨編譯apache的模組
一般都是用 usr local apache2 bin apxs a i c mod rewrite.c來編譯安裝的,但有時候會發現so檔案沒有生成,不知道為啥,可以按照下面的方式自己編譯也行 編譯rewrite模組 網上說使用如下命令就可以直接編譯得到so檔案 usr local apache2 ...
編譯乙個核心模組
1,編寫hello.c include include module license gpl static int init hello init void static void exit hello exit void module init hello init module exit hel...