kitl协议包简述
英文版參照網址http://blogs.msdn.com/ce_base/archive/2006/06/27/648747.aspx
下面是翻譯過來的,可能有錯哦,呵呵
KITL概述
KITL——Kernel Independent Transport Layer,CE驅動調試的基本調試協議。KITL提供
1、? 傳輸初始化
2、? 數據流連接和斷開
3、? 數據流包的請求
4、? 丟包、重傳的處理
5、? 給應用程序提供接口
?
首先我們來看看KITL包,了解KITL數據和控制包的區別。這是KITL協議和解決問題的基礎知識。
?
KITL包
所有KITL包的格式都一樣,頭部加上數據。頭部定義了包的類型和數據塊。打開一個KITL頭,你會看到
?
1、? 協議標示
固定的字符串:EDBG(45 44 42 47)
?
2、? 流標示
每種KITL流都有一個的字節來保存。有4中預先定義好的流,其他位置保留給應用使用。
0x0:調試消息
0x1:目標控制
0x2:內核調試器
0xff:協議管理的控制流
0x3-0xfe:保留給應用程序使用
?
當一個流通過KITLRegisterClient注冊后,這些流標示,會從KITl傳遞給應用程序。應用使用這些ID通過KITLSend和KITLRecv從特定流中,進行數據包的發送和接受。
?
包類型
一個字節來表示包的類型
0x1:設備發送過來的消息
0x2:這幀是NACK
0x4:這幀是ACK
0x8:重設申請號為零
0x10:相應KITL的控制消息
?
包申請號
定義了一個字節,存放了包申請號,從0到255輪轉。當255的包申請號發送了,那么下一個包申請號就會恢復到數字0。桌面和設備都有自己的申請號,那就允許異步數據傳輸,一邊可以比另一邊發送更多的數據包。
?
數據命令
KTIL真正的數據,是緊隨著頭部描述。大量的原始數據依賴以下命令
0-4:現在不使用,保留的
0x5:設備reset
0x6:服務設置
0x7:服務數據
0x8:內核調試暫停
0x9:傳輸設置
0xa:時間包
?
現在就可以根據這些格式,來看看KITL包的內容。
1、? KITL傳輸設置包:
當KITL啟動后,從設備發送過來的第一個包。它發送到特定端口(port 981),通過subnet廣播出地址。PB會不時的偵探設備的響應,通過host的配置消息包發送回應。接著設備和桌面通過打開一個KITL通道來建立聯系,之后的通訊過程都是通過這個通道來進行。如下圖綠色標示的,是設備通過981的端口發送傳輸設置包的內容。網絡包包括了設備名字(這里是CEPC37480)、設備IP(9D 38 B2 12)和設備UDP端口(0x3D5)等內容。桌面通過這些信息,來打開通道。
00000020??????????????? ???????????45 44 42 47 FF 00 ?????????EDBG..
00000030? 00 09 20 00 30 00 43 45 50 43 33 37 34 38 30 00 ....0.CEPC37480.
00000040? 00 00 00 00 00 00 9D 38 B2 12 00 11 95 28 92 68 .......8.....(.h
00000050? 03 D5?????????? ????????????????????????????????..?????????????
?
2、? KITL服務設置包:
設備和桌面都會發送這樣的包。當一個服務(KITL流)開始時,設備和桌面都需要應答對方的服務設置包,下面是設備發送過來的一個DBGMSG的服務包。KITL頭用綠色標示,其他是設置的數據。這是從設備(0x01)發送過來的一個控制包(協議標示后面是0xFF),使用申請號0x00(流還沒連接),包的命令是0x06(服務設置)。
00000020????????????? ?????????????45 44 42 47 FF 01???? ??????EDBG..
00000030? 00 06 01 44 42 47 4D 53 47 00 33 37 34 38 30 00 ...DBGMSG.37480.
00000040? 00 00 00 00 00 00 9D 00 10 00?????????????????? ..........
?
3、? 服務設置包的應答:
下面是一個服務設置包的應答包,頭部標示為綠色。這里留意包類型變成了0x10(控制包的響應),其他部分和服務設置包一樣。這個包是桌面發送給設備的,當設備接受到后,DBGMSG的流就連接起來了。這時,設備的應用程序可以開始發送調試信息給桌面。注意,這個流要在桌面發送相似的設置包后,得到響應了,才是完全連接好。
00000020????????????????????? ?????45 44 42 47 FF 10??????? ???EDBG..
00000030? 00 06 01 44 42 47 4D 53 47 00 B8 A9 FF 02 A0 F9 ...DBGMSG.......
00000040? FF 02 18 6A 4A 45 02 FF 00 00?????????????????? ...jJE....??
?
4、? KITL數據包:
下面是一個設備發出的RELFSD包,KITL頭用綠色標示,其他部分的數據留給Relsd流解釋。這里流ID是0x1,類型是0x01,表示是設備發出的包。申請號是0xA4,包的命令是0x07,表示是服務的數據包。這是由設備的shell.exe發送給桌面的,檢查是否設備上有命令需要運行。
00000020????????????????? ?????????45 44 42 47 01 01 ??????????EDBG..
00000030? A4 07 AA 55 55 AA 04 00 0D 00 FE FF FF FF 01 00 ...UU...........
00000040? 00 00 F2 5A A5 0A 1A??????????????????????????? ...Z...????????
?
5、? KITL的ACK包:
從桌面發送到設備的。下面包的標示設置為0x01,類型是應答0x04,包申請號是0xA4,0x07是數據包的命令。如果是設備應答桌面的包,類型應該是0x5。如果是桌面應答設備,類型就是0x4.
00000020???????????????? ??45 44 42 47 01 04?????????? ???????EDBG..
00000030? A4 07 00 00 00 00 00 00 00 00 00 00???????????? ............?
?
6、KITL的timer控制包:
大約每2每由桌面發送給設備。當設備在內核調試器中停止運行了,設備內的時間也就停止了。與時間相關的操作也不能工作,包括KITL的邏輯時間。這情況下,用這個包作為標志,重發丟失的包到桌面。
00000020?????????????? ????45 44 42 47 FF 00?????????? ????????EDBG..
00000030? 00 0A 00 00 00 00 00 00 00 00 00 00???????????? ............
?
總結
- 上一篇: 华丽的谢幕:GamersNexus 讲述
- 下一篇: 从IC设计来看Trace32的用途