1. 先对设备降级处理
2. 在降级的时候,装好盒子的驱动;
3. 安装 USB_Burning_Tool V2.1.6 烧录软件和 libusb-win32 驱动(设备管理器 -> 添加过时设备);
4. 找根HDMI线连接电视机;
5. 插上盒子的USB线和电源线,到这一步,盒子与电脑通过USB相连,盒子与电视机通过HDMI相连,盒子电源插上,电视机里有内容;
6. 打开“进入线刷模式.bat”脚本,输入盒子的IP地址,但别按回车、别按回车、别按回车;
7. 打开 USB_Burning_Tool,固件校验、去掉2个勾,别点开始、别点开始、别点开始;
8. 切换到第6步的界面,按回车!这个时候电视机会黑屏(关键点);
9. 马上,立刻切换到第7步的界面,按开始!这时候就会进入烧录模式,进度条开始滚动;
10. 烧录完成,拔USB线、电源线。
本地新建文件 android.hardware.usb.host.xml。
<permissions>。
<feature name="android.hardware.usb.host"/>。
</permissions>。
使用adb push 到 /system/etc/permissions。
adb push C:\Users\Yanfulei\Desktop\useb\android.hardware.usb.host.xml /system/etc/permissions。
下载 core_hardware.xml 文件并修改。
Android手机为handheld_core_hardware.xml平板为tablet_core_hardware.xml。
编辑handheld_core_hardware.xml文件。
增加<feature name="android.hardware.usb.host"/>。
重新将文件push回去
adb push C:\Users\Yanfulei\handheld_core_hardware.xml /system/etc/permissions。
由于公司的产品,导致我在Linux下写usb通信的代码出现了许多的问题,最后发现这些设备只能通过控制传输来操作设备,所以后面的问题就迎刃而解了。现在贴上当时在QT下写的代码,以防日后再碰到此类问题的时候翻查。
还有在QT下使用libusb库的时候一定要在(项目名.pro)文件加上:
[cpp] view plain copy。
INCLUDEPATH += /usr/include/libusb-1.0 。
LIBS += -L"/usr/lib/x86_64-linux-gnu" -lusb-1.0 。
否则程序无法找到该库的路径。
[cpp] view plain copy 。
libusb_device **devs; 。
libusb_device_handle *dev_handle; 。
libusb_context *ctx=NULL; 。
struct libusb_device_descriptor desc; 。
int r;
ssize_t cnt; 。
r=libusb_init(&ctx); 。
if(r<0)
{
//printf("init error"); 。
QMessageBox::about(this,"haha","initialerror"); 。
return ; 。
}
libusb_set_debug(ctx,3); 。
//cnt=libusb_get_device_list(ctx,&devs); 。
dev_handle=libusb_open_device_with_vid_pid(ctx,VID,PID); 。
if(dev_handle==NULL) 。
QMessageBox::about(this,"haha","open my dev error"); 。
else
QMessageBox::about(this,"haha","open my dev success"); 。
//libusb_free_device_list(devs,1); 。
if(libusb_kernel_driver_active(dev_handle,0)==1) 。
{
QMessageBox::about(this,"haha","kernel driver active"); 。
if(libusb_detach_kernel_driver(dev_handle,0)==0) 。
QMessageBox::about(this,"haha","kernel driver detached"); 。
}
r=libusb_claim_interface(dev_handle,0); 。
if(r<0)
{
QMessageBox::about(this,"haha","cannot claim interface"); 。
return ; 。
}
QMessageBox::about(this,"haha","claimed interface"); 。
// start use this usb 。
unsigned char dataOut[0x30]={0}; 。
dataOut[0]=0x00; 。
dataOut[1]=0x02; 。
dataOut[2]=0x08; 。
dataOut[3]=0x00; 。
dataOut[4]=0x02; 。
dataOut[5]=0x00; 。
dataOut[6]=0xb2; 。
dataOut[7]=0x30; 。
dataOut[8]=dataOut[2]^dataOut[3]^dataOut[4]^dataOut[5]^dataOut[6]^dataOut[7]; 。
//r=libusb_interrupt_transfer(dev_handle,LIBUSB_ENDPOINT_OUT, dataOut,9, &actual_length, 0); 。
//r=libusb_bulk_transfer(dev_handle,LIBUSB_ENDPOINT_OUT,dataOut,9,&actual_length,5000); 。
//此设备必须用控制传输 。
r=libusb_control_transfer(dev_handle, 0x21, 0x09, 0x0300, 0x00, dataOut+1, 0x20, 1000); 。
unsigned char dataRead[0x30]={0}; 。
r=libusb_control_transfer(dev_handle, 0xa1, 0x01, 0x0300, 0x00, dataRead, 0x20, 1000); 。
if(r<0)
{
QMessageBox::about(this,"haha","transfer data error"); 。
}else
{
QMessageBox::about(this,"haha","transfer data success"); 。
}
//release everything 。
r=libusb_release_interface(dev_handle,0); 。
libusb_attach_kernel_driver(dev_handle,0); 。
libusb_close(dev_handle); 。
libusb_exit(ctx);。
如果系统文件丢失、损坏,自行寻找选择适合系统的DLL系统文件,系统文件版本必须与操作系统匹配。 正确的修复方法就是下载最新的winusb.dll文件,放回到目录里。
1、下载libusb0.dll文件:http://www.ddooo.com/softdown/45677.htm,然后解压。
2、复制文件“libusb0.dll”到系统目录下。
3、系统目录一般为:C:\WINNT\System32 64位系统为C:\Windows\SysWOW64。
4、最后点击开始菜单-->运行-->输入regsvr32 libusb0.dll后,回车即可解决错误提示。
基本信息
系统文件libusb0.dll是存放在Windows 系统文件夹中的重要文件,通常情况下是在安装操作系统过程中自动创建的,对于系统正常运行来说至关重要。在正常情况下不建议用户对该类文件进行随意的修改,它的存在对维护计算机系统的稳定具有重要作用。
libusb0.dll出错,很多是因为系统中了 流氓软件,如果不了解系统,不知道libusb0.dll在电脑中的存放位置,那么建议使用 修复工具对系统进行最全面的扫描和修复。首先,建议使用 金山毒霸。
然后,点击主界面的快速扫描,进行全面的系统扫描。
最后,按提示重新启动电脑,libusb0.dll修复完毕。
误操作 /usr/bin/ld的解决办法:
sudo cp /home/bizhi/Desktop/libusb-compat-0.1.5/libusb/.libs/libusb.so /usr/bin/ld。
你实际上是把libusb.so的内容给了ld -> ld.bfd*即,给了ld.bdf*,那么就是改变了ld.bfd的内容,所以编译通不过。
cp就是拷贝,如果你要用libsub.so的链接的话,就改为用mv。