代码之家  ›  专栏  ›  技术社区  ›  HaggarTheHorrible

编译Linux内核模式程序时出错

  •  0
  • HaggarTheHorrible  · 技术社区  · 16 年前

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

    所以,我提到了如何在内核模式下编程,我得到了这个美妙的 tutorial . 我写的这个小 你好世界 程序和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
    
    2 回复  |  直到 14 年前
        1
  •  0
  •   Karmastan    16 年前

    我不知道这是否仅仅是你文章的格式,但是内核构建脚本正在寻找“makefile”,你有“makefile”(大小写不同)。这真的是问题吗?另外,你的用户名是“Ubuntu”?

        2
  •  0
  •   Nils Pipenbrinck    16 年前

    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