<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 嵌入式系統中進(jìn)程間通信的監視方法

嵌入式系統中進(jìn)程間通信的監視方法

作者: 時(shí)間:2016-10-08 來(lái)源:網(wǎng)絡(luò ) 收藏

本文詳細描述了一種利用 ptrace 系統調用,實(shí)現嵌入式系統內部進(jìn)程通信的監視方法,并提供了相應的實(shí)現方案。

本文引用地址:http://dyxdggzs.com/article/201610/305865.htm

概述

復雜的嵌入式系統中,常常同時(shí)運行著(zhù)相當多的進(jìn)程。這些進(jìn)程之間頻繁的進(jìn)行著(zhù)大量的通信動(dòng)作。進(jìn)程的運行狀態(tài)與這些不斷發(fā)生的通信有著(zhù)直接和緊密的聯(lián)系。通過(guò)對進(jìn)程間通信的監視,開(kāi)發(fā)人員可以掌控系統內部運轉的狀態(tài)。發(fā)現錯誤時(shí),利用獲取到的進(jìn)程間通信的信息,調試工程師更容易發(fā)現問(wèn)題之所在。

但是,嵌入式系統與開(kāi)發(fā)人員的接口往往較為單一。開(kāi)發(fā)人員廣泛使用通常是基于串口或是網(wǎng)絡(luò )接口的終端( console )方式。在這個(gè)模式下,開(kāi)發(fā)人員難以細致準確的觀(guān)察進(jìn)程間的通信。而且對于計算能力薄弱的嵌入式系統來(lái)說(shuō),在終端上打印出通信報文既會(huì )影響系統內部的運行,同時(shí),也會(huì )使屏幕上充斥的過(guò)多的無(wú)用信息,使開(kāi)發(fā)人員的分析工作無(wú)從下手。

為了解決這個(gè)問(wèn)題,在嵌入式 Linux 的平臺上,我們開(kāi)發(fā)了一整套用于監視嵌入式系統內進(jìn)程間通信的軟件,用于調試我們開(kāi)發(fā)的嵌入式產(chǎn)品。本文詳細介紹了監視嵌入式系統內進(jìn)程間通信的技術(shù)原理和實(shí)現監視軟件的推薦方案。

監視方法的基本原理

Linux 中的 ptrace 系統調用是監視進(jìn)程間通信的關(guān)鍵。 ptrace 為我們提供了一種觀(guān)察和控制其它進(jìn)程的方法。利用 ptrace ,我們可以截獲正在運行的進(jìn)程的所有的系統調用。所謂截獲是指,監視程序可以在這些系統調用發(fā)生和退出時(shí),獲得系統調用的參數,甚至修改參數。這些系統調用包括: read , write , sendto, recv 等等。在 Linux 中,用戶(hù)可以通過(guò)“ man syscalls ”來(lái)查看當前版本的 Linux 所支持的系統調用。

在我們的 Linux 嵌入式產(chǎn)品中, AF_UNIX 域的 socket 被廣泛使用。它被用來(lái)完成進(jìn)程間通信的工作。 AF_UNIX 域的 socket 的編程模型與通常的 socket 編程模型完全相同。我們的使用方法是:接收進(jìn)程創(chuàng )建一個(gè) AF_UNIX 域的 socket ,設定其模式為數據報( SOCK_DGRAM )。在這之后,為其綁定一個(gè)含路徑的文件名,例如: /var/tmp/receive.unix 。這個(gè)文件名被內核用于標識socket。發(fā)送進(jìn)程創(chuàng )建一個(gè)相同模式的 AF_UNIX 域的 socket 。然后,調用 sendto 向接收進(jìn)程發(fā)送消息。用來(lái)標識接收進(jìn)程 socket 的就是前面提到的文件名,也就是 /var/tmp/receive.unix 。而接收進(jìn)程使用 recvfrom 系統調用,就可以收到發(fā)送進(jìn)程發(fā)出的消息。

因此,通過(guò) ptrace ,一旦我們接管了被監視進(jìn)程的 sendto 和 recvfrom 系統調用,將使我們能夠截獲到使用這兩個(gè)系統調用進(jìn)行通信的數據。

ptrace 系統調用的定義如下:

       #include sys/ptrace.h> 
       long int ptrace(enum __ptrace_request request, pid_t pid, 
                       void * addr, void * data);

它共有四個(gè)參數。 request 的值決定 ptrace 執行什么樣的任務(wù)。 pid 指明被追蹤的進(jìn)程的 id 。 request 參數決定了是否需要一個(gè)有效的 addr 參數,還是僅用 NULL 即可。如果有必要使用有效的 addr 參數,它的含義是被追蹤的進(jìn)程的進(jìn)程空間的偏移量。 data 類(lèi)似于 addr 參數,有時(shí)也可以使用 NULL 來(lái)代替。如果它被使用,它的含義是指向一些數據,這些數據希望被放置到被監視的進(jìn)程的用戶(hù)空間中。

一個(gè)完整的示例代碼將向我們展示監視進(jìn)程間通信的技術(shù)細節和關(guān)鍵點(diǎn)。代碼按前后順序分段說(shuō)明。

               #include stdio.h>
               #include stdlib.h>                           
				
            
                
			
							
上一頁(yè) 1 2 3 4 5 下一頁(yè)

關(guān)鍵詞:

評論


相關(guān)推薦

技術(shù)專(zhuān)區

国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>