我想了解更多关于使用c++ for Linux box编写图形设备驱动程序和音频设备驱动程序的详细信息。我是开发设备驱动程序的新手,请为我提供开发/文档细节。
谢谢
-Pravin
发布于 2010-12-07 15:04:52
Linux内核设备驱动程序是用C而不是C++编写的。
大多数设备驱动程序都是通过一个特殊的设备文件(/dev/yourdevice0)访问的,可以在该文件上执行控制以及读写操作。
用户模式客户端程序和用户模式驱动程序打开设备文件,并将其用作与内核模式驱动程序对话的路径。可以想象,这些用户模式驱动程序可以用C++或任何其他语言编写。
一般来说,最好的入门方法是拥有一个需要驱动程序的设备,并学习编写它所需的知识。通常,最好的方法是为相关设备或具有类似接口范例的设备找到现有的驱动程序,并从修改驱动程序开始,直到它适用于您的新设备。
发布于 2016-01-17 22:25:12
晚到这一页,这个问题本身已经由Chris Stratton回答了,但重要的是要纠正Chris Becke在这里提出的一些常见误解,这些误解对于不熟悉C++的人来说是很常见的:
这是为了解决这里发布的误解。但是,要添加更多内容:
1)一个新手C++程序员可能会胡说八道,但是一个新手C程序员试图自己在内核中一次又一次地实现多态性和继承,而不这样调用它,将会做更多低效的不可调试的胡言乱语。
2)说,在基础C++中唯一可以创建的东西是一个虚拟指针,如果你需要它并指定“虚拟”,然后C程序员通常也只是创建一个这样的指针,他们自己操作它,添加查找表,并得到更难的错误。在C++中,如果你不提到“虚拟”,那么你甚至不会得到这个指针。继承和封装当然是完全没有开销的。
3)如果不显式地请求特殊特性,C++会创建与C相同的asm和内存量,但在传递函数指针时,是C++更高效的的常见情况。如果你使用C++的函数器,你可以内联指向的函数,这在嵌入式应用中非常有用。
4)如果嵌入式RT使用C++,为什么linux不使用?因为这是神话,所以请仔细阅读这条信息,并参考scott meyers或更好的asm本身。我在RT工作了20年,当我14年前转向RT时,我对C++也有同样的怀疑,但事实并不能证实任何这种不信任。
TL;DR -在C++中编写效率更高的代码非常容易,研究、许多行业经验和书籍都是关于这个主题的。
发布于 2010-12-07 16:13:52
由于内核中没有C++运行时,您很快就会遇到问题。我想你可以让一个C++运行时在内核中运行,但这需要一些很好的技能。比用C语言编写驱动程序的技能要高得多。
而且,你会立即被Linux内核开发人员打倒。我是说真的放低了。他们会让你怒火中烧,你永远也不会恢复过来。你可能会说“去他妈的Linux和他们的精英混蛋”。
我不想听起来很消极,但与你从别人那里听到的声音相比,我是一个温和而合适的声音。
https://stackoverflow.com/questions/4374103
复制相似问题