linux下以太網功能不能正常使用的原因及解決辦法


一:以太網在bring up時遇到的問題
檢查寄存器基地址,寄存器定義,寄存器配置(百兆,千兆,rmii,rgmii,內部,外部phy), pinmux, 檢查phy的配置.
probe失敗可能原因:
1.MAC reset失敗。檢查電源,clock。
2.無法讀取phy id。檢查phy的電源,clock,pinmux.
能正確顯示link狀態,但是數據不通:
1.檢查寄存器配置,pinmux, 主要是rmii, rgmii相關配置
2.檢查phy driver是否正確匹配上,phy driver中的phy id與 phy device 中的phy id如果不一致的話,phy driver就匹配不成功,導致phy config函數沒有執行到。

 

二.傳輸過程中傳輸中斷的問題

tx方向的傳輸中斷。增加每秒運行一次的work queue, 檢查在dma隊列中是否有待發送的數據(已經交給dma),如果有,記下隊列index, 過5秒之后再檢查這個待發送的數據是否已發送完成,如果還未完成,認為TX傳輸中止,reset ethernet.
rx方向的傳輸中斷。每條檢查一次,檢查phy的狀態,如果狀態異常,則reset ethernet. 還可以仿照TX方向增加監控和恢復機制。
在reset ethernet時,需要注意kernel panic。 reset過程是,停止TX,RX,釋放之前alloc的所有memory, 重新alloc memory, 初始化mac, 初始化phy。出現panic的原因是,驅動代碼還在使用已經被釋放了的memory。因為已經停止了TX,RX,按道理不會再運行TX,RX部分的代碼了。最后發現是tx timer handler里面會操作memory。當停止TX,RX之后, 釋放所有memory, 然后tx timer handler觸發,操作被釋放的memory, 導致panic. 解決方法是,減少tx timer的expire時間,並且在停止TX之后,增加delay, 使tx timer handler完成之后,再釋放memory.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM