-
Notifications
You must be signed in to change notification settings - Fork 1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
macOS 下需要 sudo 权限才能打开设备 #4
Comments
好奇你的libusb demo是怎麼寫的? 因為Official OpenOCD也有類似問題! |
@wujiheng |
@wujiheng 您好,由于 ICEman 的代码量有些大,之前没有接触过 openocd 类似的项目,可以请教一下 ICEman 程序从启动到找到并打开 AICE USB 设备的具体流程吗,就是具体的函数调用顺序;我也需要测试一下为什么 libusb 的接口会工作异常,因为在我本地的其他程序测试中是没有异常的,十分感谢! |
@YuraGakki 抱歉沒看到這則訊息,如果需要參考FTDI 打開裝置的流程,可以參考這邊 mpsse.c中的open_matching_device(),下面是簡單的流程:
大概是這樣 |
@wujiheng 谢谢,我利用 lldb 也追踪到了这个流程,不过我的测试中,libusb_get_device_list 这个接口是可以正常工作的,程序可以正确的找到指定 vid pid 的设备;不过有一个很明显的事情是,在没有 sudo 权限的情况下,libusb_detach_kernel_driver() 这个接口几乎肯定会返回 LIBUSB_ERROR_ACCESS 的错误码(没有权限),而 ICEman 中对于这个函数没能成功执行的处理是直接 continue,这相当于直接忽略了该设备,哪怕它能够被成功打开,这也就导致没有 sudo 的情况下,几乎所有的设备都被忽略;所以我把这句 continue 注释掉,发现 ICEman 在没有 sudo的情况下也可以正常工作了。具体测试是 ICEman 配合 riscv32-elf-gdb ,可是实现对 mcu 的 remote debug,这应该可以说明 在没有 detach kernel 的情况下 ICEman 和 USB 设备也可以正常通信,这可能是因为我的环境中,除了 ICEman 应该没有别的进程会试图和 Andes 的设备通信。不知道这能否成为你们测试该问题时的参考。 另外,我不清楚 NDS_V5_ONLY 这个宏在哪里被定义,但至少根据 build.sh 编译出的程序中,这个宏应该是存在的。上面说的 continue 的处理,只在 #if NDS_V5_ONLY 成立时是这么执行的,在 #if NDS_V5_ONLY 不成立时,代码中也调用了 libusb_detach_kernel_driver(),但此时即使失败也没有 continue,不知道这么区分是出于哪一种考虑?不过这是否意味着 libusb_detach_kernel_driver() 不是一定要成功执行才可以?如果是的话,看起来去掉 mpsse.c 第 280 行的 continue 似乎能够解决问题。 |
當初會這樣設計是基於Linux中的ftdi_sio會占用FTDI相關的adapter,所以在程式中先呼叫libusb_detach_kernel_driver將相關的kernel module退掉,當退出失敗後,libusb_claim_interface會直接失敗,不確定是否為Red Hat才有的問題還是其他distribution也會遇到,所以才改flow成這樣的狀況。 不過更奇怪的是,只要跑過一次你提供的demo,ICEman也就不需要sudo,這個現象我到現在還沒有想明白,不是很熟macOS底層的操作 |
macOS 下的 ICEman 需要 sudo 权限才能打开设备(linux 也是),但奇怪的是,在 macOS 下,我自己写的 libusb demo 可以打开 andes 设备,没有使用 sudo 权限,这说明该设备的控制权限是被释放给普通用户的,ICEman 控制设备不也是使用的 libusb 吗,这个问题可能出在哪里
The text was updated successfully, but these errors were encountered: