0

我希望访问我的 ARM Cortex-A8 板上的一些寄存器,这些寄存器默认处于不可访问状态。Ubuntu 9.10 在此板上运行。因此,要访问它们,我必须先依次更改 1 个其他寄存器设置(允许访问寄存器)。要更改此 Allow-access-register,我发现我必须仅在内核模式下进行,而不是在用户模式下进行。

所以,我参考了如何在内核模式下编程,我得到了这个精彩的教程。我写了这个小小的hello world程序和一个 make 文件。请注意,我仍在我的 x86 桌面(Ubutnu 10.04)上运行此程序,而不是在我的 ARM 处理器上运行。直到我对内核级编程感到困惑。

我得到这些错误。这里出了什么问题?

帮助!


我在 i.MX515 板上遇到的错误

ubuntu@ubuntu-desktop:~/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

我得到的错误

ubuntu@ubuntu-desktop:~/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");
}

生成文件

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
4

2 回答 2

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   
于 2010-07-16T06:35:03.000 回答
0

我不知道这是否只是您帖子的格式,但内核构建脚本正在寻找“Makefile”并且您有“makefile”(大小写不同)。这真的是问题吗?另外,您的用户名是“ubuntu”吗?

于 2010-07-16T06:48:26.857 回答