欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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 分配出來的串口號,導致去打開的時候經常打不開

終極解決方法

如下所示:

#!/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

總結

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

相關文章

  • Linux 出現(xiàn)telnet: 127.0.0.1: Connection refused錯誤解決辦法

    Linux 出現(xiàn)telnet: 127.0.0.1: Connection refused錯誤解決辦法

    這篇文章主要介紹了Linux 出現(xiàn)telnet: connect to address 127.0.0.1: Connection refused錯誤解決辦法的相關資料,需要的朋友可以參考下
    2017-05-05
  • ubuntu 13.10編譯安裝mono環(huán)境(二)

    ubuntu 13.10編譯安裝mono環(huán)境(二)

    接上篇,上篇僅安裝了Mono本身,并沒有安裝libgdiplus、gtk-sharp、mod_mono、MonoDevelop 等其他相關的軟件。 這篇主要是配置安裝libgdiplus。
    2014-07-07
  • 新版ubuntu20.04 使用root用戶登錄系統(tǒng)的詳細教程

    新版ubuntu20.04 使用root用戶登錄系統(tǒng)的詳細教程

    這篇文章主要介紹了新版ubuntu20.04 使用root用戶登錄系統(tǒng)的詳細教程,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-08-08
  • Linux下安裝Fastdfs全過程

    Linux下安裝Fastdfs全過程

    這篇文章主要介紹了Linux下安裝Fastdfs全過程,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • Apache環(huán)境下配置多個ssl證書搭建多個站點的方法

    Apache環(huán)境下配置多個ssl證書搭建多個站點的方法

    這篇文章主要介紹了Apache環(huán)境下配置多個ssl證書搭建多個站點的方法,本文圖文并茂給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-07-07
  • Linux parted 分區(qū)命令使用解讀

    Linux parted 分區(qū)命令使用解讀

    這篇文章主要介紹了Linux parted 分區(qū)命令使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Linux里LVM磁盤擴容詳細步驟

    Linux里LVM磁盤擴容詳細步驟

    大家好,本篇文章主要講的是Linux里LVM磁盤擴容詳細步驟,感興趣的同學趕快來看一看吧,對你有幫助的話記得收藏一下哦,方便下次瀏覽
    2021-11-11
  • 13個實用的Apache Rewrite重寫規(guī)則

    13個實用的Apache Rewrite重寫規(guī)則

    這篇文章主要介紹了13個實用的Apache Rewrite重寫規(guī)則,需要的朋友可以參考下
    2014-03-03
  • linux性能調試之vmstat分析

    linux性能調試之vmstat分析

    這篇文章主要介紹了linux性能調試之vmstat分析。小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 在Ubuntu中如何查看網(wǎng)絡路由表詳解

    在Ubuntu中如何查看網(wǎng)絡路由表詳解

    這篇文章主要給大家介紹了關于在Ubuntu中如何查看網(wǎng)絡路由表的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用ubuntu具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-12-12

最新評論