linux mdev實現裝置符重對映/裝置符手動新增

卡林發表於2020-12-02

背景:

在用usb轉串列埠時有時重新插拔外設裝置符會變,然而我們希望他不變,接下來我們就用mdev這個工具來實現,該方法已經過本人在嵌入式平臺NT98323上驗證。(其實只要是插拔裝置在sys/block或者sys/class內有增加或者減少就可以使用這個方法)

1.執行readlink /sys/class/tty/ttyUSB0結果如下,這一步可以知道裝置符對應的匯流排編號。

/sys/devices/platform/f9200000.u2host/usb2/2-1/2-1.1/2-1.1:1.0/ttyUSB0/tty/ttyUSB0

2.編寫的指令碼mine_usb.sh放在/etc下,指令碼內容如下。

#/sys/devices/platform/f9200000.u2host/usb2/2-1/2-1.1/2-1.1:1.0/ttyUSB0/tty/ttyUSB0
#/sys/devices/platform/f9200000.u2host/usb2/2-1/2-1.1/2-1.1:1.1/ttyUSB1/tty/ttyUSB1
#/sys/devices/platform/f9200000.u2host/usb2/2-1/2-1.1/2-1.1:1.2/ttyUSB2/tty/ttyUSB2
#/sys/devices/platform/f9200000.u2host/usb2/2-1/2-1.1/2-1.1:1.3/ttyUSB3/tty/ttyUSB3
#!/bin/sh
MY_USB0_BUS='2-1/2-1.1/2-1.1:1.0'
MY_USB1_BUS='2-1/2-1.1/2-1.1:1.1'
MY_USB2_BUS='2-1/2-1.1/2-1.1:1.2'
MY_USB3_BUS='2-1/2-1.1/2-1.1:1.3'
if [ $2 = "add" ]; then
	tty_usbx=`readlink /sys/class/tty/$1 | busybox grep  ttyUSB| sed 's/^.*f9200000.u2host\/usb2\///g' | sed 's/\/ttyUSB.*$//g'`
else
	exit 0
fi

if [ $tty_usbx = $MY_USB0_BUS ]; then
	ln -sf /dev/$1 /dev/MY_USB0
	echo "$1 > MY_USB0"
elif [ $tty_usbx = $MY_USB1_BUS ]; then
	ln -sf /dev/$1 /dev/MY_USB1
	echo "$1 > MY_USB1"
elif [ $tty_usbx = $MY_USB2_BUS ]; then
	ln -sf /dev/$1 /dev/MY_USB2
	echo "$1 > MY_USB2"
elif [ $tty_usbx = $MY_USB3_BUS ]; then
	ln -sf /dev/$1 /dev/MY_USB3
	echo "$1 > MY_USB3"
fi

3.修改/etc/mdev.conf增加如下程式碼。

ttyUSB[0-5] 0:5 777 * /usr/bin/mine_usbx.sh $MDEV $ACTION

※當有外設插入時系統會執行mdev.conf並執行mine_usb.sh,最終實現,裝置符重對映。

相關文章