2010-07-16 128 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