linux内核ttyusb实现,linux – 由FTDI USB串行转换器创建的监控(嗅探)/ dev / ttyUSB0

我想监视(嗅探)由FTDI USB串行转换器创建的/ dev / ttyUSB0的流量.我在Windows中编写了自己的应用程序,现在我尝试将其移植到linux并使用/ dev / tty / USB0.我想调试实际发生的通信.软件strace对我来说不是一个选项,因为它只向ioctl显示系统调用.使用Windows软件“Free Serial Port Monitor”通过嗅探COM1来实现.输...
摘要由CSDN通过智能技术生成

我想监视(嗅探)由FTDI USB串行转换器创建的/ dev / ttyUSB0的流量.我在

Windows中编写了自己的应用程序,现在我尝试将其移植到linux并使用/ dev / tty / USB0.我想调试实际发生的通信.

软件strace对我来说不是一个选项,因为它只向ioctl显示系统调用.

使用Windows软件“Free Serial Port Monitor”通过嗅探COM1来实现.

输出dmesg:

[16975.000221] usb 7-1: new full-speed USB device number 5 using uhci_hcd

[16975.193543] usb 7-1: New USB device found, idVendor=0403, idProduct=6001

[16975.193548] usb 7-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3

[16975.193552] usb 7-1: Product: FT232R USB UART

[16975.193555] usb 7-1: Manufacturer: FTDI

[16975.193558] usb 7-1: SerialNumber: A400BJII

[16975.200550] ftdi_sio 7-1:1.0: FTDI USB Serial Device converter detected

[16975.200599] usb 7-1: Detected FT232RL

[16975.202604] usb 7-1: FTDI USB Serial Device converter now attached to ttyUSB0

但是我试过moserial做这个和命令“echo foobar&g

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过以下步骤将/dev/ttyUSB0的数据放到共享内存中: 1. 打开/dev/ttyUSB0设备,并设置其属性,例如波特率、数据位、停止位等等。 2. 创建共享内存,通过shmget函数可以创建共享内存,指定共享内存的大小。 3. 通过shmat函数将共享内存映射到进程的地址空间中。 4. 通过read函数从/dev/ttyUSB0设备中读取数据,并将数据写入共享内存中。 5. 通过shmdt函数将共享内存与进程的地址空间分离。 下面是一个简单的示例代码: ```c #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <fcntl.h> #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> #include <termios.h> #define SHM_SIZE 4096 int main() { int fd = -1; int shmid = -1; char *shmaddr = NULL; struct termios options; // 打开/dev/ttyUSB0设备,并设置属性 fd = open("/dev/ttyUSB0", O_RDWR | O_NOCTTY | O_NDELAY); if (fd < 0) { perror("open ttyUSB0 error"); exit(EXIT_FAILURE); } tcgetattr(fd, &options); // 获取当前设置 options.c_cflag |= (CLOCAL | CREAD); options.c_cflag &= ~CSIZE; options.c_cflag |= CS8; options.c_cflag &= ~PARENB; options.c_iflag &= ~(IXON | IXOFF | IXANY); options.c_oflag &= ~OPOST; options.c_lflag &= ~(ICANON | ECHO | ECHOE | ISIG); options.c_cc[VTIME] = 0; options.c_cc[VMIN] = 1; cfsetispeed(&options, B9600); cfsetospeed(&options, B9600); tcsetattr(fd, TCSANOW, &options); // 设置属性 // 创建共享内存 shmid = shmget(IPC_PRIVATE, SHM_SIZE, IPC_CREAT | 0666); if (shmid < 0) { perror("shmget error"); exit(EXIT_FAILURE); } // 映射共享内存到进程地址空间 shmaddr = shmat(shmid, NULL, 0); if (shmaddr == (void *)-1) { perror("shmat error"); exit(EXIT_FAILURE); } while (1) { char buf[256] = {0}; int ret = read(fd, buf, sizeof(buf)); if (ret < 0) { perror("read error"); exit(EXIT_FAILURE); } if (ret == 0) { continue; } // 将读取的数据写入共享内存 strncpy(shmaddr, buf, SHM_SIZE); } // 分离共享内存 if (shmdt(shmaddr) < 0) { perror("shmdt error"); exit(EXIT_FAILURE); } // 删除共享内存 if (shmctl(shmid, IPC_RMID, NULL) < 0) { perror("shmctl error"); exit(EXIT_FAILURE); } // 关闭设备 close(fd); return 0; } ``` 上述代码只是一个简单的示例,实际应用中需要根据具体需求进行修改。同时需要注意的是,共享内存需要在多个进程之间进行共享,需要考虑进程间同步和互斥问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值