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

pra*_*vin 11 c++ device-driver linux-device-driver

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

谢谢

-Pravin

Sev*_*ive 14

迟到这个问题,克里斯·斯特拉顿已经回答了这个问题,但重要的是要纠正克里斯贝克在这里提出的一些与不熟悉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本身.我在转学20年,并且在14年前转换时对C++有同样的怀疑,但事实并没有证实任何这种不信任.

TL; DR - 它很容易编写为高效,在一般情况下,C++中更高效的代码,研究,许多行业经验和书籍在这个主题上比比皆是.

  • 我不可能写得更好.Linux的人们用大量的宏来破坏他们的代码,试图让它变得可读(对他们而言)而我所能想到的只是C++已经为他们提供了几乎所有需要的工具,而不必重复使用预处理器,正如@SeventyFive所说,没有负担,没有额外的费用.最后,Linux人员是很棒的C程序员,但也许他们对C++知之甚少. (5认同)

Chr*_*ton 8

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

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

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

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


Jör*_*son 6

由于内核中没有C++运行时,您将很快遇到问题.我想你可以让C++运行时在内核中运行,但它需要一些非常好的技能.比在C中编写驱动程序更多的技能.

此外,您将被Linux内核开发人员立即放下.我的意思是真的放下了.它们会让你如此糟糕,你永远无法从中恢复过来.有可能你会说"螺丝Linux和他们的精英混蛋".

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


jop*_*rat 6

Linux驱动程序在开发C.如果您想了解更多关于Linux驱动程序的开发,你应该阅读本免费电子书:http://lwn.net/Kernel/LDD3/
所有PDF章节的压缩包也是可供选择:HTTP:/ /lwn.net/images/pdf/LDD3/ldd3_pdf.tar.bz2