目标
我正在尝试在Ubuntu上编写一个简单的设备驱动程序。我希望使用Eclipse(或适用于驱动程序编程的更好的集成开发环境)。以下是代码:
#include <linux/module.h>
static int __init hello_world( void )
{
printk( "hello world!\n" );
return 0;
}
static void __exit goodbye_world( void )
{
printk( "goodbye world!\n" );
}
module_init( hello_world );
module_exit( goodbye_world );
我的努力
经过一些研究,我决定使用Eclipse CTD来开发驱动程序(虽然我还不确定它是否支持多线程调试工具)。所以我:
- 在VMWare虚拟机上安装了Ubuntu 11.04 desktop x86,
- 使用Synaptic Package Manager安装了
eclipse-cdt
和linux-headers-2.6.38-8, - 创建了一个名为
TestDriver1
的C项目
,并将上述代码复制粘贴到其中, - 将默认构建命令
make
更改为以下自定义构建命令:
make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1
问题所在我在使用eclipse构建这个项目时遇到了一个错误。以下是构建的日志:
**** Build of configuration Debug for project TestDriver1 **** make -C /lib/modules/2.6.38-8-generic/build M=/home/isaac/workspace/TestDriver1 all make: 进入目录'/usr/src/linux-headers-2.6.38-8-generic' make: *** 没有规则可以生成目标文件'vmlinux',需要它来完成'all'。停止。 make: 离开目录'/usr/src/linux-headers-2.6.38-8-generic'
有趣的是,当我使用shell而不是eclipse构建这个项目时,没有出现错误。要使用shell,我只需创建一个包含"obj-m += TestDriver1.o"的Makefile,并使用上述的make命令进行构建。
所以,eclipse的Makefile肯定有问题。也许它正在寻找"vmlinux"架构(?),而当前架构是x86。也许是因为VMWare的原因?
据我所理解,
eclipse
会自动创建makefile,如果手动修改可能会导致将来出现错误或者使得管理makefile
变得困难。那么,在eclipse上如何编译这个项目呢?
你知道有哪些更好的用于驱动程序编程的IDE吗?
你认为像我这样一个懒惰的VS用户,没有在Linux上的经验,可以管理“makefile”吗?
在大型项目中,真的可以管理“makefile”吗? - Isaac