2014-04-15 12 views
0

客戶端和服務器在rt linux中的通信。客戶端正在發送數據,服務器是接收者.UDP用於客戶端和服務器之間的通信。 當服務器(rt linux)從客戶端接收到數據時,內核應該停止它正在執行的操作並開始執行新到達的數據。我想計算在內核(時間戳)中發生中斷的時間。 在rt-linux中,所有的操作系​​統操作都發生在內核中。所以我正在計算內核源代碼中的中斷時間。所以我修改了位於/usr/src/linux-version/net/core/dev.c中的內核源代碼,如下所示: 我正在計算時間並將其存儲在緩衝區skb中。如何在rt linux中通過用戶程序訪問或接收來自內核的數據?

//此代碼位於網絡設備驅動程序級別。

int netif_rx(struct sk_buff *skb) 
{ 
    __net_timestamp(skb);//I modify the code in kernel to get the timestamp and store in buffer 
} 

//將數據存儲到緩衝器內核將其發送給像IP,UDP,INET和最後內核空間的插座中的上層之後。

但我想通過用戶空間從內核空間讀取時間戳包。即我的程序。

我正在使用recvfrom api接收來自內核的數據。內核正在發送時間戳。

問題:有人能告訴我如何通過用戶程序從內核空間接收數據?

回答

0

你有修改內核代碼產生時間戳的特殊原因嗎?

你在什麼內核版本上?如果它是什麼,但古老的,我建議你看看: https://www.kernel.org/doc/Documentation/networking/timestamping.txt 和一些不錯的示例代碼: https://www.kernel.org/doc/Documentation/networking/timestamping/

我不RT Linux所熟悉的,所以原諒我,如果我我的建議是不適用的。

+0

是的!我正在分析中斷延遲。即中斷髮生的時間和內核開始調度的時間。 – user3458454

+0

函數ktime_get_real(); //我將在網絡設備驅動程序級別獲取時間戳。稍後我想將時間戳傳送到用戶空間。我的問題:如何將這個時間戳從內核發送到用戶空間? – user3458454

+0

我不知道,至少沒有比那些已經爲你回答類似問題的人更好。建議procfs的想法聽起來不錯。除此之外,還有netlink套接字,sysfs和其他許多方式。我以爲你的問題是關於網絡數據發送/接收時間戳。 – thuovila

相關問題