iT邦幫忙

DAY 8
1

Linux kernel模組的開發系列 第 8

kernel module function 與 symbol

從之前的幾個例子,我們已經領略了 kernel module 是如何的去開始與結束,以及傳遞參數,看到他跟 user mode 程式在這部分有很大的差異。其實在引用 library 的部分,兩者也有很大的不同。

就以 printf() 與 printk() 這兩個函數來看,在 user mode 程式中使用的 printf() 函數,來自標準的 C library - libc,所以你必須在程式的開頭先 include 相關的函式庫檔案才能真正使用他。而在 linking 的階段,printf() 函數裡的內容才會真正引入到你的程式中。但是在 kernel modue 程式中使用 printk() 函數,卻不需要是先 include 相關的函式庫。因為 kernel module 屬於 object 檔而在載入 kernel moduel 時,insmod 命令會負責去解析 object 檔的 symbol (所謂 symbol 指的是變數或是函數),而這些 symbol 的定義都是來自 kernel 本身。如果你有興趣看看 Linux kernel 提供的 symbol 的內容,可以看看 /proc/kallsyms。


上一篇
送參數到 module 中
下一篇
function library 與 system call
系列文
Linux kernel模組的開發30

1 則留言

熊熊想起你
iT邦新手 4 級 ‧ 2014-10-08 12:37:21
【**此則訊息已被站方移除**】

我要留言

立即登入留言