【问题标题】:usb serial driver and ATE1 E0usb串口驱动​​和ATE1 E0
【发布时间】:2018-04-06 22:52:39
【问题描述】:

我正在编写一个 USB 串行适配器设备驱动程序。内核是 3.17.4。驱动工作正常,只是内核打开适配器两次并在适配器插入时写入一些命令。这里是驱动程序的 open() 和 write() 的 dump_stack()。

第一个 open() 和 write()。内核写入“ATE1 E0”三遍。

<4>[19964.897631] Call Trace:
<4>[19964.897642]  [<ffffffff8173f929>] dump_stack+0x45/0x56
<4>[19964.897649]  [<ffffffffa04aa1ef>] c0087_open+0x2f/0x160    [usb_com_1p_driver]
<4>[19964.897654]  [<ffffffff81744bb2>] ? down_write+0x12/0x40
<4>[19964.897661]  [<ffffffff81566f75>] serial_port_activate+0x65/0x90
<4>[19964.897667]  [<ffffffff8145e864>] ? tty_port_tty_set+0x64/0xa0
<4>[19964.897671]  [<ffffffff8145edf9>] tty_port_open+0x89/0xe0
<4>[19964.897675]  [<ffffffff81567bf3>] serial_open+0x33/0x70
<4>[19964.897679]  [<ffffffff814560eb>] tty_open+0x17b/0x700
<4>[19964.897684]  [<ffffffff8149cf72>] ? kobj_lookup+0x112/0x170
<4>[19964.897690]  [<ffffffff81211017>] chrdev_open+0xb7/0x1a0
<4>[19964.897694]  [<ffffffff81210f60>] ? cdev_put+0x30/0x30
<4>[19964.897698]  [<ffffffff81209832>] do_dentry_open+0x1d2/0x320
<4>[19964.897702]  [<ffffffff81209b61>] finish_open+0x31/0x50
<4>[19964.897706]  [<ffffffff8121cd7c>] do_last+0xc0c/0x11d0
<4>[19964.897710]  [<ffffffff81217bd8>] ? inode_permission+0x18/0x50
<4>[19964.897713]  [<ffffffff812180e9>] ? link_path_walk+0x99/0xee0
<4>[19964.897717]  [<ffffffff8121d40b>] path_openat+0xcb/0x6d0
<4>[19964.897722]  [<ffffffff8121e2ad>] do_filp_open+0x4d/0xc0
<4>[19964.897726]  [<ffffffff812178db>] ? getname_flags+0x4b/0x180
<4>[19964.897731]  [<ffffffff8122b01e>] ? __alloc_fd+0x7e/0x120
<4>[19964.897735]  [<ffffffff8120b61b>] do_sys_open+0x13b/0x250
<4>[19964.897738]  [<ffffffff8120b74e>] SyS_open+0x1e/0x20
<4>[19964.897743]  [<ffffffff81746ae9>] system_call_fastpath+0x16/0x1b


<4>[19965.026562]  [<ffffffff8173f929>] dump_stack+0x45/0x56
<4>[19965.026569]  [<ffffffffa04aa094>] c0087_write+0x24/0x100 [usb_com_1p_driver]
<4>[19965.026575]  [<ffffffff81567890>] serial_write+0x50/0xc0
<4>[19965.026581]  [<ffffffff814584e5>] n_tty_write+0x495/0x560
<4>[19965.026586]  [<ffffffff810c2850>] ? wake_up_state+0x20/0x20
<4>[19965.026590]  [<ffffffff81454a04>] tty_write+0x174/0x300
<4>[19965.026594]  [<ffffffff81458050>] ? process_echoes+0x70/0x70
<4>[19965.026599]  [<ffffffff8120c597>] vfs_write+0xb7/0x1f0
<4>[19965.026603]  [<ffffffff8120d1c5>] SyS_write+0x55/0xd0
<4>[19965.026608]  [<ffffffff81746ae9>] system_call_fastpath+0x16/0x1b

第二次打开()和写入()。内核写入“7e 0 78 f0 7e”两次。

<4>[19977.011908] Call Trace:
<4>[19977.011918]  [<ffffffff8173f929>] dump_stack+0x45/0x56
<4>[19977.011925]  [<ffffffffa04aa1ef>] c0087_open+0x2f/0x160 [usb_com_1p_driver]
<4>[19977.011930]  [<ffffffff81744bb2>] ? down_write+0x12/0x40
<4>[19977.011936]  [<ffffffff81566f75>] serial_port_activate+0x65/0x90
<4>[19977.011941]  [<ffffffff8145e864>] ? tty_port_tty_set+0x64/0xa0
<4>[19977.011945]  [<ffffffff8145edf9>] tty_port_open+0x89/0xe0
<4>[19977.011949]  [<ffffffff81567bf3>] serial_open+0x33/0x70
<4>[19977.011952]  [<ffffffff814560eb>] tty_open+0x17b/0x700
<4>[19977.011958]  [<ffffffff81211017>] chrdev_open+0xb7/0x1a0
<4>[19977.011961]  [<ffffffff81210f60>] ? cdev_put+0x30/0x30
<4>[19977.011965]  [<ffffffff81209832>] do_dentry_open+0x1d2/0x320
<4>[19977.011968]  [<ffffffff81209b61>] finish_open+0x31/0x50
<4>[19977.011972]  [<ffffffff8121cd7c>] do_last+0xc0c/0x11d0
<4>[19977.011975]  [<ffffffff81217bd8>] ? inode_permission+0x18/0x50
<4>[19977.011979]  [<ffffffff812180e9>] ? link_path_walk+0x99/0xee0
<4>[19977.011983]  [<ffffffff8121d40b>] path_openat+0xcb/0x6d0
<4>[19977.011986]  [<ffffffff81455de0>] ? tty_release+0x4c0/0x650
<4>[19977.011990]  [<ffffffff8121e2ad>] do_filp_open+0x4d/0xc0
<4>[19977.011993]  [<ffffffff812178db>] ? getname_flags+0x4b/0x180
<4>[19977.011998]  [<ffffffff8122b01e>] ? __alloc_fd+0x7e/0x120
<4>[19977.012002]  [<ffffffff8120b61b>] do_sys_open+0x13b/0x250
<4>[19977.012025]  [<ffffffff8120b74e>] SyS_open+0x1e/0x20
<4>[19977.012031]  [<ffffffff81746ae9>] system_call_fastpath+0x16/0x1b



<4>[19977.026758]  [<ffffffff8173f929>] dump_stack+0x45/0x56
<4>[19977.026766]  [<ffffffffa04aa094>] c0087_write+0x24/0x100 [usb_com_1p_driver]
<4>[19977.026772]  [<ffffffff81567890>] serial_write+0x50/0xc0
<4>[19977.026777]  [<ffffffff814584e5>] n_tty_write+0x495/0x560
<4>[19977.026782]  [<ffffffff810c2850>] ? wake_up_state+0x20/0x20
<4>[19977.026786]  [<ffffffff81454a04>] tty_write+0x174/0x300
<4>[19977.026789]  [<ffffffff81458050>] ? process_echoes+0x70/0x70
<4>[19977.026794]  [<ffffffff8120c597>] vfs_write+0xb7/0x1f0
<4>[19977.026797]  [<ffffffff8120d1c5>] SyS_write+0x55/0xd0
<4>[19977.026802]  [<ffffffff81746ae9>] system_call_fastpath+0x16/0x1b

有人知道这里发生了什么吗?

谢谢!

【问题讨论】:

  • 内核不是自己做的,它是代表某个进程做的,可能是 ModemManager 或类似的东西。
  • AT 看起来像是 hayes AT 命令集的开头:en.wikipedia.org/wiki/Hayes_command_set。 @hobbs 可能是对的,用户空间中的某些东西(udev 规则?)正在探测您的设备以查看它是否是调制解调器。

标签: linux-device-driver


【解决方案1】:

发送这些命令的是 ModemManager。停止 ModemManager 后,适配器不再有命令。

【讨论】:

  • 感谢您花时间用答案更新您的问题。
  • systemd 发行版(2019 年大部分)上,可以使用systemctl stop ModemManagersystemctl disable ModemManager
【解决方案2】:

在 Ubuntu 上,以下命令可以解决问题:

sudo stop modemmanager

您可以通过以下方式重新启动它:

sudo start modemmanager

【讨论】:

    猜你喜欢
    • 2018-05-13
    • 1970-01-01
    • 1970-01-01
    • 2011-03-24
    • 2014-04-04
    • 1970-01-01
    • 2015-05-08
    • 2013-01-29
    • 2013-09-27
    相关资源
    最近更新 更多