搜索
bottom↓
回复: 23

libusb-win32-src-1.2.6.0源码编译成功。内附详细配置

  [复制链接]

出0入0汤圆

发表于 2013-10-9 13:58:59 | 显示全部楼层 |阅读模式
本帖最后由 gallop020142 于 2013-10-9 14:01 编辑

系统平台:
windows7
工具软件:
1.Winddk7600_1(GRMWDK_EN_7600_1.ISO)
2.Mingw5.1.6
3.Visualstudio 2008(optional)
4.libusbK-3.0.6.0(optional)

具体步骤:
分两步走,第一步先编译出libusb.lib, libusb0.sys, install-filter.exe, istall-filter-win.exe, testlibusb.exe testlibusb-win.exe, libusb0.dll;第二步编译inf_wizard.exe等。

Libusb-win32-src-1.2.6.0的编译:(先编译出libusb.lib, libusb0.sys, install-filter.exe, istall-filter-win.exe, testlibusb.exe testlibusb-win.exe, libusb0.dll)
Step1)        修改ddk_make/make.cfg中的相关内容:
1.        Line25 WINDDK_BASE =c:\WinDDK
2.        Line26 WINDDK_DIR=!WINDDK_BASE!\7600.16385.1\
3.        Line29 注释掉
4.        Line49 PACKAGE_ROOT_DIR = C:\libusb-win32\
5.        Line76 ISCC=C:\Program Files\Inno Setup 5\ISCC.exe(optional)
6.        Line81 IMPLIB=C:\Program Files\Borland\CBuilder6\Bin\implib.exe(optional)
Step2)        修改ddk_make/make.cmd
1.        Line175 W2K 修改成WIN7
Step3)        在命令行cd至ddk_make,输入命令make.cmd “arch=x86”进行编译。make.cmd的其余参数的用法可以通过打开make.cmd文本查看该文件的line955-1017(ShowHelp)。
Step4)        要编译Inf_wizard.exe就需编译projects/additional/libwdi,而可以单独进行编译,如下文所示。

Libwdi(Library for Windows Driver Installer, software/progromming/libwdi-1.2.2.tar.gz)的编译
Step1)        打开libwdi-1.2.2/libwdi/embedded_files.h文件,Line50 – line155定义了需要准备的文件,这些文件在libwdi-1.2.2/msvc/config.h中定义。可以查看需要准备的文件如下(只定义OPT_M32, LIBUSB0_DIR, LIBUSBK_DIR):
1.        DDK_DIR \\redist\\wdf\\x86\\WdfCoInstaller0 STR(WDF_VER).dll
2.        DDK_DIR \\redist\\“COINSTALLER_DIR”\\x86\\winusbcoinstaller2.dll
3.        DDK_DIR \\license.rtf
4.        LIBUSB0_DIR \\bin\\x86\\libusb0_x86.dll
5.        LIBUSB0_DIR \\bin\\x86\\install-filter.exe
6.        LIBUSB0_DIR \\bin\\x86\\libusb0.sys
7.        LIBUSBK_DIR \\sys\\x86\\libusbK.sys
8.        LIBUSBK_DIR \\dll\\x86\\libusbK.dll
Step2)        前3个文件为winddk自带,所以只需在本机任意地址准备如上文件4-8:
1.        从编译的libusb-win32-src-1.2.6.0中复制对应文件到D:/libusb-win32: bin/x86/libusb0_x86.dll, install-filter.exe libusb0.sys
2.        从libusbK的安装目录下找到对应的文件复制到D:/libusbK/bin/dll/x86/libusbK.dll,如果libusbK.sys找不到的话,在c:/windows/system32/drivers下找到并复制libusbK.sys至D:/libusbK/bin/sys/x86/libusbK.sys
Step3)        修改libwdi-1.2.2/msvc/config.h:
1.        Line14-16: DDK_DIR修改成本机winddk7600_1的安装地址,如"C:/WinDDK/7600.16385.1",注意所有地址符用”/”或者“\\”,不要用“\”!
2.        Line19-21: LIBUSB0_DIR修改成本地libusb-win32-bin的地址,如"D:/libusb-win32"
3.        Line24-26: LIBUSBK_DIR 修改成本地libusbK的地址,如"D:/libusbK/bin"
4.        Line 34: WDF_VER 修改成winddk的版本 1009
Step4)        借助winddk编译libwdi1.2.2源码:
1.        开始->Windows Driver Kits->WDK 7600.16385.1->build environments->windows7->x86 free build environment
2.        在打开的命令行中cd至libwdi1.2.2的源码路径
3.        在命令行输入ddk_build.cmd(如果要生成dll的话,再加上 dll)
4.        如果编译成功的话,会出来一些类似的信息,表示所编译的工程编译成功(8个executable built, 1个library built)
4 files compiled
1 executable built
如果编译不成功,出现embedded.h文件找不到的情况,则基本肯定是以上步骤,特别是所需准备的文件的路径有问题!
如果以上编译成功的话,可以打开libwdi_2008.sln进一步进行调试。

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果天空是黑暗的,那就摸黑生存;
如果发出声音是危险的,那就保持沉默;
如果自觉无力发光,那就蜷伏于牆角。
但是,不要习惯了黑暗就为黑暗辩护;
也不要为自己的苟且而得意;
不要嘲讽那些比自己更勇敢的人。
我们可以卑微如尘土,但不可扭曲如蛆虫。

出0入0汤圆

 楼主| 发表于 2013-10-9 14:15:22 | 显示全部楼层
mingw5.1.6软件

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出100入101汤圆

发表于 2013-10-9 14:35:51 | 显示全部楼层
libusb用在什么地方?有没有应用实例?

出0入0汤圆

 楼主| 发表于 2013-10-9 16:00:28 | 显示全部楼层
fengyunyu 发表于 2013-10-9 14:35
libusb用在什么地方?有没有应用实例?

上位机usb驱动,搜一下本版就有相关的应用实例。如示波器,虚拟串口等等

出0入0汤圆

发表于 2014-5-9 15:42:11 | 显示全部楼层
最近想学习一下USB,正好PC 下的驱动头痛

出0入0汤圆

发表于 2014-5-9 15:54:15 | 显示全部楼层
好东西,MARK...

出0入0汤圆

发表于 2014-5-9 16:10:29 | 显示全部楼层
MARK........

出0入0汤圆

发表于 2014-5-9 16:57:15 | 显示全部楼层
好东西
支持下

出0入0汤圆

发表于 2014-5-10 12:36:15 | 显示全部楼层
这个直接下载官方编译好的不就行了吗?搭这编译环境好庞大的。

出0入0汤圆

发表于 2014-5-10 23:48:54 | 显示全部楼层
楼主在mingw编译  脱离这个环境还可以跑么?

出0入0汤圆

发表于 2014-5-12 13:12:20 | 显示全部楼层
libusb-win32--挺详细,估计是不能下载编译好的。

出0入0汤圆

发表于 2014-6-29 15:34:24 | 显示全部楼层
正在学习libusb-win32,感觉很难啊。

出0入0汤圆

发表于 2015-2-5 14:27:57 | 显示全部楼层
学习下,最近正在弄,搞的头都大!

出0入0汤圆

发表于 2015-4-23 17:28:55 | 显示全部楼层
libusb确实好用

出0入0汤圆

发表于 2015-4-24 07:53:59 来自手机 | 显示全部楼层
乐于分享,赞一个。

出0入0汤圆

发表于 2015-4-24 08:44:02 | 显示全部楼层

出0入10汤圆

发表于 2015-4-24 08:57:01 | 显示全部楼层
android 下用libusb开发USB设备是件很酸爽的事情,不需要ROOT,不需要修改KERNEL. 直接在应用层操作usb,就可以和和带USB的单片机通讯。 我们的DTV Dongle就是这样做的。需要注意的是,USB设备访问权限需要APK获取并传递给LIBUSB , 然后libusb需要做点小的修改,参考代码如下:
int API_EXPORTED libusb_open_fd(libusb_device *dev, libusb_device_handle **handle, int fd)
{
        struct libusb_context *ctx = DEVICE_CTX(dev);
        struct libusb_device_handle *_handle;
        size_t priv_size = usbi_backend->device_handle_priv_size;
        int r;
        usbi_dbg("open %d.%d", dev->bus_number, dev->device_address);

        _handle = malloc(sizeof(*_handle) + priv_size);
        if (!_handle)
        return LIBUSB_ERROR_NO_MEM;

        r = usbi_mutex_init(&_handle->lock, NULL);
        if (r) {
        free(_handle);
        return LIBUSB_ERROR_OTHER;
        }

        _handle->dev = libusb_ref_device(dev);
        _handle->claimed_interfaces = 0;
        memset(&_handle->os_priv, 0, priv_size);

        r = usbi_backend->open_fd(_handle, fd);
        if (r < 0) {
        usbi_dbg("open %d.%d returns %d", dev->bus_number, dev->device_address, r);
        libusb_unref_device(dev);
        usbi_mutex_destroy(&_handle->lock);
        free(_handle);
        return r;
        }

        usbi_mutex_lock(&ctx->open_devs_lock);
        list_add(&_handle->list, &ctx->open_devs);
        usbi_mutex_unlock(&ctx->open_devs_lock);
        *handle = _handle;

        /* At this point, we want to interrupt any existing event handlers so
         * that they realise the addition of the new device's poll fd. One
         * example when this is desirable is if the user is running a separate
         * dedicated libusb events handling thread, which is running with a long
         * or infinite timeout. We want to interrupt that iteration of the loop,
         * so that it picks up the new fd, and then continues. */
        usbi_fd_notification(ctx);

        return 0;
}

出0入10汤圆

发表于 2015-4-24 08:58:13 | 显示全部楼层
DEFAULT_VISIBILITY
libusb_device_handle * LIBUSB_CALL libusb_open_device_with_vid_pid(
        libusb_context *ctx, uint16_t vendor_id, uint16_t product_id,int fd_from_andorid)
{
        struct libusb_device **devs;
        struct libusb_device *found = NULL;
        struct libusb_device *dev;
        struct libusb_device_handle *handle = NULL;
        size_t i = 0;
        int r;

        if (libusb_get_device_list(ctx, &devs) < 0)
                return NULL;

        while ((dev = devs[i++]) != NULL) {
                struct libusb_device_descriptor desc;
                r = libusb_get_device_descriptor(dev, &desc);
                if (r < 0)
                        goto out;
                if (desc.idVendor == vendor_id && desc.idProduct == product_id) {
                        found = dev;
                        break;
                }
        }

        if (found) {
#ifdef ANDROID
                r = libusb_open_fd(found, &handle,fd_from_andorid);
#else
                r = libusb_open(found, &handle);
#endif //ANDROID

                if (r < 0)
                        handle = NULL;
        }

out:
        libusb_free_device_list(devs, 1);
        return handle;
}

出0入0汤圆

发表于 2016-5-24 16:25:45 | 显示全部楼层
楼主请问libusb-win32支持高速USB2.0吗?

出0入0汤圆

发表于 2016-7-19 16:20:53 | 显示全部楼层
正在学习USB上位机,谢谢分享!

出0入0汤圆

发表于 2016-7-19 16:22:42 | 显示全部楼层
要按照驱动的,不好

出0入0汤圆

发表于 2016-8-6 22:04:07 | 显示全部楼层
好东西 支持下

出0入0汤圆

发表于 2016-8-7 21:10:51 | 显示全部楼层
请问这个是哪里没改正确?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入0汤圆

发表于 2016-10-13 13:05:59 | 显示全部楼层
看上去好复杂啊!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-9-27 06:47

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表