最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

linux如何通過usb端口綁定到固定的串口號

 更新時間:2025年09月08日 11:31:44   作者:技術(shù)求索者  
文章討論了在安卓設(shè)備使用USB轉(zhuǎn)串口時,由于設(shè)備號隨USB枚舉順序變化導(dǎo)致串口無法被系統(tǒng)識別的問題,最初通過修改串口號解決,但發(fā)現(xiàn)直接修改串口號無法被系統(tǒng)正確映射,最終解決方法是不修改串口號,而是通過調(diào)整串口配置或延長串口可用長度,確保系統(tǒng)能夠正確識別和映射串口

linux通過usb端口綁定到固定的串口號

我們在安卓設(shè)備上經(jīng)常會用到usb轉(zhuǎn)串口的設(shè)備,而usb轉(zhuǎn)串口的設(shè)備生成的設(shè)備號是按usb枚舉的順序生成的,所以同一個usb設(shè)備每次開機之后生成的串口序號可能不相同,通過下面的補丁可以解決這個問題。

Index: kernel/drivers/usb/serial/usb-serial.c
===================================================================
--- kernel/drivers/usb/serial/usb-serial.c	(revision 1851)
+++ kernel/drivers/usb/serial/usb-serial.c	(working copy)
@@ -85,20 +85,74 @@
 	return port;
 }
 
-static int allocate_minors(struct usb_serial *serial, int num_ports)
+static int allocate_minors(struct usb_serial *serial, int num_ports,char * dev_name)
 {
 	struct usb_serial_port *port;
 	unsigned int i, j;
-	int minor;
+	int minor,tmpmiior;
 
 	dev_dbg(&serial->interface->dev, "%s %d\n", __func__, num_ports);
 
 	mutex_lock(&table_lock);
+printk("dev_name = %s\n",dev_name);
 	for (i = 0; i < num_ports; ++i) {
 		port = serial->port[i];
-		minor = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL);
-		if (minor < 0)
-			goto error;
+      
+	   printk("num_ports = %d\n",num_ports);
+
+	   if(!strcmp(dev_name,"2-1.7")) //USB0
+		 {
+		 minor = idr_alloc(&serial_minors, port, 0, 4, GFP_KERNEL);
+			 if (minor < 0)
+			   goto error;
+		 }
+      else
+      	{
+	   
+	   if(!strcmp(dev_name,"1-1.1")) //USB0
+	   {
+			   minor = 5;
+	   }
+		 else if(!strcmp(dev_name,"2-1.6.1")) //USB0
+		{
+				minor = 6;
+		}
+
+		else if(!strcmp(dev_name,"2-1.5.1")) //USB0
+	   {
+			   minor = 7;
+	   }
+
+		else if(!strcmp(dev_name,"2-1.4.1")) //USB0
+ 	   {
+ 			   minor = 8;
+ 	   }
+ 	   else if(!strcmp(dev_name,"2-1.3.1"))
+ 	   {
+ 			   minor = 9; 
+ 	   }
+ 	   else if(!strcmp(dev_name,"2-1.2.1"))
+ 		{
+ 				minor = 10;
+ 		}
+	    else if(!strcmp(dev_name,"2-1.1.1"))
+ 		{
+ 				minor = 11;
+ 		}
+	  
+		 tmpmiior=idr_alloc(&serial_minors, port, 5, 20, GFP_KERNEL);
+		 if (minor < 0)
+	   		goto error;
+
+	   }
+ 	/*   else if(!strcmp(dev_name,"2-1.7"))
+ 	   {
+ 				i = 7;
+ 	   }*/
+		//minor = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL);
+		//if (minor < 0)
+		//	goto error;
+
 		port->minor = minor;
 		port->port_number = i;
 	}
@@ -1058,7 +1112,7 @@
 	 */
 	serial->disconnected = 1;
 
-	if (allocate_minors(serial, num_ports)) {
+	if (allocate_minors(serial, num_ports,dev_name(&port->serial->dev->dev))) {
 		dev_err(ddev, "No more free serial minor numbers\n");
 		goto probe_error;
 	}

后來發(fā)現(xiàn)以上方法有問題,串口好是改了,系統(tǒng)沒費配到改的串口號就是手動改的串口號并不是idr_alloc 分配出來的串口號,導(dǎo)致去打開的時候經(jīng)常打不開

終極解決方法

如下所示:

#!/system/bin/sh

creat_tty_symlink(){
	tty0=$(ls -l /sys/class/tty/$1)
	hastty=$(ls  /sys/class/tty*)
	#goal="2-1.1"
	echo "parameter1 is "$1
	echo "hastty is "$hastty
	if [[ $tty0 == *"2-1.1"* ]] ; then
	     if [[ $hastty == *"ttyXRUSB1"* ]] ; then
		    echo "ttyXRUSB1 exsit"
		 else
			 echo "creat ttyXRUSB1"
			 rm  /dev/ttyXRUSB1
			 ln -s /dev/$1 /dev/ttyXRUSB1
			 chown system:system /dev/ttyXRUSB1
		 fi
		 
	elif  [[ $tty0 == *"2-1.2"* ]] ; then
	     if [[ $hastty == *"ttyXRUSB2"* ]] ; then
			echo "ttyXRUSB2 exsit"
		 else
		 echo "creat ttyXRUSB2"
			 rm  /dev/ttyXRUSB2
			 ln -s /dev/$1 /dev/ttyXRUSB2
			 chown system:system /dev/ttyXRUSB2
		 fi
	elif  [[ $tty0 == *"2-1.3"* ]] ; then 
	     if [[ $hastty == *"ttyXRUSB3"* ]] ; then
			echo "ttyXRUSB3 exsit"
		 else
			 echo "creat ttyXRUSB3"
			 rm  /dev/ttyXRUSB3
			 ln -s /dev/$1 /dev/ttyXRUSB3
			 chown system:system /dev/ttyXRUSB3
	     fi
	elif  [[ $tty0 == *"2-1.4"* ]] ; then 
		 if [[ $hastty == *"ttyXRUSB4"* ]] ; then
			echo "ttyXRUSB4 exsit"
		 else
			 echo "creat ttyXRUSB4"
			 rm  /dev/ttyXRUSB4
			 ln -s /dev/$1  /dev/ttyXRUSB4
			 chown system:system /dev/ttyXRUSB4			 
		fi
     else
	    echo "end"
	 fi



}


while true
do
    creat_tty_symlink ttyUSB0
	sleep 1
	creat_tty_symlink ttyUSB1
	sleep 1
    creat_tty_symlink ttyUSB2
	sleep 1
	creat_tty_symlink ttyUSB3
	sleep 1
	creat_tty_symlink ttyUSB4
	sleep 2
done

總結(jié)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Linux系統(tǒng)的SSL/TLS證書機制詳解

    Linux系統(tǒng)的SSL/TLS證書機制詳解

    文章概述了SSL/TLS證書原理、Linux系統(tǒng)預(yù)裝證書的存儲與用途,以及新服務(wù)(如POP3)自動生成自簽名證書的過程和局限性,最后推薦使用Let's Encrypt等自動化工具提升安全性
    2025-09-09
  • centos中nginx按日期自動分割訪問日志的方法

    centos中nginx按日期自動分割訪問日志的方法

    本篇文章主要介紹了centos中nginx按日期自動分割訪問日志的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03
  • Linux nmcli設(shè)置bond的過程

    Linux nmcli設(shè)置bond的過程

    這篇文章主要介紹了Linux nmcli設(shè)置bond的過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • Linux變量操作符“${}“的用法詳解

    Linux變量操作符“${}“的用法詳解

    這篇文章主要介紹了Linux變量操作符“${}“的用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-05-05
  • Ubuntu下安裝和卸載軟件的方法分享

    Ubuntu下安裝和卸載軟件的方法分享

    這篇文章主要介紹了Ubuntu下安裝和卸載軟件的方法,文中介紹的非常詳細,相信對大家具有一定的參考價值,需要的朋友下面來一起看看吧。
    2017-03-03
  • 解決Linux使用解壓命令unzip報錯:unzip:cannot find zipfile directory in one of xxx.zip問題

    解決Linux使用解壓命令unzip報錯:unzip:cannot find zipfile&nbs

    使用rz上傳zip文件后解壓失敗,可能因傳輸中斷導(dǎo)致文件損壞,建議改用scp或sftp重新上傳,確保文件完整性,再用unzip解壓,檢查文件大小及權(quán)限,必要時重新壓縮上傳
    2025-09-09
  • Ubuntu下安裝rsh實現(xiàn)無密碼訪問詳解

    Ubuntu下安裝rsh實現(xiàn)無密碼訪問詳解

    這篇文章主要為大家詳細介紹了Ubuntu下安裝rsh實現(xiàn)無密碼訪問的相關(guān)資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-03-03
  • linux 觸摸屏驅(qū)動編寫

    linux 觸摸屏驅(qū)動編寫

    這篇文章主要介紹了linux 觸摸屏驅(qū)動編寫,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-04-04
  • centos 7.5 部署varnish緩存服務(wù)器功能

    centos 7.5 部署varnish緩存服務(wù)器功能

    這篇文章主要介紹了centos 7.5 部署varnish緩存服務(wù)器功能,文中給大家介紹了varnish的簡介和主要特征,需要的朋友可以參考下
    2019-10-10
  • 圖解linux安裝tomcat(附常用命令)

    圖解linux安裝tomcat(附常用命令)

    這篇文章主要以圖片文字結(jié)合的方式為大家介紹了linux安裝tomcat,并linux操作tomcat一些常用命令,感興趣的小伙伴們可以參考一下
    2016-01-01

最新評論

桐城市| 穆棱市| 合作市| 屏边| 嘉义市| 萍乡市| 儋州市| 弥渡县| 织金县| 萍乡市| 天峻县| 余庆县| 淮滨县| 察隅县| 许昌县| 昌平区| 襄汾县| 常山县| 射阳县| 达州市| 隆子县| 越西县| 广西| 利辛县| 深水埗区| 阳山县| 温州市| 阳高县| 霸州市| 太和县| 出国| 同心县| 绵竹市| 大足县| 大渡口区| 河东区| 安塞县| 新泰市| 舞阳县| 清水河县| 马边|