樹莓派USB埠繫結
阿新 • • 發佈:2018-12-10
在做樹莓派相關的工程時,由於Linux是按照插入順序對裝置進行編號,常遇到插拔不同USB裝置(如串列埠、攝像頭、感測器等外設)樹莓派識別埠號跳躍的問題,例如原本識別為/dev/video0,重插後識別為/dev/video2這種尷尬的問題。這使得在程式中固定埠號讀取十分不方便。幸運的是,我們可以通過使用USB裝置的唯一識別碼固定埠號。下面分別對串列埠裝置和USB攝像頭裝置的繫結方法做簡介(假設插拔裝置後其ID唯一):
查詢ID
lsusb
結果如下
Bus 001 Device 001: ID 0909:0824 Audio-Technica Corp Bus 001 Device 002: ID 1a40:0101 QinHeng Electronics HL-340 USB-Serial adapter Bus 001 Device 003: ID 0924:1b25 Cubeternet
通過多次插拔觀察裝置增減可以確認出裝置資訊和裝置的對應關係。以上Device001/002/003分別是攝像頭0、串列埠藍芽、攝像頭1。接下來我們嘗試使用其32位ID號固定其埠。
修改檔案
sudo vim /etc/udev/rules.d/99-com.rules
開啟檔案後在最後一行新增
KERNEL=="ttyUSB*",ATTRS{idVendor}=="1a40",ATTRS{idProduct}=="0101", MODE:=“0777”, SYMLINK+="device0" KERNEL=="video*",ATTRS{idVendor}=="0909",ATTRS{idProduct}=="0824", MODE:=“0777”, SYMLINK+="video0" KERNEL=="video*",ATTRS{idVendor}=="0924",ATTRS{idProduct}=="1b25", MODE:=“0777”, SYMLINK+="video1"
如果繫結的是串列埠裝置,則KERNEL項寫“ttyUSB*”,如果是攝像頭裝置則寫“video*”,將32位ID按順序寫入後兩項中,將預繫結的裝置名稱寫入SYMLINK項中
重啟重插
// 重啟指令
sudo /etc/init.d/udev restart
重啟後,再次檢視當前連線的攝像頭裝置和串列埠裝置,可以看到新名稱,無論之後如何插拔,只要識別到相同的裝置ID,linux都會將其命名為剛剛設定的名稱。
ls /dev/device*
device0
ls /dev/video*
/dev/video0 /dev/video1
使用/dev/device0, /dev/video0, /dev/video1即可訪問相應裝置。