当前位置: 首页 > ops >正文

linux 常用工具的静态编译之二

   

目录

libusb-1.0 >= 1.0.9) were not met:       

libusb编译

配置及编译

安装

(libudev >= 196) were not met:

libudev的使用

names的修改

configure的修改

usb-utils的配置编译

总结


本文介绍usb-utils的编译。

libusb-1.0 >= 1.0.9) were not met:       

Index of /pub/linux/utils/usb/usbutils/

版本下载,此处以010版本为例子 usbutils-010/

./configure \--host=aarch64-linux-gnu \--enable-static \--disable-shared \--prefix=$PWD/install \--disable-system-libusb \  # 强制使用内置实现CC=aarch64-linux-gnu-gcc \CFLAGS="-static" \LDFLAGS="-static -lpthread "   

 报错误:

configure: error: Package requirements (libusb-1.0 >= 1.0.9) were not met:

libusb编译

配置及编译

Release v1.0.24: libusb 1.0.24 · libusb/libusb · GitHub

这里下载1.0.24版本

./configure --host=aarch64-linux-gnu \--prefix=/opt/libusb-aarch64-static \--enable-static \--disable-shared  --disable-udev

 readelf -h ./libusb/.libs/libusb-1.0.a  确认编译出的库为我们需要的aarch64

安装

 安装比较简单,通过make install即可,关键是记录安装的路径

 /bin/bash ../libtool   --mode=install /usr/bin/install -c   libusb-1.0.la '/opt/libusb-aarch64-static/lib'

这里安装路径包括了编译usb-utils需要的头文件和库

ls /opt/libusb-aarch64-static
include  lib
 

(libudev >= 196) were not met:

这个是最麻烦的。新版本的libudev集成到了systemd里面,而systemd的编译异常啰嗦。

libudev的使用

usbutils-010/names.c 使用libudev库,其他的代码没有使用libudev,此文件的作用如下:

  1. USB 标识符到名称的转换

    • 将 USB 规范中的各种数字代码转换为可读字符串:

      • 厂商ID → 厂商名称(如 0x0781 → "SanDisk")

      • 产品ID → 产品名称(如 0x5581 → "Ultra Fit USB 3.0")

      • 设备类/子类/协议 → 描述(如 Class 0x08 → "Mass Storage")

      • HID 描述符、国家代码、语言ID等

  2. 硬件数据库查询

    • 通过 libudev 的硬件数据库(hwdb)获取最新设备信息

    • 支持通过 modalias 模式匹配(如 usb:v0781p5581*

names的修改

 

注释掉和udev相关接口。

 

configure的修改

注释掉udev  libudev的检测

4758-4847 之间的全部删除掉。

usb-utils的配置编译

 

./configure \--host=aarch64-linux-gnu \--enable-static \--disable-udev \--disable-shared \--prefix=/opt/usbutils-aarch64-static \LIBUSB_CFLAGS="-I/opt/libusb-aarch64-static/include/libusb-1.0" \LIBUSB_LIBS="-L/opt/libusb-aarch64-static/lib -lusb-1.0" \CC=aarch64-linux-gnu-gcc \CFLAGS="-static " \LDFLAGS="-static -lpthread"

注意两个/opt/路径的设置,设置了编译usb-utils时需要的libusb的库文件和头文件。

至此,我们可以正常make出lsusb的命令,仅仅是看不到设备的解释,用于查询是否设备是否存在等都可以正常使用。

file lsusb
lsusb: ELF 64-bit LSB executable, ARM aarch64, version 1 (GNU/Linux), statically linked, BuildID[sha1]=558daf18e6f482378496e70ca08d5bbb8ab1caa2, for GNU/Linux 3.7.0, with debug_info, not stripped

总结

       相比较于前面i2cutils集成了依赖库源码,usb-utils并没有集成源码,导致交叉编译的工作量增加。同时依赖于libudev,而此库新版本集成到systemd中,导致编译异常麻烦。本文通过分析usb utils的功能,屏蔽掉不需要的部分。

       另外一种方式就是找libudev已经编译好的二进制文件。

http://www.xdnf.cn/news/14359.html

相关文章:

  • 数字孪生赋能智慧城市大脑建设方案PPT(65页)
  • vscode通过ssh连接
  • 理解ES6中的Promise
  • SAP-增删改查
  • 中介者模式Mediator Pattern
  • 鸿蒙智行5月全系交付新车破4.4万辆,销量再创新高
  • FTP 并不适合用在两个计算机之间共享读写文件 为什么
  • 获取全国行政区划数据
  • Sklearn 机器学习 缺失值处理 过滤掉缺失值的行并统计
  • 大模型在垂直领域的应用:金融、医疗、教育等行业的创新案例分析
  • Leetcode 3585. Find Weighted Median Node in Tree
  • day54python打卡
  • 【git】有两个远程仓库时的推送、覆盖、合并问题
  • 数据管道架构设计指南:5大模式与最佳实践
  • Shakker-Labs提出RepText方法,提升FLUX处理文本能力
  • 每天宜搭宜搭小知识—报表组件—日历热力图
  • C++第一阶段——语言基础与核心特性
  • Kafka Connect 存在任意文件读取漏洞(CVE-2025-27817)
  • 【OpenVINO™】使用OpenVIN.CSharp.API在C#平台快速部署PP-OCRv5模型识别文本
  • 【保姆级开发文档】安卓开发四大组件及其生命周期详解
  • 最新版MATLAB R2025a ,支持Windows10/11
  • Laravel 12 更新与之前版本结构变更清单
  • XxlJob热点文章定时计算
  • 001微信小程序入门
  • 向量外积与秩1矩阵的关系
  • Path.mkdir vs os.makedirs:为什么Ruff建议替换?
  • node中Token刷新机制:给你的数字钥匙续期的奇妙之旅
  • RADIUS服务器的核心应用场景与ASP认证服务器的快速对接指南
  • Linux--存储系统探秘:从块设备到inode
  • 基于STM32单片机RLC检测仪