Andorid linux模組編譯和載入 一)

2021-06-26 11:33:26 字數 2192 閱讀 6325

在達到能直接修改linux核心的程度之前,我們寫的**都需要以模組的方式新增到核心中去執行。本節就介紹最

簡單的模組編寫和載入方法。

1、首先建立乙個目錄modules,以存放以後編寫的模組。再在其下建立乙個子目錄hello,最為本節建立模組的位置。

2、編寫原始檔hello.c,**如下。

[cpp]view plain

copy

print?

#include 

#include 

module_license("dual bsd/gpl");  

static

int hello_init(void)  

static

void hello_exit()  

module_init(hello_init);  

module_exit(hello_exit);  

3、編寫makefile檔案,如下。

[cpp]view plain

copy

print?

"font-size:13px;">kernel_dir := /lib/modules/$(shell uname -r)/build  

pwd := $(shell pwd)  

module-objs := hello.o  

obj-m := module.o  

default:  

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

小插曲:

makefile書寫格式非常嚴格,

all:

縮排》make -c $(kdir) m=$(pwd) $(extra_cflags) modules

default:

縮排》make -c $(kdir) m=$(pwd) $(extra_cflags) modules

clean:

縮排》make -c $(kdir) m=$(pwd) clean

在拷貝網路**的過程中,很可能原有的tab

被若干空格鍵所替代,就會出現

nothing to be done for...

的錯誤.

一定要牢記makefile的書寫格式

這裡先把hello.c編譯為hello.o,再把hello.o合併到module.o,最後生成可載入模組module.ko。其實也可以不通過module.o,直接用hello.o生成可載入模組。只是linux習慣的做法是先把所有的目標檔案合併到乙個目標檔案,再進行其它操作。

4、編譯並載入模組。

[cpp]view plain

copy

print?

$make   

編譯生成module.ko

[cpp]view plain

copy

print?

$sudo insmod module.ko  

將module.ko加入核心模組

[cpp]view plain

copy

print?

$lsmod  

檢視已載入的模組列表,包括module模組

[cpp]view plain

copy

print?

$sudo rmmod module  

解除安裝module模組

[cpp]view plain

copy

print?

$dmesg | less  

列印最近的5條記錄,會看到在hello_init和hello_exit中列印的資訊。

現在我們已經完全了解了模組編譯載入的流程,相當於開啟了進入核心的大門。以後會接觸到越來越多的核心api,我們能做的事也會越來越多。

如何在andorid 上編譯載入動態模組,可以參考另外一篇文章!

Andorid linux常用的指令

1 adb shell 進入linux開發環境 2 ctrl d 退出linux環境 3 adb devices 顯示電腦上有那些硬體資訊 4 su 切換到超級使用者 代表當前使用者是root使用者 代表當前使用者是普通使用者 5 rm 刪除檔案 adb shell cd sdcard ls ls ...

自己編的分頁模組

因為要做個文字資料庫搜尋系統,順便寫了這個,加了點 美化 美工太差 讀資料時候可以用fread函式和implode結合,例如 msg implode fread data.txt filesize data.txt msg是乙個陣列 廢話 配合for i 0 i mline i 來讀取檔案,mlin...

linux核心hello world模組編寫

include include include int param 0 裝置模組註冊時執行的初始化函式 static int init initialization module void 裝置模組解除安裝的清除函式 static void exit cleanup module void 告之核心...