第一步将 usb 绑定到 wsl2
安装 usbipd-win
https://github.com/dorssel/usbipd-win
安装完之后,将安装目录加入 path 全局变量
一般在: C:\Program Files\usbipd-win绑定 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
在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扩展
创建 php 扩展 yt88d8
php ext/ext_skel.php --ext yt88d8 --dir .
在新建的扩展目录下面建立 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
};
未完待续……
本站文章除注明转载/出处外,均为博主 spooking 原创或翻译,转载前请务必署名。