交叉编译libusb和libusb-compat-0.1.5

1. 下载libusb库:
https://jaist.dl.sourceforge.net/project/libusb/libusb-1.0/libusb-1.0.22/libusb-1.0.22.tar.bz2

2. 编译安装libusb:
tar -xvf ./libusb-1.0.22.tar.bz2
cd ./libusb-1.0.22
mkdir build
./configure --prefix=/home/chy/Downloads/libusb-1.0.22/build CC=mips-linux-gnu-gcc --host=mips-linux-gnu --build=i686-linux --disable-udev
make -j4
make install

3. 下载libusb-compat-0.1.5库:
https://sourceforge.net/projects/libusb/files/libusb-compat-0.1/libusb-compat-0.1.5/libusb-compat-0.1.5.tar.bz2

4. 编译安装libusb-compat:
tar -xvf ./libusb-compat-0.1.5.tar.bz2
cd ./libusb-compat-0.1.5
mkdir build
./configure --build=i686-linux --host=mips-linux-gnu --prefix=/home/chy/work/project/libusb-1.0.0/libusb-compat-0.1.5/build CC=mips-linux-gnu-gcc PKG_CONFIG_PATH=/home/chy/work/project/libusb-1.0.0/libusb-1.0.0-mips/lib/pkgconfig
make -j4
make install

5. 测试程序

#include <stdio.h>
#include "usb.h"

#define VID 0x0525
#define PID 0xa4ac

int main(int argc, char *argv[])
{
	usb_init();
	usb_find_busses();
	usb_find_devices();
	usb_dev_handle *handle = NULL;
	struct usb_device *device = NULL;

	struct usb_bus *bus = NULL;
	for (bus = usb_busses; bus; bus = bus->next) {
		struct usb_device *dev = NULL;
		for (dev = bus->devices; dev; dev = dev->next) {
			if (dev->descriptor.idVendor == VID && dev->descriptor.idProduct == PID) {
				device = dev;
				break;
			}
		}
	}

	if (device == NULL) {
		printf("no found\n");
		return -1;
	}

	handle = usb_open(device);
	if (handle == NULL) {
		printf("open device err\n");
		return -1;
	}

	int ret = usb_detach_kernel_driver_np(handle, 0);
	if (ret != 0) {
		printf("set detach kernel driver failed ret = %d\n", ret);
		return -1;
	}

	ret = usb_set_configuration(handle, 1);
	if (ret != 0) {
		printf("set configuration failed ret = %d\n", ret);
		return -1;
	}

	usb_claim_interface(handle, 0);

#if 1
	unsigned char buff[16] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00};
	ret = usb_interrupt_write(handle, 0x01, buff, 8, 0);
	printf("%s %s %d ret = %d\n", __FILE__, __func__, __LINE__, ret);
	ret = usb_interrupt_write(handle, 0x01, &buff[8], 8, 0);
	printf("%s %s %d ret = %d\n", __FILE__, __func__, __LINE__, ret);
#else
	for (int index = 0; index < 10; index++) {
		unsigned char buff[16] = {0};
		int ret = usb_interrupt_read(handle, 0x81, buff, 8, 10000);
		printf("ret = %d\ndata:\n", ret);
		for (int i = 0; i < 8; i++)
			printf("%02x ", buff[i]);
		printf("\n");
	}
#endif

	ret = usb_release_interface(handle, 0);
	if (ret != 0) {
		printf("release failed\n");
		return -1;
	}

	ret = usb_close(handle);
	if (ret != 0) {
		printf("close failed\n");
		return -1;
	}

	return 0;
}

6. 编译测试程序
mips-linux-gnu-gcc ./test.c -o test -I /home/chy/work/project/libusb-1.0.0/libusb-compat-0.1.5-mips/include -L /home/chy/work/project/libusb-1.0.0/libusb-compat-0.1.5-mips/lib -lusb -lusb-1.0 -std=gnu99

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
交叉编译LIBUSB是指在一个平台上编译生成可以在另一个不同的平台上运行的LIBUSB库文件。通常情况下,交叉编译是在一个主机系统上进行,而生成的库文件将用于目标系统。根据引用内容和,我们可以总结出交叉编译LIBUSB的步骤如下: 1. 首先,需要在主机系统上获取LIBUSB的源代码。可以从LIBUSB的官方网站或其他可靠来源下载。 2. 安装交叉编译工具链,该工具链能够将源代码编译为目标系统可执行文件。这包括交叉编译器、链接器和库文件等。 3. 配置交叉编译环境。根据目标系统的架构和操作系统类型,设置交叉编译工具链的路径、编译选项和目标系统的相关信息。 4. 运行配置命令,用于生成Makefile或其他构建脚本,以便在接下来的步骤中编译LIBUSB。 5. 使用交叉编译工具链编译LIBUSB的源代码。根据具体的编译选项和参数,执行编译命令来生成目标系统的LIBUSB库文件。 6. 在目标系统上进行安装。这包括将编译生成的库文件、头文件和其他相关文件复制到目标系统的相应目录中,以便其他程序可以使用该库进行开发和运行。 根据引用内容,在完成交叉编译后,我们可以在目标系统中的/usr/local目录下找到编译生成的LIBUSB文件和相关内容。 请注意,具体的交叉编译步骤可能会因不同的操作系统和工具链而有所差异。因此,在实际进行交叉编译LIBUSB时,应该参考官方文档或相关资源以获取更具体的指导和说明。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [Libusb交叉编译](https://blog.csdn.net/beArobot/article/details/88627831)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *3* [Linux aarch64交叉编译libusb库](https://blog.csdn.net/vviccc/article/details/126411782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值