首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >linux下c++设备驱动程序的开发

linux下c++设备驱动程序的开发
EN

Stack Overflow用户
提问于 2010-12-07 14:57:21
回答 6查看 18.6K关注 0票数 13

我想了解更多关于使用c++ for Linux box编写图形设备驱动程序和音频设备驱动程序的详细信息。我是开发设备驱动程序的新手,请为我提供开发/文档细节。

谢谢

-Pravin

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2010-12-07 15:04:52

Linux内核设备驱动程序是用C而不是C++编写的。

大多数设备驱动程序都是通过一个特殊的设备文件(/dev/yourdevice0)访问的,可以在该文件上执行控制以及读写操作。

用户模式客户端程序和用户模式驱动程序打开设备文件,并将其用作与内核模式驱动程序对话的路径。可以想象,这些用户模式驱动程序可以用C++或任何其他语言编写。

一般来说,最好的入门方法是拥有一个需要驱动程序的设备,并学习编写它所需的知识。通常,最好的方法是为相关设备或具有类似接口范例的设备找到现有的驱动程序,并从修改驱动程序开始,直到它适用于您的新设备。

票数 14
EN

Stack Overflow用户

发布于 2016-01-17 22:25:12

晚到这一页,这个问题本身已经由Chris Stratton回答了,但重要的是要纠正Chris Becke在这里提出的一些常见误解,这些误解对于不熟悉C++的人来说是很常见的:

  • C++不会根据您的请求创建隐式代码或数据。即使对于一个普通的C++程序员来说,也不会有额外的代码或数据。我是通过了解C++背后的asm才发现这一点的,但只要看看Scott Meyer的书就知道了,
  • 不仅是C++中可选的异常,而且几乎所有的工具都可以在链接中排除它们的整个代码。这实际上是在RT应用程序中完成的。

这是为了解决这里发布的误解。但是,要添加更多内容:

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++中编写效率更高的代码非常容易,研究、许多行业经验和书籍都是关于这个主题的。

票数 22
EN

Stack Overflow用户

发布于 2010-12-07 16:13:52

由于内核中没有C++运行时,您很快就会遇到问题。我想你可以让一个C++运行时在内核中运行,但这需要一些很好的技能。比用C语言编写驱动程序的技能要高得多。

而且,你会立即被Linux内核开发人员打倒。我是说真的放低了。他们会让你怒火中烧,你永远也不会恢复过来。你可能会说“去他妈的Linux和他们的精英混蛋”。

我不想听起来很消极,但与你从别人那里听到的声音相比,我是一个温和而合适的声音。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4374103

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档