1. 程式人生 > >樹莓派USB埠繫結

樹莓派USB埠繫結

在做樹莓派相關的工程時,由於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即可訪問相應裝置。