linux下的c设备驱动开发

新手上路,请多包涵

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

谢谢

-普拉文

原文由 pravin 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 696
2 个回答

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

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

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

通常,最好的入门方法是拥有一个需要驱动程序的设备,并了解编写它所需的内容。通常最好的方法是为相关设备或具有类似接口范例的设备找到现有的驱动程序,然后从修改它开始,直到它适用于您的新设备或同样适用。

原文由 Chris Stratton 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

  • C++ 不会创建隐式代码或数据,只是根据您的要求创建。即使对于普通的 C++ 程序员,也不会有额外的代码或数据。我通过了解 C++ 背后的 asm 发现了这一点,但只要阅读 Scott Meyers 的书籍就足够了。
  • 异常不仅在 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 年前切换时对 C++ 有同样的怀疑,但事实并不能证实任何这种不信任。

TL;DR - 在 C++ 中编写高效且在常见情况下更高效的代码非常容易,关于这个主题的研究、大量行业经验和书籍比比皆是。

原文由 SeventyFive 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏