wsl 下用给php添加域天加密狗识别程序(尚未成功)
spooking 归属分类: 开发 评论数: 0 个

第一步将 usb 绑定到 wsl2

  1. 安装 usbipd-win

    https://github.com/dorssel/usbipd-win

    安装完之后,将安装目录加入 path 全局变量
    一般在: C:\Program Files\usbipd-win

  2. 绑定 subkey 到 wsl2

    > usbipd list    #查看设备
    Connected:
    BUSID  VID:PID    DEVICE                                                        STATE
    3-6    18f8:1286  USB 输入设备                                                  Not shared
    3-8    046d:c52b  USB 输入设备                                                  Not shared
    3-10   3689:8762  USB 输入设备                                                  Shared (forced)
    
    > usbipd bind --force --busid 3-10    绑定设备
    > usbipd attach --wsl --busid=3-10    挂载到wls
  3. 在wsl中查看是否成功

    # lsusb
    Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
    Bus 001 Device 002: ID 3689:8762 USBKey USBKey
    Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

第二步:golang开发php扩展

  1. 创建 php 扩展 yt88d8

    php ext/ext_skel.php --ext yt88d8 --dir .
  2. 在新建的扩展目录下面建立 lib\golang 目录

    初始化 golang 项目

    go mod init yt88d8

    创建主文件 main.go

    package main
    
    import "C"
    
    import (
     softkey "yt88d8/SoftKey"
    )
    
    
    //export addNum
    func addNum(a, b int) int {
     return a + b
    }
    
    //export getDevicePath
    func getDevicePath() *C.char {
     
     DevicePath := softkey.CheckKeyAndGetPath()
     
     return C.CString(DevicePath)
    }
    
    
    func main() {}

    安装开发库

    apt install libnetfilter-queue-dev libusb-1.0-0-dev

编译

go build -x -buildmode=c-archive -o libyt88d8.a

第三步:修改php扩展

修改 config.m4 ,在 PHP_NEW_EXTENSION(yt88d8, yt88d8.c, $ext_shared) 前面添加

  PHP_SUBST(YT88D8_SHARED_LIBADD)
  PHP_ADD_LIBRARY(stdc++, 1, YT88D8_SHARED_LIBADD)
  PHP_ADD_LIBRARY(usb-1.0, 1, YT88D8_SHARED_LIBADD)
  PHP_ADD_LIBRARY_WITH_PATH(yt88d8, ./lib/golang, YT88D8_SHARED_LIBADD)

修改 yt88d8.c , 添加

PHP_FUNCTION(yt88d8_getDevicePath)
{
    ZEND_PARSE_PARAMETERS_NONE();
    char *var = getDevicePath();
    zend_string *retval;
    retval = strpprintf(0, "%s", var);
    RETURN_STR(retval);
}

ZEND_BEGIN_ARG_INFO(arginfo_yt88d8_getDevicePath, 0)
ZEND_END_ARG_INFO()

static const zend_function_entry yt88d8_functions[] = {
    PHP_FE(yt88d8_test1,        arginfo_yt88d8_test1)
    PHP_FE(yt88d8_test2,        arginfo_yt88d8_test2)
    PHP_FE(yt88d8_getDevicePath,    arginfo_yt88d8_getDevicePath)   //新加的
    PHP_FE_END
};

未完待续……