我在尋找中斷服務程序的源代碼並搜索net_bhi();和netif_rx();在linux內核中的中斷例程。以上兩個API都是在Linux內核中接收udp的數據包。我想修改中斷程序 - 我應該計算中斷髮生時的時間戳。所以請有人幫助上述文件的位置在哪裏?如何在linux內核中找到中斷源代碼?
回答
我不確定路徑。但是你必須在/ usr/src/linux -...中找到它
但是如果你想用中斷打印一個時間戳,你可以使用信號處理程序捕獲中斷,然後使用gettimeofday() API來打印時間。
每個網絡設備(驅動程序,真的:知道如何操作設備的軟件)都會有自己的中斷服務程序。驅動程序用request_irq註冊該例程的地址(本質上,「當這個中斷觸發時,給我打電話」)。
在網絡驅動程序的情況下,驅動程序的中斷服務程序通常會做的比調用任務蕾或軟中斷其他小。這是爲了避免在可能阻塞其他關鍵中斷的狀態下長時間運行。
在大多數現代網絡驅動程序中,softirq實際上是通過名爲NAPI的框架觸發的。驅動程序將使用netif_napi_add註冊其NAPI輪詢例程,並在中斷時,驅動程序調用napi_schedule來通知其輪詢例程需要運行。
一旦它的任務蕾或NAPI調查程序被調用時,驅動程序將訪問設備寄存器來看看爲什麼設備中斷。如果有新的數據包可用,驅動程序通常會使用netif_rx或其變體將它們轉發到linux TCP/IP堆棧。
所以,你必須選擇在何處/如何記錄你的時間戳。在tasklet或NAPI輪詢例程中這樣做最容易,但在數據包實際到達後可能會有一些(可能很多)微秒。 (在沒有專門的硬件的情況下,數據包到達和時間戳記錄之間的某些延遲將是不可避免的)。
很好的解釋@ gil-hamilton 雖然有一個問題,我怎樣才能找出在request_irq()中使用的irq號碼,這些號碼的來源在哪裏? 謝謝! – Michal
對此沒有單一的答案。但是,您將看到的最常見情況是PCI設備;在那裏,irq號碼來自與設備相關聯的'struct pci_dev'。該中斷號由內核選擇並作爲初始總線枚舉的一部分分配給設備。在MSI或MSIX的情況下,驅動程序必須要求額外的中斷號作爲其初始化的一部分。 –
- 1. Linux內核 - 中斷
- 2. Linux。 munlockall()在內核源代碼
- 3. 閱讀linux內核源代碼
- 4. Linux內核源代碼下載
- 5. android linux內核版本源代碼
- 6. linux內核的中斷
- 7. linux內核中斷劫持
- 8. 在Linux內核源代碼中執行系統調用/陷阱
- 9. 「>> =」在Linux內核源代碼中意味着什麼?
- 10. 在linux中的內核源代碼位置
- 11. Linux內核中的ARP源代碼在哪裏?
- 12. 在Linux內核中跟蹤中斷
- 13. Linux內核代碼中的「當前」
- 14. 更改Linux內核源代碼中的版本字符串
- 15. 哪裏可以找到Linux核心命令的源代碼?
- 16. 如何獲取QNX內核源代碼?
- 17. 如何才能在Linux內核中生成「人工」中斷?
- 18. 映射Linux內核中的DMA中斷
- 19. UART 16550和Linux內核中的中斷
- 20. 在那裏可以找到的MontaVista CGE 6.0內核源代碼
- 21. 如何在Linux內核中使用IP地址或MAC地址進行printk內核源代碼
- 22. 如何從makefile中傳遞參數給Linux內核模塊的源代碼
- 23. 如何在內核源代碼中打印時間?
- 24. Android 4.0內核源代碼?
- 25. Android內核源代碼
- 26. 從源代碼構建Linux內核。沒有出現在〜/ rpmbuild/BUILD
- 27. 如何在Linux內核中斷之後強制重新調用?
- 28. 內核代碼:我可以在哪裏找到和如何調試內核
- 29. 如何在內核代碼中查找ssh連接的IP?
- 30. 在Linux內核中
我已經在/ usr/src/linux版本中,但是我不知道它到底在哪裏?我在內核中使用,如now = sched_clock();獲取時間戳。首先,我需要在內核源代碼中找到中斷服務例程。 – user3513765
它不在可加載的內核模塊驅動程序中嗎? –
你能否指定路徑? – user3513765