小编Val*_*mir的帖子

C++检测USB串行设备插入/拔出

我需要检测何时在我的嵌入式系统上插入或拔出 USB 串行设备,并知道tty与之关联的内容。

我的系统在 2.6 Linux 内核上运行。

由于我没有对udev规则的写访问权限,现在我试图从文件系统中获取这些信息,寻找/sys/bus/usb/devices目录中的修改。但是,我在使用这种方法时遇到了一些问题。

我知道Id BUS连接的 USB 端口是什么(例如 1-1.3)。所以,我搜索相关的tty(寻找一个目录/sys/bus/usb/devices/<Id BUS>:1.0/tty/- 例如/sys/bus/usb/devices/1-1.3:1.0/tty/ttyACM0)。通过这种方式,我知道我应该使用/dev/ttyACM0它与我的设备进行通信。但是,有时,此设备 ( /dev/ttyACM0) 不存在。

有没有更好的方法来获取这些信息?

我什至想尝试从系统日志中获取这些信息,但我不知道这是否是一个很好的主意。

编辑:

只是为了澄清,我的系统需要能够检测 USB 总线中的状态变化,即检测何时插入新设备(并将tty名称链接到它)或现有设备被拔出。

系统监控最多N使用 USB HUB 插入的 USB/串行设备。在其正常执行期间,可以插入新设备,可以删除现有设备(或通过远程命令重新启动 - 超出此范围)。当一个设备重新启动时,它可能会收到一个tty与之前使用的不同的(例如ttyACM0-> ttyACM3),因为内核指定给它一个tty目前是免费的,这对我来说是一个大问题。

linux embedded usb hotplugging

6
推荐指数
1
解决办法
3449
查看次数

CMake AMRCC + 自定义链接器

我正在尝试在使用cmake编译的项目中使用armcc,但使用自定义专有链接器(不是armlink)。

我已将toolchain.cmake文件中的变量更改如下:

unset (CMAKE_LINKER CACHE)
set (CMAKE_LINKER "my_linker" CACHE STRING "" FORCE)

unset (CMAKE_ARMCC_LINKER CACHE)
set (CMAKE_ARMCC_LINKER "my_linker" CACHE STRING "" FORCE)

unset (CMAKE_EXE_LINKER_FLAGS CACHE )
set (CMAKE_EXE_LINKER_FLAGS "-flag1 -flag2" CACHE STRING "" FORCE)

unset (CMAKE_C_LINK_EXECUTABLE)
set (CMAKE_C_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_EXE_LINKER_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")

unset (CMAKE_CXX_LINK_EXECUTABLE)
set (CMAKE_CXX_LINK_EXECUTABLE "<CMAKE_LINKER> <CMAKE_EXE_LINKER_FLAGS> <OBJECTS> <LINK_LIBRARIES> -o <TARGET>")
Run Code Online (Sandbox Code Playgroud)

但是当cmake尝试检查我的编译器套件时,它在链接步骤中失败:

-- Check for working C compiler: armcc.exe -- broken
CMake Error at C:/Program Files (x86)/CMake/share/cmake-3.6/Modules/CMakeTestCCompiler.cmake:61 …
Run Code Online (Sandbox Code Playgroud)

c++ linker cmake linker-flags

4
推荐指数
1
解决办法
1541
查看次数

标签 统计

c++ ×1

cmake ×1

embedded ×1

hotplugging ×1

linker ×1

linker-flags ×1

linux ×1

usb ×1