我有兩個通過串行接口相互連接的處理器。一個處理器運行裸機循環,另一個運行linux。爲了簡化接口協議,我創建了一個類似以太網的框架,用於創建不同的消息類型。一些消息很小,小於200字節,而另一些則大得多,接近100兆字節。較大的消息被分解成一堆類似於TCP/IP棧的數據包。用於點對點通信的Linux驅動程序類型
我開始用在用戶空間中運行的輪詢循環。這需要專門的流程來處理數據包的接收和發送。發送給裸機的消息可以從幾個不同的程序啓動。其中一些程序旨在在系統供電期間運行,而另一些程序則是一個由用戶觸發的程序,在操作完成後不久終止。裸機設備期望接收整個消息作爲連續的數據包。因此,在發送消息時,過程必須完全控制變送器。
我試圖簡化接口,並可能加速它,因爲我們有一箇中斷信號可用通過嘗試創建一個內核驅動程序。目前我已經想出了與共享庫一起創建角色驅動程序的設計。共享庫將處理將數據分解成數據包並將數據形成幀。它也將與驅動程序接口並處理信號量。當進程調用共享庫打開函數時,它還會在驅動程序中創建郵箱結構來存儲給定PID的任何接收到的消息。裸機設備沒有真正的內存管理,我不參加添加任何消息,因此不會交織消息。
我的第一個問題是我相信我需要這個庫,不能在驅動程序中做所有事情,因爲我必須處理來自用戶空間的100 MByte數據緩衝區。庫函數將能夠獲取描述符並使用更合理的緩衝區大小將數據傳輸到驅動程序。這是一個正確的假設嗎?
我的第二個問題是我應該嘗試使用網絡設備嗎?我對字符設備有更多的經驗,所以這是我開始的。
請張貼的代碼。我們怎樣如果我們無法訪問代碼,可以幫助您解決運行時問題嗎 – user3629249
沒有代碼它是一個設計問題,旨在推動代碼的方向唯一存在的代碼是舊的用戶空間代碼,與被問到的問題無關 – rawbus