作者 主題: 請問關於linux driver  (閱讀 8106 次)

0 會員 與 1 訪客 正在閱讀本文。

Infant

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
請問關於linux driver
« 於: 2006-12-13 13:50 »
我寫了範例測試簡單的kernel module如下
==================
HelloWorldModule.c:

#include <linux/init.h>
#include <linux/module.h>

MODULE_LICENSE("Dual BSD/GPL");
static int hello_init(void)
{
        printk(KERN_ALERT "Hello, world\n");
        return 0;
}

static void hello_exit(void)
{
        printk(KERN_ALERT "Goodbye, cruel world\n");
}

module_init(hello_init);
module_exit(hello_exit);

====================

====================
Makefile

WARN    := -W -Wall -Wstrict-prototypes -Wmissing-prototypes
INCLUDE := -isystem /usr/include/linux
CFLAGS  := -O2 -DMODULE -D__KERNEL__ ${WARN} ${INCLUDE}
CC      := gcc
OBJS    := ${patsubst %.c, %.o, ${wildcard *.c}}

all: ${OBJS}

.PHONY: clean

clean:
        rm -rf *.o

====================

當我compile時會出現這些錯誤訊息:
在包含自 /usr/include/linux/init.h:4 的檔案中,
                 從 HelloWorldModule.c:1:
/usr/include/linux/config.h:5:2: 錯誤:#error Incorrectly using glibc headers for a kernel module
HelloWorldModule.c: 在函式 「hello_init」 中:
HelloWorldModule.c:8: 警告:隱含宣告函式 「printk」
HelloWorldModule.c:8: 錯誤:「KERN_ALERT」 未宣告 (在此函式內第一次使用)
HelloWorldModule.c:8: 錯誤:(即使在一個函式內多次出現,每個未宣告的識別碼在其
HelloWorldModule.c:8: 錯誤:所在的函式內只報告一次。)
HelloWorldModule.c:8: 錯誤:expected 「)」 before string constant
HelloWorldModule.c: 在函式 「hello_exit」 中:
HelloWorldModule.c:14: 錯誤:「KERN_ALERT」 未宣告 (在此函式內第一次使用)
HelloWorldModule.c:14: 錯誤:expected 「)」 before string constant
HelloWorldModule.c:25:25: 警告:檔案未以空白列結束
make: *** [HelloWorldModule.o] Error 1

請問是哪裡出問題呢?我include的不對嗎?還是...?
謝謝各位前輩~~

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
請問關於linux driver
« 回覆 #1 於: 2006-12-13 18:46 »
應該是少include了東西
makefile可能也有問題
是參考哪份文件做的?

HaWay

  • 大隻佬!
  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 3980
    • 檢視個人資料
請問關於linux driver
« 回覆 #2 於: 2006-12-13 22:11 »
try it:

include <linux/kernel.h>
我做人那麼 nice, 肯定有什麼誤會.....

Infant

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
請問關於linux driver
« 回覆 #3 於: 2006-12-14 09:59 »
引述: "darkranger"
應該是少include了東西
makefile可能也有問題
是參考哪份文件做的?


是參考Linux-Device-Drivers-3rd-Edition.pdf
中chapter2有個簡單的範例
不過makefile是另外自己試的

Infant

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
請問關於linux driver
« 回覆 #4 於: 2006-12-14 10:06 »
引述: "HaWay"
try it:

include <linux/kernel.h>


HaWay大大
我有試著include <linux/kernel.h>
但似乎一樣不懂[KERN_ALERT]
是我source code的放的地方錯誤嗎

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
請問關於linux driver
« 回覆 #5 於: 2006-12-14 13:38 »
編譯的輸出結果一樣嗎?

Infant

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
請問關於linux driver
« 回覆 #6 於: 2006-12-15 09:47 »
引述: "darkranger"
編譯的輸出結果一樣嗎?


報告darkranger大大
輸出結果一樣@@

darkranger

  • 榮譽學長
  • 俺是博士!
  • *****
  • 文章數: 1370
    • 檢視個人資料
    • http://darkranger.no-ip.org
Re: 請問關於linux driver
« 回覆 #7 於: 2006-12-15 17:24 »
KERN_ALERT確實是在kernel.h裡
會有這樣的錯誤嘛
引述: "Infant"

INCLUDE := -isystem /usr/include/linux

看一下makefile的include部份
是否真的與kernel.h的路徑吻合

Infant

  • 懷疑的國中生
  • **
  • 文章數: 30
    • 檢視個人資料
Re: 請問關於linux driver
« 回覆 #8 於: 2006-12-18 10:25 »
引述: "darkranger"
KERN_ALERT確實是在kernel.h裡
會有這樣的錯誤嘛
引述: "Infant"

INCLUDE := -isystem /usr/include/linux

看一下makefile的include部份
是否真的與kernel.h的路徑吻合


darkranger大大
makefile include路徑
/usr/include/linux 裡有kernel.h
所以是吻合的....
但我compile就是不會過耶@@