Linux下實現USB口的熱插拔事件觸發

2021-07-07 02:59:11 字數 1060 閱讀 9250

目前要做乙個在嵌入式平台上的usb口的熱插拔事件。

經過我現在的分析總結目前有如下方法:

此方法只能在pc上,但在嵌入式平台上不可用。

使用netlink.

#include #include #include #include #include #include #include #include #include #include #include #include #include #define uevent_buffer_size 2048

static int init_hotplug_sock()

setsockopt( i_sock, sol_socket, so_rcvbuf, &i_buffersize, sizeof( i_buffersize ) );

i_ret = bind( i_sock, ( struct sockaddr * )&saddr_nl, sizeof( struct sockaddr_nl ) );

if (i_ret < 0)

return i_sock;

}int main(int argc, char* argv)

; i_rcvlen = recv(i_hotplug_sock, &psz_buf, sizeof(psz_buf), 0);

if ( i_rcvlen > 0 )

}return 0;

}

親測,如果是使用資料報方式sock_dgram建立socket,會出現丟包現象;

sock_raw方式,while迴圈裡面不能sleep,sleep會造成核心老是往netlink  socket發訊息,sleep過久會導致訊息傳送過多,緩衝區溢位。

經過測試發現只能實現插與拔,但是無法具體到具體是什麼裝置。

此方法相當麻煩,現在在研究中。

此方法相當麻煩,生成很多檔案。

就是用cat /proc/bus/usb/devices的資訊生成的檔案進行解析。

目前我已經完成此功能。雖然能用,但是效率太低。

linux下實現USB口的熱插拔

目前要做乙個在嵌入式平台上的usb口的熱插拔事件。經過我現在的分析總結目前有如下方法 1,定時檢查 proc scsi scsi檔案 此方法只能在pc上,但在嵌入式平台上不可用。2,netlink方式 使用netlink.include include include include include...

Linux 下監控USB裝置拔插事件

使用udev的規則來實現 自2.6 核心開始,就可以使用udev 協助管理系統中各裝置名稱。例如,磁碟裝置排序 網絡卡裝置排序等。udev能動態地在 dev目錄裡產生自定義的 標識性強的裝置檔案或裝置鏈結。udev依賴核心中的sysfs的支援。自2.6 核心開始,引入了sysfs 檔案系統。sysf...

Linux下USB裝置自動復位的軟體實現

在做sdr專案的時候由於韌體版本原因,每次使用完之後都需要重新插拔一下usb介面才能恢復正常。實際生成環境中肯定不能容忍這種情況發生,所以需要實現一種檢測到usb裝置異常後能夠自動復位的功能 先找資料,去網上搬磚 再拿來直接用,在使用過程中找出不足之處 對缺點進行改進,形成通用庫並進行發布 goog...