Android7.1 解決ttyUSB串口節點不固定問題


最近在調試一個usb轉串口的設備,發現插着開機和開機后再插,生成的設備節點不一樣。原因是機器有接4G模塊,不接usb轉串口設備開機時4G模塊就會分配ttyUSB0~ttyUSB3這四個節點,接usb轉串口設備開機時,就為其分配了節點ttyUSB0,4G模塊為ttyUSB1~ttyUSB4。以USB轉串口為例,通常設備節點名為ttyUSBx(x為0~n),Linux內核會根據插入設備的先后順序進行編號的分配,比如第一個插入的設備編號為0,然后依此加1。

為了保證插某個usbx口,就對應節點ttyUSBx,可以USB的設備名去識別USB串口插入的是哪個U口,再不同的U口給他分配一個不同的節點。筆者這里只設置了兩個usb口,USB轉串設備插入第一個USB口,dev名字為2-1.3,插入第二個USB口名字為2-1.3,分別對應ttyUSB5和ttyUSB6。代碼實現如下:

--- a/drivers/usb/serial/usb-serial.c
+++ b/drivers/usb/serial/usb-serial.c
@@ -85,7 +85,7 @@ exit:
        return port;
 }
 
-static int allocate_minors(struct usb_serial *serial, int num_ports)
+static int allocate_minors(struct usb_serial *serial, int num_ports, const char *dev_name)
 {
        struct usb_serial_port *port;
        unsigned int i, j;
@@ -97,6 +97,16 @@ static int allocate_minors(struct usb_serial *serial, int num_ports)
        for (i = 0; i < num_ports; ++i) {
                port = serial->port[i];
                minor = idr_alloc(&serial_minors, port, 0, 0, GFP_KERNEL);
+               //wmc add start
+        if(!strcmp(dev_name,"2-1.3")) 
+        {
+            minor = 5;
+        }
+        else if(!strcmp(dev_name,"2-1.1"))
+        {
+            minor = 6; 
+        }
+               //wmc add end
                if (minor < 0)
                        goto error;
                port->minor = minor;
@@ -1058,7 +1068,7 @@ static int usb_serial_probe(struct usb_interface *interface,
         */
        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;
        }

 參考:https://blog.csdn.net/mrdeath/article/details/107506452

https://blog.csdn.net/kangear/article/details/46302741?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-4.control


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM