ubuntu获得linux固化的USB设备编号
- 格式:pdf
- 大小:82.92 KB
- 文档页数:10
}
if(strstr(buf, "ttyUSB1")){ memset(buf, 0, sizeof(buf)); return 1;
}
if(strstr(buf, "ttyUSB2")){ memset(buf, 0, sizeof(buf)); return 2;
ls -l /sys/class/video4linux/ lrwxrwxrwx 1 root root 0 Aug 10 09:43 ttyUSB0 -> ../../devices/pci0000:00/0000:00 :14.0/usb1/1-3/1-3:1.0/ttyUSB0/tty/ttyUSB0 lrwxrwxrwx 1 root root 0 Aug 10 09:43 ttyUSB1 -> ../../devices/pci0000:00/0000:00 :14.0/usb1/1-4/1-4:1.0/ttyUSB1/tty/ttyUSB1
sprintf(fpga_port_device, "/dev/ttyUSB%d", fpga_ttyUSB_id); sprintf(cmd_port_device, "/dev/ttyUSB%d", ti_ttyUSB_id);
printf("%d, %d, %s,%s\n", fpga_ttyUSB_id, ti_ttyUSB_id, fpga_port_device, cmd_port_de vice); }
bool autoDeviceId(short ids[2] ) {
char result[300];
/* if change 300 -> 30 , then run-time: *** stack smashing detected ***: /home/bzj/rospkgs/devel/lib/learning_tf2/autoVi deo terminated Aborted (core dumped)
} else
if(fpga_ttyUSB_id==1 && ti_ttyUSB_id==0){ fpga_port_device = "/dev/ttyUSB1";
cmd_port_device = "/dev/ttyUSB0"; } else{
printf("com init error.\n"); } */
sult[i+49]<<result[i+50]<<result[i+51]<<result[i+52]<<result[i+53]<<result[i+54 ]<<result[i+55]<<","<<endl<<endl;
str = result +i +45; result[i+55] = 0;
// fpga_port_device = (char *)malloc(15); // cmd_port_device = (char *)malloc(15); /*
if(fpga_ttyUSB_id==0 && ti_ttyUSB_id==1){ fpga_port_device = "/dev/ttyUSB0"; cmd_port_device = "/dev/ttyUSB1";
lrwxrwxrwx 1 root root 0 Aug 10 09:46 video0 -> ../../devices/pci0000:00/0000:00:1 4.0/usb1/1-2/1-2.3/1-2.3:1.0/video4linux/video0
lrwxrwxrwx 1 root root 0 Aug 10 09:46 video1 -> ../../devices/pci0000:00/0000:00:1 4.0/usb1/1-2/1-2.4/1-2.4:1.0/video4linux/video1
其中的 1-2 1-3 就是固化的编号,根据这样的编号通过字符串分析找到对应的 video0 ttyUSB0….
代码方案一: #include <math.h> #include <iostream> #include <fstream> #include <cstdlib> #include <cstring>
lrwxrwxrwx 1 root root 0 Aug 10 09:32 video0 -> ../../devices/pci0000:00/0000:00:1 1.0/0000:02:03.0/usb1/1-1/1-1:1.0/video4linux/video0 lrwxrwxrwx 1 root root 0 Aug 10 09:34 video1 -> ../../devices/pci0000:00/0000:00:1 1.0/0000:02:03.0/usb1/1-2/1-2:1.0/video4linux/video1 */
i++;
ch = result[i]; ch1 = result[i+1]; if(ch =='-' && ch1 =='>')
{ std::cout<<result[i-7]<<result[i-6]<<result[i-5]<<result[i-4]<<result[i-3]
<<result[i-2]<<","<<result[i-2]<<"->"; std::cout<<result[i+45]<<result[i+46]<<result[i+47]<<result[i+48]<<re
short ids[2]; autoDeviceId(ids);
printf("HAHA I FIND left and right VIDEO DEVICES,left id1=%d,right id2=%d",ids[ 0],ids[1]);
return 0; } 代码方案二:
or:
int get_ttyUSB_id(constchar* physical_id){ charcmd[256] = "ls -l /sys/class/tty/ | grep "; strcat(cmd, physical_id); FILE *fp = popen(cmd, "r"); charbuf[256]; fgets(buf, sizeof(buf), fp); pclose(fp); printf("port_id:%s, %s\n", physical_id, buf);
ls -l /sys/class/video4linux/ lrwxrwxrwx 1 root root 0 Aug 10 09:43 ttyUSB0 -> ../../devices/pci0000:00/0000:00 :14.0/usb1/1-3/1-3:1.0/ttyUSB0/tty/ttyUSB0 lrwxrwxrwx 1 root root 0 Aug 10 09:43 ttyUSB1 -> ../../devices/pci0000:00/0000:00 :14.0/usb1/1-4/1-4:1.0/ttyUSB1/tty/ttyUSB1
if(strcmp(str,"/1-2/1-2.3")==0) {
ids[0]=(short) ((char)result[i-2] -'0'); j++; if(j==2) {return true;} } else if(strcmp(str,"/1-2/1-2.4")==0) { ids[1]=(short)( (char)result[i-2] -'0');
Ubuntu 命令 #ls -l /sys/class/video4linux/ #ls -l /sys/class/tty/ 得到类似如下的输出: lrwxrwxrwx 1 root root 0 Aug 10 09:46 video0 -> ../../devices/pci0000:00/0000:00:1 4.0/usb1/1-2/1-2.3/1-2.3:1.0/video4linux/video0 lrwxrwxrwx 1 root root 0 Aug 10 09:46 video1 -> ../../devices/pci0000:00/0000:00:1 4.0/usb1/1-2/1-2.4/1-2.4:1.0/video4linux/video1
while(fgets(buf_ps, 1024, ptr)!=NULL) {
strcat(result, buf_ps); if(strlen(result)>1024)
break;
} pclose(ptr); ptr = NULL; } else { printf("popen %s error\n", ps); } }
j++; if(j==2) {return true;} }