Android下libusb的使用,打开设备Android程序直接崩溃了 20C

按照各技术贴的配置方法,已经在libusb中的图片说明图片说明这几个文件做了修改,添加了liusb_open_fd函数。安卓方也做了权限设置图片说明。但是在调用我方提供的openDev函数后,出现了崩溃的现象,经过排查是调用了libusb_open_fd函数后奔溃。openDev中就是图片说明这样写的。请各路大牛能帮我提供问题出现的原因或者解决方法。在此感谢!!!!急!!!

这是解决崩溃后的

```int IBUsbDev:: OpenDevice(int fd)
{
libusb_device **devs; //pointer to pointer of device, used to retrieve a list of devices

int ret = (-1);
int cnt=0;
int configure = 1;
if (libusb_init(&ctx) < 0) //initialize a library session
{
      return (-1);
}
libusb_set_debug(ctx, LIBUSB_LOG_LEVEL_INFO);
cnt=libusb_get_device_list(ctx,&devs); //get the list of devices
if(cnt < 0) {
    perror("Get Device Error\n"); //there was an error
    return 1;
}

ret =  libusb_open_fd(*devs,&udev,fd);
if(ret!=0)
{
  printf("Cannot open device\n");
  libusb_exit(ctx);
    return -2;
}

libusb_free_device_list(devs, 1);
//libusb_detach_kernel_driver(udev,0);
libusb_reset_device(udev);
libusb_get_configuration(udev,&configure);
if(libusb_kernel_driver_active(udev, 0) == 1) { //find out if kernel driver is attached
    cout<<"Kernel Driver Active"<<endl;
    if(libusb_detach_kernel_driver(udev, 0) == 0) //detach it
        cout<<"Kernel Driver Detached!"<<endl;
}
ret = libusb_claim_interface(udev, 0);
if (ret<0)
{
    return (ret);
}
return 0;

}


1

7个回答

最好先错误信息贴出来

0
qq_22701117
qq_22701117 并没有错误信息,是直接崩溃了。我只是提供接口,安卓方不归我
一年多之前 回复

先增加一些日志,看看你的openDev函数跑到了什么位置,然后再定位分析

0
qq_22701117
qq_22701117 libusb_open_fd在使用这个函数时崩溃了,在问题中也写了
一年多之前 回复

debug一下,看看是什么原因引起的

0
qq_22701117
qq_22701117 调用新增加的libusb_open_fd函数时崩溃了
一年多之前 回复

是由于在打开设备之前没有获取设备列表导致,感谢各位的答复~~就此结贴吧

0
sky79
sky79 回复长大了想当个宝宝: 你好,问题解决了吗?libusb_get_device_list获取不到设备列表
3 个月之前 回复
Royan1
Royan1 楼主你好,有libusb的简单教程么?
一年多之前 回复
kmoon5
长大了想当个宝宝 回复qq_2270111谢谢楼主!!!!已经能正常打开设备!
一年多之前 回复
qq_22701117
qq_22701117 回复kmoon5: 贴出来了
一年多之前 回复
kmoon5
长大了想当个宝宝 你好,楼主,我遇到的问题和你是一样的,但同样添加了设备列表,但仍然崩溃,楼主可以贴一下你获取设备列表后,成功打开设备的代码吗?或者帮我看看我的问题,已经有在评论中评价了。
一年多之前 回复

崩溃日志是什么。需要足够多是信息才能判读是哪的问题

0

获取设备列表必须要root权限么?我没有root权限,获取不到设备列表

0

@活活的,是root的原因吗?我也获取不到设备列表?

0
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android设备使用libusb和usb声卡
由于工作需要,需要在android机上使用usb外接设备,usb设备是一个声卡,首先需要加密认证,然后才使用声卡功能,加密认证时使用libusb做usb通信,使用声卡时,用tinyalsa。全部在jni中完成。 但是被权限问题折腾了好几天。由于SELinux安全机制原因,即使在命令行给了usb设备777的权限,在jni中仍然没有操作权限。下面给出解决办法: 首先设备需要有root权限, ad
Libusb库在Android下的使用例程
转载请注明:http://blog.csdn.net/hubbybob1/article/details/54863662 阅读本文前清先了解相关基础内容,操作步骤请阅读博客:libusb1.0在android内的移植和使用方法 在讲解了libusb库在Android下的移植和基本应用后,下面来讲解Libusb的Android工程;其工程步骤: 1.建立带有JNI工程的eclipse工
打开android设备系统调试
打开android设备系统调试
基于android 平台的libusb
android平台usb camera开发,跨平台,录像拍照功能 uvc开发
libusb移植到Android开发板
前言 因公司业务需要,需要做大量的C++代码迁移到Android方面的工作,这是一个费时费力的过程,因为迁移过程中会遇到各种各样的问题,小到.h头文件找不到,大到一个运行不正常。 这是我在简书上的第一篇文章,就以迁移libusb到Android开发板为例,整理出本人遇到的问题及解决方法,希望对有需要的朋友有所帮助: 使用环境 环境:Ubuntu 14.04 ,tiny4412(Androi
android libusb linux
鄙人要开发android下面hid设备的读写操作,然后运用官方api不能实现,后来找到一个方法说通过libusb库能够实现。rn说用libusb来编写相应的C程序,打开hid设备端口,实现hid设备通讯等操作。rn请问各位大虾,你们有谁搞过android 的libusb开发的。或者在linux下libusb开发的。如何运用libusb进行开发,需要搭建怎样的环境才能用libusb。rn小弟不是很懂,还望各位大虾指教。在此跪谢了。rnrn
Android设备命令打开adb
android studio 远程调试android设备 不允许连接 unable to connect to 192.168.6.109:5555: cannot connect to 192.168.6.109:5555: 由于目标计算机积极拒绝,无法连接。 (10061)打开shell 输入su 切换root 权限setprop service.adb.tcp.port 5555 stop
打开android debug设备系统调试
http://blog.csdn.net/hu3167343/article/details/45223767 我们在动态调试app的时候,需要在APP的AndroidManifest.xml文件中添加Android:debuggable="true",然后重打包apk安装之后进行调试。 如何不进行重打包就能调试app呢?下面主要介绍两种方法: 1. 修改boot.img
libusb枚举设备的过程
1 调用libusb_get_device_descriptor获取USB设备的设备描述符,然后调用libusb_get_config_descriptor获取配置描述符、接口描述符、端点描述符信息。 2 根据上面获取的设备信息匹配设备,通常可以通过设备的PID\VID匹配,设备的class 、subclass 、protocol 来进行匹配,如果是复合设备,则根据interface的class
运行程序直接崩溃
在MAIN入口第一行加断点都没用,一运行就崩溃,我的程序加载了别人的so 可是so又不支持加载的时候自己做动作 ,莫名其妙的,怎么调试?
Android 采集程序的崩溃信息
我们写程序的时候都希望能写出一个没有任何Bug的程序,期望在任何情况下都不会发生程序崩溃。不过理想是丰满的,现实是骨感的。没有一个程序员能保证自己写的程序绝对不会出现异常崩溃。特别是针对用户数达到几十万几百万的程序,当你用户数达到一定数量级后,就算你的程序出现个别异常崩溃情况也不用惊讶。   既然我们写的程序都有可能发生异常崩溃,如果是还没发布的程序,我们可以通过测试抓取Log来分析。不过针
android 使用libusb,出现 libusb_init() 失败的问题
将libusb 交叉编译完成后,放在android上运行,程序在libusb_init()处初始化失败,跟踪代码发现是在find_usbfs_path()处查找不到正确的挂载路径,也就是说在Android系统上存在/proc/bus/usb/目录,但这个目录里面不存在像Linux那样的001,002这样的子目录,因此被判为查找失败,因此libusb库初始化也就失败了。导致后面的库函数都没法使用了。请问这是怎么回事?初始化libusb库干嘛非得要找到挂载路径呢?这个时候如果没有usb插入难道就不能用了么?
android倒计时程序的崩溃问题
必须在分钟和秒两栏中都输入才可以正常计时,否则会崩溃,这是为什么??求大侠帮忙!!!nnJava代码是nn```package com.example.countt;nnimport java.util.Timer;nimport java.util.TimerTask;nnimport android.app.Activity;nimport android.os.Bundle;nimport android.os.Handler;nimport android.os.Message;nimport android.view.View;nimport android.view.View.OnClickListener;nimport android.widget.Button;nimport android.widget.EditText;nimport android.widget.TextView;nnpublic class MainActivity extends Activity implements OnClickListener n private EditText etMinute, etSecond;n private Button btnStartTime, btnStopTime;n private TextView time;n private int i = 0;n private int i2 = 0;n private Timer timer = null;n private TimerTask task = null;nn @Overriden protected void onCreate(Bundle savedInstanceState) n super.onCreate(savedInstanceState);n setContentView(R.layout.activity_main);n initViews();nn nn private void initViews() n etMinute = (EditText) findViewById(R.id.etMinute);n etSecond = (EditText) findViewById(R.id.etSecond);n btnStartTime = (Button) findViewById(R.id.btnStartTime);n btnStopTime = (Button) findViewById(R.id.stopTime);n time = (TextView) findViewById(R.id.time);n btnStartTime.setOnClickListener(this);n btnStopTime.setOnClickListener(this);n nn @Overriden public void onClick(View v) nn switch (v.getId()) n case R.id.btnStartTime:n i = Integer.parseInt(etSecond.getText().toString());n i2 = Integer.parseInt(etMinute.getText().toString());n startTime();n break;n case R.id.stopTime:n stoptTime();n break;nn default:n break;n n nn private Handler sHandler = new Handler() nn public void handleMessage(Message msg) n if (msg.arg1 == -1) n timer.cancel();n n else if(msg.arg1==0)n time.setText("00:00");n n else if (msg.arg1 != 0 && ((int) msg.arg1/60) < 10 && msg.arg1%60 < 10) n time.setText("0" + (int) msg.arg1 / 60 + ":" + "0" + msg.arg1n % 60);n startTime();n else if (msg.arg1 != 0 && ((int) msg.arg1/60) > 10 && msg.arg1%60 < 10) n time.setText((int) msg.arg1 / 60 + ":" + "0" + msg.arg1 % 60);n startTime();n else if (msg.arg1 != 0 && ((int) msg.arg1/60) < 10 && msg.arg1%60 > 10) n time.setText("0" + (int) msg.arg1 / 60 + ":" + msg.arg1 % 60);n startTime();n else n time.setText((int) msg.arg1 / 60 + ":" + msg.arg1 % 60);n startTime();n n ;nn ;nn private void startTime() n timer = new Timer();n task = new TimerTask() nn @Overriden public void run() n if(i==0&&i2==0)n timer.cancel();n n if(i2==0&&i!=0)n Message msg = sHandler.obtainMessage();n msg.arg1 = i;n sHandler.sendMessage(msg);n n else if (i == 0&&i2!=0) n i2--;n i = 60;n Message msg = sHandler.obtainMessage();n msg.arg1 = i + i2 * 60;n sHandler.sendMessage(msg);n else n i--;n Message msg = sHandler.obtainMessage();n msg.arg1 = i + i2 * 60;n sHandler.sendMessage(msg);n n n ;n timer.schedule(task, 1000);nn nn private void stoptTime() n timer.cancel();n nnnn n```nnlayout布局文件是nnn```nn n n n n n n n n n n nnnn n n nn nn nnnn n```n图nnn![图片说明](https://img-ask.csdn.net/upload/201604/27/1461743579_198024.png)
使用无线调试Android设备
USB调试 USB调试插线什么的很麻烦,手机的USB口容易损坏,多台设备的时候更是烦恼多多 AdbWireless的使用 https://github.com/Skywriter-se/adbWireless 这个APK允许设备通过wifi网络进行调试,使用起来很简单。 安装APK(手机必须ROOT),点击中间的大按钮就启动了,在下方会显示 adb connect 192
android 直接打开系统图片库
首先确定正确的Intent就成功了一半,很多时候我们只看到了Intent.ACTION_GET_CONTENT,但使用就不会直接打开图库,而且选中后无法返回图片路径,下面才是图片库的正确打开方式 Intent openAlbumIntent = new Intent( Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.
VS2010打开头文件直接崩溃
今天打开VS2010工程,一打开头文件然后发现vs直接重启了,老是这样。仔细看发现头文件在自动调整行,类似保存那种,发现自己好傻,查资料才发现是:去掉自动换行功能就不崩溃了 ...
android 直接打开指定网页
java package c.c.c; import android.app.Activity; import android.net.Uri; import android.os.Bundle; import android.app.Activity; import android.app.AlertDialog; import android.app.ProgressDialog; imp
libusb与android usb提供的API
近期在搞一个android手机通过usb口连接usb设备,并与之通讯的东东。rn该usb设备没有host驱动,就查呀查,怎么做设备驱动,最终查到libusb,libusb可以基于usb文件系统在用户应用程序访问硬件,后来在2.6.13中抛弃usbfs,但仍可以使用udev来达到目的。rn我理解就是libusb 提供高级API可以访问硬件,而在看android usb host提供的API时,发现这些函数也是可以访问硬件的,请问两者有什么区别???可以直接使用android usb host提供的API访问所有usb设备吗?????? rn
Libusb在Android下的应用eclipse工程
Libusb在Android下的应用eclipse工程
Android 用户使用崩溃处理
程序异常问题: 程序因未捕获的异常而突然终止时,系统会调用处理程序的接口UncaughtExceptionHandler。如果我们想处理未被程序正常捕获的异常,只需实现这个接口里的uncaughtException方法,uncaughtException方法回传了Thread 和 Throwable两个参数。通过这两个参数,我们来对异常进行我们需要的处理 处理异常思路: 1.收集产生
Qt for android 的程序在启动时直接崩溃是什么原因?
W linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqdds.so: is missing DT_SONAME will use basename as a replacement: "libqdds.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqgif.so: is missing DT_SONAME will use basename as a replacement: "libqgif.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqicns.so: is missing DT_SONAME will use basename as a replacement: "libqicns.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqico.so: is missing DT_SONAME will use basename as a replacement: "libqico.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqjpeg.so: is missing DT_SONAME will use basename as a replacement: "libqjpeg.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqtga.so: is missing DT_SONAME will use basename as a replacement: "libqtga.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqtiff.so: is missing DT_SONAME will use basename as a replacement: "libqtiff.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqwbmp.so: is missing DT_SONAME will use basename as a replacement: "libqwbmp.so"rnW linker : /data/data/com.TimeLink.fenkewang/qt-reserved-files/plugins/imageformats/libqwebp.so: is missing DT_SONAME will use basename as a replacement: "libqwebp.so"rnF libc : Fatal signal 6 (SIGABRT), code -6 in tid 23483 (QtThread)rnrn"com.TimeLink.fenkewang" died.rn这是打印的调试语句,打印完毕后,就死掉了,但是不是每次都死掉,有时候又能起来,死掉的几率会大一点。rn
Android 打开指定程序
Android Studio 解决不能找到R的方法 Firstly, try to rebuild and resyc the gradle. If not works, it might because: Casue: May because the size of R is of out of the maximum size of each single file. Solution: ...
Android程序打开PDF
由于项目需要阅读PDF,一开始使用的Android系统的intent跳转到第三方打开,感觉不好,就在网上找了一个,修改以后可以拿来直接用
Linux 下使用libusb 与USB-HID 设备通讯之控制传输
一、前言        上一篇文章记录到如何在ubuntu 安装开源项目libusb,这篇将记录,如下使用libusb 提供的api 方便的与USB-HID 设备通讯,通讯方式为控制传输。二、关于libusb 如何查找HID 设备,可以看观看一下我的Linux 下使用libusb 与USB-HID 设备通讯之中断传输这篇文章,里面有详细记载如何查找HID 设备。三、libusb_control_t...
android 程序打开第三方程序
因为在开发过程中需要开启扫描第三方程序,并且点击启动的效果,所以对这个功能进行了实现,并且分享出来个大家。 之前看到网上说需要获取包名和类名,然后通过  intent 才能打开这个程序,其实不必要这样。 在android API中,有这么一个接口, Intent android.content.pm.PackageManager.getLaunchIntentForP
Android 开发 打开默认浏览器发生崩溃
Android 开发 打开默认浏览器发生崩溃。 代码如下: Intent intent = new Intent(); intent.setAction("Android.intent.action.VIEW"); intent.addCategory("android.intent.category.BROWSAB...
设置Android设备长按Power直接关机
设置Android设备长按Power直接关机 Android4.0.3版本中长按Power按键跳出关机选项对话框;但在一些项目会需要长按Power直接关机而不是跳出关机选项对话框。Android4.0.3源码中并无长按直接关机的代码及选项,因此需要我们自己添加。
一个android设备怎么使用另外一个android设备的摄像头?
我有2个设备,A,有摄像头,屏幕小rnB,无摄像头,屏幕大,有OTG 的USB接口.rn假如两个设备通过USB连接,请问B怎么使用A的摄像头?rn有什么解决方案?rn谢谢
libusb的使用
m_idVendor = 0x4448; m_idProduct = 0x5916; m_pBus = NULL; m_pDevice = NULL; m_pDeviceHandle = NULL; // 初始化usb usb_init(); usb_find_busses(); usb_find_devices(); us
libusb使用
首先声明,这是看到国外论坛上的学习文章后,独立翻译过来作为笔记用,加入部分自我理解,并且全部原创。 介绍: libusb是一个开源库,可以帮助开发者在用户空间的层面上与UBS设备进行通讯。如果想了解更多,可以查看他们的主页:http://libusb.org/ 在其文档中,建议首先阅读USB2的规格说明:http://www.usb.org/developers/docs/,这可以帮助真正地
android应用层程序直接与framework…
AndroidManifest.xml <?xml version="1.0" encoding="utf-8"?> http://schemas.android.com/apk/res/android"     package="mobile.socket"     android:sharedUserId="android.uid.system"     android
运行try程序直接崩溃了???
这是我的代码,运行时程序直接崩溃了,在不运行try内的代码时可以正常运行rn[code=c]CLx1Dlg::CLx1Dlg(CWnd* pParent /*=NULL*/)rn : CDialog(CLx1Dlg::IDD, pParent)rnrn //AFX_DATA_INIT(CLx1Dlg)rn // NOTE: the ClassWizard will add member initialization herern //AFX_DATA_INITrn // Note that LoadIcon does not require a subsequent DestroyIcon in Win32rn m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);rn //链接数据表rn rn m_pRecordset.CreateInstance(_uuidof(Recordset));rn HRESULT Open(const _variant_t & Source,const _variant_t & ActiveConnection,enum CursorTypeEnum CursorType,enum LockTypeEunm LockType,long Options);rn CString strSQL="select * from cangku";rn tryrn rn //从数据库中打开表rn m_pRecordset->Open(_bstr_t(strSQL),m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);rn rn catch(_com_error e)rn rn CString strError;rn strError.Format("警告:打开数据表时发生异常。错误信息:%s",e.ErrorMessage());rn AfxMessageBox(strError);rn return;rn rn[/code]rn下边这两张是调试运行的截图rn[img=https://img-bbs.csdn.net/upload/201309/26/1380186501_882707.jpg][/img]rn[img=https://img-bbs.csdn.net/upload/201309/26/1380186512_112175.jpg][/img]
远程调试 Android 设备使用入门
远程调试 Android 设备使用入门 Kayce Basques By Kayce Basques Technical Writer at Google 从 Windows、Mac 或 Linux 计算机远程调试 Android 设备上的实时内容。 本教程将向您展示如何: 设置您的 Android 设备进行远程调试,并从开发计算机上发现设备。 从您...
使用adb调试Android设备
通过cmd调用adb控制Android手机 语法:发现已连接的设备:adb devices 结束adb服务:adb kill-server 启动adb服务:adb start-server 以下所有命令适用于只有一台设备连接的情况! 重启设备:adb reboot 查看已安装的app包名列表:adb shell pm list package 卸载app:adb uninstall c
Android设备使用网络连接调试
最近遇到一个问题,没有usb接口怎么让Android设备与PC机连接起来?后来同事告诉我,原来可以利用网络使其连接起来,这样调试起来就方便多了,还好有个网口提供网络的连接。其实很简单,只需要向system/build.prop文件中添加如下一句即可: service.adb.tcp.port=5555 进入串口终端 shell@android:/ $ su shell@android:/ #
在android设备中使用busybox
1.  下载busybox busybox-armv7l   2.   # mkdir/data/busybox, 在设备上新建目录 将busybox-armv7l 重命名为busybox后push 进手机的这个目录 3.   更改权限 cd  /data/busybox/ # chmod 655 busybox 4.   安装busybox ./busybox --insta
使用kermit与Android设备串口通讯
安装 sudo apt-get install ckermit 配置 编辑~/.kermrc文件如下: set line /dev/ttyS0 set speed 115200 set carrier-watch off set handshake none set flow-control none robust set file type bin set file n
linux下 libusb使用--打开usb设备进行通信
下载编译安装libusb:https://blog.csdn.net/u011598479/article/details/82705378 1.确定你要通信的USB设备的一些参数。     user_device.idProduct = USB_PRODUCT_ID; //PID     user_device.idVendor = USB_VENDOR_ID ; //VID     u...
打开android设备上的settings.db数据库
C:\Documents and Settings\Administrator>adb shell # sqlite3 data/data/com.android.providers.settings/databases/settings.db sqlite3 data/data/com.android.providers.settings/databases/settings.db S
android驱动 无法打开设备文件 解决
由于设备文件是在内核驱动里面通过device_create创建的,而device_create创建的设备文件默认只有root用户可读写,而hello_device_open一般是由上层APP来调用的,这些APP一般不具有root权限,这时候就导致打开设备文件失败:Hello Stub: failed to open /dev/hello -- Permission denied. 解决办法是类
相关热词 c#异步发送kafka c#窗体编号 c# 操作二进制文件 c# 反射 机制 c#线程 窗体失去响应 c#角度转弧度 c# 解析gps数据 c# vs设置 语法版本 c# json含回车 c#多线程demo