我想獲得更多關於使用C++ for Linux框架來編寫圖形設備驅動程序和音頻設備驅動程序的更多細節。 我是開發設備驅動程序的新手,請提供相同的開發/文檔詳細信息。linux中的C++設備驅動程序開發
感謝
-Pravin
我想獲得更多關於使用C++ for Linux框架來編寫圖形設備驅動程序和音頻設備驅動程序的更多細節。 我是開發設備驅動程序的新手,請提供相同的開發/文檔詳細信息。linux中的C++設備驅動程序開發
感謝
-Pravin
Linux內核設備驅動程序用C寫的,而不是C++。
大多數設備驅動程序都是通過一個特殊的設備文件(/ dev/yourdevice0)訪問的,在該文件上可以執行控制以及讀寫操作。
用戶模式客戶端程序和用戶模式驅動程序打開設備文件,並將其用作與內核模式驅動程序交流的途徑。這些用戶模式驅動程序可以想象用C++或任何其他語言編寫。
一般來說,最好的入門方法是讓一臺需要驅動程序的設備,並瞭解您需要寫入的設備。通常情況下,最好的方法是爲相關設備或具有類似接口範例的驅動程序找到現有驅動程序,並從修改該驅動程序開始,直到它適用於您的新設備。
由於內核中沒有C++運行庫,因此您將很快遇到問題。我想你可能使內核運行C++運行時,但它需要一些相當不錯的技能。比用C編寫驅動程序的技巧要大得多。
另外,你會被Linux內核開發人員立即放下。我的意思是REALLY放下。他們會讓你失望,你永遠不會從中恢復過來。有機會,你會說「螺桿Linux和他們的精英混蛋」。
我不想聽起來很消極,但是與你從別人那裏聽到的相比,我是一個溫和而適合的聲音。
這是唯一真實的。如果這不是一個單純的「決定」,那麼爲什麼要把C++離開這個派對是沒有道理的。 – j4x 2017-07-06 20:04:29
Linux驅動程序在開發C.如果您想了解更多關於Linux驅動程序的開發,你應該閱讀本免費電子書:http://lwn.net/Kernel/LDD3/
所有PDF章節的壓縮包也可:http://lwn.net/images/pdf/LDD3/ldd3_pdf.tar.bz2
C,不C++是編寫(內核模式)設備驅動程序的語言,其原因最終很簡單:C++是用來編寫驅動程序軟件的不恰當語言。作爲一個副作用,在內核模式下沒有可用的C++運行時。
至於爲什麼C++是不合適的:至少有兩方面的原因:在所有操作系統
我認爲還有一些其他方面我忘記了,但是,ideomatic C++違反了一些驅動程序的限制條件。這就是爲什麼C是首選的原因。
對不起@Chris Becke。你錯了。稍後請參閱SeventyFive答案和Google。我自己做了一些相當不錯的測試來比較Assembly,C和C++,當我決定編寫AVR 10年前的時候,我只能說:C++生成的代碼和Assembly一樣整齊。你只需要知道如何。對於普通的C來說並不總是如此,以防萬一你很好奇:https://sourceforge.net/p/jaxos/code/HEAD/tree/ – j4x 2017-07-06 20:01:20
來到這個頁面晚了,問題本身已經被克里斯·斯特拉頓回答,而是要糾正一些事情克里斯·貝克把這裏與人們不熟悉C++常見的誤解是很重要的:
這是爲了解決這裏發佈的誤解。然而,要添加更多內容:
1)新手C++程序員可能會做廢話,但是新手C程序員試圖自己實現多態性和繼承性,在內核中一次又一次地完成而不調用它,會做大量更無效的不可褻瀆的廢話。 2)說的是,基本C++中唯一可以創建的是一個虛擬指針,如果你需要它並指定「虛擬」,然後C程序員通常只是創建一個這樣的指針自己操縱它添加查找並因此而獲得更多更難的錯誤。和C++一樣,如果你沒有提到「虛擬」,那麼你甚至不會得到這個指針。繼承和封裝當然完全沒有開銷。
3)如果您不明確請求特殊功能,C++會創建與C相同數量的asm和內存,但當C++更高效時,存在 - 傳遞函數指針時。如果你使用C++的函子,你可以內聯指向的函數。這在嵌入式應用程序中非常有用。
4)如果嵌入式RT使用C++爲什麼linux不?只是因爲神話,所以請仔細閱讀這個信息,並提及斯科特邁耶斯或更好的,但ASM本身。我在RT學習20年,在14年前轉換時對C++有着同樣的懷疑,但事實並不能證實這種不信任。
TL; DR - 在C++中編寫高效且通用的代碼更加高效,研究非常容易,許多行業經驗和書籍在這個主題上都很多。
我無法寫得更好。 Linux用戶使用大量的宏試圖使它們可讀(爲他們),我認爲C++已經爲他們提供了幾乎所有需要的工具,而不必重複執行預處理器,而且像@SeventyFive所說的那樣,沒有負擔,沒有額外的成本。最後,Linux傢伙是非常棒的C程序員,但也許他們對C++知之甚少。 – j4x 2017-07-06 19:54:50
如果您的目標是主線包含,C++是讓您的補丁被忽略的最可靠的方法。 – SingleNegationElimination 2010-12-07 07:01:23