从源码编译 usbmuxd

libplist

源码:https://github.com/libimobiledevice/libplist.git
编译出静态库 libcnary,动态库 libplist

libusbmuxd

源码:https://github.com/libimobiledevice/libusbmuxd.git
编译出静态库 libinternalcommon,动态库 libusbmuxd,可执行文件 iproxy、inetcat。动态库依赖
libinternalcommon libcnary libplist 库。可执行文件 iproxy、inetcat 依赖 libusbmuxd 库。

libusbmux修改

--- a/include/usbmuxd-proto.h
+++ b/include/usbmuxd-proto.h
@@ -29,8 +29,12 @@#if defined(WIN32) || defined(__CYGWIN__)#define USBMUXD_SOCKET_PORT 27015#else
+#if defined(ANDROID)
+#define USBMUXD_SOCKET_FILE "/data/local/tmp/usbmuxd"
+#else#define USBMUXD_SOCKET_FILE "/var/run/usbmuxd"#endif
+#endif#ifdef __cplusplusextern "C" {--- a/src/libusbmuxd.c
+++ b/src/libusbmuxd.c
@@ -76,7 +76,11 @@ extern int _NSGetExecutablePath(char* buf, uint32_t* bufsize);#include <sys/select.h>#define EVENT_SIZE  (sizeof (struct inotify_event))#define EVENT_BUF_LEN (1024 * (EVENT_SIZE + 16))
+#ifdef ANDROID
+#define USBMUXD_DIRNAME "/data/local/tmp"
+#else#define USBMUXD_DIRNAME "/var/run"
+#endif#define USBMUXD_SOCKET_NAME "usbmuxd"static int use_inotify = 1;#endif /* HAVE_INOTIFY */--- a/tools/Makefile.am
+++ b/tools/Makefile.am
@@ -6,10 +6,10 @@ bin_PROGRAMS = iproxy inetcatiproxy_SOURCES = iproxy.ciproxy_CFLAGS = $(AM_CFLAGS)iproxy_LDFLAGS = $(AM_LDFLAGS)
-iproxy_LDADD = $(top_builddir)/src/libusbmuxd-2.0.la $(top_builddir)/common/libinternalcommon.la
+iproxy_LDADD = $(top_builddir)/src/libusbmuxd-2.0.la $(top_builddir)/common/libinternalcommon.la /data/OSS/libplist/src/.libs/libplist-2.0.a -lminetcat_SOURCES = inetcat.cinetcat_CFLAGS = $(AM_CFLAGS)inetcat_LDFLAGS = $(AM_LDFLAGS)
-inetcat_LDADD = $(top_builddir)/src/libusbmuxd-2.0.la $(top_builddir)/common/libinternalcommon.la
+inetcat_LDADD = $(top_builddir)/src/libusbmuxd-2.0.la $(top_builddir)/common/libinternalcommon.la /data/OSS/libplist/src/.libs/libplist-2.0.a -lm

libimobiledevice

源码:https://github.com/libimobiledevice/libimobiledevice.git
编译出动态库 libimobiledevice。动态库 libimobiledevice 依赖 libplist libusbmuxd libcrypto libssl 等库。

源码修改

--- a/common/userpref.c
+++ b/common/userpref.c
@@ -353,12 +353,13 @@ static int X509_add_ext_helper(X509 *cert, int nid, char *value)
X509V3_set_ctx_nodb(&ctx);
X509V3_set_ctx(&ctx, NULL, cert, NULL, NULL, 0);
+#if 0
ex = X509V3_EXT_conf_nid(NULL, &ctx, nid, value);
if (!ex) {
debug_info("ERROR: X509V3_EXT_conf_nid(%d, %s) failed", nid, value);
return 0;
}
-
+#endif
X509_add_ext(cert, ex, -1);
X509_EXTENSION_free(ex);
--- a/src/idevice.c
+++ b/src/idevice.c
@@ -149,7 +149,7 @@ static void internal_idevice_deinit(void)
EVP_cleanup();
CRYPTO_cleanup_all_ex_data();
- SSL_COMP_free_compression_methods();
+ //SSL_COMP_free_compression_methods();
openssl_remove_thread_state();
#endif
#else

libusb

libusb 版本是 1.0.8,版本太旧。需要更新的版本。https://github.com/libusb/libusb.git。编
译出 libusb 动态库。
config.h 中增加#define ENABLE_DEBUG_LOGGING 1 可打开调试日志。

源码修改

--- a/libusb/os/linux_usbfs.c
保密等级:1 级
8
+++ b/libusb/os/linux_usbfs.c
@@ -688,6 +688,7 @@ static int parse_config_descriptors(struct libusb_device *dev)
}
if (priv->sysfs_dir) {
+#ifndefANDROID
/*
* In sysfs wTotalLength is ignored, instead the kernel returns a
* config descriptor with verified bLength fields, with descriptors
@@ -711,6 +712,7 @@ static int parse_config_descriptors(struct libusb_device *dev)
config_len, sysfs_config_len);
config_len = sysfs_config_len;
}
+#endif
} else {
/*
* In usbfs the config descriptors are wTotalLength bytes apart,
--- a/libusb/os/linux_usbfs.h
+++ b/libusb/os/linux_usbfs.h
@@ -167,7 +167,7 @@ static inline int linux_start_event_monitor(void)
#elif !defined(__ANDROID__)
return linux_netlink_start_event_monitor();
#else
- return LIBUSB_SUCCESS;
+ return linux_netlink_start_event_monitor();//LIBUSB_SUCCESS;
#endif

usbmuxd

源码:https://github.com/libimobiledevice/usbmuxd.git
编译出可执行文件 usbmuxd。可执行文件 usbmuxd 依赖 pthread libusb libplist libusbmuxd libimobiledevice
等动态库。

源码修改

--- a/src/conf.c
+++ b/src/conf.c
@@ -126,9 +126,13 @@ const char *config_get_config_dir()
#ifdef __APPLE__
base_config_dir = strdup("/var/db");
#else
+#ifdefANDROID
+ base_config_dir = strdup("/data/local/tmp");
保密等级:1 级
9
+#else
base_config_dir = strdup("/var/lib");
#endif
#endif
+#endif
__config_dir = string_concat(base_config_dir, DIR_SEP_S, CONFIG_DIR, NULL);
if (__config_dir) {
--- a/src/device.c
+++ b/src/device.c
@@ -27,7 +27,8 @@
#include <sys/time.h>
#include <netinet/in.h>
-#include <netinet/tcp.h>
+#define __USE_MISC
+#include "tcp.h"
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
--- a/src/main.c
+++ b/src/main.c
@@ -50,8 +50,13 @@
#include "client.h"
#include "conf.h"
+#ifdefANDROID
+static const char *socket_path = "/data/local/tmp/usbmuxd";
+static const char *lockfile = "/data/local/tmp/usbmuxd.pid";
+#else
static const char *socket_path = "/var/run/usbmuxd";
static const char *lockfile = "/var/run/usbmuxd.pid";
+#endif
// Global state used in other files
int should_exit;
--- a/src/usbmuxd-proto.h
+++ b/src/usbmuxd-proto.h
@@ -29,8 +29,12 @@
#if defined(WIN32) || defined(__CYGWIN__)
#define USBMUXD_SOCKET_PORT 27015
#else
+#if defined(ANDROID)
+#define USBMUXD_SOCKET_FILE "/data/local/tmp/usbmuxd"
保密等级:1 级
10
+#else
#define USBMUXD_SOCKET_FILE "/var/run/usbmuxd"
#endif
+#endif
#ifdef __cplusplus
extern "C" {

从源码编译usbmuxd相关推荐

  1. java调用clang编译的so_写Java这么久,JDK源码编译过没?编译JDK源码踩坑纪实

    好奇害死羊 很多小伙伴们做Java开发,天天写Java代码,肯定离不开Java基础环境:JDK,毕竟我们写好的Java代码也是跑在JVM虚拟机上. 一般来说,我们学Java之前,第一步就是安装JDK环 ...

  2. 5单个编译总会编译全部_玩转Android10(五)源码编译开发中常用命令

    源码开发编译中,熟练掌握常用命令,可以提高开发工作效率.Android源码中,将相关的命令分为如下几类: 1.初始化源码编译环境 初始化编译环境,为后续提供如lunch.make.xxgrep.god ...

  3. mono和monodevelop源码编译安装

    之所以用源码编译的方式安装mono和monodevelop,是因为通过yum安装的mono不是最新版本,而且monodevelop不能建 asp.net MVC3的工程. 而且通过源码安装,可以进一步 ...

  4. nginx源码编译、负载均衡及模块的扩展

    1.nginx源码编译 实验环境: iptables和selinux关闭 redhat6.5 nginx:test1: 172.25.1.11 [root@test1 ~]# ls nginx-1.1 ...

  5. mac通过tree源码编译安装tree

    通过tree源码编译安装  下载源码:curl -O ftp://mama.indstate.edu/linux/tree/tree-1.6.0.tgz  解压源码:tar xzvf tree-1.6 ...

  6. 干货|TensorFlow开发环境搭建(Ubuntu16.04+GPU+TensorFlow源码编译)

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|机器学习算法工程师 安装平台 1 平台 目前Tensor ...

  7. Nginx 源码编译安装

    Nginx 源码编译安装环境 Centos7 Nginx1.8.1    下载地址:http://nginx.org/download/ 选择自己想要的版本 我这边使用1.8.1,下载地址:http: ...

  8. 基本lnmp平台的搭建(源码编译)

    lnmp :linux ,nginx ,mysql ,php 系统环境:rhel6.0    selinux and iptables disabled  (这里我们都只用源码编译的方式) 1 ste ...

  9. 源码编译安装percona-xtrabackup-2.3.2

    一.系统包需求 rpm -q libaio-devel libgpg-error-devel libgcrypt-devel autoconf automake libidn-devel libcur ...

最新文章

  1. 关于Mybatis查询结果的封装
  2. 两个超长正整数的加法c语言,二个超长正整数的相加
  3. 动态更新ViewPager?
  4. check_ping.py
  5. 有关BST搜索树转换为AVL高度平衡树的旋转问题
  6. javascript事件循环机制EventLoop
  7. C++ 静态链表(用数组模拟动态链表)
  8. Elasticsearch的用例:灵活的查询缓存
  9. xml 属性value换行显示_跟光磊学Java开发-Java解析XML
  10. 动态规划——最嘉观光组合(Leetcode 1014)
  11. (05)FPGA入门条件
  12. 售价 239 美元,第一台 RISC-V 便携式计算机现已上市
  13. LINGO编程简介与实例
  14. 经典算法书籍推荐(亲测有效)
  15. 8421码的加减矫正
  16. 随机森林、LGBM基于贝叶斯优化调参
  17. Java笔试 系列一
  18. 现场直击大数据行业应用实践
  19. linux忽略大小写 grep,linux grep不区分大小写查找字符串方法
  20. 中文标点符号unicode码

热门文章

  1. 现代C++之手写智能指针
  2. 安装sulley注意点
  3. awesome-face-anti-spoofing
  4. 豆瓣 API ( 解决104问题 )
  5. Ubuntu16 wine安装迅雷
  6. Vitalik:协议设计中的“封装复杂性” vs. “系统复杂性”
  7. java 如何初始化数组_java中初始化数组的三种方式分别是什么
  8. winimage使用教程
  9. 2022P气瓶充装判断题及在线模拟考试
  10. 什么是照度 照度的标准值介绍