2010-07-16 76 views
0

我希望訪問我的ARM Cortex-A8板的某些寄存器,這些寄存器默認處於不可訪問狀態。 Ubuntu 9.10在此板上運行。因此,要訪問它們,我必須首先更改1個其他寄存器設置(允許訪問寄存器)。要改變這個允許訪問寄存器,我發現我必須在內核模式下而不是在用戶模式下執行它。編譯Linux內核模式程序的錯誤

所以,我提到如何在內核模式下編程,並且我得到了這個美妙的tutorial。我寫了這個小小的hello world程序和make文件。 請注意,我仍然在我的x86桌面(Ubutnu 10.04)上運行此程序,而不是在我的ARM處理器上運行。直到我對內核級編程感到困惑。

我得到這些錯誤。這裏有什麼問題?

幫助!


錯誤,我得到我的i.MX515板

[email protected]:~/Documents/Kernel_Programming$ make 
make -C /lib/modules/2.6.31-203-gee1fdae/build M=/home/ubuntu/Documents/Kernel_Programming modules 
make[1]: Entering directory `/usr/src/linux' 
make[1]: *** No rule to make target `modules'. Stop. 
make[1]: Leaving directory `/usr/src/linux' 
make: *** [all] Error 2 

錯誤,我得到

[email protected]:~/Documents$ make 
make -C /lib/modules/2.6.32-23-generic/build M=/home/ubuntu/Documents modules 
make[1]: Entering directory `/usr/src/linux-headers-2.6.32-23-generic' 
make[2]: *** No rule to make target `/home/ubuntu/Documents/hello-1.c', 
needed by `/home/ubuntu/Documents/hello-1.o'. Stop. 
make[1]: *** [_module_/home/ubuntu/Documents] Error 2 
make[1]: Leaving directory `/usr/src/linux-headers-2.6.32-23-generic' 
make: *** [all] Error 2 

計劃

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

int init_module(void) 
{ 
    printk(KERN_INFO "\nHello World! I'm programming in Kernel Mode\n"); 

    return 0; 
} 

void cleanup_module(void) 
{ 
    printk(KERN_INFO "\nBye Bye blue bird\n"); 
} 

的makefile

obj-m +=hello-1.o 

all: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules 

clean: 
    make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean 

回答

0

我不知道這是否是您的文章或不只是格式化,但是內核構建腳本正在尋找「生成文件」,你有「Makefile」文件(如果差)。這真的可能是問題嗎?另外,你的用戶名是「ubuntu」嗎?

+0

好吧我將makefile從makefile更名爲Makefile,並且出現新錯誤(請參閱我的問題,我已將其編輯) – HaggarTheHorrible 2010-07-16 07:00:41

+0

您的源文件是否實際命名爲「hello-1.c」?這就是腳本正在尋找的東西。 – Karmastan 2010-07-16 07:17:17

+0

對不起,我修好了。重命名文件後,我有兩個makefile,我正在執行錯誤的makefile。現在它正在編譯和生成目標文件。謝謝。 – HaggarTheHorrible 2010-07-16 07:21:16

0

有像你make命令一個錯字:

它應該是:

make -C /lib/modules/2.6.32-23-generic/build M=/home/ubuntu/Documents modules 

make -C /lb/modules/2.6.32-23-generic/build M=/home/ubuntu/Documents modules 
+0

嘿尼爾斯,哦,我的頭變得如此模糊,我面對的問題,我什麼也看不到直:) :)我修正了它,但我得到這些新的犯錯誤。 (請參閱我的問題,我已編輯它) – HaggarTheHorrible 2010-07-16 06:41:35