sylixos 中定義了當前常見的熱插拔裝置訊息,如 usb、sd卡、pci等,使用者也可以自定義新增。此外,還有網絡卡的連線與斷開等與熱插拔行為相似的訊息。
下面舉例說明如何獲取網絡卡熱插拔訊息(本例程式是在mini2440開發板上測試執行),測試****清單2-1所示。
**清單 2-1
#include #include #define msg_len_max (534)
int main (int argc, char *argv)
ioctl(ifd, lw_hotplug_fiosetmsg, lw_hotplug_msg_netlink_change); /* ioctl 設定關心網絡卡熱插拔事件 */
while (1)
if (sstreadlen < 5)
/** 解析熱插拔訊息
*/puctemp = pucmsgbuff;
imsgtype = (puctemp[0] << 24) | (puctemp[1] << 16) | (puctemp[2] << 8) | (puctemp[3]);
puctemp += 4;
binsert = *puctemp ? true : false;
puctemp += 1;
pcdevname = (char *) puctemp;
pucarg = puctemp + strlen(pcdevname) + 1;
printf("get new hotplug message >>\n" /* 列印熱插拔訊息 */
" message type: %d\n"
"device status: %s\n"
" device name: %s\n"
" arg0: 0x%01x%01x%01x%01x\n"
" arg1: 0x%01x%01x%01x%01x\n"
" arg2: 0x%01x%01x%01x%01x\n"
" arg3: 0x%01x%01x%01x%01x\n", imsgtype,
binsert ? "insert" : "remove", pcdevname, pucarg[0], pucarg[1],
pucarg[2], pucarg[3], pucarg[4], pucarg[5], pucarg[6],
pucarg[7], pucarg[8], pucarg[9], pucarg[10], pucarg[11],
pucarg[12], pucarg[13], pucarg[14], pucarg[15]);
}close(ifd);
return (0);
}
程式清單1.1示例**分析:
應用程式在解析訊息型別時,需要按照大端資料儲存格式進行解析,即低位址的位元組代表的是高位元組資料。訊息的額外引數的起始位址即為裝置名稱起始位址加上其長度和結束字元的位址。程式執行後,插入或拔出sd儲存卡,會列印如下的資訊:
插入sd儲存卡:
get new hotplug message >>
message type: 346
device status: insert
device name: /media/sdcard0
arg0: 0x0000
arg1: 0x0000
arg2: 0x0000
arg3: 0x0000
拔出sd儲存卡:
get new hotplug message >>
message type: 346
device status: remove
device name: /media/sdcard0
arg0: 0x0000
arg1: 0x0000
arg2: 0x0000
arg3: 0x0000
通過分析**清單2-1所示**,使用者在讀取裝置熱插拔訊息時應注意以下幾點:
1.以唯讀方式開啟"/dev/hotplug"裝置,sylixos中熱插拔訊息在熱插拔裝置建立時產生,並且寫入到裝置中快取區中。
2.**清單2-1中程式通過ioctl函式實現單獨監聽網絡卡熱插拔訊息的功能,應用程式可以根據需要設定ioctl函式中的引數來獲取對應的訊息。預設情況下是讀取所有型別熱插拔訊息。
3.**清單2-1中read函式實現讀取網絡卡熱插拔訊息的功能,讀取訊息後對獲得的熱插拔訊息進行解析,然後輸出列印。根據程式圖 2-1輸出結果可知,sylixos中對熱插拔訊息格式進行特殊規定,格式分析參照2.2節。
熱插拔操作
熱插拔事件的實際控制是通過一套儲存於 kset hotplug ops 結構的方法完成.struct kset hotplug ops 乙個指向這個結構的指標在 kset 結構的 hotplug ops 成員中.如果乙個給定的kobject 不包含在乙個 kset 中,核心搜尋整個層次 通過 par...
監視熱插拔事件
include include include include include include include include include include static int init hotplug sock void set receive buffersize setsockopt ho...
springboot進行熱插拔
在開發web程式過程中,如果是普通框架,在修改的時候還需要重新部署,這非常麻煩。因為有時候程式啟動的時間實在是讓我們咬牙切齒。幸好,springboot有了這樣乙個工具,它可以讓你在修改儲存的時候很快的進行熱插拔,不再浪費時間。你只需要新增以下依賴即可 org.springframework.boo...