From 6ded5b3ec876d8406a9195599d26bf675831dc0a Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 27 Feb 2018 19:11:05 +0100 Subject: [PATCH 01/71] Fix USB resets when adb daemon is started (#1470740) --- ...b-don-t-reset-usb-when-connecting-it.patch | 40 + ...-adb-fix-two-device-offline-problems.patch | 1189 +++++++++++++++++ android-tools.spec | 10 +- 3 files changed, 1238 insertions(+), 1 deletion(-) create mode 100644 0001-adb-don-t-reset-usb-when-connecting-it.patch create mode 100644 0001-adb-fix-two-device-offline-problems.patch diff --git a/0001-adb-don-t-reset-usb-when-connecting-it.patch b/0001-adb-don-t-reset-usb-when-connecting-it.patch new file mode 100644 index 0000000..029471e --- /dev/null +++ b/0001-adb-don-t-reset-usb-when-connecting-it.patch @@ -0,0 +1,40 @@ +From 5d002b8d6ae0a1eeefe09309ae6687a16e82ed08 Mon Sep 17 00:00:00 2001 +From: Yabin Cui +Date: Tue, 4 Apr 2017 10:29:21 -0700 +Subject: [PATCH] adb: don't reset usb when connecting it. + +Calling libusb_reset_device() resets the usb connection with device +on linux platform. It can interfere with other usb interfaces and only +works on linux. +Removing it only affects when adb server is killed while doing IO with +device, which will be solved in later patches. + +Bug: http://b/32952319 +Test: none +Change-Id: I19522435eadd938ff95d49cbae3bcaa5c8f6d184 +--- + adb/client/usb_libusb.cpp | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp +index 7adb26213..c48a2517b 100644 +--- a/adb/client/usb_libusb.cpp ++++ b/adb/client/usb_libusb.cpp +@@ -306,14 +306,6 @@ static void poll_for_devices() { + } + device_serial.resize(rc); + +- // Try to reset the device. +- rc = libusb_reset_device(handle_raw); +- if (rc != 0) { +- LOG(WARNING) << "failed to reset opened device '" << device_serial +- << "': " << libusb_error_name(rc); +- continue; +- } +- + // WARNING: this isn't released via RAII. + rc = libusb_claim_interface(handle.get(), interface_num); + if (rc != 0) { +-- +2.14.3 + diff --git a/0001-adb-fix-two-device-offline-problems.patch b/0001-adb-fix-two-device-offline-problems.patch new file mode 100644 index 0000000..de51974 --- /dev/null +++ b/0001-adb-fix-two-device-offline-problems.patch @@ -0,0 +1,1189 @@ +From b5e11415d9fdb929321c66889063dac50fb737af Mon Sep 17 00:00:00 2001 +From: Yabin Cui +Date: Fri, 10 Mar 2017 16:01:01 -0800 +Subject: [PATCH] adb: fix two device offline problems. + +When device goes offline, user usually has to manually replug the +usb device. This patch tries to solve two offline situations, all +because when adb on host is killed, the adbd on device is not notified. + +1. When adb server is killed while pushing a large file to device, +the device is still reading the unfinished large message. So the +device thinks of the CNXN message as part of the previous unfinished +message, so it doesn't reply and the device is in offline state. + +The solution is to add a write_msg_lock in atransport struct. And it +kicks the transport only after sending a whole message. By kicking +all transports before exit, we ensure that we don't write part of +a message to any device. So next time we start adb server, the device +should be waiting for a new message. + +2. When adb server is killed while pulling a large file from device, +the device is still trying to send the unfinished large message. So +adb on host usually reads data with EOVERFLOW error. This is because +adb on host is reading less than one packet sent from device. + +The solution is to use buffered read on host. The max packet size +of bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least +1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach +adb host to ignore wrong messages. + +To be safe, this patch doesn't change any logic on device. + +Bug: http://b/32952319 +Test: run python -m unittest -q test_device.DeviceOfflineTest +Test: on linux/mac/windows with bullhead, ryu. +Change-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e +--- + adb/adb.cpp | 63 +++++++++++++---------- + adb/adb.h | 5 +- + adb/adb_client.cpp | 11 ++-- + adb/adb_trace.cpp | 4 +- + adb/adb_trace.h | 3 ++ + adb/client/usb_libusb.cpp | 35 +++++++------ + adb/client/usb_linux.cpp | 16 +++--- + adb/client/usb_osx.cpp | 2 +- + adb/client/usb_windows.cpp | 10 ++-- + adb/commandline.cpp | 3 +- + adb/fdevent.cpp | 4 +- + adb/fdevent.h | 3 ++ + adb/services.cpp | 2 +- + adb/sockets.cpp | 2 +- + adb/test_device.py | 71 ++++++++++++++++++++++++++ + adb/transport.cpp | 72 ++++++++++++++++++++++---- + adb/transport.h | 24 ++++++--- + adb/transport_local.cpp | 3 +- + adb/transport_test.cpp | 7 +-- + adb/transport_usb.cpp | 124 +++++++++++++++++++++++++++++++++++++++++---- + 20 files changed, 356 insertions(+), 108 deletions(-) + +diff --git a/adb/adb.cpp b/adb/adb.cpp +index cf6b3593d..33d6bda47 100644 +--- a/adb/adb.cpp ++++ b/adb/adb.cpp +@@ -253,6 +253,19 @@ void send_connect(atransport* t) { + send_packet(cp, t); + } + ++#if ADB_HOST ++ ++void SendConnectOnHost(atransport* t) { ++ // Send an empty message before A_CNXN message. This is because the data toggle of the ep_out on ++ // host and ep_in on device may not be the same. ++ apacket* p = get_apacket(); ++ CHECK(p); ++ send_packet(p, t); ++ send_connect(t); ++} ++ ++#endif ++ + // qual_overwrite is used to overwrite a qualifier string. dst is a + // pointer to a char pointer. It is assumed that if *dst is non-NULL, it + // was malloc'ed and needs to freed. *dst will be set to a dup of src. +@@ -299,29 +312,29 @@ void parse_banner(const std::string& banner, atransport* t) { + const std::string& type = pieces[0]; + if (type == "bootloader") { + D("setting connection_state to kCsBootloader"); +- t->connection_state = kCsBootloader; ++ t->SetConnectionState(kCsBootloader); + update_transports(); + } else if (type == "device") { + D("setting connection_state to kCsDevice"); +- t->connection_state = kCsDevice; ++ t->SetConnectionState(kCsDevice); + update_transports(); + } else if (type == "recovery") { + D("setting connection_state to kCsRecovery"); +- t->connection_state = kCsRecovery; ++ t->SetConnectionState(kCsRecovery); + update_transports(); + } else if (type == "sideload") { + D("setting connection_state to kCsSideload"); +- t->connection_state = kCsSideload; ++ t->SetConnectionState(kCsSideload); + update_transports(); + } else { + D("setting connection_state to kCsHost"); +- t->connection_state = kCsHost; ++ t->SetConnectionState(kCsHost); + } + } + + static void handle_new_connection(atransport* t, apacket* p) { +- if (t->connection_state != kCsOffline) { +- t->connection_state = kCsOffline; ++ if (t->GetConnectionState() != kCsOffline) { ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + } + +@@ -355,10 +368,10 @@ void handle_packet(apacket *p, atransport *t) + if (p->msg.arg0){ + send_packet(p, t); + #if ADB_HOST +- send_connect(t); ++ SendConnectOnHost(t); + #endif + } else { +- t->connection_state = kCsOffline; ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + send_packet(p, t); + } +@@ -372,7 +385,9 @@ void handle_packet(apacket *p, atransport *t) + switch (p->msg.arg0) { + #if ADB_HOST + case ADB_AUTH_TOKEN: +- t->connection_state = kCsUnauthorized; ++ if (t->GetConnectionState() == kCsOffline) { ++ t->SetConnectionState(kCsUnauthorized); ++ } + send_auth_response(p->data, p->msg.data_length, t); + break; + #else +@@ -391,7 +406,7 @@ void handle_packet(apacket *p, atransport *t) + break; + #endif + default: +- t->connection_state = kCsOffline; ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + break; + } +@@ -1034,7 +1049,6 @@ static int SendOkay(int fd, const std::string& s) { + SendProtocolString(fd, s); + return 0; + } +-#endif + + int handle_host_request(const char* service, TransportType type, + const char* serial, int reply_fd, asocket* s) { +@@ -1053,7 +1067,6 @@ int handle_host_request(const char* service, TransportType type, + android::base::quick_exit(0); + } + +-#if ADB_HOST + // "transport:" is used for switching transport with a specified serial number + // "transport-usb:" is used for switching transport to the only USB transport + // "transport-local:" is used for switching transport to the only local transport +@@ -1098,16 +1111,10 @@ int handle_host_request(const char* service, TransportType type, + if (!strcmp(service, "reconnect-offline")) { + std::string response; + close_usb_devices([&response](const atransport* transport) { +- switch (transport->connection_state) { ++ switch (transport->GetConnectionState()) { + case kCsOffline: + case kCsUnauthorized: +- response += "reconnecting "; +- if (transport->serial) { +- response += transport->serial; +- } else { +- response += ""; +- } +- response += "\n"; ++ response += "reconnecting " + transport->serial_name() + "\n"; + return true; + default: + return false; +@@ -1131,7 +1138,6 @@ int handle_host_request(const char* service, TransportType type, + return 0; + } + +-#if ADB_HOST + if (!strcmp(service, "host-features")) { + FeatureSet features = supported_features(); + // Abuse features to report libusb status. +@@ -1141,7 +1147,6 @@ int handle_host_request(const char* service, TransportType type, + SendOkay(reply_fd, FeatureSetToString(features)); + return 0; + } +-#endif + + // remove TCP transport + if (!strncmp(service, "disconnect:", 11)) { +@@ -1211,15 +1216,19 @@ int handle_host_request(const char* service, TransportType type, + } + + if (!strcmp(service, "reconnect")) { +- if (s->transport != nullptr) { +- kick_transport(s->transport); ++ std::string response; ++ atransport* t = acquire_one_transport(type, serial, nullptr, &response, true); ++ if (t != nullptr) { ++ kick_transport(t); ++ response = ++ "reconnecting " + t->serial_name() + " [" + t->connection_state_name() + "]\n"; + } +- return SendOkay(reply_fd, "done"); ++ return SendOkay(reply_fd, response); + } +-#endif // ADB_HOST + + int ret = handle_forward_request(service, type, serial, reply_fd); + if (ret >= 0) + return ret - 1; + return -1; + } ++#endif // ADB_HOST +diff --git a/adb/adb.h b/adb/adb.h +index aea5fb86b..e3675d844 100644 +--- a/adb/adb.h ++++ b/adb/adb.h +@@ -139,7 +139,7 @@ int adb_server_main(int is_daemon, const std::string& socket_spec, int ack_reply + int get_available_local_transport_index(); + #endif + int init_socket_transport(atransport *t, int s, int port, int local); +-void init_usb_transport(atransport *t, usb_handle *usb, ConnectionState state); ++void init_usb_transport(atransport* t, usb_handle* usb); + + std::string getEmulatorSerialString(int console_port); + #if ADB_HOST +@@ -222,6 +222,9 @@ void handle_online(atransport *t); + void handle_offline(atransport *t); + + void send_connect(atransport *t); ++#if ADB_HOST ++void SendConnectOnHost(atransport* t); ++#endif + + void parse_banner(const std::string&, atransport* t); + +diff --git a/adb/adb_client.cpp b/adb/adb_client.cpp +index ef52189f2..ff9b32a13 100644 +--- a/adb/adb_client.cpp ++++ b/adb/adb_client.cpp +@@ -136,8 +136,7 @@ int _adb_connect(const std::string& service, std::string* error) { + return -2; + } + +- if ((memcmp(&service[0],"host",4) != 0 || service == "host:reconnect") && +- switch_socket_transport(fd, error)) { ++ if (memcmp(&service[0], "host", 4) != 0 && switch_socket_transport(fd, error)) { + return -1; + } + +@@ -147,11 +146,9 @@ int _adb_connect(const std::string& service, std::string* error) { + return -1; + } + +- if (service != "reconnect") { +- if (!adb_status(fd, error)) { +- adb_close(fd); +- return -1; +- } ++ if (!adb_status(fd, error)) { ++ adb_close(fd); ++ return -1; + } + + D("_adb_connect: return fd %d", fd); +diff --git a/adb/adb_trace.cpp b/adb/adb_trace.cpp +index c369d6077..eac923d4d 100644 +--- a/adb/adb_trace.cpp ++++ b/adb/adb_trace.cpp +@@ -155,7 +155,7 @@ void adb_trace_init(char** argv) { + } + #endif + +-#if !defined(_WIN32) ++#if ADB_HOST && !defined(_WIN32) + // adb historically ignored $ANDROID_LOG_TAGS but passed it through to logcat. + // If set, move it out of the way so that libbase logging doesn't try to parse it. + std::string log_tags; +@@ -168,7 +168,7 @@ void adb_trace_init(char** argv) { + + android::base::InitLogging(argv, &AdbLogger); + +-#if !defined(_WIN32) ++#if ADB_HOST && !defined(_WIN32) + // Put $ANDROID_LOG_TAGS back so we can pass it to logcat. + if (!log_tags.empty()) setenv("ANDROID_LOG_TAGS", log_tags.c_str(), 1); + #endif +diff --git a/adb/adb_trace.h b/adb/adb_trace.h +index aaffa2967..fc6560cfb 100644 +--- a/adb/adb_trace.h ++++ b/adb/adb_trace.h +@@ -58,6 +58,9 @@ extern int adb_trace_mask; + void adb_trace_init(char**); + void adb_trace_enable(AdbTrace trace_tag); + ++// Include before stdatomic.h (introduced in cutils/trace.h) to avoid compile error. ++#include ++ + #define ATRACE_TAG ATRACE_TAG_ADB + #include + #include +diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp +index c48a2517b..fec4742b2 100644 +--- a/adb/client/usb_libusb.cpp ++++ b/adb/client/usb_libusb.cpp +@@ -62,12 +62,11 @@ struct DeviceHandleDeleter { + using unique_device_handle = std::unique_ptr; + + struct transfer_info { +- transfer_info(const char* name, uint16_t zero_mask) : +- name(name), +- transfer(libusb_alloc_transfer(0)), +- zero_mask(zero_mask) +- { +- } ++ transfer_info(const char* name, uint16_t zero_mask, bool is_bulk_out) ++ : name(name), ++ transfer(libusb_alloc_transfer(0)), ++ is_bulk_out(is_bulk_out), ++ zero_mask(zero_mask) {} + + ~transfer_info() { + libusb_free_transfer(transfer); +@@ -75,6 +74,7 @@ struct transfer_info { + + const char* name; + libusb_transfer* transfer; ++ bool is_bulk_out; + bool transfer_complete; + std::condition_variable cv; + std::mutex mutex; +@@ -96,12 +96,11 @@ struct usb_handle : public ::usb_handle { + serial(serial), + closing(false), + device_handle(device_handle.release()), +- read("read", zero_mask), +- write("write", zero_mask), ++ read("read", zero_mask, false), ++ write("write", zero_mask, true), + interface(interface), + bulk_in(bulk_in), +- bulk_out(bulk_out) { +- } ++ bulk_out(bulk_out) {} + + ~usb_handle() { + Close(); +@@ -365,11 +364,6 @@ void usb_init() { + device_poll_thread = new std::thread(poll_for_devices); + android::base::at_quick_exit([]() { + terminate_device_poll_thread = true; +- std::unique_lock lock(usb_handles_mutex); +- for (auto& it : usb_handles) { +- it.second->Close(); +- } +- lock.unlock(); + device_poll_thread->join(); + }); + } +@@ -397,7 +391,8 @@ static int perform_usb_transfer(usb_handle* h, transfer_info* info, + return; + } + +- if (transfer->actual_length != transfer->length) { ++ // usb_read() can return when receiving some data. ++ if (info->is_bulk_out && transfer->actual_length != transfer->length) { + LOG(DEBUG) << info->name << " transfer incomplete, resubmitting"; + transfer->length -= transfer->actual_length; + transfer->buffer += transfer->actual_length; +@@ -491,8 +486,12 @@ int usb_read(usb_handle* h, void* d, int len) { + info->transfer->num_iso_packets = 0; + + int rc = perform_usb_transfer(h, info, std::move(lock)); +- LOG(DEBUG) << "usb_read(" << len << ") = " << rc; +- return rc; ++ LOG(DEBUG) << "usb_read(" << len << ") = " << rc << ", actual_length " ++ << info->transfer->actual_length; ++ if (rc < 0) { ++ return rc; ++ } ++ return info->transfer->actual_length; + } + + int usb_close(usb_handle* h) { +diff --git a/adb/client/usb_linux.cpp b/adb/client/usb_linux.cpp +index 3a45dbd71..6efed274b 100644 +--- a/adb/client/usb_linux.cpp ++++ b/adb/client/usb_linux.cpp +@@ -401,7 +401,6 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) { + } + } + +- + int usb_write(usb_handle *h, const void *_data, int len) + { + D("++ usb_write ++"); +@@ -429,19 +428,16 @@ int usb_read(usb_handle *h, void *_data, int len) + int n; + + D("++ usb_read ++"); +- while(len > 0) { ++ int orig_len = len; ++ while (len == orig_len) { + int xfer = len; + + D("[ usb read %d fd = %d], path=%s", xfer, h->fd, h->path.c_str()); + n = usb_bulk_read(h, data, xfer); + D("[ usb read %d ] = %d, path=%s", xfer, n, h->path.c_str()); +- if(n != xfer) { ++ if (n <= 0) { + if((errno == ETIMEDOUT) && (h->fd != -1)) { + D("[ timeout ]"); +- if(n > 0){ +- data += n; +- len -= n; +- } + continue; + } + D("ERROR: n = %d, errno = %d (%s)", +@@ -449,12 +445,12 @@ int usb_read(usb_handle *h, void *_data, int len) + return -1; + } + +- len -= xfer; +- data += xfer; ++ len -= n; ++ data += n; + } + + D("-- usb_read --"); +- return 0; ++ return orig_len - len; + } + + void usb_kick(usb_handle* h) { +diff --git a/adb/client/usb_osx.cpp b/adb/client/usb_osx.cpp +index 8713b2c4b..fcd0bc044 100644 +--- a/adb/client/usb_osx.cpp ++++ b/adb/client/usb_osx.cpp +@@ -518,7 +518,7 @@ int usb_read(usb_handle *handle, void *buf, int len) + } + + if (kIOReturnSuccess == result) +- return 0; ++ return numBytes; + else { + LOG(ERROR) << "usb_read failed with status: " << std::hex << result; + } +diff --git a/adb/client/usb_windows.cpp b/adb/client/usb_windows.cpp +index 9e00a5d6c..ee7f8024f 100644 +--- a/adb/client/usb_windows.cpp ++++ b/adb/client/usb_windows.cpp +@@ -415,6 +415,7 @@ int usb_read(usb_handle *handle, void* data, int len) { + unsigned long time_out = 0; + unsigned long read = 0; + int err = 0; ++ int orig_len = len; + + D("usb_read %d", len); + if (NULL == handle) { +@@ -423,9 +424,8 @@ int usb_read(usb_handle *handle, void* data, int len) { + goto fail; + } + +- while (len > 0) { +- if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, +- time_out)) { ++ while (len == orig_len) { ++ if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, time_out)) { + D("AdbReadEndpointSync failed: %s", + android::base::SystemErrorCodeToString(GetLastError()).c_str()); + err = EIO; +@@ -433,11 +433,11 @@ int usb_read(usb_handle *handle, void* data, int len) { + } + D("usb_read got: %ld, expected: %d", read, len); + +- data = (char *)data + read; ++ data = (char*)data + read; + len -= read; + } + +- return 0; ++ return orig_len - len; + + fail: + // Any failure should cause us to kick the device instead of leaving it a +diff --git a/adb/commandline.cpp b/adb/commandline.cpp +index 7702b0edf..33456bffc 100644 +--- a/adb/commandline.cpp ++++ b/adb/commandline.cpp +@@ -212,6 +212,7 @@ static void help() { + " kill-server kill the server if it is running\n" + " reconnect kick connection from host side to force reconnect\n" + " reconnect device kick connection from device side to force reconnect\n" ++ " reconnect offline reset offline/unauthorized devices to force reconnect\n" + "\n" + "environment variables:\n" + " $ADB_TRACE\n" +@@ -1947,7 +1948,7 @@ int adb_commandline(int argc, const char** argv) { + return adb_query_command("host:host-features"); + } else if (!strcmp(argv[0], "reconnect")) { + if (argc == 1) { +- return adb_query_command("host:reconnect"); ++ return adb_query_command(format_host_command(argv[0], transport_type, serial)); + } else if (argc == 2) { + if (!strcmp(argv[1], "device")) { + std::string err; +diff --git a/adb/fdevent.cpp b/adb/fdevent.cpp +index 04cd8651c..72c9eef42 100644 +--- a/adb/fdevent.cpp ++++ b/adb/fdevent.cpp +@@ -75,13 +75,13 @@ static std::atomic terminate_loop(false); + static bool main_thread_valid; + static unsigned long main_thread_id; + +-static void check_main_thread() { ++void check_main_thread() { + if (main_thread_valid) { + CHECK_EQ(main_thread_id, adb_thread_id()); + } + } + +-static void set_main_thread() { ++void set_main_thread() { + main_thread_valid = true; + main_thread_id = adb_thread_id(); + } +diff --git a/adb/fdevent.h b/adb/fdevent.h +index 207f9b702..e32845afc 100644 +--- a/adb/fdevent.h ++++ b/adb/fdevent.h +@@ -76,9 +76,12 @@ void fdevent_set_timeout(fdevent *fde, int64_t timeout_ms); + */ + void fdevent_loop(); + ++void check_main_thread(); ++ + // The following functions are used only for tests. + void fdevent_terminate_loop(); + size_t fdevent_installed_count(); + void fdevent_reset(); ++void set_main_thread(); + + #endif +diff --git a/adb/services.cpp b/adb/services.cpp +index f764c52cc..dbf163d5b 100644 +--- a/adb/services.cpp ++++ b/adb/services.cpp +@@ -347,7 +347,7 @@ static void wait_for_state(int fd, void* data) { + std::string error = "unknown error"; + const char* serial = sinfo->serial.length() ? sinfo->serial.c_str() : NULL; + atransport* t = acquire_one_transport(sinfo->transport_type, serial, &is_ambiguous, &error); +- if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->connection_state)) { ++ if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->GetConnectionState())) { + SendOkay(fd); + break; + } else if (!is_ambiguous) { +diff --git a/adb/sockets.cpp b/adb/sockets.cpp +index c05903f9e..04290a6e1 100644 +--- a/adb/sockets.cpp ++++ b/adb/sockets.cpp +@@ -794,7 +794,7 @@ static int smart_socket_enqueue(asocket* s, apacket* p) { + if (!s->transport) { + SendFail(s->peer->fd, "device offline (no transport)"); + goto fail; +- } else if (s->transport->connection_state == kCsOffline) { ++ } else if (s->transport->GetConnectionState() == kCsOffline) { + /* if there's no remote we fail the connection + ** right here and terminate it + */ +diff --git a/adb/test_device.py b/adb/test_device.py +index e76aaed5c..a30972e54 100644 +--- a/adb/test_device.py ++++ b/adb/test_device.py +@@ -1188,6 +1188,77 @@ class FileOperationsTest(DeviceTest): + self.device.shell(['rm', '-f', '/data/local/tmp/adb-test-*']) + + ++class DeviceOfflineTest(DeviceTest): ++ def _get_device_state(self, serialno): ++ output = subprocess.check_output(self.device.adb_cmd + ['devices']) ++ for line in output.split('\n'): ++ m = re.match('(\S+)\s+(\S+)', line) ++ if m and m.group(1) == serialno: ++ return m.group(2) ++ return None ++ ++ def test_killed_when_pushing_a_large_file(self): ++ """ ++ While running adb push with a large file, kill adb server. ++ Occasionally the device becomes offline. Because the device is still ++ reading data without realizing that the adb server has been restarted. ++ Test if we can bring the device online automatically now. ++ http://b/32952319 ++ """ ++ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() ++ # 1. Push a large file ++ file_path = 'tmp_large_file' ++ try: ++ fh = open(file_path, 'w') ++ fh.write('\0' * (100 * 1024 * 1024)) ++ fh.close() ++ subproc = subprocess.Popen(self.device.adb_cmd + ['push', file_path, '/data/local/tmp']) ++ time.sleep(0.1) ++ # 2. Kill the adb server ++ subprocess.check_call(self.device.adb_cmd + ['kill-server']) ++ subproc.terminate() ++ finally: ++ try: ++ os.unlink(file_path) ++ except: ++ pass ++ # 3. See if the device still exist. ++ # Sleep to wait for the adb server exit. ++ time.sleep(0.5) ++ # 4. The device should be online ++ self.assertEqual(self._get_device_state(serialno), 'device') ++ ++ def test_killed_when_pulling_a_large_file(self): ++ """ ++ While running adb pull with a large file, kill adb server. ++ Occasionally the device can't be connected. Because the device is trying to ++ send a message larger than what is expected by the adb server. ++ Test if we can bring the device online automatically now. ++ """ ++ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() ++ file_path = 'tmp_large_file' ++ try: ++ # 1. Create a large file on device. ++ self.device.shell(['dd', 'if=/dev/zero', 'of=/data/local/tmp/tmp_large_file', ++ 'bs=1000000', 'count=100']) ++ # 2. Pull the large file on host. ++ subproc = subprocess.Popen(self.device.adb_cmd + ++ ['pull','/data/local/tmp/tmp_large_file', file_path]) ++ time.sleep(0.1) ++ # 3. Kill the adb server ++ subprocess.check_call(self.device.adb_cmd + ['kill-server']) ++ subproc.terminate() ++ finally: ++ try: ++ os.unlink(file_path) ++ except: ++ pass ++ # 4. See if the device still exist. ++ # Sleep to wait for the adb server exit. ++ time.sleep(0.5) ++ self.assertEqual(self._get_device_state(serialno), 'device') ++ ++ + def main(): + random.seed(0) + if len(adb.get_devices()) > 0: +diff --git a/adb/transport.cpp b/adb/transport.cpp +index 4686841ec..cc8c16252 100644 +--- a/adb/transport.cpp ++++ b/adb/transport.cpp +@@ -33,6 +33,7 @@ + + #include + #include ++#include + #include + #include + +@@ -41,6 +42,7 @@ + #include "adb_trace.h" + #include "adb_utils.h" + #include "diagnose_usb.h" ++#include "fdevent.h" + + static void transport_unref(atransport *t); + +@@ -209,6 +211,11 @@ static void read_transport_thread(void* _t) { + put_apacket(p); + break; + } ++#if ADB_HOST ++ if (p->msg.command == 0) { ++ continue; ++ } ++#endif + } + + D("%s: received remote packet, sending to transport", t->serial); +@@ -271,7 +278,11 @@ static void write_transport_thread(void* _t) { + if (active) { + D("%s: transport got packet, sending to remote", t->serial); + ATRACE_NAME("write_transport write_remote"); +- t->write_to_remote(p, t); ++ if (t->Write(p) != 0) { ++ D("%s: remote write failed for transport", t->serial); ++ put_apacket(p); ++ break; ++ } + } else { + D("%s: transport ignoring packet while offline", t->serial); + } +@@ -493,7 +504,7 @@ static void transport_registration_func(int _fd, unsigned ev, void* data) { + } + + /* don't create transport threads for inaccessible devices */ +- if (t->connection_state != kCsNoPerm) { ++ if (t->GetConnectionState() != kCsNoPerm) { + /* initial references are the two threads */ + t->ref_count = 2; + +@@ -538,6 +549,15 @@ void init_transport_registration(void) { + transport_registration_func, 0); + + fdevent_set(&transport_registration_fde, FDE_READ); ++#if ADB_HOST ++ android::base::at_quick_exit([]() { ++ // To avoid only writing part of a packet to a transport after exit, kick all transports. ++ std::lock_guard lock(transport_lock); ++ for (auto t : transport_list) { ++ t->Kick(); ++ } ++ }); ++#endif + } + + /* the fdevent select pump is single threaded */ +@@ -600,7 +620,7 @@ static int qual_match(const char* to_test, const char* prefix, const char* qual, + } + + atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, +- std::string* error_out) { ++ std::string* error_out, bool accept_any_state) { + atransport* result = nullptr; + + if (serial) { +@@ -615,7 +635,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + + std::unique_lock lock(transport_lock); + for (const auto& t : transport_list) { +- if (t->connection_state == kCsNoPerm) { ++ if (t->GetConnectionState() == kCsNoPerm) { + #if ADB_HOST + *error_out = UsbNoPermissionsLongHelpText(); + #endif +@@ -664,7 +684,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + lock.unlock(); + + // Don't return unauthorized devices; the caller can't do anything with them. +- if (result && result->connection_state == kCsUnauthorized) { ++ if (result && result->GetConnectionState() == kCsUnauthorized && !accept_any_state) { + *error_out = "device unauthorized.\n"; + char* ADB_VENDOR_KEYS = getenv("ADB_VENDOR_KEYS"); + *error_out += "This adb server's $ADB_VENDOR_KEYS is "; +@@ -676,7 +696,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + } + + // Don't return offline devices; the caller can't do anything with them. +- if (result && result->connection_state == kCsOffline) { ++ if (result && result->GetConnectionState() == kCsOffline && !accept_any_state) { + *error_out = "device offline"; + result = nullptr; + } +@@ -688,16 +708,38 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + return result; + } + ++int atransport::Write(apacket* p) { ++#if ADB_HOST ++ std::lock_guard lock(write_msg_lock_); ++#endif ++ return write_func_(p, this); ++} ++ + void atransport::Kick() { + if (!kicked_) { + kicked_ = true; + CHECK(kick_func_ != nullptr); ++#if ADB_HOST ++ // On host, adb server should avoid writing part of a packet, so don't ++ // kick a transport whiling writing a packet. ++ std::lock_guard lock(write_msg_lock_); ++#endif + kick_func_(this); + } + } + ++ConnectionState atransport::GetConnectionState() const { ++ return connection_state_; ++} ++ ++void atransport::SetConnectionState(ConnectionState state) { ++ check_main_thread(); ++ connection_state_ = state; ++} ++ + const std::string atransport::connection_state_name() const { +- switch (connection_state) { ++ ConnectionState state = GetConnectionState(); ++ switch (state) { + case kCsOffline: + return "offline"; + case kCsBootloader: +@@ -963,10 +1005,10 @@ void kick_all_tcp_devices() { + + void register_usb_transport(usb_handle* usb, const char* serial, const char* devpath, + unsigned writeable) { +- atransport* t = new atransport(); ++ atransport* t = new atransport((writeable ? kCsOffline : kCsNoPerm)); + + D("transport: %p init'ing for usb_handle %p (sn='%s')", t, usb, serial ? serial : ""); +- init_usb_transport(t, usb, (writeable ? kCsOffline : kCsNoPerm)); ++ init_usb_transport(t, usb); + if (serial) { + t->serial = strdup(serial); + } +@@ -987,12 +1029,13 @@ void register_usb_transport(usb_handle* usb, const char* serial, const char* dev + void unregister_usb_transport(usb_handle* usb) { + std::lock_guard lock(transport_lock); + transport_list.remove_if( +- [usb](atransport* t) { return t->usb == usb && t->connection_state == kCsNoPerm; }); ++ [usb](atransport* t) { return t->usb == usb && t->GetConnectionState() == kCsNoPerm; }); + } + + int check_header(apacket* p, atransport* t) { + if (p->msg.magic != (p->msg.command ^ 0xffffffff)) { +- VLOG(RWX) << "check_header(): invalid magic"; ++ VLOG(RWX) << "check_header(): invalid magic command = " << std::hex << p->msg.command ++ << ", magic = " << p->msg.magic; + return -1; + } + +@@ -1020,4 +1063,11 @@ std::shared_ptr atransport::NextKey() { + keys_.pop_front(); + return result; + } ++bool atransport::SetSendConnectOnError() { ++ if (has_send_connect_on_error_) { ++ return false; ++ } ++ has_send_connect_on_error_ = true; ++ return true; ++} + #endif +diff --git a/adb/transport.h b/adb/transport.h +index 4d97fc78b..8c15d663d 100644 +--- a/adb/transport.h ++++ b/adb/transport.h +@@ -19,10 +19,12 @@ + + #include + ++#include + #include + #include + #include + #include ++#include + #include + #include + +@@ -57,31 +59,35 @@ public: + // class in one go is a very large change. Given how bad our testing is, + // it's better to do this piece by piece. + +- atransport() { ++ atransport(ConnectionState state = kCsOffline) : connection_state_(state) { + transport_fde = {}; + protocol_version = A_VERSION; + max_payload = MAX_PAYLOAD; + } +- + virtual ~atransport() {} + + int (*read_from_remote)(apacket* p, atransport* t) = nullptr; +- int (*write_to_remote)(apacket* p, atransport* t) = nullptr; + void (*close)(atransport* t) = nullptr; ++ ++ void SetWriteFunction(int (*write_func)(apacket*, atransport*)) { write_func_ = write_func; } + void SetKickFunction(void (*kick_func)(atransport*)) { + kick_func_ = kick_func; + } + bool IsKicked() { + return kicked_; + } ++ int Write(apacket* p); + void Kick(); + ++ // ConnectionState can be read by all threads, but can only be written in the main thread. ++ ConnectionState GetConnectionState() const; ++ void SetConnectionState(ConnectionState state); ++ + int fd = -1; + int transport_socket = -1; + fdevent transport_fde; + size_t ref_count = 0; + uint32_t sync_token = 0; +- ConnectionState connection_state = kCsOffline; + bool online = false; + TransportType type = kTransportAny; + +@@ -114,11 +120,13 @@ public: + + #if ADB_HOST + std::shared_ptr NextKey(); ++ bool SetSendConnectOnError(); + #endif + + char token[TOKEN_SIZE] = {}; + size_t failed_auth_attempts = 0; + ++ const std::string serial_name() const { return serial ? serial : ""; } + const std::string connection_state_name() const; + + void update_version(int version, size_t payload); +@@ -157,6 +165,7 @@ private: + int local_port_for_emulator_ = -1; + bool kicked_ = false; + void (*kick_func_)(atransport*) = nullptr; ++ int (*write_func_)(apacket*, atransport*) = nullptr; + + // A set of features transmitted in the banner with the initial connection. + // This is stored in the banner as 'features=feature0,feature1,etc'. +@@ -167,8 +176,11 @@ private: + // A list of adisconnect callbacks called when the transport is kicked. + std::list disconnects_; + ++ std::atomic connection_state_; + #if ADB_HOST + std::deque> keys_; ++ std::mutex write_msg_lock_; ++ bool has_send_connect_on_error_ = false; + #endif + + DISALLOW_COPY_AND_ASSIGN(atransport); +@@ -181,8 +193,8 @@ private: + * is set to true and nullptr returned. + * If no suitable transport is found, error is set and nullptr returned. + */ +-atransport* acquire_one_transport(TransportType type, const char* serial, +- bool* is_ambiguous, std::string* error_out); ++atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, ++ std::string* error_out, bool accept_any_state = false); + void kick_transport(atransport* t); + void update_transports(void); + +diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp +index 408f51fa1..3ee286a12 100644 +--- a/adb/transport_local.cpp ++++ b/adb/transport_local.cpp +@@ -515,12 +515,11 @@ int init_socket_transport(atransport *t, int s, int adb_port, int local) + int fail = 0; + + t->SetKickFunction(remote_kick); ++ t->SetWriteFunction(remote_write); + t->close = remote_close; + t->read_from_remote = remote_read; +- t->write_to_remote = remote_write; + t->sfd = s; + t->sync_token = 1; +- t->connection_state = kCsOffline; + t->type = kTransportLocal; + + #if ADB_HOST +diff --git a/adb/transport_test.cpp b/adb/transport_test.cpp +index 8b38e0334..68689d4a6 100644 +--- a/adb/transport_test.cpp ++++ b/adb/transport_test.cpp +@@ -94,12 +94,13 @@ TEST(transport, SetFeatures) { + } + + TEST(transport, parse_banner_no_features) { ++ set_main_thread(); + atransport t; + + parse_banner("host::", &t); + + ASSERT_EQ(0U, t.features().size()); +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(nullptr, t.product); + ASSERT_EQ(nullptr, t.model); +@@ -113,7 +114,7 @@ TEST(transport, parse_banner_product_features) { + "host::ro.product.name=foo;ro.product.model=bar;ro.product.device=baz;"; + parse_banner(banner, &t); + +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(0U, t.features().size()); + +@@ -130,7 +131,7 @@ TEST(transport, parse_banner_features) { + "features=woodly,doodly"; + parse_banner(banner, &t); + +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(2U, t.features().size()); + ASSERT_TRUE(t.has_feature("woodly")); +diff --git a/adb/transport_usb.cpp b/adb/transport_usb.cpp +index 516b4f20d..ce419b88d 100644 +--- a/adb/transport_usb.cpp ++++ b/adb/transport_usb.cpp +@@ -25,9 +25,115 @@ + + #include "adb.h" + ++#if ADB_HOST ++ ++static constexpr size_t MAX_USB_BULK_PACKET_SIZE = 1024u; ++ ++// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes ++// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. ++static int UsbReadMessage(usb_handle* h, amessage* msg) { ++ D("UsbReadMessage"); ++ char buffer[MAX_USB_BULK_PACKET_SIZE]; ++ int n = usb_read(h, buffer, sizeof(buffer)); ++ if (n == sizeof(*msg)) { ++ memcpy(msg, buffer, sizeof(*msg)); ++ } ++ return n; ++} ++ ++// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes ++// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. ++static int UsbReadPayload(usb_handle* h, apacket* p) { ++ D("UsbReadPayload"); ++ size_t need_size = p->msg.data_length; ++ size_t data_pos = 0u; ++ while (need_size > 0u) { ++ int n = 0; ++ if (data_pos + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { ++ // Read directly to p->data. ++ size_t rem_size = need_size % MAX_USB_BULK_PACKET_SIZE; ++ size_t direct_read_size = need_size - rem_size; ++ if (rem_size && ++ data_pos + direct_read_size + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { ++ direct_read_size += MAX_USB_BULK_PACKET_SIZE; ++ } ++ n = usb_read(h, &p->data[data_pos], direct_read_size); ++ if (n < 0) { ++ D("usb_read(size %zu) failed", direct_read_size); ++ return n; ++ } ++ } else { ++ // Read indirectly using a buffer. ++ char buffer[MAX_USB_BULK_PACKET_SIZE]; ++ n = usb_read(h, buffer, sizeof(buffer)); ++ if (n < 0) { ++ D("usb_read(size %zu) failed", sizeof(buffer)); ++ return -1; ++ } ++ size_t copy_size = std::min(static_cast(n), need_size); ++ D("usb read %d bytes, need %zu bytes, copy %zu bytes", n, need_size, copy_size); ++ memcpy(&p->data[data_pos], buffer, copy_size); ++ } ++ data_pos += n; ++ need_size -= std::min(static_cast(n), need_size); ++ } ++ return static_cast(data_pos); ++} ++ ++static int remote_read(apacket* p, atransport* t) { ++ int n = UsbReadMessage(t->usb, &p->msg); ++ if (n < 0) { ++ D("remote usb: read terminated (message)"); ++ return -1; ++ } ++ if (static_cast(n) != sizeof(p->msg) || check_header(p, t)) { ++ D("remote usb: check_header failed, skip it"); ++ goto err_msg; ++ } ++ if (t->GetConnectionState() == kCsOffline) { ++ // If we read a wrong msg header declaring a large message payload, don't read its payload. ++ // Otherwise we may miss true messages from the device. ++ if (p->msg.command != A_CNXN && p->msg.command != A_AUTH) { ++ goto err_msg; ++ } ++ } ++ if (p->msg.data_length) { ++ n = UsbReadPayload(t->usb, p); ++ if (n < 0) { ++ D("remote usb: terminated (data)"); ++ return -1; ++ } ++ if (static_cast(n) != p->msg.data_length) { ++ D("remote usb: read payload failed (need %u bytes, give %d bytes), skip it", ++ p->msg.data_length, n); ++ goto err_msg; ++ } ++ } ++ if (check_data(p)) { ++ D("remote usb: check_data failed, skip it"); ++ goto err_msg; ++ } ++ return 0; ++ ++err_msg: ++ p->msg.command = 0; ++ if (t->GetConnectionState() == kCsOffline) { ++ // If the data toggle of ep_out on device and ep_in on host are not the same, we may receive ++ // an error message. In this case, resend one A_CNXN message to connect the device. ++ if (t->SetSendConnectOnError()) { ++ SendConnectOnHost(t); ++ } ++ } ++ return 0; ++} ++ ++#else ++ ++// On Android devices, we rely on the kernel to provide buffered read. ++// So we can recover automatically from EOVERFLOW. + static int remote_read(apacket *p, atransport *t) + { +- if(usb_read(t->usb, &p->msg, sizeof(amessage))){ ++ if (usb_read(t->usb, &p->msg, sizeof(amessage))) { + D("remote usb: read terminated (message)"); + return -1; + } +@@ -38,7 +144,7 @@ static int remote_read(apacket *p, atransport *t) + } + + if(p->msg.data_length) { +- if(usb_read(t->usb, p->data, p->msg.data_length)){ ++ if (usb_read(t->usb, p->data, p->msg.data_length)) { + D("remote usb: terminated (data)"); + return -1; + } +@@ -51,17 +157,18 @@ static int remote_read(apacket *p, atransport *t) + + return 0; + } ++#endif + + static int remote_write(apacket *p, atransport *t) + { + unsigned size = p->msg.data_length; + +- if(usb_write(t->usb, &p->msg, sizeof(amessage))) { ++ if (usb_write(t->usb, &p->msg, sizeof(amessage))) { + D("remote usb: 1 - write terminated"); + return -1; + } + if(p->msg.data_length == 0) return 0; +- if(usb_write(t->usb, &p->data, size)) { ++ if (usb_write(t->usb, &p->data, size)) { + D("remote usb: 2 - write terminated"); + return -1; + } +@@ -75,20 +182,17 @@ static void remote_close(atransport *t) + t->usb = 0; + } + +-static void remote_kick(atransport *t) +-{ ++static void remote_kick(atransport* t) { + usb_kick(t->usb); + } + +-void init_usb_transport(atransport *t, usb_handle *h, ConnectionState state) +-{ ++void init_usb_transport(atransport* t, usb_handle* h) { + D("transport: usb"); + t->close = remote_close; + t->SetKickFunction(remote_kick); ++ t->SetWriteFunction(remote_write); + t->read_from_remote = remote_read; +- t->write_to_remote = remote_write; + t->sync_token = 1; +- t->connection_state = state; + t->type = kTransportUsb; + t->usb = h; + } +-- +2.14.3 + diff --git a/android-tools.spec b/android-tools.spec index ebf4e4d..b219e17 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,7 +14,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 6%{?dist} +Release: 7%{?dist} Summary: Android platform tools(adb, fastboot) Group: Applications/System @@ -45,6 +45,9 @@ Patch1: 0001-Add-string-h.patch Patch2: 0002-libusb-modifications.patch Patch3: 0003-atomic-fix.patch Patch4: 0004-bz1441234.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1470740 +Patch5: 0001-adb-don-t-reset-usb-when-connecting-it.patch +Patch6: 0001-adb-fix-two-device-offline-problems.patch Requires(post): systemd Requires(preun): systemd @@ -98,6 +101,8 @@ setup between the host and the target phone as adb. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 cp -p %{SOURCE5} 51-android.rules @@ -134,6 +139,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Tue Feb 27 2018 Bastien Nocera - 20170311gite7195be7725a-7 +- Fix USB resets when adb daemon is started (#1470740) + * Wed Feb 07 2018 Fedora Release Engineering - 20170311gite7195be7725a-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From ffec8d10fab41b4d814a1f414f7ad42d3e16bd97 Mon Sep 17 00:00:00 2001 From: Bastien Nocera Date: Tue, 27 Feb 2018 19:11:05 +0100 Subject: [PATCH 02/71] Fix USB resets when adb daemon is started (#1470740) --- ...b-don-t-reset-usb-when-connecting-it.patch | 40 + ...-adb-fix-two-device-offline-problems.patch | 1189 +++++++++++++++++ android-tools.spec | 10 +- 3 files changed, 1238 insertions(+), 1 deletion(-) create mode 100644 0001-adb-don-t-reset-usb-when-connecting-it.patch create mode 100644 0001-adb-fix-two-device-offline-problems.patch diff --git a/0001-adb-don-t-reset-usb-when-connecting-it.patch b/0001-adb-don-t-reset-usb-when-connecting-it.patch new file mode 100644 index 0000000..029471e --- /dev/null +++ b/0001-adb-don-t-reset-usb-when-connecting-it.patch @@ -0,0 +1,40 @@ +From 5d002b8d6ae0a1eeefe09309ae6687a16e82ed08 Mon Sep 17 00:00:00 2001 +From: Yabin Cui +Date: Tue, 4 Apr 2017 10:29:21 -0700 +Subject: [PATCH] adb: don't reset usb when connecting it. + +Calling libusb_reset_device() resets the usb connection with device +on linux platform. It can interfere with other usb interfaces and only +works on linux. +Removing it only affects when adb server is killed while doing IO with +device, which will be solved in later patches. + +Bug: http://b/32952319 +Test: none +Change-Id: I19522435eadd938ff95d49cbae3bcaa5c8f6d184 +--- + adb/client/usb_libusb.cpp | 8 -------- + 1 file changed, 8 deletions(-) + +diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp +index 7adb26213..c48a2517b 100644 +--- a/adb/client/usb_libusb.cpp ++++ b/adb/client/usb_libusb.cpp +@@ -306,14 +306,6 @@ static void poll_for_devices() { + } + device_serial.resize(rc); + +- // Try to reset the device. +- rc = libusb_reset_device(handle_raw); +- if (rc != 0) { +- LOG(WARNING) << "failed to reset opened device '" << device_serial +- << "': " << libusb_error_name(rc); +- continue; +- } +- + // WARNING: this isn't released via RAII. + rc = libusb_claim_interface(handle.get(), interface_num); + if (rc != 0) { +-- +2.14.3 + diff --git a/0001-adb-fix-two-device-offline-problems.patch b/0001-adb-fix-two-device-offline-problems.patch new file mode 100644 index 0000000..de51974 --- /dev/null +++ b/0001-adb-fix-two-device-offline-problems.patch @@ -0,0 +1,1189 @@ +From b5e11415d9fdb929321c66889063dac50fb737af Mon Sep 17 00:00:00 2001 +From: Yabin Cui +Date: Fri, 10 Mar 2017 16:01:01 -0800 +Subject: [PATCH] adb: fix two device offline problems. + +When device goes offline, user usually has to manually replug the +usb device. This patch tries to solve two offline situations, all +because when adb on host is killed, the adbd on device is not notified. + +1. When adb server is killed while pushing a large file to device, +the device is still reading the unfinished large message. So the +device thinks of the CNXN message as part of the previous unfinished +message, so it doesn't reply and the device is in offline state. + +The solution is to add a write_msg_lock in atransport struct. And it +kicks the transport only after sending a whole message. By kicking +all transports before exit, we ensure that we don't write part of +a message to any device. So next time we start adb server, the device +should be waiting for a new message. + +2. When adb server is killed while pulling a large file from device, +the device is still trying to send the unfinished large message. So +adb on host usually reads data with EOVERFLOW error. This is because +adb on host is reading less than one packet sent from device. + +The solution is to use buffered read on host. The max packet size +of bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least +1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach +adb host to ignore wrong messages. + +To be safe, this patch doesn't change any logic on device. + +Bug: http://b/32952319 +Test: run python -m unittest -q test_device.DeviceOfflineTest +Test: on linux/mac/windows with bullhead, ryu. +Change-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e +--- + adb/adb.cpp | 63 +++++++++++++---------- + adb/adb.h | 5 +- + adb/adb_client.cpp | 11 ++-- + adb/adb_trace.cpp | 4 +- + adb/adb_trace.h | 3 ++ + adb/client/usb_libusb.cpp | 35 +++++++------ + adb/client/usb_linux.cpp | 16 +++--- + adb/client/usb_osx.cpp | 2 +- + adb/client/usb_windows.cpp | 10 ++-- + adb/commandline.cpp | 3 +- + adb/fdevent.cpp | 4 +- + adb/fdevent.h | 3 ++ + adb/services.cpp | 2 +- + adb/sockets.cpp | 2 +- + adb/test_device.py | 71 ++++++++++++++++++++++++++ + adb/transport.cpp | 72 ++++++++++++++++++++++---- + adb/transport.h | 24 ++++++--- + adb/transport_local.cpp | 3 +- + adb/transport_test.cpp | 7 +-- + adb/transport_usb.cpp | 124 +++++++++++++++++++++++++++++++++++++++++---- + 20 files changed, 356 insertions(+), 108 deletions(-) + +diff --git a/adb/adb.cpp b/adb/adb.cpp +index cf6b3593d..33d6bda47 100644 +--- a/adb/adb.cpp ++++ b/adb/adb.cpp +@@ -253,6 +253,19 @@ void send_connect(atransport* t) { + send_packet(cp, t); + } + ++#if ADB_HOST ++ ++void SendConnectOnHost(atransport* t) { ++ // Send an empty message before A_CNXN message. This is because the data toggle of the ep_out on ++ // host and ep_in on device may not be the same. ++ apacket* p = get_apacket(); ++ CHECK(p); ++ send_packet(p, t); ++ send_connect(t); ++} ++ ++#endif ++ + // qual_overwrite is used to overwrite a qualifier string. dst is a + // pointer to a char pointer. It is assumed that if *dst is non-NULL, it + // was malloc'ed and needs to freed. *dst will be set to a dup of src. +@@ -299,29 +312,29 @@ void parse_banner(const std::string& banner, atransport* t) { + const std::string& type = pieces[0]; + if (type == "bootloader") { + D("setting connection_state to kCsBootloader"); +- t->connection_state = kCsBootloader; ++ t->SetConnectionState(kCsBootloader); + update_transports(); + } else if (type == "device") { + D("setting connection_state to kCsDevice"); +- t->connection_state = kCsDevice; ++ t->SetConnectionState(kCsDevice); + update_transports(); + } else if (type == "recovery") { + D("setting connection_state to kCsRecovery"); +- t->connection_state = kCsRecovery; ++ t->SetConnectionState(kCsRecovery); + update_transports(); + } else if (type == "sideload") { + D("setting connection_state to kCsSideload"); +- t->connection_state = kCsSideload; ++ t->SetConnectionState(kCsSideload); + update_transports(); + } else { + D("setting connection_state to kCsHost"); +- t->connection_state = kCsHost; ++ t->SetConnectionState(kCsHost); + } + } + + static void handle_new_connection(atransport* t, apacket* p) { +- if (t->connection_state != kCsOffline) { +- t->connection_state = kCsOffline; ++ if (t->GetConnectionState() != kCsOffline) { ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + } + +@@ -355,10 +368,10 @@ void handle_packet(apacket *p, atransport *t) + if (p->msg.arg0){ + send_packet(p, t); + #if ADB_HOST +- send_connect(t); ++ SendConnectOnHost(t); + #endif + } else { +- t->connection_state = kCsOffline; ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + send_packet(p, t); + } +@@ -372,7 +385,9 @@ void handle_packet(apacket *p, atransport *t) + switch (p->msg.arg0) { + #if ADB_HOST + case ADB_AUTH_TOKEN: +- t->connection_state = kCsUnauthorized; ++ if (t->GetConnectionState() == kCsOffline) { ++ t->SetConnectionState(kCsUnauthorized); ++ } + send_auth_response(p->data, p->msg.data_length, t); + break; + #else +@@ -391,7 +406,7 @@ void handle_packet(apacket *p, atransport *t) + break; + #endif + default: +- t->connection_state = kCsOffline; ++ t->SetConnectionState(kCsOffline); + handle_offline(t); + break; + } +@@ -1034,7 +1049,6 @@ static int SendOkay(int fd, const std::string& s) { + SendProtocolString(fd, s); + return 0; + } +-#endif + + int handle_host_request(const char* service, TransportType type, + const char* serial, int reply_fd, asocket* s) { +@@ -1053,7 +1067,6 @@ int handle_host_request(const char* service, TransportType type, + android::base::quick_exit(0); + } + +-#if ADB_HOST + // "transport:" is used for switching transport with a specified serial number + // "transport-usb:" is used for switching transport to the only USB transport + // "transport-local:" is used for switching transport to the only local transport +@@ -1098,16 +1111,10 @@ int handle_host_request(const char* service, TransportType type, + if (!strcmp(service, "reconnect-offline")) { + std::string response; + close_usb_devices([&response](const atransport* transport) { +- switch (transport->connection_state) { ++ switch (transport->GetConnectionState()) { + case kCsOffline: + case kCsUnauthorized: +- response += "reconnecting "; +- if (transport->serial) { +- response += transport->serial; +- } else { +- response += ""; +- } +- response += "\n"; ++ response += "reconnecting " + transport->serial_name() + "\n"; + return true; + default: + return false; +@@ -1131,7 +1138,6 @@ int handle_host_request(const char* service, TransportType type, + return 0; + } + +-#if ADB_HOST + if (!strcmp(service, "host-features")) { + FeatureSet features = supported_features(); + // Abuse features to report libusb status. +@@ -1141,7 +1147,6 @@ int handle_host_request(const char* service, TransportType type, + SendOkay(reply_fd, FeatureSetToString(features)); + return 0; + } +-#endif + + // remove TCP transport + if (!strncmp(service, "disconnect:", 11)) { +@@ -1211,15 +1216,19 @@ int handle_host_request(const char* service, TransportType type, + } + + if (!strcmp(service, "reconnect")) { +- if (s->transport != nullptr) { +- kick_transport(s->transport); ++ std::string response; ++ atransport* t = acquire_one_transport(type, serial, nullptr, &response, true); ++ if (t != nullptr) { ++ kick_transport(t); ++ response = ++ "reconnecting " + t->serial_name() + " [" + t->connection_state_name() + "]\n"; + } +- return SendOkay(reply_fd, "done"); ++ return SendOkay(reply_fd, response); + } +-#endif // ADB_HOST + + int ret = handle_forward_request(service, type, serial, reply_fd); + if (ret >= 0) + return ret - 1; + return -1; + } ++#endif // ADB_HOST +diff --git a/adb/adb.h b/adb/adb.h +index aea5fb86b..e3675d844 100644 +--- a/adb/adb.h ++++ b/adb/adb.h +@@ -139,7 +139,7 @@ int adb_server_main(int is_daemon, const std::string& socket_spec, int ack_reply + int get_available_local_transport_index(); + #endif + int init_socket_transport(atransport *t, int s, int port, int local); +-void init_usb_transport(atransport *t, usb_handle *usb, ConnectionState state); ++void init_usb_transport(atransport* t, usb_handle* usb); + + std::string getEmulatorSerialString(int console_port); + #if ADB_HOST +@@ -222,6 +222,9 @@ void handle_online(atransport *t); + void handle_offline(atransport *t); + + void send_connect(atransport *t); ++#if ADB_HOST ++void SendConnectOnHost(atransport* t); ++#endif + + void parse_banner(const std::string&, atransport* t); + +diff --git a/adb/adb_client.cpp b/adb/adb_client.cpp +index ef52189f2..ff9b32a13 100644 +--- a/adb/adb_client.cpp ++++ b/adb/adb_client.cpp +@@ -136,8 +136,7 @@ int _adb_connect(const std::string& service, std::string* error) { + return -2; + } + +- if ((memcmp(&service[0],"host",4) != 0 || service == "host:reconnect") && +- switch_socket_transport(fd, error)) { ++ if (memcmp(&service[0], "host", 4) != 0 && switch_socket_transport(fd, error)) { + return -1; + } + +@@ -147,11 +146,9 @@ int _adb_connect(const std::string& service, std::string* error) { + return -1; + } + +- if (service != "reconnect") { +- if (!adb_status(fd, error)) { +- adb_close(fd); +- return -1; +- } ++ if (!adb_status(fd, error)) { ++ adb_close(fd); ++ return -1; + } + + D("_adb_connect: return fd %d", fd); +diff --git a/adb/adb_trace.cpp b/adb/adb_trace.cpp +index c369d6077..eac923d4d 100644 +--- a/adb/adb_trace.cpp ++++ b/adb/adb_trace.cpp +@@ -155,7 +155,7 @@ void adb_trace_init(char** argv) { + } + #endif + +-#if !defined(_WIN32) ++#if ADB_HOST && !defined(_WIN32) + // adb historically ignored $ANDROID_LOG_TAGS but passed it through to logcat. + // If set, move it out of the way so that libbase logging doesn't try to parse it. + std::string log_tags; +@@ -168,7 +168,7 @@ void adb_trace_init(char** argv) { + + android::base::InitLogging(argv, &AdbLogger); + +-#if !defined(_WIN32) ++#if ADB_HOST && !defined(_WIN32) + // Put $ANDROID_LOG_TAGS back so we can pass it to logcat. + if (!log_tags.empty()) setenv("ANDROID_LOG_TAGS", log_tags.c_str(), 1); + #endif +diff --git a/adb/adb_trace.h b/adb/adb_trace.h +index aaffa2967..fc6560cfb 100644 +--- a/adb/adb_trace.h ++++ b/adb/adb_trace.h +@@ -58,6 +58,9 @@ extern int adb_trace_mask; + void adb_trace_init(char**); + void adb_trace_enable(AdbTrace trace_tag); + ++// Include before stdatomic.h (introduced in cutils/trace.h) to avoid compile error. ++#include ++ + #define ATRACE_TAG ATRACE_TAG_ADB + #include + #include +diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp +index c48a2517b..fec4742b2 100644 +--- a/adb/client/usb_libusb.cpp ++++ b/adb/client/usb_libusb.cpp +@@ -62,12 +62,11 @@ struct DeviceHandleDeleter { + using unique_device_handle = std::unique_ptr; + + struct transfer_info { +- transfer_info(const char* name, uint16_t zero_mask) : +- name(name), +- transfer(libusb_alloc_transfer(0)), +- zero_mask(zero_mask) +- { +- } ++ transfer_info(const char* name, uint16_t zero_mask, bool is_bulk_out) ++ : name(name), ++ transfer(libusb_alloc_transfer(0)), ++ is_bulk_out(is_bulk_out), ++ zero_mask(zero_mask) {} + + ~transfer_info() { + libusb_free_transfer(transfer); +@@ -75,6 +74,7 @@ struct transfer_info { + + const char* name; + libusb_transfer* transfer; ++ bool is_bulk_out; + bool transfer_complete; + std::condition_variable cv; + std::mutex mutex; +@@ -96,12 +96,11 @@ struct usb_handle : public ::usb_handle { + serial(serial), + closing(false), + device_handle(device_handle.release()), +- read("read", zero_mask), +- write("write", zero_mask), ++ read("read", zero_mask, false), ++ write("write", zero_mask, true), + interface(interface), + bulk_in(bulk_in), +- bulk_out(bulk_out) { +- } ++ bulk_out(bulk_out) {} + + ~usb_handle() { + Close(); +@@ -365,11 +364,6 @@ void usb_init() { + device_poll_thread = new std::thread(poll_for_devices); + android::base::at_quick_exit([]() { + terminate_device_poll_thread = true; +- std::unique_lock lock(usb_handles_mutex); +- for (auto& it : usb_handles) { +- it.second->Close(); +- } +- lock.unlock(); + device_poll_thread->join(); + }); + } +@@ -397,7 +391,8 @@ static int perform_usb_transfer(usb_handle* h, transfer_info* info, + return; + } + +- if (transfer->actual_length != transfer->length) { ++ // usb_read() can return when receiving some data. ++ if (info->is_bulk_out && transfer->actual_length != transfer->length) { + LOG(DEBUG) << info->name << " transfer incomplete, resubmitting"; + transfer->length -= transfer->actual_length; + transfer->buffer += transfer->actual_length; +@@ -491,8 +486,12 @@ int usb_read(usb_handle* h, void* d, int len) { + info->transfer->num_iso_packets = 0; + + int rc = perform_usb_transfer(h, info, std::move(lock)); +- LOG(DEBUG) << "usb_read(" << len << ") = " << rc; +- return rc; ++ LOG(DEBUG) << "usb_read(" << len << ") = " << rc << ", actual_length " ++ << info->transfer->actual_length; ++ if (rc < 0) { ++ return rc; ++ } ++ return info->transfer->actual_length; + } + + int usb_close(usb_handle* h) { +diff --git a/adb/client/usb_linux.cpp b/adb/client/usb_linux.cpp +index 3a45dbd71..6efed274b 100644 +--- a/adb/client/usb_linux.cpp ++++ b/adb/client/usb_linux.cpp +@@ -401,7 +401,6 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) { + } + } + +- + int usb_write(usb_handle *h, const void *_data, int len) + { + D("++ usb_write ++"); +@@ -429,19 +428,16 @@ int usb_read(usb_handle *h, void *_data, int len) + int n; + + D("++ usb_read ++"); +- while(len > 0) { ++ int orig_len = len; ++ while (len == orig_len) { + int xfer = len; + + D("[ usb read %d fd = %d], path=%s", xfer, h->fd, h->path.c_str()); + n = usb_bulk_read(h, data, xfer); + D("[ usb read %d ] = %d, path=%s", xfer, n, h->path.c_str()); +- if(n != xfer) { ++ if (n <= 0) { + if((errno == ETIMEDOUT) && (h->fd != -1)) { + D("[ timeout ]"); +- if(n > 0){ +- data += n; +- len -= n; +- } + continue; + } + D("ERROR: n = %d, errno = %d (%s)", +@@ -449,12 +445,12 @@ int usb_read(usb_handle *h, void *_data, int len) + return -1; + } + +- len -= xfer; +- data += xfer; ++ len -= n; ++ data += n; + } + + D("-- usb_read --"); +- return 0; ++ return orig_len - len; + } + + void usb_kick(usb_handle* h) { +diff --git a/adb/client/usb_osx.cpp b/adb/client/usb_osx.cpp +index 8713b2c4b..fcd0bc044 100644 +--- a/adb/client/usb_osx.cpp ++++ b/adb/client/usb_osx.cpp +@@ -518,7 +518,7 @@ int usb_read(usb_handle *handle, void *buf, int len) + } + + if (kIOReturnSuccess == result) +- return 0; ++ return numBytes; + else { + LOG(ERROR) << "usb_read failed with status: " << std::hex << result; + } +diff --git a/adb/client/usb_windows.cpp b/adb/client/usb_windows.cpp +index 9e00a5d6c..ee7f8024f 100644 +--- a/adb/client/usb_windows.cpp ++++ b/adb/client/usb_windows.cpp +@@ -415,6 +415,7 @@ int usb_read(usb_handle *handle, void* data, int len) { + unsigned long time_out = 0; + unsigned long read = 0; + int err = 0; ++ int orig_len = len; + + D("usb_read %d", len); + if (NULL == handle) { +@@ -423,9 +424,8 @@ int usb_read(usb_handle *handle, void* data, int len) { + goto fail; + } + +- while (len > 0) { +- if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, +- time_out)) { ++ while (len == orig_len) { ++ if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, time_out)) { + D("AdbReadEndpointSync failed: %s", + android::base::SystemErrorCodeToString(GetLastError()).c_str()); + err = EIO; +@@ -433,11 +433,11 @@ int usb_read(usb_handle *handle, void* data, int len) { + } + D("usb_read got: %ld, expected: %d", read, len); + +- data = (char *)data + read; ++ data = (char*)data + read; + len -= read; + } + +- return 0; ++ return orig_len - len; + + fail: + // Any failure should cause us to kick the device instead of leaving it a +diff --git a/adb/commandline.cpp b/adb/commandline.cpp +index 7702b0edf..33456bffc 100644 +--- a/adb/commandline.cpp ++++ b/adb/commandline.cpp +@@ -212,6 +212,7 @@ static void help() { + " kill-server kill the server if it is running\n" + " reconnect kick connection from host side to force reconnect\n" + " reconnect device kick connection from device side to force reconnect\n" ++ " reconnect offline reset offline/unauthorized devices to force reconnect\n" + "\n" + "environment variables:\n" + " $ADB_TRACE\n" +@@ -1947,7 +1948,7 @@ int adb_commandline(int argc, const char** argv) { + return adb_query_command("host:host-features"); + } else if (!strcmp(argv[0], "reconnect")) { + if (argc == 1) { +- return adb_query_command("host:reconnect"); ++ return adb_query_command(format_host_command(argv[0], transport_type, serial)); + } else if (argc == 2) { + if (!strcmp(argv[1], "device")) { + std::string err; +diff --git a/adb/fdevent.cpp b/adb/fdevent.cpp +index 04cd8651c..72c9eef42 100644 +--- a/adb/fdevent.cpp ++++ b/adb/fdevent.cpp +@@ -75,13 +75,13 @@ static std::atomic terminate_loop(false); + static bool main_thread_valid; + static unsigned long main_thread_id; + +-static void check_main_thread() { ++void check_main_thread() { + if (main_thread_valid) { + CHECK_EQ(main_thread_id, adb_thread_id()); + } + } + +-static void set_main_thread() { ++void set_main_thread() { + main_thread_valid = true; + main_thread_id = adb_thread_id(); + } +diff --git a/adb/fdevent.h b/adb/fdevent.h +index 207f9b702..e32845afc 100644 +--- a/adb/fdevent.h ++++ b/adb/fdevent.h +@@ -76,9 +76,12 @@ void fdevent_set_timeout(fdevent *fde, int64_t timeout_ms); + */ + void fdevent_loop(); + ++void check_main_thread(); ++ + // The following functions are used only for tests. + void fdevent_terminate_loop(); + size_t fdevent_installed_count(); + void fdevent_reset(); ++void set_main_thread(); + + #endif +diff --git a/adb/services.cpp b/adb/services.cpp +index f764c52cc..dbf163d5b 100644 +--- a/adb/services.cpp ++++ b/adb/services.cpp +@@ -347,7 +347,7 @@ static void wait_for_state(int fd, void* data) { + std::string error = "unknown error"; + const char* serial = sinfo->serial.length() ? sinfo->serial.c_str() : NULL; + atransport* t = acquire_one_transport(sinfo->transport_type, serial, &is_ambiguous, &error); +- if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->connection_state)) { ++ if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->GetConnectionState())) { + SendOkay(fd); + break; + } else if (!is_ambiguous) { +diff --git a/adb/sockets.cpp b/adb/sockets.cpp +index c05903f9e..04290a6e1 100644 +--- a/adb/sockets.cpp ++++ b/adb/sockets.cpp +@@ -794,7 +794,7 @@ static int smart_socket_enqueue(asocket* s, apacket* p) { + if (!s->transport) { + SendFail(s->peer->fd, "device offline (no transport)"); + goto fail; +- } else if (s->transport->connection_state == kCsOffline) { ++ } else if (s->transport->GetConnectionState() == kCsOffline) { + /* if there's no remote we fail the connection + ** right here and terminate it + */ +diff --git a/adb/test_device.py b/adb/test_device.py +index e76aaed5c..a30972e54 100644 +--- a/adb/test_device.py ++++ b/adb/test_device.py +@@ -1188,6 +1188,77 @@ class FileOperationsTest(DeviceTest): + self.device.shell(['rm', '-f', '/data/local/tmp/adb-test-*']) + + ++class DeviceOfflineTest(DeviceTest): ++ def _get_device_state(self, serialno): ++ output = subprocess.check_output(self.device.adb_cmd + ['devices']) ++ for line in output.split('\n'): ++ m = re.match('(\S+)\s+(\S+)', line) ++ if m and m.group(1) == serialno: ++ return m.group(2) ++ return None ++ ++ def test_killed_when_pushing_a_large_file(self): ++ """ ++ While running adb push with a large file, kill adb server. ++ Occasionally the device becomes offline. Because the device is still ++ reading data without realizing that the adb server has been restarted. ++ Test if we can bring the device online automatically now. ++ http://b/32952319 ++ """ ++ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() ++ # 1. Push a large file ++ file_path = 'tmp_large_file' ++ try: ++ fh = open(file_path, 'w') ++ fh.write('\0' * (100 * 1024 * 1024)) ++ fh.close() ++ subproc = subprocess.Popen(self.device.adb_cmd + ['push', file_path, '/data/local/tmp']) ++ time.sleep(0.1) ++ # 2. Kill the adb server ++ subprocess.check_call(self.device.adb_cmd + ['kill-server']) ++ subproc.terminate() ++ finally: ++ try: ++ os.unlink(file_path) ++ except: ++ pass ++ # 3. See if the device still exist. ++ # Sleep to wait for the adb server exit. ++ time.sleep(0.5) ++ # 4. The device should be online ++ self.assertEqual(self._get_device_state(serialno), 'device') ++ ++ def test_killed_when_pulling_a_large_file(self): ++ """ ++ While running adb pull with a large file, kill adb server. ++ Occasionally the device can't be connected. Because the device is trying to ++ send a message larger than what is expected by the adb server. ++ Test if we can bring the device online automatically now. ++ """ ++ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() ++ file_path = 'tmp_large_file' ++ try: ++ # 1. Create a large file on device. ++ self.device.shell(['dd', 'if=/dev/zero', 'of=/data/local/tmp/tmp_large_file', ++ 'bs=1000000', 'count=100']) ++ # 2. Pull the large file on host. ++ subproc = subprocess.Popen(self.device.adb_cmd + ++ ['pull','/data/local/tmp/tmp_large_file', file_path]) ++ time.sleep(0.1) ++ # 3. Kill the adb server ++ subprocess.check_call(self.device.adb_cmd + ['kill-server']) ++ subproc.terminate() ++ finally: ++ try: ++ os.unlink(file_path) ++ except: ++ pass ++ # 4. See if the device still exist. ++ # Sleep to wait for the adb server exit. ++ time.sleep(0.5) ++ self.assertEqual(self._get_device_state(serialno), 'device') ++ ++ + def main(): + random.seed(0) + if len(adb.get_devices()) > 0: +diff --git a/adb/transport.cpp b/adb/transport.cpp +index 4686841ec..cc8c16252 100644 +--- a/adb/transport.cpp ++++ b/adb/transport.cpp +@@ -33,6 +33,7 @@ + + #include + #include ++#include + #include + #include + +@@ -41,6 +42,7 @@ + #include "adb_trace.h" + #include "adb_utils.h" + #include "diagnose_usb.h" ++#include "fdevent.h" + + static void transport_unref(atransport *t); + +@@ -209,6 +211,11 @@ static void read_transport_thread(void* _t) { + put_apacket(p); + break; + } ++#if ADB_HOST ++ if (p->msg.command == 0) { ++ continue; ++ } ++#endif + } + + D("%s: received remote packet, sending to transport", t->serial); +@@ -271,7 +278,11 @@ static void write_transport_thread(void* _t) { + if (active) { + D("%s: transport got packet, sending to remote", t->serial); + ATRACE_NAME("write_transport write_remote"); +- t->write_to_remote(p, t); ++ if (t->Write(p) != 0) { ++ D("%s: remote write failed for transport", t->serial); ++ put_apacket(p); ++ break; ++ } + } else { + D("%s: transport ignoring packet while offline", t->serial); + } +@@ -493,7 +504,7 @@ static void transport_registration_func(int _fd, unsigned ev, void* data) { + } + + /* don't create transport threads for inaccessible devices */ +- if (t->connection_state != kCsNoPerm) { ++ if (t->GetConnectionState() != kCsNoPerm) { + /* initial references are the two threads */ + t->ref_count = 2; + +@@ -538,6 +549,15 @@ void init_transport_registration(void) { + transport_registration_func, 0); + + fdevent_set(&transport_registration_fde, FDE_READ); ++#if ADB_HOST ++ android::base::at_quick_exit([]() { ++ // To avoid only writing part of a packet to a transport after exit, kick all transports. ++ std::lock_guard lock(transport_lock); ++ for (auto t : transport_list) { ++ t->Kick(); ++ } ++ }); ++#endif + } + + /* the fdevent select pump is single threaded */ +@@ -600,7 +620,7 @@ static int qual_match(const char* to_test, const char* prefix, const char* qual, + } + + atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, +- std::string* error_out) { ++ std::string* error_out, bool accept_any_state) { + atransport* result = nullptr; + + if (serial) { +@@ -615,7 +635,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + + std::unique_lock lock(transport_lock); + for (const auto& t : transport_list) { +- if (t->connection_state == kCsNoPerm) { ++ if (t->GetConnectionState() == kCsNoPerm) { + #if ADB_HOST + *error_out = UsbNoPermissionsLongHelpText(); + #endif +@@ -664,7 +684,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + lock.unlock(); + + // Don't return unauthorized devices; the caller can't do anything with them. +- if (result && result->connection_state == kCsUnauthorized) { ++ if (result && result->GetConnectionState() == kCsUnauthorized && !accept_any_state) { + *error_out = "device unauthorized.\n"; + char* ADB_VENDOR_KEYS = getenv("ADB_VENDOR_KEYS"); + *error_out += "This adb server's $ADB_VENDOR_KEYS is "; +@@ -676,7 +696,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + } + + // Don't return offline devices; the caller can't do anything with them. +- if (result && result->connection_state == kCsOffline) { ++ if (result && result->GetConnectionState() == kCsOffline && !accept_any_state) { + *error_out = "device offline"; + result = nullptr; + } +@@ -688,16 +708,38 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* + return result; + } + ++int atransport::Write(apacket* p) { ++#if ADB_HOST ++ std::lock_guard lock(write_msg_lock_); ++#endif ++ return write_func_(p, this); ++} ++ + void atransport::Kick() { + if (!kicked_) { + kicked_ = true; + CHECK(kick_func_ != nullptr); ++#if ADB_HOST ++ // On host, adb server should avoid writing part of a packet, so don't ++ // kick a transport whiling writing a packet. ++ std::lock_guard lock(write_msg_lock_); ++#endif + kick_func_(this); + } + } + ++ConnectionState atransport::GetConnectionState() const { ++ return connection_state_; ++} ++ ++void atransport::SetConnectionState(ConnectionState state) { ++ check_main_thread(); ++ connection_state_ = state; ++} ++ + const std::string atransport::connection_state_name() const { +- switch (connection_state) { ++ ConnectionState state = GetConnectionState(); ++ switch (state) { + case kCsOffline: + return "offline"; + case kCsBootloader: +@@ -963,10 +1005,10 @@ void kick_all_tcp_devices() { + + void register_usb_transport(usb_handle* usb, const char* serial, const char* devpath, + unsigned writeable) { +- atransport* t = new atransport(); ++ atransport* t = new atransport((writeable ? kCsOffline : kCsNoPerm)); + + D("transport: %p init'ing for usb_handle %p (sn='%s')", t, usb, serial ? serial : ""); +- init_usb_transport(t, usb, (writeable ? kCsOffline : kCsNoPerm)); ++ init_usb_transport(t, usb); + if (serial) { + t->serial = strdup(serial); + } +@@ -987,12 +1029,13 @@ void register_usb_transport(usb_handle* usb, const char* serial, const char* dev + void unregister_usb_transport(usb_handle* usb) { + std::lock_guard lock(transport_lock); + transport_list.remove_if( +- [usb](atransport* t) { return t->usb == usb && t->connection_state == kCsNoPerm; }); ++ [usb](atransport* t) { return t->usb == usb && t->GetConnectionState() == kCsNoPerm; }); + } + + int check_header(apacket* p, atransport* t) { + if (p->msg.magic != (p->msg.command ^ 0xffffffff)) { +- VLOG(RWX) << "check_header(): invalid magic"; ++ VLOG(RWX) << "check_header(): invalid magic command = " << std::hex << p->msg.command ++ << ", magic = " << p->msg.magic; + return -1; + } + +@@ -1020,4 +1063,11 @@ std::shared_ptr atransport::NextKey() { + keys_.pop_front(); + return result; + } ++bool atransport::SetSendConnectOnError() { ++ if (has_send_connect_on_error_) { ++ return false; ++ } ++ has_send_connect_on_error_ = true; ++ return true; ++} + #endif +diff --git a/adb/transport.h b/adb/transport.h +index 4d97fc78b..8c15d663d 100644 +--- a/adb/transport.h ++++ b/adb/transport.h +@@ -19,10 +19,12 @@ + + #include + ++#include + #include + #include + #include + #include ++#include + #include + #include + +@@ -57,31 +59,35 @@ public: + // class in one go is a very large change. Given how bad our testing is, + // it's better to do this piece by piece. + +- atransport() { ++ atransport(ConnectionState state = kCsOffline) : connection_state_(state) { + transport_fde = {}; + protocol_version = A_VERSION; + max_payload = MAX_PAYLOAD; + } +- + virtual ~atransport() {} + + int (*read_from_remote)(apacket* p, atransport* t) = nullptr; +- int (*write_to_remote)(apacket* p, atransport* t) = nullptr; + void (*close)(atransport* t) = nullptr; ++ ++ void SetWriteFunction(int (*write_func)(apacket*, atransport*)) { write_func_ = write_func; } + void SetKickFunction(void (*kick_func)(atransport*)) { + kick_func_ = kick_func; + } + bool IsKicked() { + return kicked_; + } ++ int Write(apacket* p); + void Kick(); + ++ // ConnectionState can be read by all threads, but can only be written in the main thread. ++ ConnectionState GetConnectionState() const; ++ void SetConnectionState(ConnectionState state); ++ + int fd = -1; + int transport_socket = -1; + fdevent transport_fde; + size_t ref_count = 0; + uint32_t sync_token = 0; +- ConnectionState connection_state = kCsOffline; + bool online = false; + TransportType type = kTransportAny; + +@@ -114,11 +120,13 @@ public: + + #if ADB_HOST + std::shared_ptr NextKey(); ++ bool SetSendConnectOnError(); + #endif + + char token[TOKEN_SIZE] = {}; + size_t failed_auth_attempts = 0; + ++ const std::string serial_name() const { return serial ? serial : ""; } + const std::string connection_state_name() const; + + void update_version(int version, size_t payload); +@@ -157,6 +165,7 @@ private: + int local_port_for_emulator_ = -1; + bool kicked_ = false; + void (*kick_func_)(atransport*) = nullptr; ++ int (*write_func_)(apacket*, atransport*) = nullptr; + + // A set of features transmitted in the banner with the initial connection. + // This is stored in the banner as 'features=feature0,feature1,etc'. +@@ -167,8 +176,11 @@ private: + // A list of adisconnect callbacks called when the transport is kicked. + std::list disconnects_; + ++ std::atomic connection_state_; + #if ADB_HOST + std::deque> keys_; ++ std::mutex write_msg_lock_; ++ bool has_send_connect_on_error_ = false; + #endif + + DISALLOW_COPY_AND_ASSIGN(atransport); +@@ -181,8 +193,8 @@ private: + * is set to true and nullptr returned. + * If no suitable transport is found, error is set and nullptr returned. + */ +-atransport* acquire_one_transport(TransportType type, const char* serial, +- bool* is_ambiguous, std::string* error_out); ++atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, ++ std::string* error_out, bool accept_any_state = false); + void kick_transport(atransport* t); + void update_transports(void); + +diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp +index 408f51fa1..3ee286a12 100644 +--- a/adb/transport_local.cpp ++++ b/adb/transport_local.cpp +@@ -515,12 +515,11 @@ int init_socket_transport(atransport *t, int s, int adb_port, int local) + int fail = 0; + + t->SetKickFunction(remote_kick); ++ t->SetWriteFunction(remote_write); + t->close = remote_close; + t->read_from_remote = remote_read; +- t->write_to_remote = remote_write; + t->sfd = s; + t->sync_token = 1; +- t->connection_state = kCsOffline; + t->type = kTransportLocal; + + #if ADB_HOST +diff --git a/adb/transport_test.cpp b/adb/transport_test.cpp +index 8b38e0334..68689d4a6 100644 +--- a/adb/transport_test.cpp ++++ b/adb/transport_test.cpp +@@ -94,12 +94,13 @@ TEST(transport, SetFeatures) { + } + + TEST(transport, parse_banner_no_features) { ++ set_main_thread(); + atransport t; + + parse_banner("host::", &t); + + ASSERT_EQ(0U, t.features().size()); +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(nullptr, t.product); + ASSERT_EQ(nullptr, t.model); +@@ -113,7 +114,7 @@ TEST(transport, parse_banner_product_features) { + "host::ro.product.name=foo;ro.product.model=bar;ro.product.device=baz;"; + parse_banner(banner, &t); + +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(0U, t.features().size()); + +@@ -130,7 +131,7 @@ TEST(transport, parse_banner_features) { + "features=woodly,doodly"; + parse_banner(banner, &t); + +- ASSERT_EQ(kCsHost, t.connection_state); ++ ASSERT_EQ(kCsHost, t.GetConnectionState()); + + ASSERT_EQ(2U, t.features().size()); + ASSERT_TRUE(t.has_feature("woodly")); +diff --git a/adb/transport_usb.cpp b/adb/transport_usb.cpp +index 516b4f20d..ce419b88d 100644 +--- a/adb/transport_usb.cpp ++++ b/adb/transport_usb.cpp +@@ -25,9 +25,115 @@ + + #include "adb.h" + ++#if ADB_HOST ++ ++static constexpr size_t MAX_USB_BULK_PACKET_SIZE = 1024u; ++ ++// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes ++// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. ++static int UsbReadMessage(usb_handle* h, amessage* msg) { ++ D("UsbReadMessage"); ++ char buffer[MAX_USB_BULK_PACKET_SIZE]; ++ int n = usb_read(h, buffer, sizeof(buffer)); ++ if (n == sizeof(*msg)) { ++ memcpy(msg, buffer, sizeof(*msg)); ++ } ++ return n; ++} ++ ++// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes ++// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. ++static int UsbReadPayload(usb_handle* h, apacket* p) { ++ D("UsbReadPayload"); ++ size_t need_size = p->msg.data_length; ++ size_t data_pos = 0u; ++ while (need_size > 0u) { ++ int n = 0; ++ if (data_pos + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { ++ // Read directly to p->data. ++ size_t rem_size = need_size % MAX_USB_BULK_PACKET_SIZE; ++ size_t direct_read_size = need_size - rem_size; ++ if (rem_size && ++ data_pos + direct_read_size + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { ++ direct_read_size += MAX_USB_BULK_PACKET_SIZE; ++ } ++ n = usb_read(h, &p->data[data_pos], direct_read_size); ++ if (n < 0) { ++ D("usb_read(size %zu) failed", direct_read_size); ++ return n; ++ } ++ } else { ++ // Read indirectly using a buffer. ++ char buffer[MAX_USB_BULK_PACKET_SIZE]; ++ n = usb_read(h, buffer, sizeof(buffer)); ++ if (n < 0) { ++ D("usb_read(size %zu) failed", sizeof(buffer)); ++ return -1; ++ } ++ size_t copy_size = std::min(static_cast(n), need_size); ++ D("usb read %d bytes, need %zu bytes, copy %zu bytes", n, need_size, copy_size); ++ memcpy(&p->data[data_pos], buffer, copy_size); ++ } ++ data_pos += n; ++ need_size -= std::min(static_cast(n), need_size); ++ } ++ return static_cast(data_pos); ++} ++ ++static int remote_read(apacket* p, atransport* t) { ++ int n = UsbReadMessage(t->usb, &p->msg); ++ if (n < 0) { ++ D("remote usb: read terminated (message)"); ++ return -1; ++ } ++ if (static_cast(n) != sizeof(p->msg) || check_header(p, t)) { ++ D("remote usb: check_header failed, skip it"); ++ goto err_msg; ++ } ++ if (t->GetConnectionState() == kCsOffline) { ++ // If we read a wrong msg header declaring a large message payload, don't read its payload. ++ // Otherwise we may miss true messages from the device. ++ if (p->msg.command != A_CNXN && p->msg.command != A_AUTH) { ++ goto err_msg; ++ } ++ } ++ if (p->msg.data_length) { ++ n = UsbReadPayload(t->usb, p); ++ if (n < 0) { ++ D("remote usb: terminated (data)"); ++ return -1; ++ } ++ if (static_cast(n) != p->msg.data_length) { ++ D("remote usb: read payload failed (need %u bytes, give %d bytes), skip it", ++ p->msg.data_length, n); ++ goto err_msg; ++ } ++ } ++ if (check_data(p)) { ++ D("remote usb: check_data failed, skip it"); ++ goto err_msg; ++ } ++ return 0; ++ ++err_msg: ++ p->msg.command = 0; ++ if (t->GetConnectionState() == kCsOffline) { ++ // If the data toggle of ep_out on device and ep_in on host are not the same, we may receive ++ // an error message. In this case, resend one A_CNXN message to connect the device. ++ if (t->SetSendConnectOnError()) { ++ SendConnectOnHost(t); ++ } ++ } ++ return 0; ++} ++ ++#else ++ ++// On Android devices, we rely on the kernel to provide buffered read. ++// So we can recover automatically from EOVERFLOW. + static int remote_read(apacket *p, atransport *t) + { +- if(usb_read(t->usb, &p->msg, sizeof(amessage))){ ++ if (usb_read(t->usb, &p->msg, sizeof(amessage))) { + D("remote usb: read terminated (message)"); + return -1; + } +@@ -38,7 +144,7 @@ static int remote_read(apacket *p, atransport *t) + } + + if(p->msg.data_length) { +- if(usb_read(t->usb, p->data, p->msg.data_length)){ ++ if (usb_read(t->usb, p->data, p->msg.data_length)) { + D("remote usb: terminated (data)"); + return -1; + } +@@ -51,17 +157,18 @@ static int remote_read(apacket *p, atransport *t) + + return 0; + } ++#endif + + static int remote_write(apacket *p, atransport *t) + { + unsigned size = p->msg.data_length; + +- if(usb_write(t->usb, &p->msg, sizeof(amessage))) { ++ if (usb_write(t->usb, &p->msg, sizeof(amessage))) { + D("remote usb: 1 - write terminated"); + return -1; + } + if(p->msg.data_length == 0) return 0; +- if(usb_write(t->usb, &p->data, size)) { ++ if (usb_write(t->usb, &p->data, size)) { + D("remote usb: 2 - write terminated"); + return -1; + } +@@ -75,20 +182,17 @@ static void remote_close(atransport *t) + t->usb = 0; + } + +-static void remote_kick(atransport *t) +-{ ++static void remote_kick(atransport* t) { + usb_kick(t->usb); + } + +-void init_usb_transport(atransport *t, usb_handle *h, ConnectionState state) +-{ ++void init_usb_transport(atransport* t, usb_handle* h) { + D("transport: usb"); + t->close = remote_close; + t->SetKickFunction(remote_kick); ++ t->SetWriteFunction(remote_write); + t->read_from_remote = remote_read; +- t->write_to_remote = remote_write; + t->sync_token = 1; +- t->connection_state = state; + t->type = kTransportUsb; + t->usb = h; + } +-- +2.14.3 + diff --git a/android-tools.spec b/android-tools.spec index ebf4e4d..b219e17 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,7 +14,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 6%{?dist} +Release: 7%{?dist} Summary: Android platform tools(adb, fastboot) Group: Applications/System @@ -45,6 +45,9 @@ Patch1: 0001-Add-string-h.patch Patch2: 0002-libusb-modifications.patch Patch3: 0003-atomic-fix.patch Patch4: 0004-bz1441234.patch +# https://bugzilla.redhat.com/show_bug.cgi?id=1470740 +Patch5: 0001-adb-don-t-reset-usb-when-connecting-it.patch +Patch6: 0001-adb-fix-two-device-offline-problems.patch Requires(post): systemd Requires(preun): systemd @@ -98,6 +101,8 @@ setup between the host and the target phone as adb. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 +%patch6 -p1 cp -p %{SOURCE5} 51-android.rules @@ -134,6 +139,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Tue Feb 27 2018 Bastien Nocera - 20170311gite7195be7725a-7 +- Fix USB resets when adb daemon is started (#1470740) + * Wed Feb 07 2018 Fedora Release Engineering - 20170311gite7195be7725a-6 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild From 280d419e1bbfb8ec59bf6181b3c13e783fe2b8be Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 12 Jul 2018 20:13:33 +0000 Subject: [PATCH 03/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index b219e17..0506bab 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,7 +14,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 7%{?dist} +Release: 8%{?dist} Summary: Android platform tools(adb, fastboot) Group: Applications/System @@ -139,6 +139,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Thu Jul 12 2018 Fedora Release Engineering - 20170311gite7195be7725a-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + * Tue Feb 27 2018 Bastien Nocera - 20170311gite7195be7725a-7 - Fix USB resets when adb daemon is started (#1470740) From 5b5f437d8431057214286495630a443ec0f80cb5 Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Thu, 19 Jul 2018 20:56:43 +0200 Subject: [PATCH 04/71] add BuildRequires: gcc-c++ Reference: https://fedoraproject.org/wiki/Changes/Remove_GCC_from_BuildRoot --- android-tools.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/android-tools.spec b/android-tools.spec index 0506bab..8977825 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -52,6 +52,7 @@ Patch6: 0001-adb-fix-two-device-offline-problems.patch Requires(post): systemd Requires(preun): systemd Requires(postun): systemd +BuildRequires: gcc-c++ BuildRequires: zlib-devel BuildRequires: openssl-devel BuildRequires: libselinux-devel From 022a1e0fb44c5c0786bdcecccc37d26fc2fc0d07 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Wed, 29 Aug 2018 03:05:48 +0400 Subject: [PATCH 05/71] Update to upstream git commit c7815d675 - Resolves: rhbz 1535542 1550703 1603379 Switch to clang and ninja --- 0001-Add-string-h.patch | 40 +- ...b-don-t-reset-usb-when-connecting-it.patch | 40 - ...-adb-fix-two-device-offline-problems.patch | 1189 ----------------- 0003-atomic-fix.patch | 17 - 0003-buildlib-remove.patch | 12 + android-tools.spec | 53 +- generate_build.rb | 239 ++-- 7 files changed, 197 insertions(+), 1393 deletions(-) delete mode 100644 0001-adb-don-t-reset-usb-when-connecting-it.patch delete mode 100644 0001-adb-fix-two-device-offline-problems.patch delete mode 100644 0003-atomic-fix.patch create mode 100644 0003-buildlib-remove.patch diff --git a/0001-Add-string-h.patch b/0001-Add-string-h.patch index 328e019..753f205 100644 --- a/0001-Add-string-h.patch +++ b/0001-Add-string-h.patch @@ -1,5 +1,29 @@ +diff --git a/adb/sysdeps/posix/network.cpp b/adb/sysdeps/posix/network.cpp +index ecd1fd24e..07fd8c98e 100644 +--- a/adb/sysdeps/posix/network.cpp ++++ b/adb/sysdeps/posix/network.cpp +@@ -19,6 +19,7 @@ + #include + #include + #include ++#include + + #include + +diff --git a/adb/types.h b/adb/types.h +index a3e5d4842..bac7181b4 100644 +--- a/adb/types.h ++++ b/adb/types.h +@@ -22,6 +22,7 @@ + #include + #include + #include ++#include + + #include + diff --git a/base/errors_unix.cpp b/base/errors_unix.cpp -index 296995e..48269b6 100644 +index 296995efe..48269b675 100644 --- a/base/errors_unix.cpp +++ b/base/errors_unix.cpp @@ -17,6 +17,7 @@ @@ -11,7 +35,7 @@ index 296995e..48269b6 100644 namespace android { namespace base { diff --git a/base/file.cpp b/base/file.cpp -index 81b04d7..2fd2b6e 100644 +index d6fe753d1..3b10544dd 100644 --- a/base/file.cpp +++ b/base/file.cpp @@ -22,6 +22,7 @@ @@ -22,15 +46,3 @@ index 81b04d7..2fd2b6e 100644 #include #include -diff --git a/base/logging.cpp b/base/logging.cpp -index 6357b4b..3c7dbce 100644 ---- a/base/logging.cpp -+++ b/base/logging.cpp -@@ -23,6 +23,7 @@ - #include - #include - #include -+#include - - // For getprogname(3) or program_invocation_short_name. - #if defined(__ANDROID__) || defined(__APPLE__) diff --git a/0001-adb-don-t-reset-usb-when-connecting-it.patch b/0001-adb-don-t-reset-usb-when-connecting-it.patch deleted file mode 100644 index 029471e..0000000 --- a/0001-adb-don-t-reset-usb-when-connecting-it.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 5d002b8d6ae0a1eeefe09309ae6687a16e82ed08 Mon Sep 17 00:00:00 2001 -From: Yabin Cui -Date: Tue, 4 Apr 2017 10:29:21 -0700 -Subject: [PATCH] adb: don't reset usb when connecting it. - -Calling libusb_reset_device() resets the usb connection with device -on linux platform. It can interfere with other usb interfaces and only -works on linux. -Removing it only affects when adb server is killed while doing IO with -device, which will be solved in later patches. - -Bug: http://b/32952319 -Test: none -Change-Id: I19522435eadd938ff95d49cbae3bcaa5c8f6d184 ---- - adb/client/usb_libusb.cpp | 8 -------- - 1 file changed, 8 deletions(-) - -diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp -index 7adb26213..c48a2517b 100644 ---- a/adb/client/usb_libusb.cpp -+++ b/adb/client/usb_libusb.cpp -@@ -306,14 +306,6 @@ static void poll_for_devices() { - } - device_serial.resize(rc); - -- // Try to reset the device. -- rc = libusb_reset_device(handle_raw); -- if (rc != 0) { -- LOG(WARNING) << "failed to reset opened device '" << device_serial -- << "': " << libusb_error_name(rc); -- continue; -- } -- - // WARNING: this isn't released via RAII. - rc = libusb_claim_interface(handle.get(), interface_num); - if (rc != 0) { --- -2.14.3 - diff --git a/0001-adb-fix-two-device-offline-problems.patch b/0001-adb-fix-two-device-offline-problems.patch deleted file mode 100644 index de51974..0000000 --- a/0001-adb-fix-two-device-offline-problems.patch +++ /dev/null @@ -1,1189 +0,0 @@ -From b5e11415d9fdb929321c66889063dac50fb737af Mon Sep 17 00:00:00 2001 -From: Yabin Cui -Date: Fri, 10 Mar 2017 16:01:01 -0800 -Subject: [PATCH] adb: fix two device offline problems. - -When device goes offline, user usually has to manually replug the -usb device. This patch tries to solve two offline situations, all -because when adb on host is killed, the adbd on device is not notified. - -1. When adb server is killed while pushing a large file to device, -the device is still reading the unfinished large message. So the -device thinks of the CNXN message as part of the previous unfinished -message, so it doesn't reply and the device is in offline state. - -The solution is to add a write_msg_lock in atransport struct. And it -kicks the transport only after sending a whole message. By kicking -all transports before exit, we ensure that we don't write part of -a message to any device. So next time we start adb server, the device -should be waiting for a new message. - -2. When adb server is killed while pulling a large file from device, -the device is still trying to send the unfinished large message. So -adb on host usually reads data with EOVERFLOW error. This is because -adb on host is reading less than one packet sent from device. - -The solution is to use buffered read on host. The max packet size -of bulk transactions in USB 3.0 is 1024 bytes. By preparing an at least -1024 bytes buffer when reading, EOVERFLOW no longer occurs. And teach -adb host to ignore wrong messages. - -To be safe, this patch doesn't change any logic on device. - -Bug: http://b/32952319 -Test: run python -m unittest -q test_device.DeviceOfflineTest -Test: on linux/mac/windows with bullhead, ryu. -Change-Id: Ib149d30028a62a6f03857b8a95ab5a1d6e9b9c4e ---- - adb/adb.cpp | 63 +++++++++++++---------- - adb/adb.h | 5 +- - adb/adb_client.cpp | 11 ++-- - adb/adb_trace.cpp | 4 +- - adb/adb_trace.h | 3 ++ - adb/client/usb_libusb.cpp | 35 +++++++------ - adb/client/usb_linux.cpp | 16 +++--- - adb/client/usb_osx.cpp | 2 +- - adb/client/usb_windows.cpp | 10 ++-- - adb/commandline.cpp | 3 +- - adb/fdevent.cpp | 4 +- - adb/fdevent.h | 3 ++ - adb/services.cpp | 2 +- - adb/sockets.cpp | 2 +- - adb/test_device.py | 71 ++++++++++++++++++++++++++ - adb/transport.cpp | 72 ++++++++++++++++++++++---- - adb/transport.h | 24 ++++++--- - adb/transport_local.cpp | 3 +- - adb/transport_test.cpp | 7 +-- - adb/transport_usb.cpp | 124 +++++++++++++++++++++++++++++++++++++++++---- - 20 files changed, 356 insertions(+), 108 deletions(-) - -diff --git a/adb/adb.cpp b/adb/adb.cpp -index cf6b3593d..33d6bda47 100644 ---- a/adb/adb.cpp -+++ b/adb/adb.cpp -@@ -253,6 +253,19 @@ void send_connect(atransport* t) { - send_packet(cp, t); - } - -+#if ADB_HOST -+ -+void SendConnectOnHost(atransport* t) { -+ // Send an empty message before A_CNXN message. This is because the data toggle of the ep_out on -+ // host and ep_in on device may not be the same. -+ apacket* p = get_apacket(); -+ CHECK(p); -+ send_packet(p, t); -+ send_connect(t); -+} -+ -+#endif -+ - // qual_overwrite is used to overwrite a qualifier string. dst is a - // pointer to a char pointer. It is assumed that if *dst is non-NULL, it - // was malloc'ed and needs to freed. *dst will be set to a dup of src. -@@ -299,29 +312,29 @@ void parse_banner(const std::string& banner, atransport* t) { - const std::string& type = pieces[0]; - if (type == "bootloader") { - D("setting connection_state to kCsBootloader"); -- t->connection_state = kCsBootloader; -+ t->SetConnectionState(kCsBootloader); - update_transports(); - } else if (type == "device") { - D("setting connection_state to kCsDevice"); -- t->connection_state = kCsDevice; -+ t->SetConnectionState(kCsDevice); - update_transports(); - } else if (type == "recovery") { - D("setting connection_state to kCsRecovery"); -- t->connection_state = kCsRecovery; -+ t->SetConnectionState(kCsRecovery); - update_transports(); - } else if (type == "sideload") { - D("setting connection_state to kCsSideload"); -- t->connection_state = kCsSideload; -+ t->SetConnectionState(kCsSideload); - update_transports(); - } else { - D("setting connection_state to kCsHost"); -- t->connection_state = kCsHost; -+ t->SetConnectionState(kCsHost); - } - } - - static void handle_new_connection(atransport* t, apacket* p) { -- if (t->connection_state != kCsOffline) { -- t->connection_state = kCsOffline; -+ if (t->GetConnectionState() != kCsOffline) { -+ t->SetConnectionState(kCsOffline); - handle_offline(t); - } - -@@ -355,10 +368,10 @@ void handle_packet(apacket *p, atransport *t) - if (p->msg.arg0){ - send_packet(p, t); - #if ADB_HOST -- send_connect(t); -+ SendConnectOnHost(t); - #endif - } else { -- t->connection_state = kCsOffline; -+ t->SetConnectionState(kCsOffline); - handle_offline(t); - send_packet(p, t); - } -@@ -372,7 +385,9 @@ void handle_packet(apacket *p, atransport *t) - switch (p->msg.arg0) { - #if ADB_HOST - case ADB_AUTH_TOKEN: -- t->connection_state = kCsUnauthorized; -+ if (t->GetConnectionState() == kCsOffline) { -+ t->SetConnectionState(kCsUnauthorized); -+ } - send_auth_response(p->data, p->msg.data_length, t); - break; - #else -@@ -391,7 +406,7 @@ void handle_packet(apacket *p, atransport *t) - break; - #endif - default: -- t->connection_state = kCsOffline; -+ t->SetConnectionState(kCsOffline); - handle_offline(t); - break; - } -@@ -1034,7 +1049,6 @@ static int SendOkay(int fd, const std::string& s) { - SendProtocolString(fd, s); - return 0; - } --#endif - - int handle_host_request(const char* service, TransportType type, - const char* serial, int reply_fd, asocket* s) { -@@ -1053,7 +1067,6 @@ int handle_host_request(const char* service, TransportType type, - android::base::quick_exit(0); - } - --#if ADB_HOST - // "transport:" is used for switching transport with a specified serial number - // "transport-usb:" is used for switching transport to the only USB transport - // "transport-local:" is used for switching transport to the only local transport -@@ -1098,16 +1111,10 @@ int handle_host_request(const char* service, TransportType type, - if (!strcmp(service, "reconnect-offline")) { - std::string response; - close_usb_devices([&response](const atransport* transport) { -- switch (transport->connection_state) { -+ switch (transport->GetConnectionState()) { - case kCsOffline: - case kCsUnauthorized: -- response += "reconnecting "; -- if (transport->serial) { -- response += transport->serial; -- } else { -- response += ""; -- } -- response += "\n"; -+ response += "reconnecting " + transport->serial_name() + "\n"; - return true; - default: - return false; -@@ -1131,7 +1138,6 @@ int handle_host_request(const char* service, TransportType type, - return 0; - } - --#if ADB_HOST - if (!strcmp(service, "host-features")) { - FeatureSet features = supported_features(); - // Abuse features to report libusb status. -@@ -1141,7 +1147,6 @@ int handle_host_request(const char* service, TransportType type, - SendOkay(reply_fd, FeatureSetToString(features)); - return 0; - } --#endif - - // remove TCP transport - if (!strncmp(service, "disconnect:", 11)) { -@@ -1211,15 +1216,19 @@ int handle_host_request(const char* service, TransportType type, - } - - if (!strcmp(service, "reconnect")) { -- if (s->transport != nullptr) { -- kick_transport(s->transport); -+ std::string response; -+ atransport* t = acquire_one_transport(type, serial, nullptr, &response, true); -+ if (t != nullptr) { -+ kick_transport(t); -+ response = -+ "reconnecting " + t->serial_name() + " [" + t->connection_state_name() + "]\n"; - } -- return SendOkay(reply_fd, "done"); -+ return SendOkay(reply_fd, response); - } --#endif // ADB_HOST - - int ret = handle_forward_request(service, type, serial, reply_fd); - if (ret >= 0) - return ret - 1; - return -1; - } -+#endif // ADB_HOST -diff --git a/adb/adb.h b/adb/adb.h -index aea5fb86b..e3675d844 100644 ---- a/adb/adb.h -+++ b/adb/adb.h -@@ -139,7 +139,7 @@ int adb_server_main(int is_daemon, const std::string& socket_spec, int ack_reply - int get_available_local_transport_index(); - #endif - int init_socket_transport(atransport *t, int s, int port, int local); --void init_usb_transport(atransport *t, usb_handle *usb, ConnectionState state); -+void init_usb_transport(atransport* t, usb_handle* usb); - - std::string getEmulatorSerialString(int console_port); - #if ADB_HOST -@@ -222,6 +222,9 @@ void handle_online(atransport *t); - void handle_offline(atransport *t); - - void send_connect(atransport *t); -+#if ADB_HOST -+void SendConnectOnHost(atransport* t); -+#endif - - void parse_banner(const std::string&, atransport* t); - -diff --git a/adb/adb_client.cpp b/adb/adb_client.cpp -index ef52189f2..ff9b32a13 100644 ---- a/adb/adb_client.cpp -+++ b/adb/adb_client.cpp -@@ -136,8 +136,7 @@ int _adb_connect(const std::string& service, std::string* error) { - return -2; - } - -- if ((memcmp(&service[0],"host",4) != 0 || service == "host:reconnect") && -- switch_socket_transport(fd, error)) { -+ if (memcmp(&service[0], "host", 4) != 0 && switch_socket_transport(fd, error)) { - return -1; - } - -@@ -147,11 +146,9 @@ int _adb_connect(const std::string& service, std::string* error) { - return -1; - } - -- if (service != "reconnect") { -- if (!adb_status(fd, error)) { -- adb_close(fd); -- return -1; -- } -+ if (!adb_status(fd, error)) { -+ adb_close(fd); -+ return -1; - } - - D("_adb_connect: return fd %d", fd); -diff --git a/adb/adb_trace.cpp b/adb/adb_trace.cpp -index c369d6077..eac923d4d 100644 ---- a/adb/adb_trace.cpp -+++ b/adb/adb_trace.cpp -@@ -155,7 +155,7 @@ void adb_trace_init(char** argv) { - } - #endif - --#if !defined(_WIN32) -+#if ADB_HOST && !defined(_WIN32) - // adb historically ignored $ANDROID_LOG_TAGS but passed it through to logcat. - // If set, move it out of the way so that libbase logging doesn't try to parse it. - std::string log_tags; -@@ -168,7 +168,7 @@ void adb_trace_init(char** argv) { - - android::base::InitLogging(argv, &AdbLogger); - --#if !defined(_WIN32) -+#if ADB_HOST && !defined(_WIN32) - // Put $ANDROID_LOG_TAGS back so we can pass it to logcat. - if (!log_tags.empty()) setenv("ANDROID_LOG_TAGS", log_tags.c_str(), 1); - #endif -diff --git a/adb/adb_trace.h b/adb/adb_trace.h -index aaffa2967..fc6560cfb 100644 ---- a/adb/adb_trace.h -+++ b/adb/adb_trace.h -@@ -58,6 +58,9 @@ extern int adb_trace_mask; - void adb_trace_init(char**); - void adb_trace_enable(AdbTrace trace_tag); - -+// Include before stdatomic.h (introduced in cutils/trace.h) to avoid compile error. -+#include -+ - #define ATRACE_TAG ATRACE_TAG_ADB - #include - #include -diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp -index c48a2517b..fec4742b2 100644 ---- a/adb/client/usb_libusb.cpp -+++ b/adb/client/usb_libusb.cpp -@@ -62,12 +62,11 @@ struct DeviceHandleDeleter { - using unique_device_handle = std::unique_ptr; - - struct transfer_info { -- transfer_info(const char* name, uint16_t zero_mask) : -- name(name), -- transfer(libusb_alloc_transfer(0)), -- zero_mask(zero_mask) -- { -- } -+ transfer_info(const char* name, uint16_t zero_mask, bool is_bulk_out) -+ : name(name), -+ transfer(libusb_alloc_transfer(0)), -+ is_bulk_out(is_bulk_out), -+ zero_mask(zero_mask) {} - - ~transfer_info() { - libusb_free_transfer(transfer); -@@ -75,6 +74,7 @@ struct transfer_info { - - const char* name; - libusb_transfer* transfer; -+ bool is_bulk_out; - bool transfer_complete; - std::condition_variable cv; - std::mutex mutex; -@@ -96,12 +96,11 @@ struct usb_handle : public ::usb_handle { - serial(serial), - closing(false), - device_handle(device_handle.release()), -- read("read", zero_mask), -- write("write", zero_mask), -+ read("read", zero_mask, false), -+ write("write", zero_mask, true), - interface(interface), - bulk_in(bulk_in), -- bulk_out(bulk_out) { -- } -+ bulk_out(bulk_out) {} - - ~usb_handle() { - Close(); -@@ -365,11 +364,6 @@ void usb_init() { - device_poll_thread = new std::thread(poll_for_devices); - android::base::at_quick_exit([]() { - terminate_device_poll_thread = true; -- std::unique_lock lock(usb_handles_mutex); -- for (auto& it : usb_handles) { -- it.second->Close(); -- } -- lock.unlock(); - device_poll_thread->join(); - }); - } -@@ -397,7 +391,8 @@ static int perform_usb_transfer(usb_handle* h, transfer_info* info, - return; - } - -- if (transfer->actual_length != transfer->length) { -+ // usb_read() can return when receiving some data. -+ if (info->is_bulk_out && transfer->actual_length != transfer->length) { - LOG(DEBUG) << info->name << " transfer incomplete, resubmitting"; - transfer->length -= transfer->actual_length; - transfer->buffer += transfer->actual_length; -@@ -491,8 +486,12 @@ int usb_read(usb_handle* h, void* d, int len) { - info->transfer->num_iso_packets = 0; - - int rc = perform_usb_transfer(h, info, std::move(lock)); -- LOG(DEBUG) << "usb_read(" << len << ") = " << rc; -- return rc; -+ LOG(DEBUG) << "usb_read(" << len << ") = " << rc << ", actual_length " -+ << info->transfer->actual_length; -+ if (rc < 0) { -+ return rc; -+ } -+ return info->transfer->actual_length; - } - - int usb_close(usb_handle* h) { -diff --git a/adb/client/usb_linux.cpp b/adb/client/usb_linux.cpp -index 3a45dbd71..6efed274b 100644 ---- a/adb/client/usb_linux.cpp -+++ b/adb/client/usb_linux.cpp -@@ -401,7 +401,6 @@ static int usb_bulk_read(usb_handle* h, void* data, int len) { - } - } - -- - int usb_write(usb_handle *h, const void *_data, int len) - { - D("++ usb_write ++"); -@@ -429,19 +428,16 @@ int usb_read(usb_handle *h, void *_data, int len) - int n; - - D("++ usb_read ++"); -- while(len > 0) { -+ int orig_len = len; -+ while (len == orig_len) { - int xfer = len; - - D("[ usb read %d fd = %d], path=%s", xfer, h->fd, h->path.c_str()); - n = usb_bulk_read(h, data, xfer); - D("[ usb read %d ] = %d, path=%s", xfer, n, h->path.c_str()); -- if(n != xfer) { -+ if (n <= 0) { - if((errno == ETIMEDOUT) && (h->fd != -1)) { - D("[ timeout ]"); -- if(n > 0){ -- data += n; -- len -= n; -- } - continue; - } - D("ERROR: n = %d, errno = %d (%s)", -@@ -449,12 +445,12 @@ int usb_read(usb_handle *h, void *_data, int len) - return -1; - } - -- len -= xfer; -- data += xfer; -+ len -= n; -+ data += n; - } - - D("-- usb_read --"); -- return 0; -+ return orig_len - len; - } - - void usb_kick(usb_handle* h) { -diff --git a/adb/client/usb_osx.cpp b/adb/client/usb_osx.cpp -index 8713b2c4b..fcd0bc044 100644 ---- a/adb/client/usb_osx.cpp -+++ b/adb/client/usb_osx.cpp -@@ -518,7 +518,7 @@ int usb_read(usb_handle *handle, void *buf, int len) - } - - if (kIOReturnSuccess == result) -- return 0; -+ return numBytes; - else { - LOG(ERROR) << "usb_read failed with status: " << std::hex << result; - } -diff --git a/adb/client/usb_windows.cpp b/adb/client/usb_windows.cpp -index 9e00a5d6c..ee7f8024f 100644 ---- a/adb/client/usb_windows.cpp -+++ b/adb/client/usb_windows.cpp -@@ -415,6 +415,7 @@ int usb_read(usb_handle *handle, void* data, int len) { - unsigned long time_out = 0; - unsigned long read = 0; - int err = 0; -+ int orig_len = len; - - D("usb_read %d", len); - if (NULL == handle) { -@@ -423,9 +424,8 @@ int usb_read(usb_handle *handle, void* data, int len) { - goto fail; - } - -- while (len > 0) { -- if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, -- time_out)) { -+ while (len == orig_len) { -+ if (!AdbReadEndpointSync(handle->adb_read_pipe, data, len, &read, time_out)) { - D("AdbReadEndpointSync failed: %s", - android::base::SystemErrorCodeToString(GetLastError()).c_str()); - err = EIO; -@@ -433,11 +433,11 @@ int usb_read(usb_handle *handle, void* data, int len) { - } - D("usb_read got: %ld, expected: %d", read, len); - -- data = (char *)data + read; -+ data = (char*)data + read; - len -= read; - } - -- return 0; -+ return orig_len - len; - - fail: - // Any failure should cause us to kick the device instead of leaving it a -diff --git a/adb/commandline.cpp b/adb/commandline.cpp -index 7702b0edf..33456bffc 100644 ---- a/adb/commandline.cpp -+++ b/adb/commandline.cpp -@@ -212,6 +212,7 @@ static void help() { - " kill-server kill the server if it is running\n" - " reconnect kick connection from host side to force reconnect\n" - " reconnect device kick connection from device side to force reconnect\n" -+ " reconnect offline reset offline/unauthorized devices to force reconnect\n" - "\n" - "environment variables:\n" - " $ADB_TRACE\n" -@@ -1947,7 +1948,7 @@ int adb_commandline(int argc, const char** argv) { - return adb_query_command("host:host-features"); - } else if (!strcmp(argv[0], "reconnect")) { - if (argc == 1) { -- return adb_query_command("host:reconnect"); -+ return adb_query_command(format_host_command(argv[0], transport_type, serial)); - } else if (argc == 2) { - if (!strcmp(argv[1], "device")) { - std::string err; -diff --git a/adb/fdevent.cpp b/adb/fdevent.cpp -index 04cd8651c..72c9eef42 100644 ---- a/adb/fdevent.cpp -+++ b/adb/fdevent.cpp -@@ -75,13 +75,13 @@ static std::atomic terminate_loop(false); - static bool main_thread_valid; - static unsigned long main_thread_id; - --static void check_main_thread() { -+void check_main_thread() { - if (main_thread_valid) { - CHECK_EQ(main_thread_id, adb_thread_id()); - } - } - --static void set_main_thread() { -+void set_main_thread() { - main_thread_valid = true; - main_thread_id = adb_thread_id(); - } -diff --git a/adb/fdevent.h b/adb/fdevent.h -index 207f9b702..e32845afc 100644 ---- a/adb/fdevent.h -+++ b/adb/fdevent.h -@@ -76,9 +76,12 @@ void fdevent_set_timeout(fdevent *fde, int64_t timeout_ms); - */ - void fdevent_loop(); - -+void check_main_thread(); -+ - // The following functions are used only for tests. - void fdevent_terminate_loop(); - size_t fdevent_installed_count(); - void fdevent_reset(); -+void set_main_thread(); - - #endif -diff --git a/adb/services.cpp b/adb/services.cpp -index f764c52cc..dbf163d5b 100644 ---- a/adb/services.cpp -+++ b/adb/services.cpp -@@ -347,7 +347,7 @@ static void wait_for_state(int fd, void* data) { - std::string error = "unknown error"; - const char* serial = sinfo->serial.length() ? sinfo->serial.c_str() : NULL; - atransport* t = acquire_one_transport(sinfo->transport_type, serial, &is_ambiguous, &error); -- if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->connection_state)) { -+ if (t != nullptr && (sinfo->state == kCsAny || sinfo->state == t->GetConnectionState())) { - SendOkay(fd); - break; - } else if (!is_ambiguous) { -diff --git a/adb/sockets.cpp b/adb/sockets.cpp -index c05903f9e..04290a6e1 100644 ---- a/adb/sockets.cpp -+++ b/adb/sockets.cpp -@@ -794,7 +794,7 @@ static int smart_socket_enqueue(asocket* s, apacket* p) { - if (!s->transport) { - SendFail(s->peer->fd, "device offline (no transport)"); - goto fail; -- } else if (s->transport->connection_state == kCsOffline) { -+ } else if (s->transport->GetConnectionState() == kCsOffline) { - /* if there's no remote we fail the connection - ** right here and terminate it - */ -diff --git a/adb/test_device.py b/adb/test_device.py -index e76aaed5c..a30972e54 100644 ---- a/adb/test_device.py -+++ b/adb/test_device.py -@@ -1188,6 +1188,77 @@ class FileOperationsTest(DeviceTest): - self.device.shell(['rm', '-f', '/data/local/tmp/adb-test-*']) - - -+class DeviceOfflineTest(DeviceTest): -+ def _get_device_state(self, serialno): -+ output = subprocess.check_output(self.device.adb_cmd + ['devices']) -+ for line in output.split('\n'): -+ m = re.match('(\S+)\s+(\S+)', line) -+ if m and m.group(1) == serialno: -+ return m.group(2) -+ return None -+ -+ def test_killed_when_pushing_a_large_file(self): -+ """ -+ While running adb push with a large file, kill adb server. -+ Occasionally the device becomes offline. Because the device is still -+ reading data without realizing that the adb server has been restarted. -+ Test if we can bring the device online automatically now. -+ http://b/32952319 -+ """ -+ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() -+ # 1. Push a large file -+ file_path = 'tmp_large_file' -+ try: -+ fh = open(file_path, 'w') -+ fh.write('\0' * (100 * 1024 * 1024)) -+ fh.close() -+ subproc = subprocess.Popen(self.device.adb_cmd + ['push', file_path, '/data/local/tmp']) -+ time.sleep(0.1) -+ # 2. Kill the adb server -+ subprocess.check_call(self.device.adb_cmd + ['kill-server']) -+ subproc.terminate() -+ finally: -+ try: -+ os.unlink(file_path) -+ except: -+ pass -+ # 3. See if the device still exist. -+ # Sleep to wait for the adb server exit. -+ time.sleep(0.5) -+ # 4. The device should be online -+ self.assertEqual(self._get_device_state(serialno), 'device') -+ -+ def test_killed_when_pulling_a_large_file(self): -+ """ -+ While running adb pull with a large file, kill adb server. -+ Occasionally the device can't be connected. Because the device is trying to -+ send a message larger than what is expected by the adb server. -+ Test if we can bring the device online automatically now. -+ """ -+ serialno = subprocess.check_output(self.device.adb_cmd + ['get-serialno']).strip() -+ file_path = 'tmp_large_file' -+ try: -+ # 1. Create a large file on device. -+ self.device.shell(['dd', 'if=/dev/zero', 'of=/data/local/tmp/tmp_large_file', -+ 'bs=1000000', 'count=100']) -+ # 2. Pull the large file on host. -+ subproc = subprocess.Popen(self.device.adb_cmd + -+ ['pull','/data/local/tmp/tmp_large_file', file_path]) -+ time.sleep(0.1) -+ # 3. Kill the adb server -+ subprocess.check_call(self.device.adb_cmd + ['kill-server']) -+ subproc.terminate() -+ finally: -+ try: -+ os.unlink(file_path) -+ except: -+ pass -+ # 4. See if the device still exist. -+ # Sleep to wait for the adb server exit. -+ time.sleep(0.5) -+ self.assertEqual(self._get_device_state(serialno), 'device') -+ -+ - def main(): - random.seed(0) - if len(adb.get_devices()) > 0: -diff --git a/adb/transport.cpp b/adb/transport.cpp -index 4686841ec..cc8c16252 100644 ---- a/adb/transport.cpp -+++ b/adb/transport.cpp -@@ -33,6 +33,7 @@ - - #include - #include -+#include - #include - #include - -@@ -41,6 +42,7 @@ - #include "adb_trace.h" - #include "adb_utils.h" - #include "diagnose_usb.h" -+#include "fdevent.h" - - static void transport_unref(atransport *t); - -@@ -209,6 +211,11 @@ static void read_transport_thread(void* _t) { - put_apacket(p); - break; - } -+#if ADB_HOST -+ if (p->msg.command == 0) { -+ continue; -+ } -+#endif - } - - D("%s: received remote packet, sending to transport", t->serial); -@@ -271,7 +278,11 @@ static void write_transport_thread(void* _t) { - if (active) { - D("%s: transport got packet, sending to remote", t->serial); - ATRACE_NAME("write_transport write_remote"); -- t->write_to_remote(p, t); -+ if (t->Write(p) != 0) { -+ D("%s: remote write failed for transport", t->serial); -+ put_apacket(p); -+ break; -+ } - } else { - D("%s: transport ignoring packet while offline", t->serial); - } -@@ -493,7 +504,7 @@ static void transport_registration_func(int _fd, unsigned ev, void* data) { - } - - /* don't create transport threads for inaccessible devices */ -- if (t->connection_state != kCsNoPerm) { -+ if (t->GetConnectionState() != kCsNoPerm) { - /* initial references are the two threads */ - t->ref_count = 2; - -@@ -538,6 +549,15 @@ void init_transport_registration(void) { - transport_registration_func, 0); - - fdevent_set(&transport_registration_fde, FDE_READ); -+#if ADB_HOST -+ android::base::at_quick_exit([]() { -+ // To avoid only writing part of a packet to a transport after exit, kick all transports. -+ std::lock_guard lock(transport_lock); -+ for (auto t : transport_list) { -+ t->Kick(); -+ } -+ }); -+#endif - } - - /* the fdevent select pump is single threaded */ -@@ -600,7 +620,7 @@ static int qual_match(const char* to_test, const char* prefix, const char* qual, - } - - atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, -- std::string* error_out) { -+ std::string* error_out, bool accept_any_state) { - atransport* result = nullptr; - - if (serial) { -@@ -615,7 +635,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* - - std::unique_lock lock(transport_lock); - for (const auto& t : transport_list) { -- if (t->connection_state == kCsNoPerm) { -+ if (t->GetConnectionState() == kCsNoPerm) { - #if ADB_HOST - *error_out = UsbNoPermissionsLongHelpText(); - #endif -@@ -664,7 +684,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* - lock.unlock(); - - // Don't return unauthorized devices; the caller can't do anything with them. -- if (result && result->connection_state == kCsUnauthorized) { -+ if (result && result->GetConnectionState() == kCsUnauthorized && !accept_any_state) { - *error_out = "device unauthorized.\n"; - char* ADB_VENDOR_KEYS = getenv("ADB_VENDOR_KEYS"); - *error_out += "This adb server's $ADB_VENDOR_KEYS is "; -@@ -676,7 +696,7 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* - } - - // Don't return offline devices; the caller can't do anything with them. -- if (result && result->connection_state == kCsOffline) { -+ if (result && result->GetConnectionState() == kCsOffline && !accept_any_state) { - *error_out = "device offline"; - result = nullptr; - } -@@ -688,16 +708,38 @@ atransport* acquire_one_transport(TransportType type, const char* serial, bool* - return result; - } - -+int atransport::Write(apacket* p) { -+#if ADB_HOST -+ std::lock_guard lock(write_msg_lock_); -+#endif -+ return write_func_(p, this); -+} -+ - void atransport::Kick() { - if (!kicked_) { - kicked_ = true; - CHECK(kick_func_ != nullptr); -+#if ADB_HOST -+ // On host, adb server should avoid writing part of a packet, so don't -+ // kick a transport whiling writing a packet. -+ std::lock_guard lock(write_msg_lock_); -+#endif - kick_func_(this); - } - } - -+ConnectionState atransport::GetConnectionState() const { -+ return connection_state_; -+} -+ -+void atransport::SetConnectionState(ConnectionState state) { -+ check_main_thread(); -+ connection_state_ = state; -+} -+ - const std::string atransport::connection_state_name() const { -- switch (connection_state) { -+ ConnectionState state = GetConnectionState(); -+ switch (state) { - case kCsOffline: - return "offline"; - case kCsBootloader: -@@ -963,10 +1005,10 @@ void kick_all_tcp_devices() { - - void register_usb_transport(usb_handle* usb, const char* serial, const char* devpath, - unsigned writeable) { -- atransport* t = new atransport(); -+ atransport* t = new atransport((writeable ? kCsOffline : kCsNoPerm)); - - D("transport: %p init'ing for usb_handle %p (sn='%s')", t, usb, serial ? serial : ""); -- init_usb_transport(t, usb, (writeable ? kCsOffline : kCsNoPerm)); -+ init_usb_transport(t, usb); - if (serial) { - t->serial = strdup(serial); - } -@@ -987,12 +1029,13 @@ void register_usb_transport(usb_handle* usb, const char* serial, const char* dev - void unregister_usb_transport(usb_handle* usb) { - std::lock_guard lock(transport_lock); - transport_list.remove_if( -- [usb](atransport* t) { return t->usb == usb && t->connection_state == kCsNoPerm; }); -+ [usb](atransport* t) { return t->usb == usb && t->GetConnectionState() == kCsNoPerm; }); - } - - int check_header(apacket* p, atransport* t) { - if (p->msg.magic != (p->msg.command ^ 0xffffffff)) { -- VLOG(RWX) << "check_header(): invalid magic"; -+ VLOG(RWX) << "check_header(): invalid magic command = " << std::hex << p->msg.command -+ << ", magic = " << p->msg.magic; - return -1; - } - -@@ -1020,4 +1063,11 @@ std::shared_ptr atransport::NextKey() { - keys_.pop_front(); - return result; - } -+bool atransport::SetSendConnectOnError() { -+ if (has_send_connect_on_error_) { -+ return false; -+ } -+ has_send_connect_on_error_ = true; -+ return true; -+} - #endif -diff --git a/adb/transport.h b/adb/transport.h -index 4d97fc78b..8c15d663d 100644 ---- a/adb/transport.h -+++ b/adb/transport.h -@@ -19,10 +19,12 @@ - - #include - -+#include - #include - #include - #include - #include -+#include - #include - #include - -@@ -57,31 +59,35 @@ public: - // class in one go is a very large change. Given how bad our testing is, - // it's better to do this piece by piece. - -- atransport() { -+ atransport(ConnectionState state = kCsOffline) : connection_state_(state) { - transport_fde = {}; - protocol_version = A_VERSION; - max_payload = MAX_PAYLOAD; - } -- - virtual ~atransport() {} - - int (*read_from_remote)(apacket* p, atransport* t) = nullptr; -- int (*write_to_remote)(apacket* p, atransport* t) = nullptr; - void (*close)(atransport* t) = nullptr; -+ -+ void SetWriteFunction(int (*write_func)(apacket*, atransport*)) { write_func_ = write_func; } - void SetKickFunction(void (*kick_func)(atransport*)) { - kick_func_ = kick_func; - } - bool IsKicked() { - return kicked_; - } -+ int Write(apacket* p); - void Kick(); - -+ // ConnectionState can be read by all threads, but can only be written in the main thread. -+ ConnectionState GetConnectionState() const; -+ void SetConnectionState(ConnectionState state); -+ - int fd = -1; - int transport_socket = -1; - fdevent transport_fde; - size_t ref_count = 0; - uint32_t sync_token = 0; -- ConnectionState connection_state = kCsOffline; - bool online = false; - TransportType type = kTransportAny; - -@@ -114,11 +120,13 @@ public: - - #if ADB_HOST - std::shared_ptr NextKey(); -+ bool SetSendConnectOnError(); - #endif - - char token[TOKEN_SIZE] = {}; - size_t failed_auth_attempts = 0; - -+ const std::string serial_name() const { return serial ? serial : ""; } - const std::string connection_state_name() const; - - void update_version(int version, size_t payload); -@@ -157,6 +165,7 @@ private: - int local_port_for_emulator_ = -1; - bool kicked_ = false; - void (*kick_func_)(atransport*) = nullptr; -+ int (*write_func_)(apacket*, atransport*) = nullptr; - - // A set of features transmitted in the banner with the initial connection. - // This is stored in the banner as 'features=feature0,feature1,etc'. -@@ -167,8 +176,11 @@ private: - // A list of adisconnect callbacks called when the transport is kicked. - std::list disconnects_; - -+ std::atomic connection_state_; - #if ADB_HOST - std::deque> keys_; -+ std::mutex write_msg_lock_; -+ bool has_send_connect_on_error_ = false; - #endif - - DISALLOW_COPY_AND_ASSIGN(atransport); -@@ -181,8 +193,8 @@ private: - * is set to true and nullptr returned. - * If no suitable transport is found, error is set and nullptr returned. - */ --atransport* acquire_one_transport(TransportType type, const char* serial, -- bool* is_ambiguous, std::string* error_out); -+atransport* acquire_one_transport(TransportType type, const char* serial, bool* is_ambiguous, -+ std::string* error_out, bool accept_any_state = false); - void kick_transport(atransport* t); - void update_transports(void); - -diff --git a/adb/transport_local.cpp b/adb/transport_local.cpp -index 408f51fa1..3ee286a12 100644 ---- a/adb/transport_local.cpp -+++ b/adb/transport_local.cpp -@@ -515,12 +515,11 @@ int init_socket_transport(atransport *t, int s, int adb_port, int local) - int fail = 0; - - t->SetKickFunction(remote_kick); -+ t->SetWriteFunction(remote_write); - t->close = remote_close; - t->read_from_remote = remote_read; -- t->write_to_remote = remote_write; - t->sfd = s; - t->sync_token = 1; -- t->connection_state = kCsOffline; - t->type = kTransportLocal; - - #if ADB_HOST -diff --git a/adb/transport_test.cpp b/adb/transport_test.cpp -index 8b38e0334..68689d4a6 100644 ---- a/adb/transport_test.cpp -+++ b/adb/transport_test.cpp -@@ -94,12 +94,13 @@ TEST(transport, SetFeatures) { - } - - TEST(transport, parse_banner_no_features) { -+ set_main_thread(); - atransport t; - - parse_banner("host::", &t); - - ASSERT_EQ(0U, t.features().size()); -- ASSERT_EQ(kCsHost, t.connection_state); -+ ASSERT_EQ(kCsHost, t.GetConnectionState()); - - ASSERT_EQ(nullptr, t.product); - ASSERT_EQ(nullptr, t.model); -@@ -113,7 +114,7 @@ TEST(transport, parse_banner_product_features) { - "host::ro.product.name=foo;ro.product.model=bar;ro.product.device=baz;"; - parse_banner(banner, &t); - -- ASSERT_EQ(kCsHost, t.connection_state); -+ ASSERT_EQ(kCsHost, t.GetConnectionState()); - - ASSERT_EQ(0U, t.features().size()); - -@@ -130,7 +131,7 @@ TEST(transport, parse_banner_features) { - "features=woodly,doodly"; - parse_banner(banner, &t); - -- ASSERT_EQ(kCsHost, t.connection_state); -+ ASSERT_EQ(kCsHost, t.GetConnectionState()); - - ASSERT_EQ(2U, t.features().size()); - ASSERT_TRUE(t.has_feature("woodly")); -diff --git a/adb/transport_usb.cpp b/adb/transport_usb.cpp -index 516b4f20d..ce419b88d 100644 ---- a/adb/transport_usb.cpp -+++ b/adb/transport_usb.cpp -@@ -25,9 +25,115 @@ - - #include "adb.h" - -+#if ADB_HOST -+ -+static constexpr size_t MAX_USB_BULK_PACKET_SIZE = 1024u; -+ -+// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes -+// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -+static int UsbReadMessage(usb_handle* h, amessage* msg) { -+ D("UsbReadMessage"); -+ char buffer[MAX_USB_BULK_PACKET_SIZE]; -+ int n = usb_read(h, buffer, sizeof(buffer)); -+ if (n == sizeof(*msg)) { -+ memcpy(msg, buffer, sizeof(*msg)); -+ } -+ return n; -+} -+ -+// Call usb_read using a buffer having a multiple of MAX_USB_BULK_PACKET_SIZE bytes -+// to avoid overflow. See http://libusb.sourceforge.net/api-1.0/packetoverflow.html. -+static int UsbReadPayload(usb_handle* h, apacket* p) { -+ D("UsbReadPayload"); -+ size_t need_size = p->msg.data_length; -+ size_t data_pos = 0u; -+ while (need_size > 0u) { -+ int n = 0; -+ if (data_pos + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { -+ // Read directly to p->data. -+ size_t rem_size = need_size % MAX_USB_BULK_PACKET_SIZE; -+ size_t direct_read_size = need_size - rem_size; -+ if (rem_size && -+ data_pos + direct_read_size + MAX_USB_BULK_PACKET_SIZE <= sizeof(p->data)) { -+ direct_read_size += MAX_USB_BULK_PACKET_SIZE; -+ } -+ n = usb_read(h, &p->data[data_pos], direct_read_size); -+ if (n < 0) { -+ D("usb_read(size %zu) failed", direct_read_size); -+ return n; -+ } -+ } else { -+ // Read indirectly using a buffer. -+ char buffer[MAX_USB_BULK_PACKET_SIZE]; -+ n = usb_read(h, buffer, sizeof(buffer)); -+ if (n < 0) { -+ D("usb_read(size %zu) failed", sizeof(buffer)); -+ return -1; -+ } -+ size_t copy_size = std::min(static_cast(n), need_size); -+ D("usb read %d bytes, need %zu bytes, copy %zu bytes", n, need_size, copy_size); -+ memcpy(&p->data[data_pos], buffer, copy_size); -+ } -+ data_pos += n; -+ need_size -= std::min(static_cast(n), need_size); -+ } -+ return static_cast(data_pos); -+} -+ -+static int remote_read(apacket* p, atransport* t) { -+ int n = UsbReadMessage(t->usb, &p->msg); -+ if (n < 0) { -+ D("remote usb: read terminated (message)"); -+ return -1; -+ } -+ if (static_cast(n) != sizeof(p->msg) || check_header(p, t)) { -+ D("remote usb: check_header failed, skip it"); -+ goto err_msg; -+ } -+ if (t->GetConnectionState() == kCsOffline) { -+ // If we read a wrong msg header declaring a large message payload, don't read its payload. -+ // Otherwise we may miss true messages from the device. -+ if (p->msg.command != A_CNXN && p->msg.command != A_AUTH) { -+ goto err_msg; -+ } -+ } -+ if (p->msg.data_length) { -+ n = UsbReadPayload(t->usb, p); -+ if (n < 0) { -+ D("remote usb: terminated (data)"); -+ return -1; -+ } -+ if (static_cast(n) != p->msg.data_length) { -+ D("remote usb: read payload failed (need %u bytes, give %d bytes), skip it", -+ p->msg.data_length, n); -+ goto err_msg; -+ } -+ } -+ if (check_data(p)) { -+ D("remote usb: check_data failed, skip it"); -+ goto err_msg; -+ } -+ return 0; -+ -+err_msg: -+ p->msg.command = 0; -+ if (t->GetConnectionState() == kCsOffline) { -+ // If the data toggle of ep_out on device and ep_in on host are not the same, we may receive -+ // an error message. In this case, resend one A_CNXN message to connect the device. -+ if (t->SetSendConnectOnError()) { -+ SendConnectOnHost(t); -+ } -+ } -+ return 0; -+} -+ -+#else -+ -+// On Android devices, we rely on the kernel to provide buffered read. -+// So we can recover automatically from EOVERFLOW. - static int remote_read(apacket *p, atransport *t) - { -- if(usb_read(t->usb, &p->msg, sizeof(amessage))){ -+ if (usb_read(t->usb, &p->msg, sizeof(amessage))) { - D("remote usb: read terminated (message)"); - return -1; - } -@@ -38,7 +144,7 @@ static int remote_read(apacket *p, atransport *t) - } - - if(p->msg.data_length) { -- if(usb_read(t->usb, p->data, p->msg.data_length)){ -+ if (usb_read(t->usb, p->data, p->msg.data_length)) { - D("remote usb: terminated (data)"); - return -1; - } -@@ -51,17 +157,18 @@ static int remote_read(apacket *p, atransport *t) - - return 0; - } -+#endif - - static int remote_write(apacket *p, atransport *t) - { - unsigned size = p->msg.data_length; - -- if(usb_write(t->usb, &p->msg, sizeof(amessage))) { -+ if (usb_write(t->usb, &p->msg, sizeof(amessage))) { - D("remote usb: 1 - write terminated"); - return -1; - } - if(p->msg.data_length == 0) return 0; -- if(usb_write(t->usb, &p->data, size)) { -+ if (usb_write(t->usb, &p->data, size)) { - D("remote usb: 2 - write terminated"); - return -1; - } -@@ -75,20 +182,17 @@ static void remote_close(atransport *t) - t->usb = 0; - } - --static void remote_kick(atransport *t) --{ -+static void remote_kick(atransport* t) { - usb_kick(t->usb); - } - --void init_usb_transport(atransport *t, usb_handle *h, ConnectionState state) --{ -+void init_usb_transport(atransport* t, usb_handle* h) { - D("transport: usb"); - t->close = remote_close; - t->SetKickFunction(remote_kick); -+ t->SetWriteFunction(remote_write); - t->read_from_remote = remote_read; -- t->write_to_remote = remote_write; - t->sync_token = 1; -- t->connection_state = state; - t->type = kTransportUsb; - t->usb = h; - } --- -2.14.3 - diff --git a/0003-atomic-fix.patch b/0003-atomic-fix.patch deleted file mode 100644 index 6d9a7b2..0000000 --- a/0003-atomic-fix.patch +++ /dev/null @@ -1,17 +0,0 @@ -diff --git a/libcutils/include/cutils/trace.h b/libcutils/include/cutils/trace.h -index fcbdc9b..4281375 100644 ---- a/libcutils/include/cutils/trace.h -+++ b/libcutils/include/cutils/trace.h -@@ -18,7 +18,12 @@ - #define _LIBS_CUTILS_TRACE_H - - #include -+#ifdef __cplusplus -+#include -+using namespace std; -+#else - #include -+#endif - #include - #include - #include diff --git a/0003-buildlib-remove.patch b/0003-buildlib-remove.patch new file mode 100644 index 0000000..dfec0b1 --- /dev/null +++ b/0003-buildlib-remove.patch @@ -0,0 +1,12 @@ +diff --git a/adb/adb.cpp b/adb/adb.cpp +index 38c6f62c9..9df41a236 100644 +--- a/adb/adb.cpp ++++ b/adb/adb.cpp +@@ -44,7 +44,6 @@ + #include + #include + #include +-#include + + #include "adb_auth.h" + #include "adb_io.h" diff --git a/android-tools.spec b/android-tools.spec index 8977825..9939e1d 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,12 +1,10 @@ -%global date 20170311 -%global git_commit e7195be7725a +%global date 20180828 +%global git_commit c7815d675 %global packdname core-%{git_commit} -%global extras_git_commit 61f6603 -%global extras_packdname extras-%{extras_git_commit} -%global boring_git_commit 7d422bc +%global boring_git_commit fb44824b9 %global boring_packdname boringssl-%{boring_git_commit} -%global mdns_git_commit ca0cba5 +%global mdns_git_commit 33e620a7 %global mdns_packdname mdnsresponder-%{mdns_git_commit} @@ -14,19 +12,17 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 8%{?dist} +Release: 1%{?dist} Summary: Android platform tools(adb, fastboot) Group: Applications/System -# The entire source code is ASL 2.0 except fastboot/ which is BSD +# The entire source code is ASL 2.0 except boringssl which is BSD License: ASL 2.0 and (ASL 2.0 and BSD) URL: http://developer.android.com/guide/developing/tools/ # using git archive since upstream hasn't created tarballs. -# git archive --format=tar --prefix=%%{packdname}/ %%{git_commit} adb base fastboot libcrypto_utils libcutils liblog libsparse libutils libziparchive mkbootimg include | xz > %%{packdname}.tar.xz +# git archive --format=tar --prefix=core/ %%{git_commit} adb base diagnose_usb fastboot libcrypto_utils libcutils liblog libsparse libsystem libutils libziparchive mkbootimg include | xz > %%{packdname}.tar.xz # https://android.googlesource.com/platform/system/core.git -# git archive --format=tar --prefix=extras/ %%{extras_git_commit} ext4_utils f2fs_utils | xz > %%{extras_packdname}.tar.xz -# https://android.googlesource.com/platform/system/extras.git # git archive --format=tar --prefix=boringssl/ %%{boring_git_commit} src/crypto include src/include | xz > %%{boring_packdname}.tar.xz # https://android.googlesource.com/platform/external/boringssl # git archive --format=tar --prefix=mdnsresponder/ %%{mdns_git_commit} mDNSShared | xz > %%{mdns_packdname}.tar.xz @@ -35,7 +31,6 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: %{packdname}.tar.xz -Source1: %{extras_packdname}.tar.xz Source2: generate_build.rb Source3: %{boring_packdname}.tar.xz Source4: %{mdns_packdname}.tar.xz @@ -43,20 +38,18 @@ Source5: 51-android.rules Source6: adb.service Patch1: 0001-Add-string-h.patch Patch2: 0002-libusb-modifications.patch -Patch3: 0003-atomic-fix.patch +Patch3: 0003-buildlib-remove.patch Patch4: 0004-bz1441234.patch # https://bugzilla.redhat.com/show_bug.cgi?id=1470740 -Patch5: 0001-adb-don-t-reset-usb-when-connecting-it.patch -Patch6: 0001-adb-fix-two-device-offline-problems.patch Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -BuildRequires: gcc-c++ +BuildRequires: clang +BuildRequires: ninja-build BuildRequires: zlib-devel BuildRequires: openssl-devel BuildRequires: libselinux-devel -BuildRequires: f2fs-tools-devel BuildRequires: gtest-devel BuildRequires: libusbx-devel BuildRequires: systemd @@ -94,27 +87,31 @@ to read and write the flash partitions. It needs the same USB device setup between the host and the target phone as adb. %prep -%setup -q -b 1 -n extras %setup -q -b 3 -n boringssl %setup -q -b 4 -n mdnsresponder -%setup -q -b 0 -n %{packdname} +%setup -q -b 0 -n core %patch1 -p1 %patch2 -p1 %patch3 -p1 %patch4 -p1 -%patch5 -p1 -%patch6 -p1 cp -p %{SOURCE5} 51-android.rules +export CC="clang" +export CXX="clang++" +sed -i 's/android::build::GetBuildNumber().c_str()/"%{git_commit}"/g' adb/adb.cpp + +%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g') %build -ruby %{SOURCE2} | tee build.sh -PKGVER=%{git_commit} CXXFLAGS="%{optflags}" CFLAGS="%{optflags}" sh -xe build.sh +cd .. +PKGVER=%{git_commit} CXXFLAGS="%{optflags} -Qunused-arguments" CFLAGS="%{optflags} -Qunused-arguments" ruby %{SOURCE2} > build.ninja +%ninja_build %install +cd ../ install -d -m 0755 ${RPM_BUILD_ROOT}%{_bindir} install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb -install -m 0755 -t ${RPM_BUILD_ROOT}%{_bindir} adb/adb fastboot/fastboot libsparse/simg2img libsparse/img2simg +install -m 0755 -t ${RPM_BUILD_ROOT}%{_bindir} adb fastboot simg2img img2simg install -p -D -m 0644 %{SOURCE6} \ %{buildroot}%{_unitdir}/adb.service @@ -131,15 +128,19 @@ install -p -D -m 0644 %{SOURCE6} \ %doc adb/OVERVIEW.TXT adb/SERVICES.TXT adb/NOTICE adb/protocol.txt 51-android.rules %{_unitdir}/adb.service %attr(0755,root,root) %dir %{_sharedstatedir}/adb -#ASL2.0 +#ASL2.0 and BSD %{_bindir}/adb +#ASL2.0 %{_bindir}/simg2img %{_bindir}/img2simg -#ASL2.0 and BSD. %{_bindir}/fastboot %changelog +* Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 +- Update to upstream git commit c7815d675 +- Resolves: rhbz 1535542 1550703 1603379 Switch to clang and ninja + * Thu Jul 12 2018 Fedora Release Engineering - 20170311gite7195be7725a-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild diff --git a/generate_build.rb b/generate_build.rb index 5666971..3fbb86e 100644 --- a/generate_build.rb +++ b/generate_build.rb @@ -14,116 +14,168 @@ def compile(sources, cflags) outputs = [] for s in sources ext = File.extname(s) - + case ext when '.c' - cc = 'gcc' - lang_flags = '-std=gnu11 $CFLAGS $CPPFLAGS' + cc = 'cc' + lang_flags = '-std=gnu11 $CFLAGS $CPPFLAGS' when '.cpp', '.cc' - cc = 'g++' - lang_flags = '-std=gnu++14 $CXXFLAGS $CPPFLAGS' + cc = 'cxx' + lang_flags = '-std=gnu++17 $CXXFLAGS $CPPFLAGS' else raise "Unknown extension #{ext}" end output = s + '.o' outputs << output - puts "#{cc} -o #{output} #{lang_flags} #{cflags} -c #{s}\n" + puts "build #{output}: #{cc} #{s}\n cflags = #{lang_flags} #{cflags}" end return outputs end -# Links object files -def link(output, objects, ldflags) - puts "g++ -o #{output} #{ldflags} $LDFLAGS #{objects.join(' ')}" +# dir - directory where ninja file is located +# lib - static library path relative to dir +def subninja(dir, lib) + puts "subninja #{dir}build.ninja" + return lib.each{|l| dir + l} end +# Links object files +def link(output, objects, ldflags) + puts "build #{output}: link #{objects.join(' ')}\n ldflags = #{ldflags} $LDFLAGS" +end + +puts "# This set of commands generated by generate_build.rb script\n\n" +puts "CC = #{ENV['CC'] || 'clang'}" +puts "CXX = #{ENV['CXX'] || 'clang++'}\n\n" +puts "CFLAGS = #{ENV['CFLAGS']}" +puts "CXXFLAGS = #{ENV['CXXFLAGS']}" +puts "LDFLAGS = #{ENV['LDFLAGS']}" +puts "PKGVER = #{ENV['PKGVER']}\n\n" + + +puts """ +rule cc + command = $CC $cflags -c $in -o $out + +rule cxx + command = $CXX $cflags -c $in -o $out + +rule link + command = $CXX $ldflags $LDFLAGS $in -o $out + + +""" + adbdfiles = %w( - client/usb_dispatch.cpp - client/usb_libusb.cpp - client/usb_linux.cpp adb.cpp adb_io.cpp - socket_spec.cpp adb_listeners.cpp + adb_trace.cpp adb_utils.cpp + adb_unique_fd.cpp sockets.cpp transport.cpp transport_local.cpp transport_usb.cpp - services.cpp - adb_trace.cpp - diagnose_usb.cpp - adb_auth_host.cpp - sysdeps_unix.cpp -) -libadbd = compile(expand('adb', adbdfiles), '-DADB_REVISION=\"$PKGVER\" -DADB_HOST=1 -fpermissive -I../boringssl/include -Iadb -Iinclude -Ibase/include -Ilibcrypto_utils/include') - -adbshfiles = %w( fdevent.cpp - shell_service.cpp shell_service_protocol.cpp ) -libadbsh = compile(expand('adb', adbshfiles), '-DADB_REVISION=\"$PKGVER\" -DADB_HOST=0 -D_Nonnull= -D_Nullable= -fpermissive -Iadb -Iinclude -Ibase/include') +libadbd = compile(expand('core/adb', adbdfiles), '-DADB_HOST=1 -Icore/diagnose_usb/include -Icore/include -Icore/base/include -Icore/adb -Icore/libcrypto_utils/include') adbfiles = %w( - console.cpp - bugreport.cpp - commandline.cpp - adb_client.cpp + client/auth.cpp + client/console.cpp + socket_spec.cpp + client/bugreport.cpp + client/line_printer.cpp + client/commandline.cpp + client/adb_client.cpp + services.cpp + client/file_sync_client.cpp + sysdeps_unix.cpp sysdeps/errno.cpp - file_sync_client.cpp - line_printer.cpp - transport_mdns.cpp + sysdeps/posix/network.cpp client/main.cpp + client/usb_dispatch.cpp + client/usb_linux.cpp + client/usb_libusb.cpp + client/transport_mdns.cpp ) -libadb = compile(expand('adb', adbfiles), '-DADB_REVISION=\"$PKGVER\" -D_GNU_SOURCE -DADB_HOST=1 -D_Nonnull= -D_Nullable= -fpermissive -Iadb -I../mdnsresponder/mDNSShared -Iinclude -Ibase/include') +libadb = compile(expand('core/adb', adbfiles), '-D_GNU_SOURCE -DADB_HOST=1 -Icore/libcrypto_utils/include -Iboringssl/src/include -Icore/include -Icore/base/include -Icore/adb -Imdnsresponder/mDNSShared') basefiles = %w( file.cpp + threads.cpp logging.cpp parsenetaddress.cpp stringprintf.cpp strings.cpp errors_unix.cpp + test_utils.cpp ) -libbase = compile(expand('base', basefiles), '-DADB_HOST=1 -D_GNU_SOURCE -Ibase/include -Iinclude') +libbase = compile(expand('core/base', basefiles), '-DADB_HOST=1 -Icore/base/include -Icore/include') logfiles = %w( - logger_write.c - local_logger.c - config_read.c - logprint.c - stderr_write.c - config_write.c - logger_lock.c - logger_name.c - log_event_list.c log_event_write.c fake_log_device.c + log_event_list.c + logger_write.c + config_write.c + config_read.c + logger_lock.c + local_logger.c fake_writer.c + logger_name.c + stderr_write.c + logprint.c ) -liblog = compile(expand('liblog', logfiles), '-DLIBLOG_LOG_TAG=1005 -DFAKE_LOG_DEVICE=1 -D_GNU_SOURCE -Ilog/include -Iinclude') +liblog = compile(expand('core/liblog', logfiles), '-DLIBLOG_LOG_TAG=1006 -D_XOPEN_SOURCE=700 -DFAKE_LOG_DEVICE=1 -Icore/libsystem/include -Icore/liblog/include -Icore/include') cutilsfiles = %w( - load_file.c - socket_inaddr_any_server_unix.c - socket_local_client_unix.c - socket_local_server_unix.c - socket_loopback_server_unix.c - socket_network_client_unix.c - threads.c - sockets.cpp + fs_config.cpp + canned_fs_config.cpp android_get_control_file.cpp + socket_network_client_unix.cpp + socket_inaddr_any_server_unix.cpp + sockets.cpp sockets_unix.cpp + socket_local_client_unix.cpp + socket_local_server_unix.cpp ) -libcutils = compile(expand('libcutils', cutilsfiles), '-D_GNU_SOURCE -Iinclude') +libcutils = compile(expand('core/libcutils', cutilsfiles), '-D_GNU_SOURCE -Icore/libcutils/include -Icore/include -Icore/base/include') -cryptofiles = %w( +diagnoseusbfiles = %w( + diagnose_usb.cpp +) +libdiagnoseusb = compile(expand('core/diagnose_usb', diagnoseusbfiles), '-Icore/diagnose_usb/include -Icore/include -Icore/base/include') + +libcryptofiles = %w( android_pubkey.c ) -libcryptoutils = compile(expand('libcrypto_utils', cryptofiles), '-Ilibcrypto_utils/include -I../boringssl/include -Iinclude') +libcrypto = compile(expand('core/libcrypto_utils', libcryptofiles), '-Icore/libcrypto_utils/include -Iboringssl/src/include') + +utilfiles = %w( + FileMap.cpp + Unicode.cpp + SharedBuffer.cpp + String8.cpp + String16.cpp +) +libutil = compile(expand('core/libutils', utilfiles), '-Icore/include') + +mdnsfiles = %w( + mDNSShared/dnssd_ipc.c + mDNSShared/dnssd_clientstub.c +) +mdns = compile(expand('mdnsresponder', mdnsfiles), '-D_GNU_SOURCE -DHAVE_IPV6 -DHAVE_LINUX -DNOT_HAVE_SA_LEN -DUSES_NETLINK -UMDNS_DEBUGMSGS -DMDNS_DEBUGMSGS=0 -Imdnsresponder/mDNSShared -Imdnsresponder/mDNSCore -Iinclude') + +zipfiles = %w( + zip_archive_stream_entry.cc + zip_archive.cc +) +libzip = compile(expand('core/libziparchive', zipfiles), '-Icore/libziparchive/include -Icore/base/include -Icore/include') boringcryptofiles = %w( bn/cmp.c @@ -135,75 +187,48 @@ boringcryptofiles = %w( bn/convert.c base64/base64.c ) -boringcrypto = compile(expand('../boringssl/src/crypto', boringcryptofiles), '-I../boringssl/include -Iinclude') -mdnsfiles = %w( - mDNSShared/dnssd_ipc.c - mDNSShared/dnssd_clientstub.c -) -mdns = compile(expand('../mdnsresponder', mdnsfiles), '-D_GNU_SOURCE -DHAVE_IPV6 -DHAVE_LINUX -DNOT_HAVE_SA_LEN -DUSES_NETLINK -UMDNS_DEBUGMSGS -DMDNS_DEBUGMSGS=0 -I../mdnsresponder/mDNSShared -I../mdnsresponder/mDNSCore -Iinclude') +boringcrypto = compile(expand('boringssl/src/crypto', boringcryptofiles), '-Iboringssl/src/include -Iinclude') + +link('adb', libbase + liblog + libcutils + libcrypto + libadbd + libadb + libdiagnoseusb + libutil + libzip + mdns + boringcrypto, '-lz -lcrypto -lpthread -lusb-1.0') -link('adb/adb', libbase + liblog + libcutils + boringcrypto + libcryptoutils + libadbd + libadbsh + mdns + libadb, '-lrt -ldl -lpthread -lcrypto -lutil -lusb-1.0') fastbootfiles = %w( + bootimg_utils.cpp + fs.cpp socket.cpp tcp.cpp udp.cpp - protocol.cpp - engine.cpp - bootimg_utils.cpp - fastboot.cpp - util.cpp - fs.cpp usb_linux.cpp + util.cpp + main.cpp + engine.cpp + fastboot.cpp + fastboot_driver.cpp ) -libfastboot = compile(expand('fastboot', fastbootfiles), '-DFASTBOOT_REVISION=\"$PKGVER\" -D_GNU_SOURCE -Iadb -Iinclude -Imkbootimg -Ibase/include -Ilibsparse/include -I../extras/ext4_utils/include -I../extras/f2fs_utils') +libfastboot = compile(expand('core/fastboot', fastbootfiles), '-DFASTBOOT_VERSION="\"$PKGVER\"" -D_GNU_SOURCE -D_XOPEN_SOURCE=700 -DUSE_F2FS -Icore/base/include -Icore/include -Icore/adb -Icore/libsparse/include -Icore/mkbootimg/include/bootimg -Icore/libziparchive/include -Icore/diagnose_usb/include') sparsefiles = %w( - backed_block.c - output_file.c - sparse.c - sparse_crc32.c - sparse_err.c - sparse_read.c + backed_block.cpp + output_file.cpp + sparse.cpp + sparse_crc32.cpp + sparse_err.cpp + sparse_read.cpp ) -libsparse = compile(expand('libsparse', sparsefiles), '-Ilibsparse/include') +libsparse = compile(expand('core/libsparse', sparsefiles), '-Icore/libsparse/include -Icore/base/include') -zipfiles = %w( - zip_archive.cc -) -libzip = compile(expand('libziparchive', zipfiles), '-Ibase/include -Iinclude') - -utilfiles = %w( - FileMap.cpp -) -libutil = compile(expand('libutils', utilfiles), '-Iinclude') - -ext4files = %w( - make_ext4fs.c - ext4fixup.c - ext4_utils.c - allocate.c - contents.c - extent.c - indirect.c - sha1.c - wipe.c - crc16.c - ext4_sb.c -) -libext4 = compile(expand('../extras/ext4_utils', ext4files), '-Ilibsparse/include -Iinclude -I../extras/ext4_utils/include') - -link('fastboot/fastboot', libsparse + libzip + liblog + libutil + libcutils + boringcrypto + libcryptoutils + libbase + libext4 + libfastboot + libadbsh + libadbd, '-lpthread -lselinux -lz -lcrypto -lutil -lusb-1.0') +link('fastboot', libsparse + libzip + libcutils + liblog + libutil + libbase + libfastboot + libdiagnoseusb, '-lz -lpcre2-8 -lpthread -ldl') simg2imgfiles = %w( - simg2img.c + simg2img.cpp ) -libsimg2img = compile(expand('libsparse', simg2imgfiles), '-Iinclude -Ilibsparse/include') -link('libsparse/simg2img', libsparse + libsimg2img, '-lz') +libsimg2img = compile(expand('core/libsparse', simg2imgfiles), '-Iinclude -Icore/libsparse/include') +link('simg2img', libbase + libsparse + libsimg2img, '-lz') img2simgfiles = %w( - img2simg.c + img2simg.cpp ) -libimg2simg = compile(expand('libsparse', img2simgfiles), '-Iinclude -Ilibsparse/include') -link('libsparse/img2simg', libsparse + libimg2simg, '-lz') +libimg2simg = compile(expand('core/libsparse', img2simgfiles), '-Iinclude -Icore/libsparse/include') +link('img2simg', libbase + libsparse + libimg2simg, '-lz') + From 770283bf899d079c6f88c98bf914282be6ecaf92 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Wed, 29 Aug 2018 03:14:37 +0400 Subject: [PATCH 06/71] Upload new sources --- sources | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/sources b/sources index 9e62264..714a5dc 100644 --- a/sources +++ b/sources @@ -1,4 +1,3 @@ -SHA512 (core-e7195be7725a.tar.xz) = 817cdee3cb71721757c53c07b958e3c308566d3c5c21bf4e013c33445c11ea49c9acab8e0b02d949d2fb4eede41e50d2faacdaadfc59e551a85a5b93a96d6ca1 -SHA512 (extras-61f6603.tar.xz) = 464afcd4186b3e7d0dd8117a44878cace0b0df077ae452b5b244cf8c44456b5f4299241a8c962dc4ee7f0da291c388ea58e83d0137fbbc60a52fd22350ad58f3 -SHA512 (boringssl-7d422bc.tar.xz) = a06009933408045a3fc7064460d5ddc15c5f5958327cf044a0d1f00729193f373e2190f3c07937d1a3edf8e6c85374fb8ade81b952c6608e67b0590c3538ddd5 -SHA512 (mdnsresponder-ca0cba5.tar.xz) = 2139e26ab19c845a636818090d2f6282685a87f9a1b16e51384474480bd1b038de5fab4ea415b6276efb64402832ae46be14030931b100684e9952d6efc1ab9b +SHA512 (core-c7815d675.tar.xz) = eb294bc0f70eb65527610c534140ddc9dd9b4555924ceda6867557dabfc183c3cafe58b8b7a9b60c0adf44fb459250d92df17441dd071367bce0365e6a739b45 +SHA512 (mdnsresponder-33e620a7.tar.xz) = 9f8a3a05a0dc7440439b8ae8f0032bf8033587fd47bb2cbaad6243dbbf5bb42fa19f251714fc799247ce40fb968b2a51a257e5f9732b1ca9eb9fe3a9c84af904 +SHA512 (boringssl-fb44824b9.tar.xz) = bf889a8b87cebdb8a70424c855d64fe4a7930fb1e5ace0659ce9486b47ddbb93e91f7f0db8106639969e422fc6be152f9b18f5aec37f05c5c1fb29811dd7179b From d9e6e32e9fdd722cf0f49e504819f2cd409ff96a Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 30 Aug 2018 01:39:47 +0400 Subject: [PATCH 07/71] Explicitly include for modern builds support --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 9939e1d..8630efd 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -40,7 +40,9 @@ Patch1: 0001-Add-string-h.patch Patch2: 0002-libusb-modifications.patch Patch3: 0003-buildlib-remove.patch Patch4: 0004-bz1441234.patch -# https://bugzilla.redhat.com/show_bug.cgi?id=1470740 +# https://android-review.googlesource.com/c/platform/system/core/+/740625 +Patch5: 0005-Add-sysmacros-h.patch + Requires(post): systemd Requires(preun): systemd @@ -94,6 +96,7 @@ setup between the host and the target phone as adb. %patch2 -p1 %patch3 -p1 %patch4 -p1 +%patch5 -p1 cp -p %{SOURCE5} 51-android.rules export CC="clang" From 5b37813442931e86917239b2154ba58849797ec7 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 30 Aug 2018 02:00:15 +0400 Subject: [PATCH 08/71] Add 0005-Add-sysmacros-h.patch file --- 0005-Add-sysmacros-h.patch | 12 ++++++++++++ 1 file changed, 12 insertions(+) create mode 100644 0005-Add-sysmacros-h.patch diff --git a/0005-Add-sysmacros-h.patch b/0005-Add-sysmacros-h.patch new file mode 100644 index 0000000..e8000c5 --- /dev/null +++ b/0005-Add-sysmacros-h.patch @@ -0,0 +1,12 @@ +diff --git a/adb/client/usb_linux.cpp b/adb/client/usb_linux.cpp +index 869e858d4..f1bf559a9 100644 +--- a/adb/client/usb_linux.cpp ++++ b/adb/client/usb_linux.cpp +@@ -30,6 +30,7 @@ + #include + #include + #include ++#include + #include + #include + From adbe47add35a36e5ae722845c7700d1dfb257dac Mon Sep 17 00:00:00 2001 From: Igor Gnatenko Date: Mon, 28 Jan 2019 20:17:38 +0100 Subject: [PATCH 09/71] Remove obsolete Group tag References: https://fedoraproject.org/wiki/Changes/Remove_Group_Tag --- android-tools.spec | 1 - 1 file changed, 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 8630efd..96ca3d6 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -15,7 +15,6 @@ Version: %{date}git%{git_commit} Release: 1%{?dist} Summary: Android platform tools(adb, fastboot) -Group: Applications/System # The entire source code is ASL 2.0 except boringssl which is BSD License: ASL 2.0 and (ASL 2.0 and BSD) URL: http://developer.android.com/guide/developing/tools/ From 08efccb36624a344543154a8e4be080dfc473f74 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 31 Jan 2019 13:19:01 +0000 Subject: [PATCH 10/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 96ca3d6..fc98b96 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -12,7 +12,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 1%{?dist} +Release: 2%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -139,6 +139,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Thu Jan 31 2019 Fedora Release Engineering - 20180828gitc7815d675-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + * Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 - Update to upstream git commit c7815d675 - Resolves: rhbz 1535542 1550703 1603379 Switch to clang and ninja From b377128d8d11a383c222f326cf4d39b7f7202866 Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Mon, 27 May 2019 22:35:33 +0100 Subject: [PATCH 11/71] Fix FTBFS, minor cleanups --- android-tools.spec | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index fc98b96..eb9d141 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -7,12 +7,11 @@ %global mdns_git_commit 33e620a7 %global mdns_packdname mdnsresponder-%{mdns_git_commit} - %global _hardened_build 1 Name: android-tools Version: %{date}git%{git_commit} -Release: 2%{?dist} +Release: 3%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -27,8 +26,6 @@ URL: http://developer.android.com/guide/developing/tools/ # git archive --format=tar --prefix=mdnsresponder/ %%{mdns_git_commit} mDNSShared | xz > %%{mdns_packdname}.tar.xz # https://android.googlesource.com/platform/external/mdnsresponder - - Source0: %{packdname}.tar.xz Source2: generate_build.rb Source3: %{boring_packdname}.tar.xz @@ -47,14 +44,14 @@ Requires(post): systemd Requires(preun): systemd Requires(postun): systemd BuildRequires: clang -BuildRequires: ninja-build -BuildRequires: zlib-devel -BuildRequires: openssl-devel -BuildRequires: libselinux-devel BuildRequires: gtest-devel +BuildRequires: libselinux-devel BuildRequires: libusbx-devel -BuildRequires: systemd +BuildRequires: ninja-build +BuildRequires: openssl-devel BuildRequires: ruby rubygems +BuildRequires: systemd +BuildRequires: zlib-devel Provides: adb Provides: fastboot @@ -102,7 +99,7 @@ export CC="clang" export CXX="clang++" sed -i 's/android::build::GetBuildNumber().c_str()/"%{git_commit}"/g' adb/adb.cpp -%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g') +%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g') %build cd .. @@ -139,6 +136,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Mon May 27 2019 Peter Robinson 20180828gitc7815d675-3 +- Fix FTBFS, minor cleanups + * Thu Jan 31 2019 Fedora Release Engineering - 20180828gitc7815d675-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild From 60c7c15f78eba95a9962e054be9aa7abecb6a188 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 24 Jul 2019 17:54:11 +0000 Subject: [PATCH 12/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index eb9d141..a0b1366 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 3%{?dist} +Release: 4%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -136,6 +136,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Wed Jul 24 2019 Fedora Release Engineering - 20180828gitc7815d675-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + * Mon May 27 2019 Peter Robinson 20180828gitc7815d675-3 - Fix FTBFS, minor cleanups From e840e8b25da0da888c348ba18097847582a5b6e7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 28 Jan 2020 11:34:54 +0000 Subject: [PATCH 13/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index a0b1366..ef7483c 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 4%{?dist} +Release: 5%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -136,6 +136,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Tue Jan 28 2020 Fedora Release Engineering - 20180828gitc7815d675-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + * Wed Jul 24 2019 Fedora Release Engineering - 20180828gitc7815d675-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild From ac42e53b47aeee99c0b6fa4912c4bdf888051ef9 Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Sat, 11 Jul 2020 11:55:04 -0600 Subject: [PATCH 14/71] Disable LTO --- android-tools.spec | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index ef7483c..92ef502 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 5%{?dist} +Release: 6%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -102,6 +102,11 @@ sed -i 's/android::build::GetBuildNumber().c_str()/"%{git_commit}"/g' adb/adb.cp %global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g') %build +# This package appears to be failing because links to the LLVM plugins +# are not installed which results in the tools not being able to +# interpret the .o/.a files. Disable LTO for now +%define _lto_cflags %{nil} + cd .. PKGVER=%{git_commit} CXXFLAGS="%{optflags} -Qunused-arguments" CFLAGS="%{optflags} -Qunused-arguments" ruby %{SOURCE2} > build.ninja %ninja_build @@ -136,6 +141,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Sat Jul 11 2020 Jeff Law - 20180828gitc7815d675-6 +- Disable LTO + * Tue Jan 28 2020 Fedora Release Engineering - 20180828gitc7815d675-5 - Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild From cad232e4a9d68a9c84e0961915b45d76e56faccf Mon Sep 17 00:00:00 2001 From: Jeff Law Date: Mon, 20 Jul 2020 23:18:53 -0600 Subject: [PATCH 15/71] - Move LTO disablement so that it impacts the optflags override too --- android-tools.spec | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index 92ef502..d642e37 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 6%{?dist} +Release: 7%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -99,13 +99,13 @@ export CC="clang" export CXX="clang++" sed -i 's/android::build::GetBuildNumber().c_str()/"%{git_commit}"/g' adb/adb.cpp -%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g') - -%build # This package appears to be failing because links to the LLVM plugins # are not installed which results in the tools not being able to # interpret the .o/.a files. Disable LTO for now %define _lto_cflags %{nil} +%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g') + +%build cd .. PKGVER=%{git_commit} CXXFLAGS="%{optflags} -Qunused-arguments" CFLAGS="%{optflags} -Qunused-arguments" ruby %{SOURCE2} > build.ninja @@ -141,6 +141,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Mon Jul 20 2020 Jeff Law - 20180828gitc7815d675-7 +- Move LTO disablement so that it impacts the optflags override too + * Sat Jul 11 2020 Jeff Law - 20180828gitc7815d675-6 - Disable LTO From decfb8f351542c068a64d8757cc6b0e995456af7 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 27 Jul 2020 12:03:05 +0000 Subject: [PATCH 16/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index d642e37..20f6c6b 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 7%{?dist} +Release: 8%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -141,6 +141,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Mon Jul 27 2020 Fedora Release Engineering - 20180828gitc7815d675-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + * Mon Jul 20 2020 Jeff Law - 20180828gitc7815d675-7 - Move LTO disablement so that it impacts the optflags override too From 01d81c08d203465c935f4e2b976930ef3d28c2da Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 5 Nov 2020 23:48:31 +0400 Subject: [PATCH 17/71] rhbz 1779855 Fix plugdev udev rule --- 51-android.rules | 2 +- android-tools.spec | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/51-android.rules b/51-android.rules index d4fc44f..a18af38 100644 --- a/51-android.rules +++ b/51-android.rules @@ -8299,7 +8299,7 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="21a1", TAG+="systemd", ENV{SYSTEMD_WANTS}="ad SUBSYSTEM=="usb", ATTR{idVendor}=="21d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" # Fuzhou Rockchip Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="2207", MODE="0666", GROUP="plugdev" +SUBSYSTEM=="usb", ATTR{idVendor}=="2207", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" #MacAlly SUBSYSTEM=="usb", ATTR{idVendor}=="2222", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" diff --git a/android-tools.spec b/android-tools.spec index 20f6c6b..8137b9b 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 8%{?dist} +Release: 9%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -141,6 +141,10 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 +- Fix plugdev udev rule +- Resolves: rhbz 1779855 + * Mon Jul 27 2020 Fedora Release Engineering - 20180828gitc7815d675-8 - Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild From b19aca555bdb52f70bc82e74f65b660d59a6be1b Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Fri, 6 Nov 2020 00:05:58 +0400 Subject: [PATCH 18/71] Fix changelog --- android-tools.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 8137b9b..0281062 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -141,7 +141,7 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog -* Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 +* Fri Nov 6 2020 Ivan Afonichev - 20180828gitc7815d675-9 - Fix plugdev udev rule - Resolves: rhbz 1779855 From 11b5c4a49bf6db9dc0c6cff874b6bb9919568d95 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Tue, 26 Jan 2021 00:05:55 +0000 Subject: [PATCH 19/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 0281062..3d44ae8 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 9%{?dist} +Release: 10%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -141,6 +141,9 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Tue Jan 26 2021 Fedora Release Engineering - 20180828gitc7815d675-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + * Fri Nov 6 2020 Ivan Afonichev - 20180828gitc7815d675-9 - Fix plugdev udev rule - Resolves: rhbz 1779855 From 1f93c0d6f3c944fed40fca8184ac26a6e08f288e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= Date: Tue, 2 Mar 2021 16:14:12 +0100 Subject: [PATCH 20/71] Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. --- android-tools.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 3d44ae8..425c0c0 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -11,7 +11,7 @@ Name: android-tools Version: %{date}git%{git_commit} -Release: 10%{?dist} +Release: 11%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -141,6 +141,10 @@ install -p -D -m 0644 %{SOURCE6} \ %changelog +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 20180828gitc7815d675-11 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + * Tue Jan 26 2021 Fedora Release Engineering - 20180828gitc7815d675-10 - Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild From 823ac9f1415293dad5e15bc75b0ae41d24a90e29 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Sun, 14 Mar 2021 22:07:15 +0400 Subject: [PATCH 21/71] Switch to linux-friendly upstream Use Android SDK versions for versioning(Epoch 1 introduced) Resolves: rhbz 1937578 1873878 1923681 1776001 --- 0001-Add-string-h.patch | 48 --------------- 0002-libusb-modifications.patch | 15 ----- 0003-buildlib-remove.patch | 12 ---- 0004-bz1441234.patch | 51 ---------------- 0005-Add-sysmacros-h.patch | 12 ---- android-tools.spec | 100 +++++++++----------------------- sources | 4 +- 7 files changed, 29 insertions(+), 213 deletions(-) delete mode 100644 0001-Add-string-h.patch delete mode 100644 0002-libusb-modifications.patch delete mode 100644 0003-buildlib-remove.patch delete mode 100644 0004-bz1441234.patch delete mode 100644 0005-Add-sysmacros-h.patch diff --git a/0001-Add-string-h.patch b/0001-Add-string-h.patch deleted file mode 100644 index 753f205..0000000 --- a/0001-Add-string-h.patch +++ /dev/null @@ -1,48 +0,0 @@ -diff --git a/adb/sysdeps/posix/network.cpp b/adb/sysdeps/posix/network.cpp -index ecd1fd24e..07fd8c98e 100644 ---- a/adb/sysdeps/posix/network.cpp -+++ b/adb/sysdeps/posix/network.cpp -@@ -19,6 +19,7 @@ - #include - #include - #include -+#include - - #include - -diff --git a/adb/types.h b/adb/types.h -index a3e5d4842..bac7181b4 100644 ---- a/adb/types.h -+++ b/adb/types.h -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - -diff --git a/base/errors_unix.cpp b/base/errors_unix.cpp -index 296995efe..48269b675 100644 ---- a/base/errors_unix.cpp -+++ b/base/errors_unix.cpp -@@ -17,6 +17,7 @@ - #include "android-base/errors.h" - - #include -+#include - - namespace android { - namespace base { -diff --git a/base/file.cpp b/base/file.cpp -index d6fe753d1..3b10544dd 100644 ---- a/base/file.cpp -+++ b/base/file.cpp -@@ -22,6 +22,7 @@ - #include - #include - #include -+#include - - #include - #include diff --git a/0002-libusb-modifications.patch b/0002-libusb-modifications.patch deleted file mode 100644 index bf805e1..0000000 --- a/0002-libusb-modifications.patch +++ /dev/null @@ -1,15 +0,0 @@ -diff --git a/adb/client/usb_libusb.cpp b/adb/client/usb_libusb.cpp -index 7adb262..b994c8c 100644 ---- a/adb/client/usb_libusb.cpp -+++ b/adb/client/usb_libusb.cpp -@@ -27,8 +27,9 @@ - #include - #include - #include -+#include - --#include -+#include - - #include - #include diff --git a/0003-buildlib-remove.patch b/0003-buildlib-remove.patch deleted file mode 100644 index dfec0b1..0000000 --- a/0003-buildlib-remove.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/adb/adb.cpp b/adb/adb.cpp -index 38c6f62c9..9df41a236 100644 ---- a/adb/adb.cpp -+++ b/adb/adb.cpp -@@ -44,7 +44,6 @@ - #include - #include - #include --#include - - #include "adb_auth.h" - #include "adb_io.h" diff --git a/0004-bz1441234.patch b/0004-bz1441234.patch deleted file mode 100644 index 8bf87fe..0000000 --- a/0004-bz1441234.patch +++ /dev/null @@ -1,51 +0,0 @@ -diff --git a/libcrypto_utils/android_pubkey.c b/libcrypto_utils/android_pubkey.c -index 3052e52..7061db9 100644 ---- a/libcrypto_utils/android_pubkey.c -+++ b/libcrypto_utils/android_pubkey.c -@@ -126,37 +126,41 @@ bool android_pubkey_encode(const RSA* key, uint8_t* key_buffer, size_t size) { - BIGNUM* r32 = BN_new(); - BIGNUM* n0inv = BN_new(); - BIGNUM* rr = BN_new(); -+ const BIGNUM *n; -+ const BIGNUM *e; - - if (sizeof(RSAPublicKey) > size || - RSA_size(key) != ANDROID_PUBKEY_MODULUS_SIZE) { - goto cleanup; - } - -+ RSA_get0_key(key, &n, &e, NULL); -+ - // Store the modulus size. - key_struct->modulus_size_words = ANDROID_PUBKEY_MODULUS_SIZE_WORDS; - - // Compute and store n0inv = -1 / N[0] mod 2^32. -- if (!ctx || !r32 || !n0inv || !BN_set_bit(r32, 32) || -- !BN_mod(n0inv, key->n, r32, ctx) || -+ if (!ctx || !r32 || !n0inv || !n || !e || !BN_set_bit(r32, 32) || -+ !BN_mod(n0inv, n, r32, ctx) || - !BN_mod_inverse(n0inv, n0inv, r32, ctx) || !BN_sub(n0inv, r32, n0inv)) { - goto cleanup; - } - key_struct->n0inv = (uint32_t)BN_get_word(n0inv); - - // Store the modulus. -- if (!android_pubkey_encode_bignum(key->n, key_struct->modulus)) { -+ if (!android_pubkey_encode_bignum(n, key_struct->modulus)) { - goto cleanup; - } - - // Compute and store rr = (2^(rsa_size)) ^ 2 mod N. - if (!ctx || !rr || !BN_set_bit(rr, ANDROID_PUBKEY_MODULUS_SIZE * 8) || -- !BN_mod_sqr(rr, rr, key->n, ctx) || -+ !BN_mod_sqr(rr, rr, n, ctx) || - !android_pubkey_encode_bignum(rr, key_struct->rr)) { - goto cleanup; - } - - // Store the exponent. -- key_struct->exponent = (uint32_t)BN_get_word(key->e); -+ key_struct->exponent = (uint32_t)BN_get_word(e); - - ret = true; - diff --git a/0005-Add-sysmacros-h.patch b/0005-Add-sysmacros-h.patch deleted file mode 100644 index e8000c5..0000000 --- a/0005-Add-sysmacros-h.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/adb/client/usb_linux.cpp b/adb/client/usb_linux.cpp -index 869e858d4..f1bf559a9 100644 ---- a/adb/client/usb_linux.cpp -+++ b/adb/client/usb_linux.cpp -@@ -30,6 +30,7 @@ - #include - #include - #include -+#include - #include - #include - diff --git a/android-tools.spec b/android-tools.spec index 425c0c0..6a0e469 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,67 +1,36 @@ -%global date 20180828 -%global git_commit c7815d675 - -%global packdname core-%{git_commit} -%global boring_git_commit fb44824b9 -%global boring_packdname boringssl-%{boring_git_commit} -%global mdns_git_commit 33e620a7 -%global mdns_packdname mdnsresponder-%{mdns_git_commit} +%global packdname -%{version} %global _hardened_build 1 Name: android-tools -Version: %{date}git%{git_commit} -Release: 11%{?dist} +Version: 30.0.5p1 +Release: 1%{?dist} Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD License: ASL 2.0 and (ASL 2.0 and BSD) URL: http://developer.android.com/guide/developing/tools/ -# using git archive since upstream hasn't created tarballs. -# git archive --format=tar --prefix=core/ %%{git_commit} adb base diagnose_usb fastboot libcrypto_utils libcutils liblog libsparse libsystem libutils libziparchive mkbootimg include | xz > %%{packdname}.tar.xz -# https://android.googlesource.com/platform/system/core.git -# git archive --format=tar --prefix=boringssl/ %%{boring_git_commit} src/crypto include src/include | xz > %%{boring_packdname}.tar.xz -# https://android.googlesource.com/platform/external/boringssl -# git archive --format=tar --prefix=mdnsresponder/ %%{mdns_git_commit} mDNSShared | xz > %%{mdns_packdname}.tar.xz -# https://android.googlesource.com/platform/external/mdnsresponder - -Source0: %{packdname}.tar.xz -Source2: generate_build.rb -Source3: %{boring_packdname}.tar.xz -Source4: %{mdns_packdname}.tar.xz -Source5: 51-android.rules -Source6: adb.service -Patch1: 0001-Add-string-h.patch -Patch2: 0002-libusb-modifications.patch -Patch3: 0003-buildlib-remove.patch -Patch4: 0004-bz1441234.patch -# https://android-review.googlesource.com/c/platform/system/core/+/740625 -Patch5: 0005-Add-sysmacros-h.patch +# Sources with all needed patches and cmakelists live there now: +# +Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz +Source1: 51-android.rules +Source2: adb.service Requires(post): systemd Requires(preun): systemd Requires(postun): systemd -BuildRequires: clang +BuildRequires: cmake BuildRequires: gtest-devel -BuildRequires: libselinux-devel BuildRequires: libusbx-devel -BuildRequires: ninja-build -BuildRequires: openssl-devel -BuildRequires: ruby rubygems BuildRequires: systemd -BuildRequires: zlib-devel -Provides: adb -Provides: fastboot - -# Bundled boringssl doesn't support the big endian architectures rhbz 1431379 -ExcludeArch: ppc ppc64 s390x +Provides: adb = %{epoch}:%{version}-%{release} +Provides: fastboot = %{epoch}:%{version}-%{release} +Provides: mke2fs.android = %{epoch}:%{version}-%{release} # Bundled bits -Provides: bundled(mdnsresponder) -# This is a fork of openssl. Provides: bundled(boringssl) %description @@ -85,39 +54,19 @@ to read and write the flash partitions. It needs the same USB device setup between the host and the target phone as adb. %prep -%setup -q -b 3 -n boringssl -%setup -q -b 4 -n mdnsresponder -%setup -q -b 0 -n core -%patch1 -p1 -%patch2 -p1 -%patch3 -p1 -%patch4 -p1 -%patch5 -p1 - -cp -p %{SOURCE5} 51-android.rules -export CC="clang" -export CXX="clang++" -sed -i 's/android::build::GetBuildNumber().c_str()/"%{git_commit}"/g' adb/adb.cpp - -# This package appears to be failing because links to the LLVM plugins -# are not installed which results in the tools not being able to -# interpret the .o/.a files. Disable LTO for now -%define _lto_cflags %{nil} -%global optflags %(echo %{optflags} | sed -e 's/-mcet//g' -e 's/-fcf-protection//g' -e 's/-fstack-clash-protection//g') +%autosetup +cp -p %{SOURCE1} 51-android.rules + %build - -cd .. -PKGVER=%{git_commit} CXXFLAGS="%{optflags} -Qunused-arguments" CFLAGS="%{optflags} -Qunused-arguments" ruby %{SOURCE2} > build.ninja -%ninja_build +%cmake -DBUILD_SHARED_LIBS:BOOL=OFF +%cmake_build %install -cd ../ -install -d -m 0755 ${RPM_BUILD_ROOT}%{_bindir} -install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb -install -m 0755 -t ${RPM_BUILD_ROOT}%{_bindir} adb fastboot simg2img img2simg -install -p -D -m 0644 %{SOURCE6} \ +%cmake_install +install -p -D -m 0644 %{SOURCE2} \ %{buildroot}%{_unitdir}/adb.service +install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %post %systemd_post adb.service @@ -129,7 +78,7 @@ install -p -D -m 0644 %{SOURCE6} \ %systemd_postun_with_restart adb.service %files -%doc adb/OVERVIEW.TXT adb/SERVICES.TXT adb/NOTICE adb/protocol.txt 51-android.rules +%doc vendor/core/adb/OVERVIEW.TXT vendor/core/adb/SERVICES.TXT vendor/core/adb/NOTICE vendor/core/adb/protocol.txt 51-android.rules %{_unitdir}/adb.service %attr(0755,root,root) %dir %{_sharedstatedir}/adb #ASL2.0 and BSD @@ -138,9 +87,16 @@ install -p -D -m 0644 %{SOURCE6} \ %{_bindir}/simg2img %{_bindir}/img2simg %{_bindir}/fastboot +%{_bindir}/append2simg +%{_bindir}/mke2fs.android %changelog +* Sun Mar 14 2021 Ivan Afonichev - 1:30.0.5p1-1 +- Switch to linux-friendly upstream +- Use Android SDK versions for versioning(Epoch 1 introduced) +- Resolves: rhbz 1937578 1873878 1923681 1776001 + * Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 20180828gitc7815d675-11 - Rebuilt for updated systemd-rpm-macros See https://pagure.io/fesco/issue/2583. diff --git a/sources b/sources index 714a5dc..ebae1d7 100644 --- a/sources +++ b/sources @@ -1,3 +1 @@ -SHA512 (core-c7815d675.tar.xz) = eb294bc0f70eb65527610c534140ddc9dd9b4555924ceda6867557dabfc183c3cafe58b8b7a9b60c0adf44fb459250d92df17441dd071367bce0365e6a739b45 -SHA512 (mdnsresponder-33e620a7.tar.xz) = 9f8a3a05a0dc7440439b8ae8f0032bf8033587fd47bb2cbaad6243dbbf5bb42fa19f251714fc799247ce40fb968b2a51a257e5f9732b1ca9eb9fe3a9c84af904 -SHA512 (boringssl-fb44824b9.tar.xz) = bf889a8b87cebdb8a70424c855d64fe4a7930fb1e5ace0659ce9486b47ddbb93e91f7f0db8106639969e422fc6be152f9b18f5aec37f05c5c1fb29811dd7179b +SHA512 (android-tools-30.0.5p1.tar.xz) = 8807d7e93ca04994c641278f6b260361f5c06186c9d9edacb0caa72484d5367c35f84c3fb3ad66bf969055e87af48c0b69241b70271e4f3891d1bb2e8336a7f6 From a6b1b1ca96d69ee505451d988a24d5be10b4996b Mon Sep 17 00:00:00 2001 From: Peter Robinson Date: Sun, 21 Mar 2021 12:59:30 +0000 Subject: [PATCH 22/71] sync f33 changes --- android-tools.spec | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 6a0e469..2b47657 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -5,6 +5,7 @@ Name: android-tools Version: 30.0.5p1 Release: 1%{?dist} +Epoch: 1 Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD @@ -17,13 +18,21 @@ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{n Source1: 51-android.rules Source2: adb.service - Requires(post): systemd Requires(preun): systemd Requires(postun): systemd +BuildRequires: brotli-devel BuildRequires: cmake +BuildRequires: gcc +BuildRequires: gcc-c++ +BuildRequires: golang BuildRequires: gtest-devel BuildRequires: libusbx-devel +BuildRequires: libzstd-devel +BuildRequires: lz4-devel +BuildRequires: pcre2-devel +BuildRequires: perl +BuildRequires: protobuf-devel BuildRequires: systemd Provides: adb = %{epoch}:%{version}-%{release} @@ -33,6 +42,9 @@ Provides: mke2fs.android = %{epoch}:%{version}-%{release} # Bundled bits Provides: bundled(boringssl) +# Bundled boringssl doesn't support the big endian architectures rhbz 1431379 +ExcludeArch: ppc ppc64 s390x + %description The Android Debug Bridge (ADB) is used to: From e289b568eef71f359e5b251a65a164c58c9e4109 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 21 Jul 2021 12:38:04 +0000 Subject: [PATCH 23/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering From 948469429f34bbd71ef96c4bd1f7058653b1fd0f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 21 Jul 2021 17:33:40 +0000 Subject: [PATCH 24/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 2b47657..f6a84dd 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -4,7 +4,7 @@ Name: android-tools Version: 30.0.5p1 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -104,6 +104,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Wed Jul 21 2021 Fedora Release Engineering - 1:30.0.5p1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + * Sun Mar 14 2021 Ivan Afonichev - 1:30.0.5p1-1 - Switch to linux-friendly upstream - Use Android SDK versions for versioning(Epoch 1 introduced) From 48453fa0afc4f283fc880c039d3580245d757fe1 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Mon, 2 Aug 2021 02:58:43 +0400 Subject: [PATCH 25/71] - GCC 11 compatibility - Resolves: rhbz 1923681 1987363 1674645 Specify golang build dependencies. Use GO111MODULE=off to let go work offline --- android-tools.spec | 31 +++++++++++++++++++++++-------- sources | 2 +- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index f6a84dd..88c17ce 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,10 +1,8 @@ -%global packdname -%{version} - %global _hardened_build 1 Name: android-tools -Version: 30.0.5p1 -Release: 2%{?dist} +Version: 31.0.2 +Release: 1%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -25,15 +23,20 @@ BuildRequires: brotli-devel BuildRequires: cmake BuildRequires: gcc BuildRequires: gcc-c++ -BuildRequires: golang BuildRequires: gtest-devel BuildRequires: libusbx-devel +BuildRequires: systemd +BuildRequires: golang +BuildRequires: golang(golang.org/x/crypto/chacha20) +BuildRequires: golang(golang.org/x/crypto/chacha20poly1305) +BuildRequires: golang(golang.org/x/crypto/curve25519) +BuildRequires: golang(golang.org/x/crypto/hkdf) +BuildRequires: golang(golang.org/x/crypto/xts) BuildRequires: libzstd-devel BuildRequires: lz4-devel BuildRequires: pcre2-devel BuildRequires: perl BuildRequires: protobuf-devel -BuildRequires: systemd Provides: adb = %{epoch}:%{version}-%{release} Provides: fastboot = %{epoch}:%{version}-%{release} @@ -68,9 +71,9 @@ setup between the host and the target phone as adb. %prep %autosetup cp -p %{SOURCE1} 51-android.rules - %build +export GO111MODULE=off %cmake -DBUILD_SHARED_LIBS:BOOL=OFF %cmake_build @@ -90,9 +93,10 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %systemd_postun_with_restart adb.service %files -%doc vendor/core/adb/OVERVIEW.TXT vendor/core/adb/SERVICES.TXT vendor/core/adb/NOTICE vendor/core/adb/protocol.txt 51-android.rules +%doc 51-android.rules %{_unitdir}/adb.service %attr(0755,root,root) %dir %{_sharedstatedir}/adb +%attr(0755,root,root) %dir %{_datadir}/android-tools #ASL2.0 and BSD %{_bindir}/adb #ASL2.0 @@ -101,9 +105,20 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/fastboot %{_bindir}/append2simg %{_bindir}/mke2fs.android +%{_datadir}/android-tools/completions/adb +%{_datadir}/android-tools/completions/fastboot +%{_datadir}/bash-completion/completions/adb +%{_datadir}/bash-completion/completions/fastboot + %changelog +* Mon Aug 2 2021 Ivan Afonichev - 1:31.0.2-1 +- GCC 11 compatibility +- Add bash complitions +- Specify golang build dependencies +- Resolves: rhbz 1923681 1987363 1674645 + * Wed Jul 21 2021 Fedora Release Engineering - 1:30.0.5p1-2 - Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild diff --git a/sources b/sources index ebae1d7..15543fe 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (android-tools-30.0.5p1.tar.xz) = 8807d7e93ca04994c641278f6b260361f5c06186c9d9edacb0caa72484d5367c35f84c3fb3ad66bf969055e87af48c0b69241b70271e4f3891d1bb2e8336a7f6 +SHA512 (android-tools-31.0.2.tar.xz) = 55f592c2622ef5936f7aea254271fb0b4f57ffcae3ac089c79522efa0d27c31373ba936418a56758d553ebf290cabcd65582b2a6ae60f81bdea15711941664cb From 56c2ea6d7ef1b60f214704be24a40a1d03807cdf Mon Sep 17 00:00:00 2001 From: Adrian Reber Date: Sun, 24 Oct 2021 18:37:18 +0200 Subject: [PATCH 26/71] Rebuilt for protobuf 3.18.1 --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 88c17ce..6569b96 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 1%{?dist} +Release: 2%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Sun Oct 24 2021 Adrian Reber - 1:31.0.2-2 +- Rebuilt for protobuf 3.18.1 + * Mon Aug 2 2021 Ivan Afonichev - 1:31.0.2-1 - GCC 11 compatibility - Add bash complitions From 7f9cee0a08003459193978b026f0cff173d964fb Mon Sep 17 00:00:00 2001 From: Adrian Reber Date: Sat, 6 Nov 2021 10:16:38 +0100 Subject: [PATCH 27/71] Rebuilt for protobuf 3.19.0 --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 6569b96..1a44ec4 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 2%{?dist} +Release: 3%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Sat Nov 06 2021 Adrian Reber - 1:31.0.2-3 +- Rebuilt for protobuf 3.19.0 + * Sun Oct 24 2021 Adrian Reber - 1:31.0.2-2 - Rebuilt for protobuf 3.18.1 From 31bcfb7bf31d0383ea6a99a552e0418b0d7dcf67 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jan 2022 21:15:19 +0000 Subject: [PATCH 28/71] - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 1a44ec4..63e9356 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 3%{?dist} +Release: 4%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Wed Jan 19 2022 Fedora Release Engineering - 1:31.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + * Sat Nov 06 2021 Adrian Reber - 1:31.0.2-3 - Rebuilt for protobuf 3.19.0 From ddb8ead783bdd968251d54f3db64154302bf0ca5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= Date: Fri, 17 Jun 2022 22:14:09 +0200 Subject: [PATCH 29/71] Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, CVE-2022-29526, CVE-2022-30629 --- android-tools.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 63e9356..3e43169 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 4%{?dist} +Release: 5%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,10 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Fri Jun 17 2022 Robert-André Mauchin - 1:31.0.2-5 +- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, + CVE-2022-29526, CVE-2022-30629 + * Wed Jan 19 2022 Fedora Release Engineering - 1:31.0.2-4 - Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild From 09fa5ecc6cb0382bd2fa1b8c66d0f4043dcb26d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= Date: Sat, 18 Jun 2022 10:48:44 +0200 Subject: [PATCH 30/71] Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, CVE-2022-29526, CVE-2022-30629 From 569c325d54c3efbca509454815f1e2bc319d027a Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Tue, 19 Jul 2022 13:54:41 -0500 Subject: [PATCH 31/71] Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in golang --- android-tools.spec | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 3e43169..39ddaa5 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 5%{?dist} +Release: 6%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,10 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Tue Jul 19 2022 Maxwell G - 1:31.0.2-6 +- Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in + golang + * Fri Jun 17 2022 Robert-André Mauchin - 1:31.0.2-5 - Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, CVE-2022-29526, CVE-2022-30629 From c13c32072e46c3ad3ec70e2367f4559a4839e7a9 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 20 Jul 2022 20:47:19 +0000 Subject: [PATCH 32/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild Signed-off-by: Fedora Release Engineering --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 39ddaa5..7d2e129 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 6%{?dist} +Release: 7%{?dist} Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,6 +113,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog +* Wed Jul 20 2022 Fedora Release Engineering - 1:31.0.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + * Tue Jul 19 2022 Maxwell G - 1:31.0.2-6 - Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in golang From 4758ec353c8fd8e61b713c3b13128bc76d221d76 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= Date: Sat, 5 Nov 2022 20:16:13 +0100 Subject: [PATCH 33/71] Convert to rpmautospec --- android-tools.spec | 217 +-------------------------------------------- changelog | 214 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 216 insertions(+), 215 deletions(-) create mode 100644 changelog diff --git a/android-tools.spec b/android-tools.spec index 7d2e129..9e05ac6 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -2,7 +2,7 @@ Name: android-tools Version: 31.0.2 -Release: 7%{?dist} +Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -113,217 +113,4 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %changelog -* Wed Jul 20 2022 Fedora Release Engineering - 1:31.0.2-7 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild - -* Tue Jul 19 2022 Maxwell G - 1:31.0.2-6 -- Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in - golang - -* Fri Jun 17 2022 Robert-André Mauchin - 1:31.0.2-5 -- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, - CVE-2022-29526, CVE-2022-30629 - -* Wed Jan 19 2022 Fedora Release Engineering - 1:31.0.2-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild - -* Sat Nov 06 2021 Adrian Reber - 1:31.0.2-3 -- Rebuilt for protobuf 3.19.0 - -* Sun Oct 24 2021 Adrian Reber - 1:31.0.2-2 -- Rebuilt for protobuf 3.18.1 - -* Mon Aug 2 2021 Ivan Afonichev - 1:31.0.2-1 -- GCC 11 compatibility -- Add bash complitions -- Specify golang build dependencies -- Resolves: rhbz 1923681 1987363 1674645 - -* Wed Jul 21 2021 Fedora Release Engineering - 1:30.0.5p1-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild - -* Sun Mar 14 2021 Ivan Afonichev - 1:30.0.5p1-1 -- Switch to linux-friendly upstream -- Use Android SDK versions for versioning(Epoch 1 introduced) -- Resolves: rhbz 1937578 1873878 1923681 1776001 - -* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 20180828gitc7815d675-11 -- Rebuilt for updated systemd-rpm-macros - See https://pagure.io/fesco/issue/2583. - -* Tue Jan 26 2021 Fedora Release Engineering - 20180828gitc7815d675-10 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild - -* Fri Nov 6 2020 Ivan Afonichev - 20180828gitc7815d675-9 -- Fix plugdev udev rule -- Resolves: rhbz 1779855 - -* Mon Jul 27 2020 Fedora Release Engineering - 20180828gitc7815d675-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild - -* Mon Jul 20 2020 Jeff Law - 20180828gitc7815d675-7 -- Move LTO disablement so that it impacts the optflags override too - -* Sat Jul 11 2020 Jeff Law - 20180828gitc7815d675-6 -- Disable LTO - -* Tue Jan 28 2020 Fedora Release Engineering - 20180828gitc7815d675-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild - -* Wed Jul 24 2019 Fedora Release Engineering - 20180828gitc7815d675-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild - -* Mon May 27 2019 Peter Robinson 20180828gitc7815d675-3 -- Fix FTBFS, minor cleanups - -* Thu Jan 31 2019 Fedora Release Engineering - 20180828gitc7815d675-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild - -* Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 -- Update to upstream git commit c7815d675 -- Resolves: rhbz 1535542 1550703 1603379 Switch to clang and ninja - -* Thu Jul 12 2018 Fedora Release Engineering - 20170311gite7195be7725a-8 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild - -* Tue Feb 27 2018 Bastien Nocera - 20170311gite7195be7725a-7 -- Fix USB resets when adb daemon is started (#1470740) - -* Wed Feb 07 2018 Fedora Release Engineering - 20170311gite7195be7725a-6 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild - -* Thu Oct 26 2017 Vít Ondruch - 20170311gite7195be7725a-5 -- Drop the explicit dependnecy on rubypick. - -* Wed Aug 02 2017 Fedora Release Engineering - 20170311gite7195be7725a-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild - -* Wed Jul 26 2017 Fedora Release Engineering - 20170311gite7195be7725a-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild - -* Tue Apr 25 2017 Jan Pokorný - 20170311gite7195be7725a-2 -- Resolves: rhbz 1441234 Fix adb crash when generating a key (OpenSSL 1.1.0 API) - -* Sat Mar 11 2017 Ivan Afonichev - 20170311gite7195be7725a-1 -- Update to upstream git commit e7195be7725a -- Resolves: rhbz 1323632 1423219 Add optflags. Support new versions. - -* Fri Feb 10 2017 Fedora Release Engineering - 20160327git3761365735de-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild - -* Sun May 08 2016 Bastien Nocera - 20160327git3761365735de-2 -- Add missing BuildRequires for Ruby script to run -- Compile and build img2simg and simg2img - -* Mon Apr 4 2016 Ville Skyttä - 20160327git3761365735de-2 -- Build with %%{optflags} - -* Sun Mar 27 2016 Ivan Afonichev - 20160327git3761365735de-1 -- Update to upstream git commit 3761365735de - -* Sat Mar 26 2016 Ivan Afonichev - 20160321git922e151ba2d8-1 -- Update to upstream git commit 922e151ba2d8 -- Resolves: rhbz 1278769 1318099 Migrate to ruby generate_build. Support new versions - -* Wed Feb 03 2016 Fedora Release Engineering - 20141219git8393e50-5 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild - -* Tue Jun 16 2015 Fedora Release Engineering - 20141219git8393e50-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild - -* Wed May 20 2015 Bastien Nocera 20141224git8393e50-3 -- Remove Apple from the vendor to launch adb.service for - They never created an Android phone, and probably never will - -* Sun Jan 11 2015 Ivan Afonichev - 20141224git8393e50-2 -- Resolves: rhbz 1062095 Harden android-tools -- Remove 0002-Add-missing-headers.patch - -* Wed Dec 24 2014 Jonathan Dieter - 20141224git8393e50-1 -- Update to 5.0.2 release - -* Fri Sep 19 2014 Ivan Afonichev - 20130123git98d0789-5 -- Added more udev devices -- Resolves: rhbz 967216 Adb service now stores keys in /var/lib/adb - -* Fri Aug 15 2014 Fedora Release Engineering - 20130123git98d0789-4 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild - -* Sat Jun 07 2014 Fedora Release Engineering - 20130123git98d0789-3 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild - -* Sat Aug 03 2013 Fedora Release Engineering - 20130123git98d0789-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild - -* Mon Jan 28 2013 Ivan Afonichev - 20130123git98d0789-1 -- Update to upstream git commit 98d0789 -- Resolves: rhbz 903074 Move udev rule to docs as example -- Resolves: rhbz 879585 Introduce adb.service with PrivateTmp - -* Tue Nov 20 2012 Ivan Afonichev - 20121120git3ddc005-1 -- Update to upstream git commit 3ddc005 -- Added more udev devices -- Added ext4_utils from extras for fastboot -- Updated makefiles -- Resolves: rhbz 869624 start adb server by udev - -* Wed Jul 18 2012 Fedora Release Engineering - 20120510gitd98c87c-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild - -* Thu May 10 2012 Ivan Afonichev - 20120510gitd98c87c-1 -- Update to upstream git commit d98c87c -- Added more udev devices -- Resolves: rhbz 819292 secure udev permissions - -* Thu Jan 12 2012 Fedora Release Engineering - 20111220git1b251bd-2 -- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild - -* Tue Dec 20 2011 Ivan Afonichev - 20111220git1b251bd-1 -- Update to upstream git commit 1b251bd - -* Wed Nov 23 2011 Ivan Afonichev - 20111120git4a25390-3 -- Fix license -- More specific URL - -* Tue Nov 22 2011 Ivan Afonichev - 20111120git4a25390-2 -- Require udev - -* Sun Nov 20 2011 Ivan Afonichev - 20111120git4a25390-1 -- Versioning changes -- Use only needed sources -- Udev rules moved to lib -- More license info added -- adb and fastboot moved to provides from summary - -* Tue Nov 15 2011 Ivan Afonichev - 20111115.4a25390-1 -- Change upstream git repo URL -- Update to upstream git commit 4a25390 -- Added more udev devices - -* Mon Oct 17 2011 Ivan Afonichev - 20110816.80d508f-3 -- Update udev rules (s/SYSFS/ATTR/g) - -* Sat Aug 27 2011 Ivan Afonichev - 20110816.80d508f-2 -- Remove the rm in the install section -- Remove defattr -- Use install command(not macro) -- Add description of fastboot - -* Tue Aug 16 2011 Ivan Afonichev - 20110816.80d508f-1 -- Update to upstream git commit 80d508f -- Added more udev devices - -* Sun Jul 31 2011 Ivan Afonichev - 20110731.810cf41-1 -- Update to upstream git commit 810cf41 -- Fix License -- Use optflags -- Added more udev devices -- Remove Epoch - -* Tue Jul 26 2011 Ivan Afonichev - 0:20110726.212282c-1 -- Update to upstream git commit 212282c - -* Wed May 18 2011 Ivan Afonichev - 0:20110516.327b2b7-1 -- Initial spec -- Initial makefiles -- Initial udev rule +%autochangelog diff --git a/changelog b/changelog new file mode 100644 index 0000000..3cc9648 --- /dev/null +++ b/changelog @@ -0,0 +1,214 @@ +* Wed Jul 20 2022 Fedora Release Engineering - 1:31.0.2-7 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_37_Mass_Rebuild + +* Tue Jul 19 2022 Maxwell G - 1:31.0.2-6 +- Rebuild for CVE-2022-{1705,32148,30631,30633,28131,30635,30632,30630,1962} in + golang + +* Fri Jun 17 2022 Robert-André Mauchin - 1:31.0.2-5 +- Rebuilt for CVE-2022-1996, CVE-2022-24675, CVE-2022-28327, CVE-2022-27191, + CVE-2022-29526, CVE-2022-30629 + +* Wed Jan 19 2022 Fedora Release Engineering - 1:31.0.2-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_36_Mass_Rebuild + +* Sat Nov 06 2021 Adrian Reber - 1:31.0.2-3 +- Rebuilt for protobuf 3.19.0 + +* Sun Oct 24 2021 Adrian Reber - 1:31.0.2-2 +- Rebuilt for protobuf 3.18.1 + +* Mon Aug 2 2021 Ivan Afonichev - 1:31.0.2-1 +- GCC 11 compatibility +- Add bash complitions +- Specify golang build dependencies +- Resolves: rhbz 1923681 1987363 1674645 + +* Wed Jul 21 2021 Fedora Release Engineering - 1:30.0.5p1-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_35_Mass_Rebuild + +* Sun Mar 14 2021 Ivan Afonichev - 1:30.0.5p1-1 +- Switch to linux-friendly upstream +- Use Android SDK versions for versioning(Epoch 1 introduced) +- Resolves: rhbz 1937578 1873878 1923681 1776001 + +* Tue Mar 02 2021 Zbigniew Jędrzejewski-Szmek - 20180828gitc7815d675-11 +- Rebuilt for updated systemd-rpm-macros + See https://pagure.io/fesco/issue/2583. + +* Tue Jan 26 2021 Fedora Release Engineering - 20180828gitc7815d675-10 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_34_Mass_Rebuild + +* Fri Nov 6 2020 Ivan Afonichev - 20180828gitc7815d675-9 +- Fix plugdev udev rule +- Resolves: rhbz 1779855 + +* Mon Jul 27 2020 Fedora Release Engineering - 20180828gitc7815d675-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_33_Mass_Rebuild + +* Mon Jul 20 2020 Jeff Law - 20180828gitc7815d675-7 +- Move LTO disablement so that it impacts the optflags override too + +* Sat Jul 11 2020 Jeff Law - 20180828gitc7815d675-6 +- Disable LTO + +* Tue Jan 28 2020 Fedora Release Engineering - 20180828gitc7815d675-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_32_Mass_Rebuild + +* Wed Jul 24 2019 Fedora Release Engineering - 20180828gitc7815d675-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_31_Mass_Rebuild + +* Mon May 27 2019 Peter Robinson 20180828gitc7815d675-3 +- Fix FTBFS, minor cleanups + +* Thu Jan 31 2019 Fedora Release Engineering - 20180828gitc7815d675-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_30_Mass_Rebuild + +* Wed Aug 29 2018 Ivan Afonichev - 20180828gitc7815d675-1 +- Update to upstream git commit c7815d675 +- Resolves: rhbz 1535542 1550703 1603379 Switch to clang and ninja + +* Thu Jul 12 2018 Fedora Release Engineering - 20170311gite7195be7725a-8 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_29_Mass_Rebuild + +* Tue Feb 27 2018 Bastien Nocera - 20170311gite7195be7725a-7 +- Fix USB resets when adb daemon is started (#1470740) + +* Wed Feb 07 2018 Fedora Release Engineering - 20170311gite7195be7725a-6 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild + +* Thu Oct 26 2017 Vít Ondruch - 20170311gite7195be7725a-5 +- Drop the explicit dependnecy on rubypick. + +* Wed Aug 02 2017 Fedora Release Engineering - 20170311gite7195be7725a-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild + +* Wed Jul 26 2017 Fedora Release Engineering - 20170311gite7195be7725a-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild + +* Tue Apr 25 2017 Jan Pokorný - 20170311gite7195be7725a-2 +- Resolves: rhbz 1441234 Fix adb crash when generating a key (OpenSSL 1.1.0 API) + +* Sat Mar 11 2017 Ivan Afonichev - 20170311gite7195be7725a-1 +- Update to upstream git commit e7195be7725a +- Resolves: rhbz 1323632 1423219 Add optflags. Support new versions. + +* Fri Feb 10 2017 Fedora Release Engineering - 20160327git3761365735de-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild + +* Sun May 08 2016 Bastien Nocera - 20160327git3761365735de-2 +- Add missing BuildRequires for Ruby script to run +- Compile and build img2simg and simg2img + +* Mon Apr 4 2016 Ville Skyttä - 20160327git3761365735de-2 +- Build with %%{optflags} + +* Sun Mar 27 2016 Ivan Afonichev - 20160327git3761365735de-1 +- Update to upstream git commit 3761365735de + +* Sat Mar 26 2016 Ivan Afonichev - 20160321git922e151ba2d8-1 +- Update to upstream git commit 922e151ba2d8 +- Resolves: rhbz 1278769 1318099 Migrate to ruby generate_build. Support new versions + +* Wed Feb 03 2016 Fedora Release Engineering - 20141219git8393e50-5 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild + +* Tue Jun 16 2015 Fedora Release Engineering - 20141219git8393e50-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild + +* Wed May 20 2015 Bastien Nocera 20141224git8393e50-3 +- Remove Apple from the vendor to launch adb.service for + They never created an Android phone, and probably never will + +* Sun Jan 11 2015 Ivan Afonichev - 20141224git8393e50-2 +- Resolves: rhbz 1062095 Harden android-tools +- Remove 0002-Add-missing-headers.patch + +* Wed Dec 24 2014 Jonathan Dieter - 20141224git8393e50-1 +- Update to 5.0.2 release + +* Fri Sep 19 2014 Ivan Afonichev - 20130123git98d0789-5 +- Added more udev devices +- Resolves: rhbz 967216 Adb service now stores keys in /var/lib/adb + +* Fri Aug 15 2014 Fedora Release Engineering - 20130123git98d0789-4 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild + +* Sat Jun 07 2014 Fedora Release Engineering - 20130123git98d0789-3 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild + +* Sat Aug 03 2013 Fedora Release Engineering - 20130123git98d0789-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_20_Mass_Rebuild + +* Mon Jan 28 2013 Ivan Afonichev - 20130123git98d0789-1 +- Update to upstream git commit 98d0789 +- Resolves: rhbz 903074 Move udev rule to docs as example +- Resolves: rhbz 879585 Introduce adb.service with PrivateTmp + +* Tue Nov 20 2012 Ivan Afonichev - 20121120git3ddc005-1 +- Update to upstream git commit 3ddc005 +- Added more udev devices +- Added ext4_utils from extras for fastboot +- Updated makefiles +- Resolves: rhbz 869624 start adb server by udev + +* Wed Jul 18 2012 Fedora Release Engineering - 20120510gitd98c87c-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_18_Mass_Rebuild + +* Thu May 10 2012 Ivan Afonichev - 20120510gitd98c87c-1 +- Update to upstream git commit d98c87c +- Added more udev devices +- Resolves: rhbz 819292 secure udev permissions + +* Thu Jan 12 2012 Fedora Release Engineering - 20111220git1b251bd-2 +- Rebuilt for https://fedoraproject.org/wiki/Fedora_17_Mass_Rebuild + +* Tue Dec 20 2011 Ivan Afonichev - 20111220git1b251bd-1 +- Update to upstream git commit 1b251bd + +* Wed Nov 23 2011 Ivan Afonichev - 20111120git4a25390-3 +- Fix license +- More specific URL + +* Tue Nov 22 2011 Ivan Afonichev - 20111120git4a25390-2 +- Require udev + +* Sun Nov 20 2011 Ivan Afonichev - 20111120git4a25390-1 +- Versioning changes +- Use only needed sources +- Udev rules moved to lib +- More license info added +- adb and fastboot moved to provides from summary + +* Tue Nov 15 2011 Ivan Afonichev - 20111115.4a25390-1 +- Change upstream git repo URL +- Update to upstream git commit 4a25390 +- Added more udev devices + +* Mon Oct 17 2011 Ivan Afonichev - 20110816.80d508f-3 +- Update udev rules (s/SYSFS/ATTR/g) + +* Sat Aug 27 2011 Ivan Afonichev - 20110816.80d508f-2 +- Remove the rm in the install section +- Remove defattr +- Use install command(not macro) +- Add description of fastboot + +* Tue Aug 16 2011 Ivan Afonichev - 20110816.80d508f-1 +- Update to upstream git commit 80d508f +- Added more udev devices + +* Sun Jul 31 2011 Ivan Afonichev - 20110731.810cf41-1 +- Update to upstream git commit 810cf41 +- Fix License +- Use optflags +- Added more udev devices +- Remove Epoch + +* Tue Jul 26 2011 Ivan Afonichev - 0:20110726.212282c-1 +- Update to upstream git commit 212282c + +* Wed May 18 2011 Ivan Afonichev - 0:20110516.327b2b7-1 +- Initial spec +- Initial makefiles +- Initial udev rule From 9f8de37e28e955bbc5fb598634fc3649d564d3ab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= Date: Sat, 5 Nov 2022 20:45:00 +0100 Subject: [PATCH 34/71] Update to 33.0.3p1 Security fix for CVE-2022-20128 CVE-2022-3168 Close: rhbz#2045196, rhbz#2139124 --- Disable-e2fsdroid-for-ppc64le.patch | 42 +++++++++++++++++++++++++ android-tools.spec | 49 +++++++++++++++++++---------- sources | 2 +- 3 files changed, 76 insertions(+), 17 deletions(-) create mode 100644 Disable-e2fsdroid-for-ppc64le.patch diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch new file mode 100644 index 0000000..0411bc8 --- /dev/null +++ b/Disable-e2fsdroid-for-ppc64le.patch @@ -0,0 +1,42 @@ +diff -up android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt +--- android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig 2022-07-13 18:44:44.000000000 +0200 ++++ android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt 2022-11-06 08:51:50.692313421 +0100 +@@ -117,27 +117,6 @@ target_link_libraries("${ANDROID_MKE2FS_ + target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE + e2fsprogs/lib) + +-add_executable(e2fsdroid +- e2fsprogs/contrib/android/e2fsdroid.c +- e2fsprogs/contrib/android/basefs_allocator.c +- e2fsprogs/contrib/android/block_range.c +- e2fsprogs/contrib/android/base_fs.c +- e2fsprogs/contrib/android/fsmap.c +- e2fsprogs/contrib/android/block_list.c +- e2fsprogs/contrib/android/perms.c) +- +-include(CheckIncludeFile) +-CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) +- +-if(HAVE_SYS_TYPES_H) +- target_compile_definitions(e2fsdroid PUBLIC HAVE_SYS_TYPES_H) +-endif(HAVE_SYS_TYPES_H) +- +-target_link_libraries(e2fsdroid +- libext2fs libsparse libzip libcutils liblog libutil libbase libselinux libsepol z pcre2-8 pthread) +-target_include_directories(e2fsdroid PRIVATE +- e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc) +- + add_executable(ext2simg + e2fsprogs/contrib/android/ext2simg.c) + +diff -up android-tools-33.0.3p1/vendor/CMakeLists.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.txt +--- android-tools-33.0.3p1/vendor/CMakeLists.txt.orig 2022-11-05 10:01:04.000000000 +0100 ++++ android-tools-33.0.3p1/vendor/CMakeLists.txt 2022-11-06 09:09:11.351267287 +0100 +@@ -89,7 +89,6 @@ install(TARGETS + lpmake + lpunpack + simg2img +- e2fsdroid + ext2simg + DESTINATION bin) + diff --git a/android-tools.spec b/android-tools.spec index 9e05ac6..d4a5a52 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,7 +1,7 @@ %global _hardened_build 1 Name: android-tools -Version: 31.0.2 +Version: 33.0.3p1 Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -11,32 +11,32 @@ License: ASL 2.0 and (ASL 2.0 and BSD) URL: http://developer.android.com/guide/developing/tools/ # Sources with all needed patches and cmakelists live there now: -# Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service +# e2fsdroid doesn't build on ppc64le +# See https://github.com/tytso/e2fsprogs/issues/127 +Patch0: Disable-e2fsdroid-for-ppc64le.patch -Requires(post): systemd -Requires(preun): systemd -Requires(postun): systemd BuildRequires: brotli-devel BuildRequires: cmake BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gtest-devel -BuildRequires: libusbx-devel -BuildRequires: systemd BuildRequires: golang -BuildRequires: golang(golang.org/x/crypto/chacha20) -BuildRequires: golang(golang.org/x/crypto/chacha20poly1305) -BuildRequires: golang(golang.org/x/crypto/curve25519) -BuildRequires: golang(golang.org/x/crypto/hkdf) -BuildRequires: golang(golang.org/x/crypto/xts) +BuildRequires: golang(golang.org/x/crypto/chacha20) +BuildRequires: golang(golang.org/x/crypto/chacha20poly1305) +BuildRequires: golang(golang.org/x/crypto/curve25519) +BuildRequires: golang(golang.org/x/crypto/hkdf) +BuildRequires: golang(golang.org/x/crypto/xts) +BuildRequires: libusbx-devel BuildRequires: libzstd-devel BuildRequires: lz4-devel +BuildRequires: multilib-rpm-config BuildRequires: pcre2-devel BuildRequires: perl BuildRequires: protobuf-devel +BuildRequires: systemd-rpm-macros Provides: adb = %{epoch}:%{version}-%{release} Provides: fastboot = %{epoch}:%{version}-%{release} @@ -69,7 +69,10 @@ to read and write the flash partitions. It needs the same USB device setup between the host and the target phone as adb. %prep -%autosetup +%setup -q +%ifarch ppc64le +%patch0 -p1 +%endif cp -p %{SOURCE1} 51-android.rules %build @@ -100,17 +103,31 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb #ASL2.0 and BSD %{_bindir}/adb #ASL2.0 +%{_bindir}/avbtool +%{_bindir}/mke2fs.android %{_bindir}/simg2img %{_bindir}/img2simg %{_bindir}/fastboot %{_bindir}/append2simg -%{_bindir}/mke2fs.android +%ifnarch ppc64le +%{_bindir}/e2fsdroid +%endif +%{_bindir}/ext2simg +%{_bindir}/lpadd +%{_bindir}/lpdump +%{_bindir}/lpflash +%{_bindir}/lpmake +%{_bindir}/lpunpack +%{_bindir}/mkbootimg +%{_bindir}/mkdtboimg +%{_bindir}/repack_bootimg +%{_bindir}/unpack_bootimg %{_datadir}/android-tools/completions/adb %{_datadir}/android-tools/completions/fastboot +%{_datadir}/android-tools/mkbootimg/gki/generate_gki_certificate.py +%{_datadir}/android-tools/mkbootimg/mkbootimg.py %{_datadir}/bash-completion/completions/adb %{_datadir}/bash-completion/completions/fastboot - - %changelog %autochangelog diff --git a/sources b/sources index 15543fe..5d9d6a2 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (android-tools-31.0.2.tar.xz) = 55f592c2622ef5936f7aea254271fb0b4f57ffcae3ac089c79522efa0d27c31373ba936418a56758d553ebf290cabcd65582b2a6ae60f81bdea15711941664cb +SHA512 (android-tools-33.0.3p1.tar.xz) = 22ed3d9a71a962764998c8c4759215d24a1af121d43942c77c00878d636aea16a6b940811624bb1ae56ac416922d7262d5ced5436e646fe2dae0944b593ad4fe From 0b6ff0084362745d4bfb2f8ecc9e658d0e38c04d Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 18 Jan 2023 21:43:41 +0000 Subject: [PATCH 35/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_38_Mass_Rebuild Signed-off-by: Fedora Release Engineering From fc132f20b621cfcb8c27c1ea17c30b6aa0a0955f Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 19 Jul 2023 13:16:10 +0000 Subject: [PATCH 36/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_39_Mass_Rebuild Signed-off-by: Fedora Release Engineering From bb83ef8d3f323b96b649753cf62bcb9c84e3b9a4 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Sat, 4 Nov 2023 03:32:00 +0400 Subject: [PATCH 37/71] Update to 34.0.4 --- android-tools.spec | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index d4a5a52..ca9917f 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,7 +1,7 @@ %global _hardened_build 1 Name: android-tools -Version: 33.0.3p1 +Version: 34.0.4 Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) From 1baa4e1e635f5bd2d6f1b7b7984c7e77e73e9550 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Sun, 5 Nov 2023 03:25:54 +0400 Subject: [PATCH 38/71] Upload new version --- sources | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sources b/sources index 5d9d6a2..68bfd7e 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (android-tools-33.0.3p1.tar.xz) = 22ed3d9a71a962764998c8c4759215d24a1af121d43942c77c00878d636aea16a6b940811624bb1ae56ac416922d7262d5ced5436e646fe2dae0944b593ad4fe +SHA512 (android-tools-34.0.4.tar.xz) = 34753bbbe9ed15ce0abc54c0fce4ecd69dc8b8db734169bd2473ac439d1c414301e798493b6b31cb00ed47d5314cabfb2c56d52dab0fe2a804125ebfbcbd18c5 From 57845dedfacb77d7529aa77cbe2ef8d530d5f29b Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Sun, 5 Nov 2023 23:23:21 +0400 Subject: [PATCH 39/71] Try to build e2fsdroid on ppc64le --- Disable-e2fsdroid-for-ppc64le.patch | 42 ----------------------------- android-tools.spec | 8 ------ 2 files changed, 50 deletions(-) delete mode 100644 Disable-e2fsdroid-for-ppc64le.patch diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch deleted file mode 100644 index 0411bc8..0000000 --- a/Disable-e2fsdroid-for-ppc64le.patch +++ /dev/null @@ -1,42 +0,0 @@ -diff -up android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt ---- android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig 2022-07-13 18:44:44.000000000 +0200 -+++ android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt 2022-11-06 08:51:50.692313421 +0100 -@@ -117,27 +117,6 @@ target_link_libraries("${ANDROID_MKE2FS_ - target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE - e2fsprogs/lib) - --add_executable(e2fsdroid -- e2fsprogs/contrib/android/e2fsdroid.c -- e2fsprogs/contrib/android/basefs_allocator.c -- e2fsprogs/contrib/android/block_range.c -- e2fsprogs/contrib/android/base_fs.c -- e2fsprogs/contrib/android/fsmap.c -- e2fsprogs/contrib/android/block_list.c -- e2fsprogs/contrib/android/perms.c) -- --include(CheckIncludeFile) --CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) -- --if(HAVE_SYS_TYPES_H) -- target_compile_definitions(e2fsdroid PUBLIC HAVE_SYS_TYPES_H) --endif(HAVE_SYS_TYPES_H) -- --target_link_libraries(e2fsdroid -- libext2fs libsparse libzip libcutils liblog libutil libbase libselinux libsepol z pcre2-8 pthread) --target_include_directories(e2fsdroid PRIVATE -- e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc) -- - add_executable(ext2simg - e2fsprogs/contrib/android/ext2simg.c) - -diff -up android-tools-33.0.3p1/vendor/CMakeLists.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.txt ---- android-tools-33.0.3p1/vendor/CMakeLists.txt.orig 2022-11-05 10:01:04.000000000 +0100 -+++ android-tools-33.0.3p1/vendor/CMakeLists.txt 2022-11-06 09:09:11.351267287 +0100 -@@ -89,7 +89,6 @@ install(TARGETS - lpmake - lpunpack - simg2img -- e2fsdroid - ext2simg - DESTINATION bin) - diff --git a/android-tools.spec b/android-tools.spec index ca9917f..9ded040 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,9 +14,6 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service -# e2fsdroid doesn't build on ppc64le -# See https://github.com/tytso/e2fsprogs/issues/127 -Patch0: Disable-e2fsdroid-for-ppc64le.patch BuildRequires: brotli-devel BuildRequires: cmake @@ -70,9 +67,6 @@ setup between the host and the target phone as adb. %prep %setup -q -%ifarch ppc64le -%patch0 -p1 -%endif cp -p %{SOURCE1} 51-android.rules %build @@ -109,9 +103,7 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/img2simg %{_bindir}/fastboot %{_bindir}/append2simg -%ifnarch ppc64le %{_bindir}/e2fsdroid -%endif %{_bindir}/ext2simg %{_bindir}/lpadd %{_bindir}/lpdump From d516b13b909bb93fdccd0af79387036933e382f4 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Wed, 3 Jan 2024 11:09:32 +0400 Subject: [PATCH 40/71] Revert "Try to build e2fsdroid on ppc64le" This reverts commit 57845dedfacb77d7529aa77cbe2ef8d530d5f29b. --- Disable-e2fsdroid-for-ppc64le.patch | 42 +++++++++++++++++++++++++++++ android-tools.spec | 8 ++++++ 2 files changed, 50 insertions(+) create mode 100644 Disable-e2fsdroid-for-ppc64le.patch diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch new file mode 100644 index 0000000..0411bc8 --- /dev/null +++ b/Disable-e2fsdroid-for-ppc64le.patch @@ -0,0 +1,42 @@ +diff -up android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt +--- android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig 2022-07-13 18:44:44.000000000 +0200 ++++ android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt 2022-11-06 08:51:50.692313421 +0100 +@@ -117,27 +117,6 @@ target_link_libraries("${ANDROID_MKE2FS_ + target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE + e2fsprogs/lib) + +-add_executable(e2fsdroid +- e2fsprogs/contrib/android/e2fsdroid.c +- e2fsprogs/contrib/android/basefs_allocator.c +- e2fsprogs/contrib/android/block_range.c +- e2fsprogs/contrib/android/base_fs.c +- e2fsprogs/contrib/android/fsmap.c +- e2fsprogs/contrib/android/block_list.c +- e2fsprogs/contrib/android/perms.c) +- +-include(CheckIncludeFile) +-CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) +- +-if(HAVE_SYS_TYPES_H) +- target_compile_definitions(e2fsdroid PUBLIC HAVE_SYS_TYPES_H) +-endif(HAVE_SYS_TYPES_H) +- +-target_link_libraries(e2fsdroid +- libext2fs libsparse libzip libcutils liblog libutil libbase libselinux libsepol z pcre2-8 pthread) +-target_include_directories(e2fsdroid PRIVATE +- e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc) +- + add_executable(ext2simg + e2fsprogs/contrib/android/ext2simg.c) + +diff -up android-tools-33.0.3p1/vendor/CMakeLists.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.txt +--- android-tools-33.0.3p1/vendor/CMakeLists.txt.orig 2022-11-05 10:01:04.000000000 +0100 ++++ android-tools-33.0.3p1/vendor/CMakeLists.txt 2022-11-06 09:09:11.351267287 +0100 +@@ -89,7 +89,6 @@ install(TARGETS + lpmake + lpunpack + simg2img +- e2fsdroid + ext2simg + DESTINATION bin) + diff --git a/android-tools.spec b/android-tools.spec index 9ded040..ca9917f 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,6 +14,9 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service +# e2fsdroid doesn't build on ppc64le +# See https://github.com/tytso/e2fsprogs/issues/127 +Patch0: Disable-e2fsdroid-for-ppc64le.patch BuildRequires: brotli-devel BuildRequires: cmake @@ -67,6 +70,9 @@ setup between the host and the target phone as adb. %prep %setup -q +%ifarch ppc64le +%patch0 -p1 +%endif cp -p %{SOURCE1} 51-android.rules %build @@ -103,7 +109,9 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/img2simg %{_bindir}/fastboot %{_bindir}/append2simg +%ifnarch ppc64le %{_bindir}/e2fsdroid +%endif %{_bindir}/ext2simg %{_bindir}/lpadd %{_bindir}/lpdump From 7a0b2255591a449b0c58ce486a75e299b1f72b0d Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Wed, 3 Jan 2024 14:28:03 +0400 Subject: [PATCH 41/71] Fix ppc64le patch to be ready for upstream --- Disable-e2fsdroid-for-ppc64le.patch | 73 ++++++++++++++--------------- android-tools.spec | 2 - 2 files changed, 35 insertions(+), 40 deletions(-) diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch index 0411bc8..81c6a44 100644 --- a/Disable-e2fsdroid-for-ppc64le.patch +++ b/Disable-e2fsdroid-for-ppc64le.patch @@ -1,42 +1,39 @@ -diff -up android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt ---- android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt.orig 2022-07-13 18:44:44.000000000 +0200 -+++ android-tools-33.0.3p1/vendor/CMakeLists.mke2fs.txt 2022-11-06 08:51:50.692313421 +0100 -@@ -117,27 +117,6 @@ target_link_libraries("${ANDROID_MKE2FS_ +diff --git a/vendor/CMakeLists.mke2fs.txt b/vendor/CMakeLists.mke2fs.txt +index 3073fe4..da2940c 100644 +--- a/vendor/CMakeLists.mke2fs.txt ++++ b/vendor/CMakeLists.mke2fs.txt +@@ -129,6 +129,7 @@ target_link_libraries("${ANDROID_MKE2FS_NAME}" target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE - e2fsprogs/lib) + e2fsprogs/lib) + ++if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) + add_executable(e2fsdroid + e2fsprogs/contrib/android/e2fsdroid.c + e2fsprogs/contrib/android/basefs_allocator.c +@@ -151,6 +152,7 @@ target_link_libraries(e2fsdroid + target_include_directories(e2fsdroid PRIVATE + e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include + core/libcutils/include e2fsprogs/misc) ++endif() --add_executable(e2fsdroid -- e2fsprogs/contrib/android/e2fsdroid.c -- e2fsprogs/contrib/android/basefs_allocator.c -- e2fsprogs/contrib/android/block_range.c -- e2fsprogs/contrib/android/base_fs.c -- e2fsprogs/contrib/android/fsmap.c -- e2fsprogs/contrib/android/block_list.c -- e2fsprogs/contrib/android/perms.c) -- --include(CheckIncludeFile) --CHECK_INCLUDE_FILE("sys/types.h" HAVE_SYS_TYPES_H) -- --if(HAVE_SYS_TYPES_H) -- target_compile_definitions(e2fsdroid PUBLIC HAVE_SYS_TYPES_H) --endif(HAVE_SYS_TYPES_H) -- --target_link_libraries(e2fsdroid -- libext2fs libsparse libzip libcutils liblog libutil libbase libselinux libsepol z pcre2-8 pthread) --target_include_directories(e2fsdroid PRIVATE -- e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc) -- add_executable(ext2simg - e2fsprogs/contrib/android/ext2simg.c) - -diff -up android-tools-33.0.3p1/vendor/CMakeLists.txt.orig android-tools-33.0.3p1/vendor/CMakeLists.txt ---- android-tools-33.0.3p1/vendor/CMakeLists.txt.orig 2022-11-05 10:01:04.000000000 +0100 -+++ android-tools-33.0.3p1/vendor/CMakeLists.txt 2022-11-06 09:09:11.351267287 +0100 -@@ -89,7 +89,6 @@ install(TARGETS - lpmake - lpunpack - simg2img -- e2fsdroid - ext2simg - DESTINATION bin) + e2fsprogs/contrib/android/ext2simg.c) +diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt +index 0b6d0aa..01f82a7 100644 +--- a/vendor/CMakeLists.txt ++++ b/vendor/CMakeLists.txt +@@ -111,10 +111,13 @@ install(TARGETS + make_f2fs + sload_f2fs + simg2img +- e2fsdroid + ext2simg + DESTINATION bin) ++if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) ++install(TARGETS "${ANDROID_MKE2FS_NAME}" e2fsdroid DESTINATION bin) ++endif() ++ + # Install common completion files. + install(FILES adb/adb.bash RENAME adb DESTINATION "${COMPLETION_COMMON_DIR}") + install(FILES core/fastboot/fastboot.bash RENAME fastboot DESTINATION "${COMPLETION_COMMON_DIR}") diff --git a/android-tools.spec b/android-tools.spec index ca9917f..5a57d32 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -70,9 +70,7 @@ setup between the host and the target phone as adb. %prep %setup -q -%ifarch ppc64le %patch0 -p1 -%endif cp -p %{SOURCE1} 51-android.rules %build From 16720cea76fd386e02aa2495138f3090770fdf71 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 4 Jan 2024 00:41:38 +0400 Subject: [PATCH 42/71] Fix ppc64le patch for 34.0.4 --- Disable-e2fsdroid-for-ppc64le.patch | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch index 81c6a44..ca1d9b0 100644 --- a/Disable-e2fsdroid-for-ppc64le.patch +++ b/Disable-e2fsdroid-for-ppc64le.patch @@ -1,8 +1,8 @@ diff --git a/vendor/CMakeLists.mke2fs.txt b/vendor/CMakeLists.mke2fs.txt -index 3073fe4..da2940c 100644 +index 5c0708d..1ac9a8a 100644 --- a/vendor/CMakeLists.mke2fs.txt +++ b/vendor/CMakeLists.mke2fs.txt -@@ -129,6 +129,7 @@ target_link_libraries("${ANDROID_MKE2FS_NAME}" +@@ -118,6 +118,7 @@ target_link_libraries("${ANDROID_MKE2FS_NAME}" target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE e2fsprogs/lib) @@ -10,7 +10,7 @@ index 3073fe4..da2940c 100644 add_executable(e2fsdroid e2fsprogs/contrib/android/e2fsdroid.c e2fsprogs/contrib/android/basefs_allocator.c -@@ -151,6 +152,7 @@ target_link_libraries(e2fsdroid +@@ -140,6 +141,7 @@ target_link_libraries(e2fsdroid target_include_directories(e2fsdroid PRIVATE e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include core/libcutils/include e2fsprogs/misc) @@ -19,12 +19,12 @@ index 3073fe4..da2940c 100644 add_executable(ext2simg e2fsprogs/contrib/android/ext2simg.c) diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt -index 0b6d0aa..01f82a7 100644 +index 0ea7a01..a29da55 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt -@@ -111,10 +111,13 @@ install(TARGETS - make_f2fs - sload_f2fs +@@ -108,10 +108,13 @@ install(TARGETS + lpmake + lpunpack simg2img - e2fsdroid ext2simg From 72c6f6ba7a368adce9e3fbab72abb4b8ba83624f Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 4 Jan 2024 01:00:18 +0400 Subject: [PATCH 43/71] Fix ppc64le patch tabs --- Disable-e2fsdroid-for-ppc64le.patch | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch index ca1d9b0..2407c2e 100644 --- a/Disable-e2fsdroid-for-ppc64le.patch +++ b/Disable-e2fsdroid-for-ppc64le.patch @@ -4,31 +4,31 @@ index 5c0708d..1ac9a8a 100644 +++ b/vendor/CMakeLists.mke2fs.txt @@ -118,6 +118,7 @@ target_link_libraries("${ANDROID_MKE2FS_NAME}" target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE - e2fsprogs/lib) + e2fsprogs/lib) +if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) add_executable(e2fsdroid - e2fsprogs/contrib/android/e2fsdroid.c - e2fsprogs/contrib/android/basefs_allocator.c + e2fsprogs/contrib/android/e2fsdroid.c + e2fsprogs/contrib/android/basefs_allocator.c @@ -140,6 +141,7 @@ target_link_libraries(e2fsdroid target_include_directories(e2fsdroid PRIVATE - e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include - core/libcutils/include e2fsprogs/misc) + e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include + core/libcutils/include e2fsprogs/misc) +endif() add_executable(ext2simg - e2fsprogs/contrib/android/ext2simg.c) + e2fsprogs/contrib/android/ext2simg.c) diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt index 0ea7a01..a29da55 100644 --- a/vendor/CMakeLists.txt +++ b/vendor/CMakeLists.txt @@ -108,10 +108,13 @@ install(TARGETS - lpmake - lpunpack - simg2img -- e2fsdroid - ext2simg - DESTINATION bin) + lpmake + lpunpack + simg2img +- e2fsdroid + ext2simg + DESTINATION bin) +if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) +install(TARGETS "${ANDROID_MKE2FS_NAME}" e2fsdroid DESTINATION bin) From 38eea7154cb5930259f7a3ae59cdb123fb7d2862 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 4 Jan 2024 01:20:43 +0400 Subject: [PATCH 44/71] Boringssl dropped support for ppc64le --- Disable-e2fsdroid-for-ppc64le.patch | 39 ----------------------------- android-tools.spec | 7 ++---- 2 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 Disable-e2fsdroid-for-ppc64le.patch diff --git a/Disable-e2fsdroid-for-ppc64le.patch b/Disable-e2fsdroid-for-ppc64le.patch deleted file mode 100644 index 2407c2e..0000000 --- a/Disable-e2fsdroid-for-ppc64le.patch +++ /dev/null @@ -1,39 +0,0 @@ -diff --git a/vendor/CMakeLists.mke2fs.txt b/vendor/CMakeLists.mke2fs.txt -index 5c0708d..1ac9a8a 100644 ---- a/vendor/CMakeLists.mke2fs.txt -+++ b/vendor/CMakeLists.mke2fs.txt -@@ -118,6 +118,7 @@ target_link_libraries("${ANDROID_MKE2FS_NAME}" - target_include_directories("${ANDROID_MKE2FS_NAME}" PRIVATE - e2fsprogs/lib) - -+if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) - add_executable(e2fsdroid - e2fsprogs/contrib/android/e2fsdroid.c - e2fsprogs/contrib/android/basefs_allocator.c -@@ -140,6 +141,7 @@ target_link_libraries(e2fsdroid - target_include_directories(e2fsdroid PRIVATE - e2fsprogs/lib e2fsprogs/lib/ext2fs selinux/libselinux/include - core/libcutils/include e2fsprogs/misc) -+endif() - - add_executable(ext2simg - e2fsprogs/contrib/android/ext2simg.c) -diff --git a/vendor/CMakeLists.txt b/vendor/CMakeLists.txt -index 0ea7a01..a29da55 100644 ---- a/vendor/CMakeLists.txt -+++ b/vendor/CMakeLists.txt -@@ -108,10 +108,13 @@ install(TARGETS - lpmake - lpunpack - simg2img -- e2fsdroid - ext2simg - DESTINATION bin) - -+if( NOT CMAKE_SYSTEM_PROCESSOR MATCHES "ppc64le" ) -+install(TARGETS "${ANDROID_MKE2FS_NAME}" e2fsdroid DESTINATION bin) -+endif() -+ - # Install common completion files. - install(FILES adb/adb.bash RENAME adb DESTINATION "${COMPLETION_COMMON_DIR}") - install(FILES core/fastboot/fastboot.bash RENAME fastboot DESTINATION "${COMPLETION_COMMON_DIR}") diff --git a/android-tools.spec b/android-tools.spec index 5a57d32..68baee5 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,9 +14,6 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service -# e2fsdroid doesn't build on ppc64le -# See https://github.com/tytso/e2fsprogs/issues/127 -Patch0: Disable-e2fsdroid-for-ppc64le.patch BuildRequires: brotli-devel BuildRequires: cmake @@ -46,7 +43,8 @@ Provides: mke2fs.android = %{epoch}:%{version}-%{release} Provides: bundled(boringssl) # Bundled boringssl doesn't support the big endian architectures rhbz 1431379 -ExcludeArch: ppc ppc64 s390x +# And dropped ppc64le support: https://github.com/google/boringssl/commit/7d2338d000eb1468a5bbf78e91854236e18fb9e4 +ExcludeArch: ppc ppc64 s390x ppc64le %description @@ -70,7 +68,6 @@ setup between the host and the target phone as adb. %prep %setup -q -%patch0 -p1 cp -p %{SOURCE1} 51-android.rules %build From e464aca6d725766c82861a20fb990f989972da78 Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 4 Jan 2024 14:45:02 +0400 Subject: [PATCH 45/71] More ppc64le cleanup --- android-tools.spec | 3 --- 1 file changed, 3 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index 68baee5..94c917c 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -104,9 +104,6 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/img2simg %{_bindir}/fastboot %{_bindir}/append2simg -%ifnarch ppc64le -%{_bindir}/e2fsdroid -%endif %{_bindir}/ext2simg %{_bindir}/lpadd %{_bindir}/lpdump From 96d77679bac7cd2956400633b2bacf3626aecafd Mon Sep 17 00:00:00 2001 From: Ivan Afonichev Date: Thu, 4 Jan 2024 15:16:31 +0400 Subject: [PATCH 46/71] Fix e2fsdroid --- android-tools.spec | 1 + 1 file changed, 1 insertion(+) diff --git a/android-tools.spec b/android-tools.spec index 94c917c..59e58d3 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -104,6 +104,7 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/img2simg %{_bindir}/fastboot %{_bindir}/append2simg +%{_bindir}/e2fsdroid %{_bindir}/ext2simg %{_bindir}/lpadd %{_bindir}/lpdump From 5db1e67a3cad39fe425b9f1d063d70dd51510e76 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 19 Jan 2024 12:55:42 +0000 Subject: [PATCH 47/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From feb44c6bc5f6710a214c97e95a570dd5b1a88313 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Mon, 22 Jan 2024 23:02:20 +0000 Subject: [PATCH 48/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_40_Mass_Rebuild From 5bd3df1ea268f1ac980aa1022ab3c3db3135fe15 Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Sun, 11 Feb 2024 21:37:17 +0000 Subject: [PATCH 49/71] Rebuild for golang 1.22.0 From 5c41b4b107f7c13a312d6cfcac07e2e8c110a2b0 Mon Sep 17 00:00:00 2001 From: Orion Poplawski Date: Tue, 27 Feb 2024 19:54:45 -0700 Subject: [PATCH 50/71] Add patch to fix build with gcc 14 --- android-tools-include.patch | 34 ++++++++++++++++++++++++++++++++++ android-tools.spec | 5 ++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 android-tools-include.patch diff --git a/android-tools-include.patch b/android-tools-include.patch new file mode 100644 index 0000000..caab84d --- /dev/null +++ b/android-tools-include.patch @@ -0,0 +1,34 @@ +diff -up android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp.include android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp +--- android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp.include 2023-09-03 07:06:16.000000000 -0600 ++++ android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp 2024-02-27 19:25:25.026823079 -0700 +@@ -24,6 +24,7 @@ + #include + #include + ++#include + #include + #include + #include +diff -up android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp.include android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp +--- android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp.include 2023-09-03 07:06:37.000000000 -0600 ++++ android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp 2024-02-27 19:31:26.527846061 -0700 +@@ -17,6 +17,8 @@ + + #include + ++#include ++ + #include "images.h" + #include "utility.h" + #include "writer.h" +diff -up android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp.include android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp +--- android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp.include 2023-09-03 07:06:37.000000000 -0600 ++++ android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp 2024-02-27 19:42:57.193703638 -0700 +@@ -25,6 +25,7 @@ + #include + #endif + ++#include + #include + #include + #include diff --git a/android-tools.spec b/android-tools.spec index 59e58d3..1e56195 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -14,6 +14,9 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service +# Fix includes +# https://github.com/nmeum/android-tools/commit/289759dfb6017c8f1ec1767d8922a7300c54ef05 +Patch1: android-tools-include.patch BuildRequires: brotli-devel BuildRequires: cmake @@ -67,7 +70,7 @@ to read and write the flash partitions. It needs the same USB device setup between the host and the target phone as adb. %prep -%setup -q +%autosetup -p1 cp -p %{SOURCE1} 51-android.rules %build From 44e2b82d360f678603b474a236aa985c0619d6fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Robert-Andr=C3=A9=20Mauchin?= Date: Mon, 6 May 2024 07:37:14 +0200 Subject: [PATCH 51/71] Update to 35.0.1 --- android-tools-include.patch | 34 ---------------------------------- android-tools.spec | 7 +++---- sources | 2 +- 3 files changed, 4 insertions(+), 39 deletions(-) delete mode 100644 android-tools-include.patch diff --git a/android-tools-include.patch b/android-tools-include.patch deleted file mode 100644 index caab84d..0000000 --- a/android-tools-include.patch +++ /dev/null @@ -1,34 +0,0 @@ -diff -up android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp.include android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp ---- android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp.include 2023-09-03 07:06:16.000000000 -0600 -+++ android-tools-34.0.4/vendor/adb/client/incremental_utils.cpp 2024-02-27 19:25:25.026823079 -0700 -@@ -24,6 +24,7 @@ - #include - #include - -+#include - #include - #include - #include -diff -up android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp.include android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp ---- android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp.include 2023-09-03 07:06:37.000000000 -0600 -+++ android-tools-34.0.4/vendor/core/fs_mgr/liblp/super_layout_builder.cpp 2024-02-27 19:31:26.527846061 -0700 -@@ -17,6 +17,8 @@ - - #include - -+#include -+ - #include "images.h" - #include "utility.h" - #include "writer.h" -diff -up android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp.include android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp ---- android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp.include 2023-09-03 07:06:37.000000000 -0600 -+++ android-tools-34.0.4/vendor/core/fs_mgr/liblp/utility.cpp 2024-02-27 19:42:57.193703638 -0700 -@@ -25,6 +25,7 @@ - #include - #endif - -+#include - #include - #include - #include diff --git a/android-tools.spec b/android-tools.spec index 1e56195..e426527 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,7 +1,7 @@ %global _hardened_build 1 Name: android-tools -Version: 34.0.4 +Version: 35.0.1 Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -14,9 +14,6 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service -# Fix includes -# https://github.com/nmeum/android-tools/commit/289759dfb6017c8f1ec1767d8922a7300c54ef05 -Patch1: android-tools-include.patch BuildRequires: brotli-devel BuildRequires: cmake @@ -114,9 +111,11 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_bindir}/lpflash %{_bindir}/lpmake %{_bindir}/lpunpack +%{_bindir}/make_f2fs %{_bindir}/mkbootimg %{_bindir}/mkdtboimg %{_bindir}/repack_bootimg +%{_bindir}/sload_f2fs %{_bindir}/unpack_bootimg %{_datadir}/android-tools/completions/adb %{_datadir}/android-tools/completions/fastboot diff --git a/sources b/sources index 68bfd7e..a821f25 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (android-tools-34.0.4.tar.xz) = 34753bbbe9ed15ce0abc54c0fce4ecd69dc8b8db734169bd2473ac439d1c414301e798493b6b31cb00ed47d5314cabfb2c56d52dab0fe2a804125ebfbcbd18c5 +SHA512 (android-tools-35.0.1.tar.xz) = 2dc3831f29a2c5ffc57978e4a6fa6d1469bcb0740750779b3e4f8239eaec87864f3474254a2d649ab630062be091d8b44a4e45c7e7b7e033f3b4481f81d76296 From b9435381ad2be1420e4fe81ce22bef9a2c801a09 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 17 Jul 2024 16:59:02 +0000 Subject: [PATCH 52/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_41_Mass_Rebuild From 5eab4b68dd6f08c4b962899867356518eaaeb91b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Miroslav=20Such=C3=BD?= Date: Wed, 28 Aug 2024 07:52:32 +0200 Subject: [PATCH 53/71] convert license to SPDX This is part of https://fedoraproject.org/wiki/Changes/SPDX_Licenses_Phase_4 --- android-tools.spec | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index e426527..c1de961 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -7,7 +7,8 @@ Epoch: 1 Summary: Android platform tools(adb, fastboot) # The entire source code is ASL 2.0 except boringssl which is BSD -License: ASL 2.0 and (ASL 2.0 and BSD) +# Automatically converted from old format: ASL 2.0 and (ASL 2.0 and BSD) - review is highly recommended. +License: Apache-2.0 AND (Apache-2.0 AND LicenseRef-Callaway-BSD) URL: http://developer.android.com/guide/developing/tools/ # Sources with all needed patches and cmakelists live there now: From eaa589d2381f7b9ec23895813954fac7ab2f5394 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Thu, 16 Jan 2025 11:01:52 +0000 Subject: [PATCH 54/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_42_Mass_Rebuild From 6b563e1bf1b29439e887e5079e933e3ad3052cb8 Mon Sep 17 00:00:00 2001 From: Dominic Date: Wed, 26 Sep 2018 15:49:33 +0800 Subject: [PATCH 55/71] add rules for meizu --- 51-android.rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/51-android.rules b/51-android.rules index a18af38..5e29925 100644 --- a/51-android.rules +++ b/51-android.rules @@ -8394,6 +8394,9 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="2821", TAG+="systemd", ENV{SYSTEMD_WANTS}="ad #Toptronic Industrial Co., Ltd SUBSYSTEM=="usb", ATTR{idVendor}=="2899", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" +#Meizu Telecom Equipment Co., Ltd. +SUBSYSTEM=="usb", ATTR{idVendor}=="2a45", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" + #Planex Communications SUBSYSTEM=="usb", ATTR{idVendor}=="2c02", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" From 59b642328678c79562b14af9fa958687c3af3d6d Mon Sep 17 00:00:00 2001 From: Wanam Date: Thu, 23 Jan 2020 16:09:27 +0100 Subject: [PATCH 56/71] Add oneplus rules --- 51-android.rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/51-android.rules b/51-android.rules index 5e29925..834c228 100644 --- a/51-android.rules +++ b/51-android.rules @@ -8660,3 +8660,6 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="f003", TAG+="systemd", ENV{SYSTEMD_WANTS}="ad #Atten Electronics / Siglent Technologies SUBSYSTEM=="usb", ATTR{idVendor}=="f4ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" + +#Oneplus +SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" From 38c0ac37cf3148287fbdd8a4db7b5ed0e4a52670 Mon Sep 17 00:00:00 2001 From: ip Date: Fri, 18 Jun 2021 20:03:41 -0500 Subject: [PATCH 57/71] Add Essential Essential Products Essential PH-1 --- 51-android.rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/51-android.rules b/51-android.rules index 834c228..c1ac970 100644 --- a/51-android.rules +++ b/51-android.rules @@ -8663,3 +8663,6 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="f4ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="ad #Oneplus SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" + +# Essential Products +SUBSYSTEM=="usb", ATTR{idVendor}=="2e17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" From 5bf988b8222d09a45fb763147e06dde864996d3b Mon Sep 17 00:00:00 2001 From: ip Date: Sat, 10 Jul 2021 17:46:19 -0500 Subject: [PATCH 58/71] Add Nextbit Manufacturer=Nextbit Product=Robin --- 51-android.rules | 3 +++ 1 file changed, 3 insertions(+) diff --git a/51-android.rules b/51-android.rules index c1ac970..27cfee0 100644 --- a/51-android.rules +++ b/51-android.rules @@ -8666,3 +8666,6 @@ SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", TAG+="systemd", ENV{SYSTEMD_WANTS}="ad # Essential Products SUBSYSTEM=="usb", ATTR{idVendor}=="2e17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" + +#Nextbit +SUBSYSTEM=="usb", ATTR{idVendor}=="2c3f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" From c6a57cb4028aa49b991cee3260378031c7b46a98 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sun, 23 Feb 2025 18:45:44 +0100 Subject: [PATCH 59/71] Update to 35.0.2 --- 0001-Disable-libusb-SuperSpeed-support.patch | 60 ++++++++++++++++++++ 0001-Fix-libusb-enumeration.patch | 38 +++++++++++++ android-tools.spec | 8 ++- sources | 2 +- 4 files changed, 106 insertions(+), 2 deletions(-) create mode 100644 0001-Disable-libusb-SuperSpeed-support.patch create mode 100644 0001-Fix-libusb-enumeration.patch diff --git a/0001-Disable-libusb-SuperSpeed-support.patch b/0001-Disable-libusb-SuperSpeed-support.patch new file mode 100644 index 0000000..d785987 --- /dev/null +++ b/0001-Disable-libusb-SuperSpeed-support.patch @@ -0,0 +1,60 @@ +From 29da99a0d523708c05560c4c6ebe98a42cec50a8 Mon Sep 17 00:00:00 2001 +From: LuK1337 +Date: Sun, 23 Feb 2025 19:05:38 +0100 +Subject: [PATCH] Disable libusb SuperSpeed+ support + +Not available in any released libusb version. +--- + vendor/adb/client/usb_libusb.cpp | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/vendor/adb/client/usb_libusb.cpp b/vendor/adb/client/usb_libusb.cpp +index 46d8464..20e171b 100644 +--- a/vendor/adb/client/usb_libusb.cpp ++++ b/vendor/adb/client/usb_libusb.cpp +@@ -503,8 +503,10 @@ struct LibusbConnection : public Connection { + return 5000; + case LIBUSB_SPEED_SUPER_PLUS: + return 10000; ++#if 0 + case LIBUSB_SPEED_SUPER_PLUS_X2: + return 20000; ++#endif + case LIBUSB_SPEED_UNKNOWN: + default: + return 0; +@@ -536,6 +538,7 @@ struct LibusbConnection : public Connection { + } + } + ++#if 0 + static uint64_t ExtractMaxSuperSpeedPlus(libusb_ssplus_usb_device_capability_descriptor* cap) { + // The exponents is one of {bytes, kB, MB, or GB}. We express speed in MB so we use a 0 + // multiplier for value which would result in 0MB anyway. +@@ -548,6 +551,7 @@ struct LibusbConnection : public Connection { + } + return max_speed; + } ++#endif + + void RetrieveSpeeds() { + negotiated_speed_ = ToConnectionSpeed(libusb_get_device_speed(device_.get())); +@@ -570,6 +574,7 @@ struct LibusbConnection : public Connection { + libusb_free_ss_usb_device_capability_descriptor(cap); + } + } break; ++#if 0 + case LIBUSB_BT_SUPERSPEED_PLUS_CAPABILITY: { + libusb_ssplus_usb_device_capability_descriptor* cap = nullptr; + if (!libusb_get_ssplus_usb_device_capability_descriptor( +@@ -578,6 +583,7 @@ struct LibusbConnection : public Connection { + libusb_free_ssplus_usb_device_capability_descriptor(cap); + } + } break; ++#endif + default: + break; + } +-- +2.48.1 + diff --git a/0001-Fix-libusb-enumeration.patch b/0001-Fix-libusb-enumeration.patch new file mode 100644 index 0000000..e2de8f4 --- /dev/null +++ b/0001-Fix-libusb-enumeration.patch @@ -0,0 +1,38 @@ +From d349fae010f6c780d76e89c5d6b81d45119137c0 Mon Sep 17 00:00:00 2001 +From: Arnav Singh +Date: Sat, 3 Aug 2024 21:55:23 -0700 +Subject: [PATCH] Fix libusb enumeration to handle PINE64 PinePhone modem. + +The PINE64 PinePhone modem exposes itself as an adb-accessible device over USB +but its device class is LIBUSB_CLASS_MISCELLANEOUS, so allow that too. +--- + vendor/adb/client/usb_libusb.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/vendor/adb/client/usb_libusb.cpp b/vendor/adb/client/usb_libusb.cpp +index 6133e7c8..9af91eb7 100644 +--- a/vendor/adb/client/usb_libusb.cpp ++++ b/vendor/adb/client/usb_libusb.cpp +@@ -364,8 +364,8 @@ struct LibusbConnection : public Connection { + } + + bool FindInterface(libusb_device_descriptor* device_desc) { +- if (device_desc->bDeviceClass != LIBUSB_CLASS_PER_INTERFACE) { +- // Assume that all Android devices have the device class set to per interface. ++ if (device_desc->bDeviceClass != LIBUSB_CLASS_PER_INTERFACE && device_desc->bDeviceClass != LIBUSB_CLASS_MISCELLANEOUS) { ++ // Assume that all Android devices have the device class set to per interface or miscellaneous. + // TODO: Is this assumption valid? + VLOG(USB) << "skipping device with incorrect class at " << device_address_; + return false; +@@ -1039,7 +1039,7 @@ void usb_init() { + static_cast(LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED | + LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT), + LIBUSB_HOTPLUG_ENUMERATE, LIBUSB_HOTPLUG_MATCH_ANY, LIBUSB_HOTPLUG_MATCH_ANY, +- LIBUSB_CLASS_PER_INTERFACE, hotplug_callback, nullptr, nullptr); ++ LIBUSB_HOTPLUG_MATCH_ANY, hotplug_callback, nullptr, nullptr); + + if (rc != LIBUSB_SUCCESS) { + LOG(FATAL) << "failed to register libusb hotplug callback"; +-- +2.46.0 + diff --git a/android-tools.spec b/android-tools.spec index c1de961..0b5b941 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,7 +1,7 @@ %global _hardened_build 1 Name: android-tools -Version: 35.0.1 +Version: 35.0.2 Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -15,9 +15,14 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz Source1: 51-android.rules Source2: adb.service +# https://github.com/nmeum/android-tools/issues/153 +Patch0: 0001-Fix-libusb-enumeration.patch +# https://github.com/libusb/libusb/pull/1428, https://github.com/libusb/libusb/pull/1477 +Patch1: 0001-Disable-libusb-SuperSpeed-support.patch BuildRequires: brotli-devel BuildRequires: cmake +BuildRequires: fmt-devel BuildRequires: gcc BuildRequires: gcc-c++ BuildRequires: gtest-devel @@ -124,6 +129,7 @@ install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb %{_datadir}/android-tools/mkbootimg/mkbootimg.py %{_datadir}/bash-completion/completions/adb %{_datadir}/bash-completion/completions/fastboot +%{_mandir}/man1/adb.1.* %changelog %autochangelog diff --git a/sources b/sources index a821f25..40b919f 100644 --- a/sources +++ b/sources @@ -1 +1 @@ -SHA512 (android-tools-35.0.1.tar.xz) = 2dc3831f29a2c5ffc57978e4a6fa6d1469bcb0740750779b3e4f8239eaec87864f3474254a2d649ab630062be091d8b44a4e45c7e7b7e033f3b4481f81d76296 +SHA512 (android-tools-35.0.2.tar.xz) = 391ce4d638b274d7bbae24a3df8de8b5812a982570f29b2aef37d12a3ba7ed6f66b5c0b7f908759e0b0da30d152b5319af0fef16c54bdc3b9f4074fb22f80d10 From 1ad29521a8124418d35afcb4304e0b70d5cf29a1 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Thu, 27 Mar 2025 09:09:02 +0100 Subject: [PATCH 60/71] Reenable libusb SuperSpeed+ support libusb1-1.0.28 is now available. --- 0001-Disable-libusb-SuperSpeed-support.patch | 60 -------------------- android-tools.spec | 2 - 2 files changed, 62 deletions(-) delete mode 100644 0001-Disable-libusb-SuperSpeed-support.patch diff --git a/0001-Disable-libusb-SuperSpeed-support.patch b/0001-Disable-libusb-SuperSpeed-support.patch deleted file mode 100644 index d785987..0000000 --- a/0001-Disable-libusb-SuperSpeed-support.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 29da99a0d523708c05560c4c6ebe98a42cec50a8 Mon Sep 17 00:00:00 2001 -From: LuK1337 -Date: Sun, 23 Feb 2025 19:05:38 +0100 -Subject: [PATCH] Disable libusb SuperSpeed+ support - -Not available in any released libusb version. ---- - vendor/adb/client/usb_libusb.cpp | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/vendor/adb/client/usb_libusb.cpp b/vendor/adb/client/usb_libusb.cpp -index 46d8464..20e171b 100644 ---- a/vendor/adb/client/usb_libusb.cpp -+++ b/vendor/adb/client/usb_libusb.cpp -@@ -503,8 +503,10 @@ struct LibusbConnection : public Connection { - return 5000; - case LIBUSB_SPEED_SUPER_PLUS: - return 10000; -+#if 0 - case LIBUSB_SPEED_SUPER_PLUS_X2: - return 20000; -+#endif - case LIBUSB_SPEED_UNKNOWN: - default: - return 0; -@@ -536,6 +538,7 @@ struct LibusbConnection : public Connection { - } - } - -+#if 0 - static uint64_t ExtractMaxSuperSpeedPlus(libusb_ssplus_usb_device_capability_descriptor* cap) { - // The exponents is one of {bytes, kB, MB, or GB}. We express speed in MB so we use a 0 - // multiplier for value which would result in 0MB anyway. -@@ -548,6 +551,7 @@ struct LibusbConnection : public Connection { - } - return max_speed; - } -+#endif - - void RetrieveSpeeds() { - negotiated_speed_ = ToConnectionSpeed(libusb_get_device_speed(device_.get())); -@@ -570,6 +574,7 @@ struct LibusbConnection : public Connection { - libusb_free_ss_usb_device_capability_descriptor(cap); - } - } break; -+#if 0 - case LIBUSB_BT_SUPERSPEED_PLUS_CAPABILITY: { - libusb_ssplus_usb_device_capability_descriptor* cap = nullptr; - if (!libusb_get_ssplus_usb_device_capability_descriptor( -@@ -578,6 +583,7 @@ struct LibusbConnection : public Connection { - libusb_free_ssplus_usb_device_capability_descriptor(cap); - } - } break; -+#endif - default: - break; - } --- -2.48.1 - diff --git a/android-tools.spec b/android-tools.spec index 0b5b941..3a23412 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -17,8 +17,6 @@ Source1: 51-android.rules Source2: adb.service # https://github.com/nmeum/android-tools/issues/153 Patch0: 0001-Fix-libusb-enumeration.patch -# https://github.com/libusb/libusb/pull/1428, https://github.com/libusb/libusb/pull/1477 -Patch1: 0001-Disable-libusb-SuperSpeed-support.patch BuildRequires: brotli-devel BuildRequires: cmake From f600dbf3712b1cb743edaaad0c1727e5e81e4268 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Fri, 9 May 2025 08:25:54 +0200 Subject: [PATCH 61/71] Remove generate_build.rb Unused as of 823ac9f1415293dad5e15bc75b0ae41d24a90e29. --- generate_build.rb | 234 ---------------------------------------------- 1 file changed, 234 deletions(-) delete mode 100644 generate_build.rb diff --git a/generate_build.rb b/generate_build.rb deleted file mode 100644 index 3fbb86e..0000000 --- a/generate_build.rb +++ /dev/null @@ -1,234 +0,0 @@ -#!/usr/bin/ruby - -# Android build system is complicated and does not allow to build -# separate parts easily. -# This script tries to mimic Android build rules. - -def expand(dir, files) - files.map{|f| File.join(dir,f)} -end - -# Compiles sources to *.o files. -# Returns array of output *.o filenames -def compile(sources, cflags) - outputs = [] - for s in sources - ext = File.extname(s) - - case ext - when '.c' - cc = 'cc' - lang_flags = '-std=gnu11 $CFLAGS $CPPFLAGS' - when '.cpp', '.cc' - cc = 'cxx' - lang_flags = '-std=gnu++17 $CXXFLAGS $CPPFLAGS' - else - raise "Unknown extension #{ext}" - end - - output = s + '.o' - outputs << output - puts "build #{output}: #{cc} #{s}\n cflags = #{lang_flags} #{cflags}" - end - - return outputs -end - -# dir - directory where ninja file is located -# lib - static library path relative to dir -def subninja(dir, lib) - puts "subninja #{dir}build.ninja" - return lib.each{|l| dir + l} -end - -# Links object files -def link(output, objects, ldflags) - puts "build #{output}: link #{objects.join(' ')}\n ldflags = #{ldflags} $LDFLAGS" -end - -puts "# This set of commands generated by generate_build.rb script\n\n" -puts "CC = #{ENV['CC'] || 'clang'}" -puts "CXX = #{ENV['CXX'] || 'clang++'}\n\n" -puts "CFLAGS = #{ENV['CFLAGS']}" -puts "CXXFLAGS = #{ENV['CXXFLAGS']}" -puts "LDFLAGS = #{ENV['LDFLAGS']}" -puts "PKGVER = #{ENV['PKGVER']}\n\n" - - -puts """ -rule cc - command = $CC $cflags -c $in -o $out - -rule cxx - command = $CXX $cflags -c $in -o $out - -rule link - command = $CXX $ldflags $LDFLAGS $in -o $out - - -""" - -adbdfiles = %w( - adb.cpp - adb_io.cpp - adb_listeners.cpp - adb_trace.cpp - adb_utils.cpp - adb_unique_fd.cpp - sockets.cpp - transport.cpp - transport_local.cpp - transport_usb.cpp - fdevent.cpp - shell_service_protocol.cpp -) -libadbd = compile(expand('core/adb', adbdfiles), '-DADB_HOST=1 -Icore/diagnose_usb/include -Icore/include -Icore/base/include -Icore/adb -Icore/libcrypto_utils/include') - -adbfiles = %w( - client/auth.cpp - client/console.cpp - socket_spec.cpp - client/bugreport.cpp - client/line_printer.cpp - client/commandline.cpp - client/adb_client.cpp - services.cpp - client/file_sync_client.cpp - sysdeps_unix.cpp - sysdeps/errno.cpp - sysdeps/posix/network.cpp - client/main.cpp - client/usb_dispatch.cpp - client/usb_linux.cpp - client/usb_libusb.cpp - client/transport_mdns.cpp -) -libadb = compile(expand('core/adb', adbfiles), '-D_GNU_SOURCE -DADB_HOST=1 -Icore/libcrypto_utils/include -Iboringssl/src/include -Icore/include -Icore/base/include -Icore/adb -Imdnsresponder/mDNSShared') - -basefiles = %w( - file.cpp - threads.cpp - logging.cpp - parsenetaddress.cpp - stringprintf.cpp - strings.cpp - errors_unix.cpp - test_utils.cpp -) -libbase = compile(expand('core/base', basefiles), '-DADB_HOST=1 -Icore/base/include -Icore/include') - -logfiles = %w( - log_event_write.c - fake_log_device.c - log_event_list.c - logger_write.c - config_write.c - config_read.c - logger_lock.c - local_logger.c - fake_writer.c - logger_name.c - stderr_write.c - logprint.c -) -liblog = compile(expand('core/liblog', logfiles), '-DLIBLOG_LOG_TAG=1006 -D_XOPEN_SOURCE=700 -DFAKE_LOG_DEVICE=1 -Icore/libsystem/include -Icore/liblog/include -Icore/include') - -cutilsfiles = %w( - fs_config.cpp - canned_fs_config.cpp - android_get_control_file.cpp - socket_network_client_unix.cpp - socket_inaddr_any_server_unix.cpp - sockets.cpp - sockets_unix.cpp - socket_local_client_unix.cpp - socket_local_server_unix.cpp -) -libcutils = compile(expand('core/libcutils', cutilsfiles), '-D_GNU_SOURCE -Icore/libcutils/include -Icore/include -Icore/base/include') - -diagnoseusbfiles = %w( - diagnose_usb.cpp -) -libdiagnoseusb = compile(expand('core/diagnose_usb', diagnoseusbfiles), '-Icore/diagnose_usb/include -Icore/include -Icore/base/include') - -libcryptofiles = %w( - android_pubkey.c -) -libcrypto = compile(expand('core/libcrypto_utils', libcryptofiles), '-Icore/libcrypto_utils/include -Iboringssl/src/include') - -utilfiles = %w( - FileMap.cpp - Unicode.cpp - SharedBuffer.cpp - String8.cpp - String16.cpp -) -libutil = compile(expand('core/libutils', utilfiles), '-Icore/include') - -mdnsfiles = %w( - mDNSShared/dnssd_ipc.c - mDNSShared/dnssd_clientstub.c -) -mdns = compile(expand('mdnsresponder', mdnsfiles), '-D_GNU_SOURCE -DHAVE_IPV6 -DHAVE_LINUX -DNOT_HAVE_SA_LEN -DUSES_NETLINK -UMDNS_DEBUGMSGS -DMDNS_DEBUGMSGS=0 -Imdnsresponder/mDNSShared -Imdnsresponder/mDNSCore -Iinclude') - -zipfiles = %w( - zip_archive_stream_entry.cc - zip_archive.cc -) -libzip = compile(expand('core/libziparchive', zipfiles), '-Icore/libziparchive/include -Icore/base/include -Icore/include') - -boringcryptofiles = %w( - bn/cmp.c - bn/bn.c - bytestring/cbb.c - mem.c - buf/buf.c - bio/file.c - bn/convert.c - base64/base64.c -) - -boringcrypto = compile(expand('boringssl/src/crypto', boringcryptofiles), '-Iboringssl/src/include -Iinclude') - -link('adb', libbase + liblog + libcutils + libcrypto + libadbd + libadb + libdiagnoseusb + libutil + libzip + mdns + boringcrypto, '-lz -lcrypto -lpthread -lusb-1.0') - - -fastbootfiles = %w( - bootimg_utils.cpp - fs.cpp - socket.cpp - tcp.cpp - udp.cpp - usb_linux.cpp - util.cpp - main.cpp - engine.cpp - fastboot.cpp - fastboot_driver.cpp -) -libfastboot = compile(expand('core/fastboot', fastbootfiles), '-DFASTBOOT_VERSION="\"$PKGVER\"" -D_GNU_SOURCE -D_XOPEN_SOURCE=700 -DUSE_F2FS -Icore/base/include -Icore/include -Icore/adb -Icore/libsparse/include -Icore/mkbootimg/include/bootimg -Icore/libziparchive/include -Icore/diagnose_usb/include') - -sparsefiles = %w( - backed_block.cpp - output_file.cpp - sparse.cpp - sparse_crc32.cpp - sparse_err.cpp - sparse_read.cpp -) -libsparse = compile(expand('core/libsparse', sparsefiles), '-Icore/libsparse/include -Icore/base/include') - -link('fastboot', libsparse + libzip + libcutils + liblog + libutil + libbase + libfastboot + libdiagnoseusb, '-lz -lpcre2-8 -lpthread -ldl') - -simg2imgfiles = %w( - simg2img.cpp -) -libsimg2img = compile(expand('core/libsparse', simg2imgfiles), '-Iinclude -Icore/libsparse/include') -link('simg2img', libbase + libsparse + libsimg2img, '-lz') - -img2simgfiles = %w( - img2simg.cpp -) -libimg2simg = compile(expand('core/libsparse', img2simgfiles), '-Iinclude -Icore/libsparse/include') -link('img2simg', libbase + libsparse + libimg2simg, '-lz') - From cde401255be38c0cc377d96bcab8f1439908da49 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Fri, 9 May 2025 10:07:00 +0200 Subject: [PATCH 62/71] Remove adb.service and udev rules No longer necessary now that systemd allows access to adb/fastboot devices by default. [1] https://github.com/systemd/systemd/pull/36939 [2] https://src.fedoraproject.org/rpms/systemd/pull-request/205 --- 51-android.rules | 8671 -------------------------------------------- adb.service | 14 - android-tools.spec | 19 - 3 files changed, 8704 deletions(-) delete mode 100644 51-android.rules delete mode 100644 adb.service diff --git a/51-android.rules b/51-android.rules deleted file mode 100644 index 27cfee0..0000000 --- a/51-android.rules +++ /dev/null @@ -1,8671 +0,0 @@ -# Place this file into /etc/udev/rules.d/ if you want to autostart adb.service on plug -# -# http://developer.android.com/guide/developing/device.html -# adb/usb_vendors.c - -#Fry's Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0001", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ingram -SUBSYSTEM=="usb", ATTR{idVendor}=="0002", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Club Mac -SUBSYSTEM=="usb", ATTR{idVendor}=="0003", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nebraska Furniture Mart -SUBSYSTEM=="usb", ATTR{idVendor}=="0004", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown -SUBSYSTEM=="usb", ATTR{idVendor}=="0011", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Planex -SUBSYSTEM=="usb", ATTR{idVendor}=="0053", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DragonRise Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0079", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trust International B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="0105", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown -SUBSYSTEM=="usb", ATTR{idVendor}=="0145", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MLK -SUBSYSTEM=="usb", ATTR{idVendor}=="017c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TP-Link -SUBSYSTEM=="usb", ATTR{idVendor}=="0200", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chipsbank Microelectronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0204", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hangzhou Worlde -SUBSYSTEM=="usb", ATTR{idVendor}=="0218", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HUMAX Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="02ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MM300 eBook Reader -SUBSYSTEM=="usb", ATTR{idVendor}=="0300", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OCZ Technology Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="0324", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OCZ Technology Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="0325", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LTS -SUBSYSTEM=="usb", ATTR{idVendor}=="0386", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Sinote Tech-Electron Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="03d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bernd Walter Computer Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="03da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EndPoints, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thesys Microelectronics -SUBSYSTEM=="usb", ATTR{idVendor}=="03e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Broadcasting Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="03ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Atmel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="03eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iwatsu America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="03ed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitsumi -SUBSYSTEM=="usb", ATTR{idVendor}=="03ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hewlett-Packard -SUBSYSTEM=="usb", ATTR{idVendor}=="03f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Genoa Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="03f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oak Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Adaptec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03f3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Diebold, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03f4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens Electromechanical -SUBSYSTEM=="usb", ATTR{idVendor}=="03f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Epson Imaging Technology Center -SUBSYSTEM=="usb", ATTR{idVendor}=="03f8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KeyTronic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="03f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OPTi, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03fb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elitegroup Computer Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="03fc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xilinx, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="03fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Farallon Comunications -SUBSYSTEM=="usb", ATTR{idVendor}=="03fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#National Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0400", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#National Registry, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0401", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALi Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0402", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Future Technology Devices International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0403", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NCR Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0404", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Synopsys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0405", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu-ICL Computers -SUBSYSTEM=="usb", ATTR{idVendor}=="0406", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Personal Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0407", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quanta Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0408", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NEC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0409", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kodak Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="040a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Weltrend Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="040b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VTech Computers, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="040c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VIA Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="040d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MCCI -SUBSYSTEM=="usb", ATTR{idVendor}=="040e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Echo Speech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="040f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BUFFALO INC. (formerly MelCo., Inc.) -SUBSYSTEM=="usb", ATTR{idVendor}=="0411", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Award Software International -SUBSYSTEM=="usb", ATTR{idVendor}=="0412", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leadtek Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0413", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Giga-Byte Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0414", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winbond Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0416", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Symbios Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="0417", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AST Research -SUBSYSTEM=="usb", ATTR{idVendor}=="0418", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Info. Systems America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0419", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Phoenix Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="041a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#d'TV -SUBSYSTEM=="usb", ATTR{idVendor}=="041b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#S3, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="041d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Creative Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="041e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LCS Telegraphics -SUBSYSTEM=="usb", ATTR{idVendor}=="041f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chips and Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0420", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nokia Mobile Phones -SUBSYSTEM=="usb", ATTR{idVendor}=="0421", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADI Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0422", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Computer Access Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0423", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Standard Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0424", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola Semiconductors HK, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0425", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Device Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0426", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola Electronics Taiwan, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0427", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Gravis Computer Tech, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0428", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cirrus Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="0429", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ericsson Austrian, AG -SUBSYSTEM=="usb", ATTR{idVendor}=="042a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="042b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innovative Semiconductors, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="042c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micronics -SUBSYSTEM=="usb", ATTR{idVendor}=="042d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="042e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Molex, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="042f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sun Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0430", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Itac Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0431", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unisys Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0432", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alps Electric, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0433", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Info. Systems America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0434", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hyundai Electronics America -SUBSYSTEM=="usb", ATTR{idVendor}=="0435", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taugagreining HF -SUBSYSTEM=="usb", ATTR{idVendor}=="0436", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Framatome Connectors USA -SUBSYSTEM=="usb", ATTR{idVendor}=="0437", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Micro Devices, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0438", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Voice Technologies Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0439", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lexmark International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="043d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LG Electronics USA, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="043e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RadiSys Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="043f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eizo Nanao Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0440", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winbond Systems Lab. -SUBSYSTEM=="usb", ATTR{idVendor}=="0441", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ericsson, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0442", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gateway, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0443", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lucent Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0445", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NMB Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0446", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Momentum Microsystems -SUBSYSTEM=="usb", ATTR{idVendor}=="0447", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shamrock Tech. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="044a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WSI -SUBSYSTEM=="usb", ATTR{idVendor}=="044b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CCL/ITRI -SUBSYSTEM=="usb", ATTR{idVendor}=="044c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens Nixdorf AG -SUBSYSTEM=="usb", ATTR{idVendor}=="044d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alps Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="044e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ThrustMaster, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="044f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DFI, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0450", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Texas Instruments, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0451", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitsubishi Electronics America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0452", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CMD Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0453", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vobis Microcomputer AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0454", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telematics International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0455", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Analog Devices, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0456", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Integrated Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0457", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KYE Systems Corp. (Mouse Systems) -SUBSYSTEM=="usb", ATTR{idVendor}=="0458", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Adobe Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0459", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SONICblue, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="045a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="045b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nortel Networks, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="045d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microsoft Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="045e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ace Cad Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0460", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Primax Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0461", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MGE UPS Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0463", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AMP/Tycoelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0464", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AT&T Paradyne -SUBSYSTEM=="usb", ATTR{idVendor}=="0467", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wieson Technologies Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0468", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cherry GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="046a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#American Megatrends, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="046b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba Corp., Digital Media Equipment -SUBSYSTEM=="usb", ATTR{idVendor}=="046c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logitech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="046d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Behavior Tech. Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="046e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Crystal Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="046f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips (or NXP) -SUBSYSTEM=="usb", ATTR{idVendor}=="0471", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chicony Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0472", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanyo Information Business Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0473", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanyo Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0474", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Relisys/Teco Information System -SUBSYSTEM=="usb", ATTR{idVendor}=="0475", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AESP -SUBSYSTEM=="usb", ATTR{idVendor}=="0476", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seagate Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0477", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Connectix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0478", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Peripheral Laboratories -SUBSYSTEM=="usb", ATTR{idVendor}=="0479", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Semtech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="047a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silitek Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="047b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dell Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="047c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kensington -SUBSYSTEM=="usb", ATTR{idVendor}=="047d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agere Systems, Inc. (Lucent) -SUBSYSTEM=="usb", ATTR{idVendor}=="047e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plantronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="047f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba America Info. Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0480", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zenith Data Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0481", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kyocera Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0482", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#STMicroelectronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0483", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Specialix -SUBSYSTEM=="usb", ATTR{idVendor}=="0484", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nokia Monitors -SUBSYSTEM=="usb", ATTR{idVendor}=="0485", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASUS Computers, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0486", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stewart Connector -SUBSYSTEM=="usb", ATTR{idVendor}=="0487", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cirque Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0488", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Foxconn / Hon Hai -SUBSYSTEM=="usb", ATTR{idVendor}=="0489", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#S-MOS Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="048a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alps Electric Ireland, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="048c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Technology Express, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="048d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eicon Tech. -SUBSYSTEM=="usb", ATTR{idVendor}=="048f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#United Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0490", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Capetronic -SUBSYSTEM=="usb", ATTR{idVendor}=="0491", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung SemiConductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0492", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MAG Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0493", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ESS Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0495", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micron Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0496", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smile International -SUBSYSTEM=="usb", ATTR{idVendor}=="0497", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Capetronic (Kaohsiung) Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0498", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yamaha Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0499", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gandalf Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="049a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Curtis Computer Products -SUBSYSTEM=="usb", ATTR{idVendor}=="049b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer Advanced Labs, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="049c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VLSI Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="049d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compaq Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="049f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digital Equipment Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SystemSoft Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04a1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FirePower Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="04a2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trident Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer Peripherals Inc. (now BenQ Corp.) -SUBSYSTEM=="usb", ATTR{idVendor}=="04a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nokia Display Products -SUBSYSTEM=="usb", ATTR{idVendor}=="04a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Visioneer -SUBSYSTEM=="usb", ATTR{idVendor}=="04a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Multivideo Labs, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Canon, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DaeWoo Telecom, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chromatic Research -SUBSYSTEM=="usb", ATTR{idVendor}=="04ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Audiometrics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dooin Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="04ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winnov L.P. -SUBSYSTEM=="usb", ATTR{idVendor}=="04af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nikon Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pan International -SUBSYSTEM=="usb", ATTR{idVendor}=="04b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IBM Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cypress Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ROHM LSI Systems USA, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="04b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hint Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compal Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seiko Epson Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rainbow Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toucan Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I-O Data Device, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba Electronics Taiwan Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telia Research AB -SUBSYSTEM=="usb", ATTR{idVendor}=="04be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TDK Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04bf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#U.S. Robotics (3Com) -SUBSYSTEM=="usb", ATTR{idVendor}=="04c1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Methode Electronics Far East PTE, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maxi Switch, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04c3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lockheed Martin Energy Research -SUBSYSTEM=="usb", ATTR{idVendor}=="04c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba America Electronic Components -SUBSYSTEM=="usb", ATTR{idVendor}=="04c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Macro Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="04c7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Konica Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lite-On Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuji Photo Film Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04cb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ST-Ericsson -SUBSYSTEM=="usb", ATTR{idVendor}=="04cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tatung Co. Of America -SUBSYSTEM=="usb", ATTR{idVendor}=="04cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ScanLogic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Myson Century, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digi International -SUBSYSTEM=="usb", ATTR{idVendor}=="04d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ITT Canon -SUBSYSTEM=="usb", ATTR{idVendor}=="04d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altec Lansing Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="04d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VidUS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LSI Logic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04d4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Forte Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mentor Graphics -SUBSYSTEM=="usb", ATTR{idVendor}=="04d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oki Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="04d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microchip Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Holtek Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Panasonic (Matsushita) -SUBSYSTEM=="usb", ATTR{idVendor}=="04da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hypertec Pty, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Huan Hsin Holdings, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sharp Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MindShare, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04de", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Interlink Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="04df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iiyama North America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Exar Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04e2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zilog, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACC Microelectronics -SUBSYSTEM=="usb", ATTR{idVendor}=="04e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Promise Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="04e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SCM Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elo TouchSystems -SUBSYSTEM=="usb", ATTR{idVendor}=="04e7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PC-Tel, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brooktree Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Northstar Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tokyo Electron Device, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Annabooks -SUBSYSTEM=="usb", ATTR{idVendor}=="04ed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pacific Electronic International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Daewoo Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Victor Company of Japan, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chicony Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elan Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04f3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Harting Elektronik, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04f4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu-ICL Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="04f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Norand Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Newnex Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FuturePlus Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="04f8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brother Industries, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dallas Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="04fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Biostar Microtech International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04fb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunplus Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04fc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Soliton Systems, K.K. -SUBSYSTEM=="usb", ATTR{idVendor}=="04fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PFU, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="04fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#E-CMOS Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="04ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siam United Hi-Tech -SUBSYSTEM=="usb", ATTR{idVendor}=="0500", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujikura DDK, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0501", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0502", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi America, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0503", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hayes Microcomputer Products -SUBSYSTEM=="usb", ATTR{idVendor}=="0504", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3Com Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0506", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hosiden Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0507", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Clarion Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0508", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aztech Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0509", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cinch Connectors -SUBSYSTEM=="usb", ATTR{idVendor}=="050a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cable System International -SUBSYSTEM=="usb", ATTR{idVendor}=="050b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InnoMedia, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="050c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Belkin Components -SUBSYSTEM=="usb", ATTR{idVendor}=="050d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neon Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="050e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KC Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="050f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sejin Electron, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0510", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#N'Able (DataBook) Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0511", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hualon Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0512", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#digital-X, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0513", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FCI Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0514", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACTC -SUBSYSTEM=="usb", ATTR{idVendor}=="0515", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Longwell Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0516", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Butterfly Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="0517", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EzKEY Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0518", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Star Micronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0519", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WYSE Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="051a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Graphics -SUBSYSTEM=="usb", ATTR{idVendor}=="051b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shuttle, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="051c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#American Power Conversion -SUBSYSTEM=="usb", ATTR{idVendor}=="051d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Scientific Atlanta, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="051e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IO Systems (Elite Electronics), Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="051f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiwan Semiconductor Manufacturing Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0520", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Airborn Connectors -SUBSYSTEM=="usb", ATTR{idVendor}=="0521", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Connectek, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0522", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATEN GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0523", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sola Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0524", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Netchip Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0525", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Temic MHS S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="0526", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALTRA -SUBSYSTEM=="usb", ATTR{idVendor}=="0527", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATI Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0528", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aladdin Knowledge Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0529", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Crescent Heart Software -SUBSYSTEM=="usb", ATTR{idVendor}=="052a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tekom Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="052b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Canon Information Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="052c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avid Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="052d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Standard Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="052e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unicore Software, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="052f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#American Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0530", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wacom Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0531", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Systech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0532", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alcatel Mobile Phones -SUBSYSTEM=="usb", ATTR{idVendor}=="0533", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0534", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LIH TZU Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0535", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hand Held Products (Welch Allyn, Inc.) -SUBSYSTEM=="usb", ATTR{idVendor}=="0536", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inventec Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0537", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Caldera International, Inc. (SCO) -SUBSYSTEM=="usb", ATTR{idVendor}=="0538", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shyh Shiun Terminals Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0539", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PrehKeyTec GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="053a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Global Village Communication -SUBSYSTEM=="usb", ATTR{idVendor}=="053b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Institut of Microelectronic & Mechatronic Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="053c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Architect -SUBSYSTEM=="usb", ATTR{idVendor}=="053d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mobility Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="053e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Synopsys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="053f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UniAccess AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0540", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sirf Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0541", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViewSonic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0543", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cristie Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0544", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xirlink, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0545", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Polaroid Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0546", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Anchor Chips, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0547", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tyan Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0548", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pixera Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0549", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Microelectronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="054a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#New Media Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="054b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sony Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="054c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Try Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="054d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Proside Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="054e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WYSE Technology Taiwan -SUBSYSTEM=="usb", ATTR{idVendor}=="054f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuji Xerox Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0550", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CompuTrend Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0551", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips Monitors -SUBSYSTEM=="usb", ATTR{idVendor}=="0552", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#STMicroelectronics Imaging Division (VLSI Vision) -SUBSYSTEM=="usb", ATTR{idVendor}=="0553", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dictaphone Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0554", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ANAM S&T Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0555", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Asahi Kasei Microsystems Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0556", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATEN International Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0557", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Truevision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0558", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cadence Design Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0559", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kenwood USA -SUBSYSTEM=="usb", ATTR{idVendor}=="055a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KnowledgeTek, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="055b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Proton Electronic Ind. -SUBSYSTEM=="usb", ATTR{idVendor}=="055c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Electro-Mechanics Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="055d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CTX Opto-Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="055e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mustek Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="055f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Interface Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0560", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oasis Design, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0561", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telex Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0562", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Immersion Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0563", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kodak Digital Product Center, Japan Ltd. (formerly Chinon Industries Inc.) -SUBSYSTEM=="usb", ATTR{idVendor}=="0564", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Peracom Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0565", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Monterey International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0566", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xyratex International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0567", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quartz Ingenierie -SUBSYSTEM=="usb", ATTR{idVendor}=="0568", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SegaSoft -SUBSYSTEM=="usb", ATTR{idVendor}=="0569", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wacom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="056a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Decicon, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="056b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eTEK Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="056c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EIZO Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="056d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elecom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="056e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Korea Data Systems Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="056f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Epson America -SUBSYSTEM=="usb", ATTR{idVendor}=="0570", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Interex, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0571", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Conexant Systems (Rockwell), Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0572", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zoran Co. Personal Media Division (Nogatech) -SUBSYSTEM=="usb", ATTR{idVendor}=="0573", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#City University of Hong Kong -SUBSYSTEM=="usb", ATTR{idVendor}=="0574", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips Creative Display Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="0575", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BAFO/Quality Computer Accessories -SUBSYSTEM=="usb", ATTR{idVendor}=="0576", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ELSA -SUBSYSTEM=="usb", ATTR{idVendor}=="0577", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intrinsix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0578", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GVC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0579", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Electronics America -SUBSYSTEM=="usb", ATTR{idVendor}=="057a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Y-E Data, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="057b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVM GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="057c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shark Multimedia, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="057d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nintendo Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="057e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QuickShot, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="057f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Denron, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0580", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Racal Data Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0581", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Roland Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0582", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Padix Co., Ltd (Rockfire) -SUBSYSTEM=="usb", ATTR{idVendor}=="0583", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RATOC System, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0584", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FlashPoint Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0585", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZyXEL Communications Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0586", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#America Kotobuki Electronics Industries, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0587", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sapien Design -SUBSYSTEM=="usb", ATTR{idVendor}=="0588", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Victron -SUBSYSTEM=="usb", ATTR{idVendor}=="0589", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nohau Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="058a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infineon Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="058b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#In Focus Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="058c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micrel Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="058d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tripath Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="058e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alcor Micro Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="058f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Omron Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0590", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Questra Consulting -SUBSYSTEM=="usb", ATTR{idVendor}=="0591", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Powerware Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0592", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Incite -SUBSYSTEM=="usb", ATTR{idVendor}=="0593", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Princeton Graphic Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0594", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zoran Microelectronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0595", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MicroTouch Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0596", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trisignal Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="0597", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Niigata Canotec Co., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0598", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brilliance Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0599", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spectrum Signal Processing, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="059a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iomega Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="059b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A-Trend Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="059c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Input Devices -SUBSYSTEM=="usb", ATTR{idVendor}=="059d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intelligent Instrumentation -SUBSYSTEM=="usb", ATTR{idVendor}=="059e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LaCie, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="059f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vetronix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuji Film Microdevices Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05a2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ARC International -SUBSYSTEM=="usb", ATTR{idVendor}=="05a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ortek Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sampo Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cisco Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bose Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spacetec IMC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OmniVision Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Utilux South China, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#In-System Design -SUBSYSTEM=="usb", ATTR{idVendor}=="05ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Y.C. Cable U.S.A., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Synopsys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jing-Mold Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fountain Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#First International Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LG Semicon Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dialogic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Proxima Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Medianix Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agiler, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips Research Laboratories -SUBSYSTEM=="usb", ATTR{idVendor}=="05b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DigitalPersona, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grey Cell Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="05bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3G Green Green Globe Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05bc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RAFI GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="05bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tyco Electronics (Raychem) -SUBSYSTEM=="usb", ATTR{idVendor}=="05be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#S & S Research -SUBSYSTEM=="usb", ATTR{idVendor}=="05bf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keil Software -SUBSYSTEM=="usb", ATTR{idVendor}=="05c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kawasaki Microelectronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Media Phonics (Suisse) S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digi International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qualcomm, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qtronix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cheng Uei Precision Industry Co., Ltd (Foxlink) -SUBSYSTEM=="usb", ATTR{idVendor}=="05c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Semtech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05c9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ricoh Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PowerVision Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05cb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ELSA AG -SUBSYSTEM=="usb", ATTR{idVendor}=="05cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicom, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#sci-worx GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="05ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sung Forn Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GE Medical Systems Lunar -SUBSYSTEM=="usb", ATTR{idVendor}=="05d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brainboxes, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wave Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tohoku Ricoh Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Super Gate Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips Semiconductors, CICT -SUBSYSTEM=="usb", ATTR{idVendor}=="05d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thomas & Betts Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ultima Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Axiohm Transaction Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="05d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microtek International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sun Corp. (Suntac?) -SUBSYSTEM=="usb", ATTR{idVendor}=="05db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lexar Media, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Delta Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Vision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Symbol Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="05e0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Syntek Semiconductor Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ElecVision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05e2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Genesys Logic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Red Wing Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuji Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keithley Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="05e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ICC, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kawasaki LSI -SUBSYSTEM=="usb", ATTR{idVendor}=="05e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FFC, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#COM21, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cytechinfo Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVB, Inc. [anko?] -SUBSYSTEM=="usb", ATTR{idVendor}=="05ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Canopus Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compass Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="05f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dexin Corp., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PI Engineering, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05f3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unixtar Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AOC International -SUBSYSTEM=="usb", ATTR{idVendor}=="05f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RFC Distribution(s) PTE, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PSC Scanning, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens Telecommunications Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="05fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Harman Multimedia -SUBSYSTEM=="usb", ATTR{idVendor}=="05fc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InterAct, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="05fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chic Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LeCroy Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="05ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Barco Display Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0600", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jazz Hipster Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0601", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vista Imaging, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0602", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Novatek Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0603", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jean Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0604", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Anchor C&C Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0605", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Royal Information Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0606", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bridge Information Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0607", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Genrad Ads -SUBSYSTEM=="usb", ATTR{idVendor}=="0608", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SMK Manufacturing, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0609", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Worthington Data Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="060a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Solid Year -SUBSYSTEM=="usb", ATTR{idVendor}=="060b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EEH Datalink GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="060c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Auctor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="060d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Transmonde Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="060e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Joinsoon Electronics Mfg. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="060f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Costar Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0610", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Totoku Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0611", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TransAct Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0613", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bio-Rad Laboratories -SUBSYSTEM=="usb", ATTR{idVendor}=="0614", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quabbin Wire & Cable Co., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0615", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Future Techno Designs PVT, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0616", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Swiss Federal Insitute of Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0617", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MacAlly -SUBSYSTEM=="usb", ATTR{idVendor}=="0618", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seiko Instruments, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0619", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Veridicom International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="061a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Promptus Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="061b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Act Labs, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="061c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quatech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="061d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nissei Electric Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="061e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alaris, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0620", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ODU-Steckverbindungssysteme GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="0621", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iotech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0622", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Littelfuse, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0623", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avocent Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0624", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TiMedia Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0625", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nippon Systems Development Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0626", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Adomax Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0627", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tasking Software, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0628", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zida Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0629", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Creative Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="062a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Greatlink Electronics Taiwan, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="062b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Institute for Information Industry -SUBSYSTEM=="usb", ATTR{idVendor}=="062c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiwan Tai-Hao Enterprises Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="062d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mainsuper Enterprises Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="062e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sin Sheng Terminal & Machine, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="062f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JUJO Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0631", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cyrix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0633", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micron Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0634", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Methode Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0635", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sierra Imaging, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0636", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0638", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chrontel, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0639", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Techwin Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="063a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taugagreining HF -SUBSYSTEM=="usb", ATTR{idVendor}=="063b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yamaichi Electronics Co., Ltd (Sakura) -SUBSYSTEM=="usb", ATTR{idVendor}=="063c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fong Kai Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="063d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RealMedia Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="063e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#New Technology Cable, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="063f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitex Development Tools -SUBSYSTEM=="usb", ATTR{idVendor}=="0640", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Woods Industries, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0641", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VIA Medical Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0642", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TEAC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0644", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Who? Vision Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0645", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UMAX -SUBSYSTEM=="usb", ATTR{idVendor}=="0646", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acton Research Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0647", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inside Out Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="0648", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Weli Science Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0649", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Analog Devices, Inc. (White Mountain DSP) -SUBSYSTEM=="usb", ATTR{idVendor}=="064b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ji-Haw Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="064c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TriTech Microelectronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="064d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Suyin Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="064e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WIBU-Systems AG -SUBSYSTEM=="usb", ATTR{idVendor}=="064f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dynapro Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0650", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Likom Technology Sdn. Bhd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0651", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stargate Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0652", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CNF, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0653", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Granite Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0654", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Space Shuttle Hi-Tech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0655", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Glory Mark Electronic, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0656", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tekcon Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0657", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sigma Designs, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0658", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aethra -SUBSYSTEM=="usb", ATTR{idVendor}=="0659", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Optoelectronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="065a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tracewell Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="065b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Graphics -SUBSYSTEM=="usb", ATTR{idVendor}=="065e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Good Way Technology Co., Ltd & GWC technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="065f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TSAY-E (BVI) International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0660", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hamamatsu Photonics K.K. -SUBSYSTEM=="usb", ATTR{idVendor}=="0661", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kansai Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0662", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topmax Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0663", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ET&T Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0664", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cypress Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="0665", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aiwa Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0667", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WordWand -SUBSYSTEM=="usb", ATTR{idVendor}=="0668", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oce' Printing Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0669", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Total Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="066a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linksys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="066b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Entrega, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="066d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer Semiconductor America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="066e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SigmaTel, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="066f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sequel Imaging -SUBSYSTEM=="usb", ATTR{idVendor}=="0670", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Labtec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0672", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HCL -SUBSYSTEM=="usb", ATTR{idVendor}=="0673", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Key Mouse Electronic Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0674", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DrayTek Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0675", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teles AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0676", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aiwa Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0677", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACard Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0678", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prolific Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="067b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Efficient Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="067c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hohner Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="067d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intermec Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="067e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Virata, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="067f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Realtek Semiconductor Corp., CPP Div. (Avance Logic) -SUBSYSTEM=="usb", ATTR{idVendor}=="0680", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens Information and Communication Products -SUBSYSTEM=="usb", ATTR{idVendor}=="0681", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Victor Company of Japan, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0682", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Actiontec Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0684", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZD Incorporated -SUBSYSTEM=="usb", ATTR{idVendor}=="0685", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Minolta Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0686", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pertech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="068a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Potrans International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="068b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CH Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="068e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Golden Bridge Electech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0690", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hagiwara Sys-Com Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0693", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lego Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0694", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chuntex (CTX) -SUBSYSTEM=="usb", ATTR{idVendor}=="0698", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tektronix, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0699", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Askey Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="069a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thomson, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="069b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hughes Network Systems (HNS) -SUBSYSTEM=="usb", ATTR{idVendor}=="069d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Welcat Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="069e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Allied Data Technologies BV -SUBSYSTEM=="usb", ATTR{idVendor}=="069f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topro Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06a2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Saitek PLC -SUBSYSTEM=="usb", ATTR{idVendor}=="06a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xiamen Doowell Electron Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Divio -SUBSYSTEM=="usb", ATTR{idVendor}=="06a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MicroStore, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topaz Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Westell -SUBSYSTEM=="usb", ATTR{idVendor}=="06a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sysgration, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Laboratories of America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06ac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Greatland Electronics Taiwan, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Professional Multimedia Testing Centre -SUBSYSTEM=="usb", ATTR{idVendor}=="06ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Harting, Inc. of North America -SUBSYSTEM=="usb", ATTR{idVendor}=="06af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pixela Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alcatel Telecom -SUBSYSTEM=="usb", ATTR{idVendor}=="06b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smooth Cord & Connector Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EDA, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oki Data Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06bc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AGFA-Gevaert NV -SUBSYSTEM=="usb", ATTR{idVendor}=="06bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AME Optimedia Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leoco Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06bf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Phidgets Inc. (formerly GLAB) -SUBSYSTEM=="usb", ATTR{idVendor}=="06c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bizlink International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hagenuk, GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="06c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infowave Software, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SIIG, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taxan (Europe), Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06c9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Newer Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Synaptics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06cb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Terayon Communication Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="06cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keyspan -SUBSYSTEM=="usb", ATTR{idVendor}=="06cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contec -SUBSYSTEM=="usb", ATTR{idVendor}=="06ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SpheronVR AG -SUBSYSTEM=="usb", ATTR{idVendor}=="06cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LapLink, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Daewoo Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitsubishi Electric Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cisco Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="06d4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba -SUBSYSTEM=="usb", ATTR{idVendor}=="06d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aashima Technology B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="06d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Network Computing Devices (NCD) -SUBSYSTEM=="usb", ATTR{idVendor}=="06d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Technical Marketing Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Phoenixtec Power Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Paradyne -SUBSYSTEM=="usb", ATTR{idVendor}=="06db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Foxlink Image Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Heisei Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06de", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Multi-Tech Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06e0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADS Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alcatel Microelectronics -SUBSYSTEM=="usb", ATTR{idVendor}=="06e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tiger Jet Network, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sirius Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="06ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PC Expert Tech. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I.A.C. Geometrische Ingenieurs B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="06ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#T.N.C Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Opcode Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Emine Technology Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="06f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wintrend Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wailly Technology Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="06f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Guillemot Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="06f8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASYST electronic d.o.o. -SUBSYSTEM=="usb", ATTR{idVendor}=="06f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HSD S.r.L -SUBSYSTEM=="usb", ATTR{idVendor}=="06fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola Semiconductor Products Sector -SUBSYSTEM=="usb", ATTR{idVendor}=="06fc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Boston Acoustics -SUBSYSTEM=="usb", ATTR{idVendor}=="06fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gallant Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="06fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Supercomal Wire & Cable SDN. BHD. -SUBSYSTEM=="usb", ATTR{idVendor}=="0701", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bvtech Industry, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0703", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NKK Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0705", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ariel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0706", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Standard Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0707", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Putercom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0708", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Systems, Ltd (SSL) -SUBSYSTEM=="usb", ATTR{idVendor}=="0709", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oki Electric Industry Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="070a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comoss Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="070d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Excel Cell Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="070e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Connect Tech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0710", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Magic Control Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0711", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Interval Research Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0713", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NewMotion, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0714", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZNK Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0717", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Imation Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0718", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tremon Enterprises Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0719", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Domain Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="071b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xionics Document Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="071c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eicon Networks Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="071d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ariston Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="071e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Centillium Communications Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0723", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vanguard International Semiconductor-America -SUBSYSTEM=="usb", ATTR{idVendor}=="0726", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amitm -SUBSYSTEM=="usb", ATTR{idVendor}=="0729", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunix Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="072e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Card Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="072f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Susteen, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0731", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Goldfull Electronics & Telecommunications Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0732", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViewQuest Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0733", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lasat Communications A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="0734", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Asuscom Network -SUBSYSTEM=="usb", ATTR{idVendor}=="0735", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lorom Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0736", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mad Catz, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0738", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chaplet Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="073a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Suncom Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="073b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Industrial Electronic Engineers, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="073c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eutron S.p.a. -SUBSYSTEM=="usb", ATTR{idVendor}=="073d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NEC, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="073e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Syntech Information Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0745", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Onkyo Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0746", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Labway Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0747", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Strong Man Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0748", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EVer Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0749", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ming Fortune Industry Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="074a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Polestar Tech. Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="074b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C-C-C Group PLC -SUBSYSTEM=="usb", ATTR{idVendor}=="074c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micronas GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="074d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digital Stream Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="074e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aureal Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="0755", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Network Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0757", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sophisticated Circuits, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="075b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Midiman -SUBSYSTEM=="usb", ATTR{idVendor}=="0763", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cyber Power System, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0764", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#X-Rite, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0765", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jess-Link Products Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0766", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tokheim Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0767", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Camtel Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0768", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Surecom Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0769", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smart Technology Enablers, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="076a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OmniKey AG -SUBSYSTEM=="usb", ATTR{idVendor}=="076b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Partner Tech -SUBSYSTEM=="usb", ATTR{idVendor}=="076c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Denso Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="076d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kuan Tech Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="076e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jhen Vei Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="076f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Welch Allyn, Inc - Medical Division -SUBSYSTEM=="usb", ATTR{idVendor}=="0770", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Observator Instruments BV -SUBSYSTEM=="usb", ATTR{idVendor}=="0771", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Your data Our Care -SUBSYSTEM=="usb", ATTR{idVendor}=="0772", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AmTRAN Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0774", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Longshine Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0775", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inalways Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0776", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comda Enterprise Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0777", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Volex, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0778", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fairchild Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="0779", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sankyo Seiki Mfg. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="077a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linksys -SUBSYSTEM=="usb", ATTR{idVendor}=="077b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Forward Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="077c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Griffin Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="077d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Well Excellent & Most Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="077f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sagem Monetel GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0780", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SanDisk Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0781", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trackerball -SUBSYSTEM=="usb", ATTR{idVendor}=="0782", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C3PO -SUBSYSTEM=="usb", ATTR{idVendor}=="0783", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vivitar, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0784", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NTT-ME -SUBSYSTEM=="usb", ATTR{idVendor}=="0785", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logitec Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0789", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Happ Controls, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="078b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GTCO/CalComp -SUBSYSTEM=="usb", ATTR{idVendor}=="078c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brincom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="078e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pro-Image Manufacturing Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0790", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Copartner Wire and Cable Mfg. Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0791", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Axis Communications AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0792", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wha Yu Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0793", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ABL Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0794", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RealChip, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0795", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Certicom Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0796", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grandtech Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0797", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Optelec -SUBSYSTEM=="usb", ATTR{idVendor}=="0798", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altera -SUBSYSTEM=="usb", ATTR{idVendor}=="0799", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sagem -SUBSYSTEM=="usb", ATTR{idVendor}=="079b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alfadata Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="079d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digicom S.p.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="07a1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#National Technical Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="07a2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Onnto Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Be, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADMtek, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Corega K.K. -SUBSYSTEM=="usb", ATTR{idVendor}=="07aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Freecom Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="07ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microtech -SUBSYSTEM=="usb", ATTR{idVendor}=="07af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trust Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="07b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IMP, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola BCS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07b2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plustek, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Olympus Optical Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mega World International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Marubun Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07b6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TIME Interconnect, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AboCom Systems Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="07b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Canon Computer Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07bc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Webgear, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Veridicom -SUBSYSTEM=="usb", ATTR{idVendor}=="07be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Code Mercenaries Hard- und Software GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="07c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keisokugiken -SUBSYSTEM=="usb", ATTR{idVendor}=="07c1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datafab Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#APG Cash Drawer -SUBSYSTEM=="usb", ATTR{idVendor}=="07c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ShareWave, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Powertech Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07c7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#B.U.G., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Allied Telesyn International -SUBSYSTEM=="usb", ATTR{idVendor}=="07c9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVerMedia Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingmax Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07cb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Carry Computer Eng., Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elektor -SUBSYSTEM=="usb", ATTR{idVendor}=="07cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Casio Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dazzle -SUBSYSTEM=="usb", ATTR{idVendor}=="07d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#D-Link System -SUBSYSTEM=="usb", ATTR{idVendor}=="07d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aptio Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cyberdata Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radiant Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="07d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GCC Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arasan Chip Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="07da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Diamond Multimedia -SUBSYSTEM=="usb", ATTR{idVendor}=="07de", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#David Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ambient Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elmeg GmbH & Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07e2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Planex Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Movado Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QPS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Allied Cable Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mirvo Toys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07e7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Labsystems -SUBSYSTEM=="usb", ATTR{idVendor}=="07e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iwatsu Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Double-H Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiyo Electric Wire & Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="07ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Torex Retail (formerly Logware) -SUBSYSTEM=="usb", ATTR{idVendor}=="07ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#STSN -SUBSYSTEM=="usb", ATTR{idVendor}=="07ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microcomputer Applications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Circuit Assembly Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Century Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dotop Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="07f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DrayTek Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="07fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mark of the Unicorn -SUBSYSTEM=="usb", ATTR{idVendor}=="07fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown -SUBSYSTEM=="usb", ATTR{idVendor}=="07ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MagTek -SUBSYSTEM=="usb", ATTR{idVendor}=="0801", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mako Technologies, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0802", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zoom Telephonics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0803", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Genicom Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0809", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Evermuch Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="080a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cross Match Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="080b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datalogic S.p.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="080c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teco Image Systems Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="080d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Personal Communication Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0810", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mattel, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0813", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eLicenser -SUBSYSTEM=="usb", ATTR{idVendor}=="0819", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MG Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="081a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Indigita Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="081b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mipsys -SUBSYSTEM=="usb", ATTR{idVendor}=="081c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AlphaSmart, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="081e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Reudo Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0822", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GC Protronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0825", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Transit -SUBSYSTEM=="usb", ATTR{idVendor}=="0826", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BroadLogic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0827", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sato Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0828", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DirecTV Broadband, Inc. (Telocity) -SUBSYSTEM=="usb", ATTR{idVendor}=="0829", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Handspring -SUBSYSTEM=="usb", ATTR{idVendor}=="082d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Palm, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0830", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kouwell Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0832", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sourcenext Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0833", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Action Star Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0835", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TrekStor -SUBSYSTEM=="usb", ATTR{idVendor}=="0836", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Techwin Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0839", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Accton Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="083a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Global Village -SUBSYSTEM=="usb", ATTR{idVendor}=="083f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Argosy Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0840", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rioport.com, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0841", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Welland Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0844", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NetGear, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0846", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Minton Optic Industry Co., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="084d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KB Gear -SUBSYSTEM=="usb", ATTR{idVendor}=="084e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Empeg -SUBSYSTEM=="usb", ATTR{idVendor}=="084f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fast Point Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0850", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Macronix International Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0851", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CSEM -SUBSYSTEM=="usb", ATTR{idVendor}=="0852", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topre Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="0853", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ActiveWire, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0854", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#B&B Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0856", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi Maxell, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0858", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Minolta Systems Laboratory, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0859", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xircom -SUBSYSTEM=="usb", ATTR{idVendor}=="085a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ColorVision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="085c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teletrol Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0862", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Filanet Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0863", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NetGear, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0864", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Translation, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0867", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Emagic Soft- und Hardware GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="086a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DeTeWe - Deutsche Telephonwerke AG & Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="086c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#System TALKS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="086e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MEC IMEX, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="086f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Metricom -SUBSYSTEM=="usb", ATTR{idVendor}=="0870", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SanDisk, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0871", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xpeed, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0873", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A-Tec Subsystem, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0874", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comtrol Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0879", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Adesso/Kbtek America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="087c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jaton Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="087d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Computer Products of America -SUBSYSTEM=="usb", ATTR{idVendor}=="087e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QualCore Logic Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="087f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#APT Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0880", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Recording Industry Association of America (RIAA) -SUBSYSTEM=="usb", ATTR{idVendor}=="0883", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Boca Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0885", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#XAC Automation Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0886", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hannstar Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0887", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechTools -SUBSYSTEM=="usb", ATTR{idVendor}=="088a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MassWorks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="088b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Swecoin AB -SUBSYSTEM=="usb", ATTR{idVendor}=="088c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iLok -SUBSYSTEM=="usb", ATTR{idVendor}=="088e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DioGraphy, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0892", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TSI Incorporated -SUBSYSTEM=="usb", ATTR{idVendor}=="0894", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lauterbach -SUBSYSTEM=="usb", ATTR{idVendor}=="0897", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#United Technologies Research Cntr. -SUBSYSTEM=="usb", ATTR{idVendor}=="089c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Icron Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="089d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NST Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="089e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Primex Aerospace Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="089f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e9, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba TEC -SUBSYSTEM=="usb", ATTR{idVendor}=="08a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Andrea Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="08a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CWAV Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Macally (Mace Group, Inc.) -SUBSYSTEM=="usb", ATTR{idVendor}=="08ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Metrohm -SUBSYSTEM=="usb", ATTR{idVendor}=="08b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sorenson Vision, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NATSU -SUBSYSTEM=="usb", ATTR{idVendor}=="08b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#J. Gordon Electronic Design, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RadioShack Corp. (Tandy) -SUBSYSTEM=="usb", ATTR{idVendor}=="08b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Texas Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="08bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Citizen Watch Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Precise Biometrics -SUBSYSTEM=="usb", ATTR{idVendor}=="08c3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Proxim, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Key Nice Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08c7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#2Wire, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nippon Telegraph and Telephone Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08c9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aiptek International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jue Hsun Ind. Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Long Well Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Productivity Enhancement Products -SUBSYSTEM=="usb", ATTR{idVendor}=="08cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#smartBridges, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Virtual Ink -SUBSYSTEM=="usb", ATTR{idVendor}=="08d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Siemens Computers -SUBSYSTEM=="usb", ATTR{idVendor}=="08d4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IXXAT Automation GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="08d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Increment P Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Billionton Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#??? -SUBSYSTEM=="usb", ATTR{idVendor}=="08de", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spyrus, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Olitec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pioneer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Litronic -SUBSYSTEM=="usb", ATTR{idVendor}=="08e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gemalto (was Gemplus) -SUBSYSTEM=="usb", ATTR{idVendor}=="08e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pan-International Wire & Cable -SUBSYSTEM=="usb", ATTR{idVendor}=="08e7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Memory Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="08e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Extended Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ericsson, Inc., Blue Ridge Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="08ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#M-Systems Flash Disk Pioneers -SUBSYSTEM=="usb", ATTR{idVendor}=="08ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MediaTek Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08ed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CCSI/Hesso -SUBSYSTEM=="usb", ATTR{idVendor}=="08ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Corex Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="08f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CTI Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="08f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gotop Information Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08f2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SysTec Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logic 3 International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vernier -SUBSYSTEM=="usb", ATTR{idVendor}=="08f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keen Top International Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08f8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wipro Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="08f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Caere -SUBSYSTEM=="usb", ATTR{idVendor}=="08fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Socket Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="08fb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sicon Cable Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="08fc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digianswer A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="08fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AuthenTec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="08ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pinnacle Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0900", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VST Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0901", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Faraday Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0906", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0908", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Audio-Technica Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0909", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trumpion Microelectronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="090a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neurosmith -SUBSYSTEM=="usb", ATTR{idVendor}=="090b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Motion, Inc. - Taiwan (formerly Feiya Technology Corp.) -SUBSYSTEM=="usb", ATTR{idVendor}=="090c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Multiport Computer Vertriebs GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="090d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shining Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="090e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Devices, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="090f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alation Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0910", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips Speech Processing -SUBSYSTEM=="usb", ATTR{idVendor}=="0911", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Voquette, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0912", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GlobeSpan, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0915", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SmartDisk Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0917", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tiger Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0919", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Garmin International -SUBSYSTEM=="usb", ATTR{idVendor}=="091e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Echelon Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0920", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GoHubs, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0921", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dymo-CoStar Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0922", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IC Media Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0923", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xerox -SUBSYSTEM=="usb", ATTR{idVendor}=="0924", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lakeview Research -SUBSYSTEM=="usb", ATTR{idVendor}=="0925", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Summus, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0927", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PLX Technology, Inc. (formerly Oxford Semiconductor, Ltd) -SUBSYSTEM=="usb", ATTR{idVendor}=="0928", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#American Biometric Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0929", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba Information & Industrial Sys. And Services -SUBSYSTEM=="usb", ATTR{idVendor}=="092a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sena Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="092b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Northern Embedded Science/CAVNEX -SUBSYSTEM=="usb", ATTR{idVendor}=="092f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0930", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Harmonic Data Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0931", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Crescentec Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0932", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quantum Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0933", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spirent Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="0934", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NuTesla -SUBSYSTEM=="usb", ATTR{idVendor}=="0936", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lumberg, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0939", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pixart Imaging, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="093a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plextor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="093b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intrepid Control Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="093c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InnoSync, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="093d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#J.S.T. Mfg. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="093e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Olympia Telecom Vertriebs GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="093f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan Storage Battery Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0940", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Photobit Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0941", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#i2Go.com, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0942", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HCL Technologies India Private, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0943", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KORG, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0944", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pasco Scientific -SUBSYSTEM=="usb", ATTR{idVendor}=="0945", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kronauer music in digital -SUBSYSTEM=="usb", ATTR{idVendor}=="0948", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linkup Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="094b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cable Television Laboratories -SUBSYSTEM=="usb", ATTR{idVendor}=="094d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yano -SUBSYSTEM=="usb", ATTR{idVendor}=="094f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingston Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0951", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RPM Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0954", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NVidia Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0955", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BSquare Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0956", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agilent Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0957", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CompuLink Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0958", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cologne Chip AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0959", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Portsmith -SUBSYSTEM=="usb", ATTR{idVendor}=="095a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Medialogic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="095b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#K-Tec Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="095c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Polycom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="095d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer NeWeb Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0967", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Catalyst Enterprises, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0968", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Feitian Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="096e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gretag-Macbeth AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0971", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Schlumberger -SUBSYSTEM=="usb", ATTR{idVendor}=="0973", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datagraphix, a business unit of Anacomp -SUBSYSTEM=="usb", ATTR{idVendor}=="0974", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OL'E Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0975", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Adirondack Wire & Cable -SUBSYSTEM=="usb", ATTR{idVendor}=="0976", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lightsurf Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0977", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Beckhoff GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0978", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jeilin Technology Corp., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0979", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Minds At Work LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="097a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Knudsen Engineering, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="097b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Marunix Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="097c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rosun Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="097d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Biopac Systems Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="097e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Barun Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="097f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oak Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0981", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Apricorn -SUBSYSTEM=="usb", ATTR{idVendor}=="0984", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#cab Produkttechnik GmbH & Co KG -SUBSYSTEM=="usb", ATTR{idVendor}=="0985", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Matsushita Electric Works, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0986", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vitana Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="098c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#INDesign -SUBSYSTEM=="usb", ATTR{idVendor}=="098d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Intellectual Property, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="098e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kenwood TMI Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="098f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gemstar eBook Group, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0993", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Telecom Express, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0996", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zippy Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="099a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PairGain Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="09a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contech Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VCON Telecommunications -SUBSYSTEM=="usb", ATTR{idVendor}=="09a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Poinchips -SUBSYSTEM=="usb", ATTR{idVendor}=="09a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Transmission Network Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lin Shiung Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smart Card Technologies Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intersil Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan Cash Machine Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="09ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tripp Lite -SUBSYSTEM=="usb", ATTR{idVendor}=="09ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Franklin Electronic Publishers, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09b2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altius Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MDS Telephone Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="09b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Celltrix Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grundig -SUBSYSTEM=="usb", ATTR{idVendor}=="09bc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MySmart.Com -SUBSYSTEM=="usb", ATTR{idVendor}=="09be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Auerswald GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="09bf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Genpix Electronics, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="09c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arris Interactive LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="09c1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nisca Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ActivCard, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09c3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACTiSYS Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Memory Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Workbit Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Psion Dacom Home Networks, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#City Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Electronics Testing Center, Taiwan -SUBSYSTEM=="usb", ATTR{idVendor}=="09cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NeoMagic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vreelin Engineering, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Com One -SUBSYSTEM=="usb", ATTR{idVendor}=="09d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Novatel Wireless -SUBSYSTEM=="usb", ATTR{idVendor}=="09d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KRF Tech, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A4 Tech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09da", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Measurement Computing Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aimex Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fellowes, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Addonics Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intellon Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jo-Dan International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silutia, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Real 3D, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09e7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AKAI -SUBSYSTEM=="usb", ATTR{idVendor}=="09e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chen-Source, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IM Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xitel -SUBSYSTEM=="usb", ATTR{idVendor}=="09ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GoFlight, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09f3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AresCom -SUBSYSTEM=="usb", ATTR{idVendor}=="09f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RocketChips, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Edu-Science (H.K.), Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="09f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SoftConnex Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="09f8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bay Associates -SUBSYSTEM=="usb", ATTR{idVendor}=="09f9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mtek Vision -SUBSYSTEM=="usb", ATTR{idVendor}=="09fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altera -SUBSYSTEM=="usb", ATTR{idVendor}=="09fb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gain Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="09ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Liquid Audio -SUBSYSTEM=="usb", ATTR{idVendor}=="0a00", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViA, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a01", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown Manufacturer -SUBSYSTEM=="usb", ATTR{idVendor}=="0a05", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ontrak Control Systems Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a07", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cybex Computer Products Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Servergy, Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="0a0d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xentec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a11", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cambridge Silicon Radio, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a12", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telebyte, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a13", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spacelabs Medical, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a14", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Scalar Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a15", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trek Technology (S) PTE, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a16", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pentax Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Heidelberger Druckmaschinen AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0a18", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hua Geng Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a19", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Medtronic Physio Control Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a21", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Century Semiconductor USA, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datacard Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0a27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AK-Modul-Bus Computer GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0a2c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TG3 Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radikal Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0a35", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gilat Satellite Networks, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a39", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PentaMedia Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NTT DoCoMo, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a3c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Varo Vision -SUBSYSTEM=="usb", ATTR{idVendor}=="0a3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Swissonic AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0a3f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Boca Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a43", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Davicom Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a46", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hirose Electric -SUBSYSTEM=="usb", ATTR{idVendor}=="0a47", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I/O Interconnect -SUBSYSTEM=="usb", ATTR{idVendor}=="0a48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ploytec GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Media Devices, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Computex Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Evolution Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Steinberg Soft-und Hardware GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Litton Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a4f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mimaki Engineering Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a50", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sony Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a51", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jebsee Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a52", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Portable Peripheral Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a53", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Electronics For Imaging, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EAsics NV -SUBSYSTEM=="usb", ATTR{idVendor}=="0a5b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Broadcom Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a5c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Diatrend Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a5d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zebra -SUBSYSTEM=="usb", ATTR{idVendor}=="0a5f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MPMan -SUBSYSTEM=="usb", ATTR{idVendor}=="0a62", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ClearCube Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0a66", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Medeli Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a67", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comaide Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a68", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chroma ate, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a69", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Green House Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a6b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Circuit Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a6c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UPS Manufacturing -SUBSYSTEM=="usb", ATTR{idVendor}=="0a6d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Benwin -SUBSYSTEM=="usb", ATTR{idVendor}=="0a6e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Core Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a6f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#International Game Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0a70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VIPColor Technologies USA, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a71", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanwa Denshi -SUBSYSTEM=="usb", ATTR{idVendor}=="0a72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mackie Designs -SUBSYSTEM=="usb", ATTR{idVendor}=="0a73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NSTL, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a7d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Octagon Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a7e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rexon Technology Corp., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a80", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chesen Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a81", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Syscan -SUBSYSTEM=="usb", ATTR{idVendor}=="0a82", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NextComm, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a83", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maui Innovative Peripherals -SUBSYSTEM=="usb", ATTR{idVendor}=="0a84", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Idexx Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="0a85", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NITGen Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a86", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Picturetel -SUBSYSTEM=="usb", ATTR{idVendor}=="0a8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan Aviation Electronics Industry, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Candy Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0a90", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Globlink Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a91", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EGO SYStems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0a92", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C Technologies AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0a93", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intersense -SUBSYSTEM=="usb", ATTR{idVendor}=="0a94", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lava Computer Mfg., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Develco Elektronik -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#First International Digital -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Perception Digital, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wincor Nixdorf International GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TriGem Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Baromtec Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aa9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan CBM Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aaa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vision Shape Europe SA -SUBSYSTEM=="usb", ATTR{idVendor}=="0aab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iCompression, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rohde & Schwarz GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="0aad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NEC infrontia Corp. (Nitsuko) -SUBSYSTEM=="usb", ATTR{idVendor}=="0aae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digitalway Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0aaf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arrow Strong Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ab0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FEIG ELECTRONIC GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0ab1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ellisys -SUBSYSTEM=="usb", ATTR{idVendor}=="0aba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stereo-Link -SUBSYSTEM=="usb", ATTR{idVendor}=="0abe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Diolan -SUBSYSTEM=="usb", ATTR{idVendor}=="0abf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanyo Semiconductor Company Micro -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leco Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I & C Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Singing Electrons, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Panwest Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Z-Star Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ac9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OPEN Networks Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0aca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Koga Electronics Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0acc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ID Tech -SUBSYSTEM=="usb", ATTR{idVendor}=="0acd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZyDAS -SUBSYSTEM=="usb", ATTR{idVendor}=="0ace", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intoto, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0acf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intellix Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ad0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Remotec Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ad1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Service & Quality Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ad2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Encryption Systems Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ada", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Allion Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ae3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taito Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ae4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neodym Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ae7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#System Support Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ae8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#North Shore Circuit Design L.L.P. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ae9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SciEssence, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0aea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TTP Communications, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0aeb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neodio Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Option -SUBSYSTEM=="usb", ATTR{idVendor}=="0af0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silver I Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0af6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#B2C2, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0af7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hama, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0af9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DMC Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0afa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zaptronix Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0afc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tateno Dennou, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0afd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cummins Engine Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0afe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jump Zone Network Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0aff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#INGENICO -SUBSYSTEM=="usb", ATTR{idVendor}=="0b00", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASUSTek Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b05", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datamax-O'Neil -SUBSYSTEM=="usb", ATTR{idVendor}=="0b0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Todos AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0b0c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ProjectLab -SUBSYSTEM=="usb", ATTR{idVendor}=="0b0d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GN Netcom -SUBSYSTEM=="usb", ATTR{idVendor}=="0b0e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVID Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0b0f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pcally -SUBSYSTEM=="usb", ATTR{idVendor}=="0b10", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I Tech Solutions Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b11", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Electronic Warfare Assoc., Inc. (EWA) -SUBSYSTEM=="usb", ATTR{idVendor}=="0b1e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Insyde Software Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b1f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TransDimension, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b20", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yokogawa Electric Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b21", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan System Development Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pan-Asia Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b23", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Link Evolution Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b24", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ritek Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kenwood Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b28", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Village Center, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b2c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PNY Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b30", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contour Design, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b33", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi ULSI Systems Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b37", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gear Head -SUBSYSTEM=="usb", ATTR{idVendor}=="0b38", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Omnidirectional Control Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b39", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IPaxess -SUBSYSTEM=="usb", ATTR{idVendor}=="0b3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tekram Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b3b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Olivetti Techcenter -SUBSYSTEM=="usb", ATTR{idVendor}=="0b3c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kikusui Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b3e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hal Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Play.com, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b43", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sportbug.com, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b47", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechnoTrend AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0b48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASCII Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b49", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pine Corp. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Graphtec America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Musical Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b4e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dumpries Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b50", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comfort Keyboard Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b51", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Colorado MicroDisplay, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b52", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sinbon Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b54", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TYI Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b56", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Beijing HanwangTechnology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b57", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lake Communications, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b59", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Corel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Green Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b5f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nsine, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b60", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NEC Viewtechnology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b61", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Orange Micro, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b62", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADLink Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b63", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wonderful Wire Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b64", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Expert Magnetics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b65", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cybiko Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b66", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fairbanks Scales -SUBSYSTEM=="usb", ATTR{idVendor}=="0b67", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CacheVision -SUBSYSTEM=="usb", ATTR{idVendor}=="0b69", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maxim Integrated Products -SUBSYSTEM=="usb", ATTR{idVendor}=="0b6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nagano Japan Radio Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b6f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PortalPlayer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SHIN-EI Sangyo Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b71", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Embedded Wireless Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Computone Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Roland DG Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b75", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunrise Telecom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b79", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zeevo, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b7a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiko Denki Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b7b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ITRAN Communications, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b7c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Astrodesign, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b7d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#id3 Semiconductors -SUBSYSTEM=="usb", ATTR{idVendor}=="0b81", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rextron Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b84", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elkat Electronics, Sdn., Bhd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b85", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Exputer Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b86", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plus-One I & T, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b87", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sigma Koki Co., Ltd, Technology Center -SUBSYSTEM=="usb", ATTR{idVendor}=="0b88", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Digital Broadcast, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0b89", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SMART Technologies Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASIX Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b95", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sewon Telecom -SUBSYSTEM=="usb", ATTR{idVendor}=="0b96", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#O2 Micro, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b97", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Playmates Toys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Audio International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b99", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dipl.-Ing. Stefan Kunde -SUBSYSTEM=="usb", ATTR{idVendor}=="0b9b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Softprotec Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0b9d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chippo Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0b9f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#U.S. Robotics -SUBSYSTEM=="usb", ATTR{idVendor}=="0baf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Concord Camera Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infinilink Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ambit Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ofuji Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HTC (High Tech Computer Corp.) -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Murata Manufacturing Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Network Alchemy -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Joytech Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi Semiconductor and Devices Sales Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eiger M&C Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bb9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZAccess Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0bba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#General Meters Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bbb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Assistive Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bbc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#System Connection, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bbd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Knilink Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuw Yng Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seagate RSS LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IPWireless, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microcube Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JCN Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ExWAY, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#X10 Wireless Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telmax Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ECI Telecom, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bc9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Startek Engineering, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Perfect Technic Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bcb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Andrew Pargeter & Associates -SUBSYSTEM=="usb", ATTR{idVendor}=="0bd7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Realtek Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bda", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ericsson Business Mobile Networks BV -SUBSYSTEM=="usb", ATTR{idVendor}=="0bdb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Y Media Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bdc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Orange PCS -SUBSYSTEM=="usb", ATTR{idVendor}=="0bdd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kanda Tsushin Kogyo Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0be2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TOYO Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0be3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elka International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0be4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DOME imaging systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0be5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dong Guan Humen Wonderful Wire Cable Factory -SUBSYSTEM=="usb", ATTR{idVendor}=="0be6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MEI -SUBSYSTEM=="usb", ATTR{idVendor}=="0bed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LTK Industries, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0bee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Way2Call Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="0bef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pace Micro Technology PLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intracom S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Konexx -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Addonics Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunny Giken, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu Siemens Computers -SUBSYSTEM=="usb", ATTR{idVendor}=="0bf8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kvaser AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0bfd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MOTO Development Group, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c04", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Appian Graphics -SUBSYSTEM=="usb", ATTR{idVendor}=="0c05", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hasbro Games, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c06", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infinite Data Storage, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c07", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agate -SUBSYSTEM=="usb", ATTR{idVendor}=="0c08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comjet Information System -SUBSYSTEM=="usb", ATTR{idVendor}=="0c09", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Highpoint Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c0a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dura Micro, Inc. (Acomdata) -SUBSYSTEM=="usb", ATTR{idVendor}=="0c0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zeroplus -SUBSYSTEM=="usb", ATTR{idVendor}=="0c12", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iris Graphics -SUBSYSTEM=="usb", ATTR{idVendor}=="0c15", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gyration, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c16", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cyberboard A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="0c17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SynerTek Korea, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c18", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#cyberPIXIE, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c19", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Motion, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c1a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MIPS Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0c1b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hang Zhou Silan Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c1c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tally Printer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lernout + Hauspie -SUBSYSTEM=="usb", ATTR{idVendor}=="0c23", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiyo Yuden -SUBSYSTEM=="usb", ATTR{idVendor}=="0c24", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sampo Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c25", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prolific Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c26", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RFIDeas, Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="0c27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Metrologic Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="0c2e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eagletron, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c35", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#E Ink Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c36", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e.Digital -SUBSYSTEM=="usb", ATTR{idVendor}=="0c37", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Der An Electric Wire & Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c38", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IFR -SUBSYSTEM=="usb", ATTR{idVendor}=="0c39", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Furui Precise Component (Kunshan) Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Komatsu, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c3b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radius Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c3c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innocom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nextcell, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c3e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola iDEN -SUBSYSTEM=="usb", ATTR{idVendor}=="0c44", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microdia -SUBSYSTEM=="usb", ATTR{idVendor}=="0c45", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WaveRider Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c46", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALGE-TIMING GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0c4a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Reiner SCT Kartensysteme GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0c4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Needham's Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0c4c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sealevel Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c52", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViewPLUS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c53", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Glory, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c54", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spectrum Digital, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c55", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Billion Bright, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c56", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Imaginative Design Operation Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c57", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vidar Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c58", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dong Guan Shinko Wire Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c59", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TRS International Mfg., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xytronix Research & Design -SUBSYSTEM=="usb", ATTR{idVendor}=="0c5e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Apogee Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c60", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chant Sincere Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c62", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toko, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c63", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Signality System Engineering Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c64", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eminence Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c65", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rexon Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c66", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Concept Telecom, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c67", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACS -SUBSYSTEM=="usb", ATTR{idVendor}=="0c6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JETI Technische Instrumente GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0c6c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MCT Elektronikladen -SUBSYSTEM=="usb", ATTR{idVendor}=="0c70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PEAK System -SUBSYSTEM=="usb", ATTR{idVendor}=="0c72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Optronic Laboratories Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c74", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JMTek, LLC. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c76", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sipix Group, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c77", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Detto Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c78", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NuConnex Technologies Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c79", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wing-Span Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c7a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NDA Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c86", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kyocera Wireless Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c88", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Honda Tsushin Kogyo Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c89", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pathway Connectivity, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wavefly Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Coactive Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tempo -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cesscom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Applied Microsystems -SUBSYSTEM=="usb", ATTR{idVendor}=="0c8f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cryptera -SUBSYSTEM=="usb", ATTR{idVendor}=="0c94", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Berkshire Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innochips Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0c99", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hanwool Robotics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c9a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jobin Yvon, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0c9b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SemTek -SUBSYSTEM=="usb", ATTR{idVendor}=="0c9d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zyfer -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sega Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ST&T Instrument Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BAE Systems Canada, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Castles Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Information Systems Laboratories -SUBSYSTEM=="usb", ATTR{idVendor}=="0ca7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola CGISS -SUBSYSTEM=="usb", ATTR{idVendor}=="0cad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ascom Business Systems, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Buslink -SUBSYSTEM=="usb", ATTR{idVendor}=="0caf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Flying Pig Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0cb0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innovonics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cb1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Celestix Networks, Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cb6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Singatron Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cb7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Opticis Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cb8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trust Electronic (Shanghai) Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shanghai Darong Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cbb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Palmax Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cbc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pentel Co., Ltd (Electronics Equipment Div.) -SUBSYSTEM=="usb", ATTR{idVendor}=="0cbd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keryx Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cbe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Union Genius Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cbf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kuon Yi Industrial Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Given Imaging, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Timex Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rimage Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#emsys GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sendo -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intermagic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kontron Medical AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Technotools Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BroadMAX Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cc9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amphenol -SUBSYSTEM=="usb", ATTR{idVendor}=="0cca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SKNet Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ccb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Domex Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ccc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TerraTec Electronic GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0ccd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bang Olufsen -SUBSYSTEM=="usb", ATTR{idVendor}=="0cd4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LabJack Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="0cd5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NewChip S.r.l. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cd7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JS Digitech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cd8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi Shin Din Cable, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cd9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Z-Com -SUBSYSTEM=="usb", ATTR{idVendor}=="0cde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Validation Technologies International -SUBSYSTEM=="usb", ATTR{idVendor}=="0ce5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#pico Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0ce9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e-Conn Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ENE Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Atheros Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fomtex Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cellink Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compucable Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ishoni Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Clarisys, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Central System Research Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0cf9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inviso, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cfa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Minolta-QMS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cfc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SAFA MEDIA Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0cff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#telos EDV Systementwicklung GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0d06", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UTStarcom -SUBSYSTEM=="usb", ATTR{idVendor}=="0d08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contemporary Controls -SUBSYSTEM=="usb", ATTR{idVendor}=="0d0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Astron Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d0c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MKNet Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d0d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hybrid Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d0e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Feng Shin Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d0f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elastic Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="0d10", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maspro Denkoh Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d11", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hansol Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d12", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BMF Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d13", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Array Comm, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d14", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OnStream b.v. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d15", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hi-Touch Imaging Technologies Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d16", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NALTEC, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#coaXmedia -SUBSYSTEM=="usb", ATTR{idVendor}=="0d18", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hank Connection Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d19", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NXP -SUBSYSTEM=="usb", ATTR{idVendor}=="0d28", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leo Hui Electric Wire & Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d32", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AirSpeak, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d33", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rearden Steel Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0d34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dah Kun Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d35", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Posiflex Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sri Cable Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d3c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tangtop Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fitcom, inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d3e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MTS Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d3f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ascor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d40", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ta Yun Terminals Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Full Der Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d42", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kobil Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0d46", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Promethean Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="0d48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maxtor -SUBSYSTEM=="usb", ATTR{idVendor}=="0d49", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NF Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grape Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tedas AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Coherent, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agere Systems Netherland BV -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EADS Airbus France -SUBSYSTEM=="usb", ATTR{idVendor}=="0d4f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cleware GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0d50", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Volex (Asia) Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d51", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HMI Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d53", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Holon Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d54", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASKA Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d55", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVLAB Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d56", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Solomon Microtech, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d57", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SMC Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d5c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Myacom, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d5e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CSI, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d5f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IVL Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d60", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Meilu Electronics (Shenzhen) Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d61", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Darfon Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d62", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fritz Gegauf AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0d63", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DXG Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d64", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KMJP Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d65", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TMT -SUBSYSTEM=="usb", ATTR{idVendor}=="0d66", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanet, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d67", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Super Link Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d68", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NSI -SUBSYSTEM=="usb", ATTR{idVendor}=="0d69", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Megapower International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#And-Or Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="0d6b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Try Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hirakawa Hewtech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d71", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winmate Communication, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hit's Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MFP Korea, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d76", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Power Sentry/Newpoint -SUBSYSTEM=="usb", ATTR{idVendor}=="0d77", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan Distributor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d78", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MARX Datentechnik GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wellco Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Taiwan Line Tek Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Phison Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#American Computer & Digital Components -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Essential Reality LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0d7f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#H.R. Silvine Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d80", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechnoVision -SUBSYSTEM=="usb", ATTR{idVendor}=="0d81", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Think Outside, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d83", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dolby Laboratories Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d87", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oz Software -SUBSYSTEM=="usb", ATTR{idVendor}=="0d89", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#King Jim Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ascom Telecommunications, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C-Media Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Promotion & Display Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Global Sun Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pitney Bowes -SUBSYSTEM=="usb", ATTR{idVendor}=="0d8f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sure-Fire Electrical Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d90", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Skanhex Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d96", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Santa Barbara Instrument Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0d97", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mars Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trazer Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d99", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RTX Telecom AS -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tat Shing Electrical Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chee Chen Hi-Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanwa Supply, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avaya -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Powercom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0d9f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Danger Research -SUBSYSTEM=="usb", ATTR{idVendor}=="0da0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Suzhou Peter's Precise Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0da1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Land Instruments International, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0da2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nippon Electro-Sensory Devices Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0da3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Polar Electro OY -SUBSYSTEM=="usb", ATTR{idVendor}=="0da4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IOGear, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0da7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#softDSP Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0da8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cubig Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0dab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Westover Scientific -SUBSYSTEM=="usb", ATTR{idVendor}=="0dad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Star International -SUBSYSTEM=="usb", ATTR{idVendor}=="0db0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wen Te Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0db1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shian Hwi Plug Parts, Plastic Factory -SUBSYSTEM=="usb", ATTR{idVendor}=="0db2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tekram Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0db3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chung Fu Chen Yeh Enterprise Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0db4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ELCON Systemtechnik -SUBSYSTEM=="usb", ATTR{idVendor}=="0db7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digidesign -SUBSYSTEM=="usb", ATTR{idVendor}=="0dba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A&D Medical -SUBSYSTEM=="usb", ATTR{idVendor}=="0dbc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jiuh Shiuh Precision Industry Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dbe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jess-Link International -SUBSYSTEM=="usb", ATTR{idVendor}=="0dbf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#G7 Solutions (formerly Great Notions) -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tamagawa Seiki Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Athena Smartcard Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Macpower Peripherals, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SDK Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Precision Squared Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#First Cable Line, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dc7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NetworkFab Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dcd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Access Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contek Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Power Quotient International Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MediaQ -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Custom Engineering SPA -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#California Micro Devices -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kocom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Netac Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HighSpeed Surfing -SUBSYSTEM=="usb", ATTR{idVendor}=="0dd9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated Circuit Solution, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dda", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tamarack, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ddb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datelink Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ddd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ubicom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BD Consumer Healthcare -SUBSYSTEM=="usb", ATTR{idVendor}=="0de0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USBmicro -SUBSYSTEM=="usb", ATTR{idVendor}=="0de7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UTECH Electronic (D.G.) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0dea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Novasonics -SUBSYSTEM=="usb", ATTR{idVendor}=="0ded", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lifetime Memory Products -SUBSYSTEM=="usb", ATTR{idVendor}=="0dee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Full Rise Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0def", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NET&SYS -SUBSYSTEM=="usb", ATTR{idVendor}=="0df4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sitecom Europe B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="0df6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mobile Action Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0df7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toyo Communication Equipment Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dfa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GeneralTouch Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0dfc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nippon Systemware Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e03", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winbest Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amigo Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gesytec -SUBSYSTEM=="usb", ATTR{idVendor}=="0e0c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VMware, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e0f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JMTek, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0e16", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Walex Electronic, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unisys -SUBSYSTEM=="usb", ATTR{idVendor}=="0e1a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Crewave -SUBSYSTEM=="usb", ATTR{idVendor}=="0e1b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pegasus Technologies Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e20", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cowon Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e21", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Symbian Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Liou Yuane Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e23", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VinChip Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e25", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#J-Phone East Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e26", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HeartMath LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0e30", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Computer Control Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3Pea Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e35", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TiePie engineering -SUBSYSTEM=="usb", ATTR{idVendor}=="0e36", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stratitec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e38", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smart Modular Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e39", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neostar Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mansella, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e3b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Line6, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sun-Riseful Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e44", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Julia Corp., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Bao Hing Electric Wire & Cable Mfr. Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e4a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radica Games, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e4c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechnoData Interware -SUBSYSTEM=="usb", ATTR{idVendor}=="0e50", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Speed Dragon Multimedia, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e55", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingston Technology Company, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e56", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Active Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Union Power Information Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e5b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bitland Information Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e5c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Neltron Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e5d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Conwise Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e5e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hawking Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0e66", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fossil, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e67", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Megawin Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logic3 -SUBSYSTEM=="usb", ATTR{idVendor}=="0e6f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tokyo Electronic Industry Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hsi-Chin Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TVS Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e75", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Archos, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e79", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#On-Tech Industry Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e7b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gmate, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e7e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ching Tai Electric Wire & Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e82", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shin An Wire & Cable Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e83", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Well Force Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MediaTek Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GreenAsia Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e8f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WiebeTech, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0e90", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VTech Engineering Canada, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e91", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C's Glory Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e92", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eM Technics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e93", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Future Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e95", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aplux Communications, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e96", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fingerworks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e97", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Analogic Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Parallel Dice Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e99", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TA HSING Industries, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0e9a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADTEC Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e9b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Streamzap, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e9c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tamura Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0e9f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ours Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ea0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nihon Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ea6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MSL Enterprises Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ea7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CenDyne, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ea8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Humax Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ead", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NovaTech -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WIS Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Y-S Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Saint Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Endor AG -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mettler Toledo -SUBSYSTEM=="usb", ATTR{idVendor}=="0eb8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thermo Fisher Scientific -SUBSYSTEM=="usb", ATTR{idVendor}=="0ebb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VWeb Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ebe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Omega Technology of Taiwan, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ebf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LHI Technology (China) Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Abit Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sweetray Industrial, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Axell Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ballracing Developments, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GT Information System Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InnoVISION Multimedia, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Theta Link Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ec7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lite-On IT Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ecd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TaiSol Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ece", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Phogenix Imaging, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0ecf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WinMaxGroup -SUBSYSTEM=="usb", ATTR{idVendor}=="0ed1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kyoto Micro Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ed2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wing-Tech Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ed3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fiberbyte -SUBSYSTEM=="usb", ATTR{idVendor}=="0ed5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Noriake Itron Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0eda", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e-MDT Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0edf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shima Seiki Mfg., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ee0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sarotech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ee1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AMI Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ee2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ComTrue Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ee3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunrich Technology, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ee4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digital Stream Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0eee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#D-WAV Scientific Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0eef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi Cable, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aichi Micro Intelligent Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I/O Magic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lynn Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DSI Datotech -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PointChips -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yield Microelectronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SM Tech Co., Ltd (Tulip) -SUBSYSTEM=="usb", ATTR{idVendor}=="0ef7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oasis Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="0efd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wem Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0efe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unitek UPS Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="0f03", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Visual Frontier Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f06", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CSL Wire & Plug (Shen Zhen) Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CAS Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f0c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hori Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f0d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Energy Full Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f0e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LD Didactic GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0f11", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mars Engineering Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f12", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acetek Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f13", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ingenico -SUBSYSTEM=="usb", ATTR{idVendor}=="0f14", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Finger Lakes Instrumentation -SUBSYSTEM=="usb", ATTR{idVendor}=="0f18", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oracom Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f19", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Onset Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f1b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Funai Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f1c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Iwill Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f1d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IOI Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f21", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Senior Industries, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leader Tech Manufacturer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f23", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Flex-P Industries, Snd., Bhd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f24", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViPower, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f2d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Geniality Maple Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f2e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Priva Design Services -SUBSYSTEM=="usb", ATTR{idVendor}=="0f2f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jess Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f30", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chrysalis Development -SUBSYSTEM=="usb", ATTR{idVendor}=="0f31", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#YFC-BonEagle Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f32", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kokuyo Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f37", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nien-Yi Industrial Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f38", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TG3 Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="0f39", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Airprime, Incorporated -SUBSYSTEM=="usb", ATTR{idVendor}=="0f3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RDC Semiconductor Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nital Consulting Services, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f42", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Polhemus -SUBSYSTEM=="usb", ATTR{idVendor}=="0f44", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#St. John Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WorldWide Cable Opto Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f4c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microtune, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Freedom Scientific -SUBSYSTEM=="usb", ATTR{idVendor}=="0f4e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wing Key Electrical Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f52", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dongguan White Horse Cable Factory, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f53", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kawai Musical Instruments Mfg. Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f54", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AmbiCom, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f55", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prairiecomm, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f5c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NewAge International, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="0f5d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Key Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f5f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NTK, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f60", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Varian, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f61", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acrox Technologies Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f62", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LeapFrog Enterprises -SUBSYSTEM=="usb", ATTR{idVendor}=="0f63", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kobe Steel, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f68", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dionex Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f69", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vibren Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#INTELLIGENT SYSTEMS -SUBSYSTEM=="usb", ATTR{idVendor}=="0f6e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DFI -SUBSYSTEM=="usb", ATTR{idVendor}=="0f73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Guntermann & Drunck GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0f78", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DQ Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f7c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NetBotz, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f7d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fluke Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f7e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VTech Holdings, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f88", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yazaki Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f8b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Young Generation International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Uniwill Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingnet Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0f8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Soma Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="0f8f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CviLux Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f97", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CyberBank Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hyun Won, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0f9c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lucent Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="0f9e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Starconn Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fa3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATL Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="0fa4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sotec Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fa5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Epox Computer Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fa7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logic Controls, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fa8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winpoint Electronic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0faf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Haurtian Wire & Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inclose Design, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Juan-Chern Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Heber Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wistron Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AACom Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fb9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#San Shing Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bitwise Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fbb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitac Internatinal Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fc1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plug and Jack Industrial, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fc2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Delcom Engineering -SUBSYSTEM=="usb", ATTR{idVendor}=="0fc5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dataplus Supplies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fc6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Research In Motion, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sony Ericsson Mobile Communications AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0fce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dynastream Innovations, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fcf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tulip Computers B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Giant Electronics Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seac Banche -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tenovis GmbH & Co., KG -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Direct Access Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elgato Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0fd9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quantec Networks GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="0fda", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Plus -SUBSYSTEM=="usb", ATTR{idVendor}=="0fdc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oregon Scientific -SUBSYSTEM=="usb", ATTR{idVendor}=="0fde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Osterhout Design Group -SUBSYSTEM=="usb", ATTR{idVendor}=="0fe0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IN-Tech Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fe4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Greenconn (U.S.A.), Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fe5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kontron (Industrial Computer Source / ICS Advent) -SUBSYSTEM=="usb", ATTR{idVendor}=="0fe6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DVICO -SUBSYSTEM=="usb", ATTR{idVendor}=="0fe9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#United Computer Accessories -SUBSYSTEM=="usb", ATTR{idVendor}=="0fea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CRS Electronic Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0feb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UMC Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Access Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0fed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xsido Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MJ Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Core Valley Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ff6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CHI SHING Computer Accessories Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="0ff7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Clavia DMI AB -SUBSYSTEM=="usb", ATTR{idVendor}=="0ffc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EarlySense -SUBSYSTEM=="usb", ATTR{idVendor}=="0ffd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aopen, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="0fff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Speed Tech Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1000", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ritronics Components (S) Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1001", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sigma Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1003", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LG Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1004", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Apacer Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1005", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iRiver, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1006", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Emuzed, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1009", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AV Chaseway, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="100a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chou Chin Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="100b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Netopia, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="100d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fukuda Denshi Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1010", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mobile Media Tech. -SUBSYSTEM=="usb", ATTR{idVendor}=="1011", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SDKM Fibres, Wires & Cables Berhad -SUBSYSTEM=="usb", ATTR{idVendor}=="1012", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TST-Touchless Sensor Technology AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1013", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Densitron Technologies PLC -SUBSYSTEM=="usb", ATTR{idVendor}=="1014", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Softronics Pty., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1015", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xiamen Hung's Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1016", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Speedy Industrial Supplies, Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1017", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elitegroup Computer Systems (ECS) -SUBSYSTEM=="usb", ATTR{idVendor}=="1019", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Labtec -SUBSYSTEM=="usb", ATTR{idVendor}=="1020", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shinko Shoji Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1022", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hyper-Paltek -SUBSYSTEM=="usb", ATTR{idVendor}=="1025", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Newly Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1026", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Time Domain -SUBSYSTEM=="usb", ATTR{idVendor}=="1027", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inovys Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1028", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Atlantic Coast Telesys -SUBSYSTEM=="usb", ATTR{idVendor}=="1029", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ramos Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="102a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infotronic America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="102b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Etoms Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="102c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winic Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="102d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comax Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1031", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C-One Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1032", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nucam Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1033", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SteelSeries ApS -SUBSYSTEM=="usb", ATTR{idVendor}=="1038", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#devolo AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1039", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stanton -SUBSYSTEM=="usb", ATTR{idVendor}=="103d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iCreate Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1043", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chu Yuen Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1044", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Winbond Electronics Corp. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1046", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Targus Group International -SUBSYSTEM=="usb", ATTR{idVendor}=="1048", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mylex / Buslogic -SUBSYSTEM=="usb", ATTR{idVendor}=="104b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AMCO TEC International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="104c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Newport Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="104d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WB Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="104f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yubico.com -SUBSYSTEM=="usb", ATTR{idVendor}=="1050", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Immanuel Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1053", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BMS International Beheer N.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="1054", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Complex Micro Interconnection Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1055", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hsin Chen Ent Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1056", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ON Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="1057", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Western Digital Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1058", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Giesecke & Devrient GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1059", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hong Ji Electric Wire & Cable (Dongguan) Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="105c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Delkin Devices, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="105d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Valence Semiconductor Design, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="105e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chin Shong Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="105f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Easthome Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1060", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola Electronics Taiwan, Ltd [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1063", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CCYU Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="1065", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Loyal Legend, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="106a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Curitel Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="106c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#San Chieh Manufacturing, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="106d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ConectL -SUBSYSTEM=="usb", ATTR{idVendor}=="106e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Money Controls -SUBSYSTEM=="usb", ATTR{idVendor}=="106f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GCT Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1076", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gateway, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="107b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arlec Australia, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="107d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Midoriya Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="107e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KidzMouse, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="107f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shin-Etsukaken Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1082", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Canon Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1083", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pantech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1084", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chloride Power Protection -SUBSYSTEM=="usb", ATTR{idVendor}=="108a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grand-tek Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="108b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Robert Bosch GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="108c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lotes Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="108e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Surface Optics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1099", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DATASOFT Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="109a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hisense -SUBSYSTEM=="usb", ATTR{idVendor}=="109b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eSOL Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="109f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hirotech, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mitsubishi Materials Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="10a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SK Teletech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cables To Go -SUBSYSTEM=="usb", ATTR{idVendor}=="10aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USI Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Honeywell, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10ac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Princeton Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="10ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Liebert Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="10af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comodo (PLX?) -SUBSYSTEM=="usb", ATTR{idVendor}=="10b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DiBcom -SUBSYSTEM=="usb", ATTR{idVendor}=="10b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TM Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dinging Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10bc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TMT Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10bd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SmartHome -SUBSYSTEM=="usb", ATTR{idVendor}=="10bf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Universal Laser Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10c3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cygnal Integrated Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanei Electric, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eratech -SUBSYSTEM=="usb", ATTR{idVendor}=="10cb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GBM Connector Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kycon, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="10ce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Velleman Components, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hottinger Baldwin Measurement -SUBSYSTEM=="usb", ATTR{idVendor}=="10d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Man Boon Manufactory, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10d4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Uni Class Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Actions Semiconductor Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Authenex, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10de", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#In-Win Development, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Post-Op Video, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10e0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CablePlus, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nada Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10e2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vast Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nexio Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Importek -SUBSYSTEM=="usb", ATTR{idVendor}=="10f1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Turtle Beach -SUBSYSTEM=="usb", ATTR{idVendor}=="10f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pictos Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="10fb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Anubis Electronics, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="10fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thrane & Thrane -SUBSYSTEM=="usb", ATTR{idVendor}=="10fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VirTouch, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1100", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EasyPass Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1101", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brightcom Technologies, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1108", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Moxa Technologies Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="110a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Analog Devices Canada, Ltd (Allied Telesyn) -SUBSYSTEM=="usb", ATTR{idVendor}=="1110", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pandora International Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1111", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#YM ELECTRIC CO., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1112", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Medion AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1113", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VSO Electric Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="111e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RedRat -SUBSYSTEM=="usb", ATTR{idVendor}=="112a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Master Hill Electric Wire and Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="112e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cellon International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="112f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tenx Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1130", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Integrated System Solution Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1131", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toshiba Corp., Digital Media Equipment [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1132", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CTS Electronincs -SUBSYSTEM=="usb", ATTR{idVendor}=="1136", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arin Tech Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="113c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mapower Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="113d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#V One Multimedia, Pte., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1141", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CyberScan Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1142", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Japan Radio Company -SUBSYSTEM=="usb", ATTR{idVendor}=="1145", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shimane SANYO Electric Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1146", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ever Great Electric Wire and Cable Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1147", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sphairon Access Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="114b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tinius Olsen Testing Machine Co., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="114c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alpha Imaging Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="114d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wavecom -SUBSYSTEM=="usb", ATTR{idVendor}=="114f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Salix Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="115b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Secugen Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1162", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DeLorme Publishing, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1163", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#YUAN High-Tech Development Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1164", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telson Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1165", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bantam Interactive Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="1166", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Salient Systems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1167", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BizConn International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1168", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gigastorage Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="116e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon 10 Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="116f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shengyih Steel Mold Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1175", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Santa Electronic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="117d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JNC, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="117e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Venture Corp., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1182", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compaq Computer Corp. [hex] (Digital Dream ??) -SUBSYSTEM=="usb", ATTR{idVendor}=="1183", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kyocera Elco Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1184", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bloomberg L.P. -SUBSYSTEM=="usb", ATTR{idVendor}=="1188", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer Communications & Multimedia -SUBSYSTEM=="usb", ATTR{idVendor}=="1189", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#You Yang Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="118f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tripace -SUBSYSTEM=="usb", ATTR{idVendor}=="1190", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Loyalty Founder Enterprise Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1191", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yankee Robotics, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="1196", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Technoimagia Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1197", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#StarShine Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1198", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sierra Wireless, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1199", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZHAN QI Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="119a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ruwido austria GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="119b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chipcon AS -SUBSYSTEM=="usb", ATTR{idVendor}=="11a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Technovas Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="11a3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GlobalMedia Group, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="11aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Exito Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="11ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nike -SUBSYSTEM=="usb", ATTR{idVendor}=="11ac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATECH FLASH TECHNOLOGY -SUBSYSTEM=="usb", ATTR{idVendor}=="11b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#R&D International NV -SUBSYSTEM=="usb", ATTR{idVendor}=="11be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inmax -SUBSYSTEM=="usb", ATTR{idVendor}=="11c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VeriFone Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="11ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topfield Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="11db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#K.I. Technology Co. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="11e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siemens AG -SUBSYSTEM=="usb", ATTR{idVendor}=="11f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prolific -SUBSYSTEM=="usb", ATTR{idVendor}=="11f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alcatel (?) -SUBSYSTEM=="usb", ATTR{idVendor}=="11f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TSC Auto ID Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1203", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InterBiometrics -SUBSYSTEM=="usb", ATTR{idVendor}=="1209", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hudson Soft Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="120e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Magellan -SUBSYSTEM=="usb", ATTR{idVendor}=="120f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DigiTech -SUBSYSTEM=="usb", ATTR{idVendor}=="1210", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jungsoft Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="121e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SKYCABLE ENTERPRISE. CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1223", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datapaq Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="1228", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chipidea-Microelectronica, S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="1230", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Denver Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="1233", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Brain Actuated Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="1234", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Focusrite-Novation -SUBSYSTEM=="usb", ATTR{idVendor}=="1235", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Belkin -SUBSYSTEM=="usb", ATTR{idVendor}=="1241", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AirVast -SUBSYSTEM=="usb", ATTR{idVendor}=="124a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nyko (Honey Bee) -SUBSYSTEM=="usb", ATTR{idVendor}=="124b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MXI - Memory Experts International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="124c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Apogee Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="125c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A-DATA Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="125f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Standard Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1260", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Covidien Energy-based Devices -SUBSYSTEM=="usb", ATTR{idVendor}=="1264", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pirelli Broadband Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="1266", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Logic3 / SpectraVideo plc -SUBSYSTEM=="usb", ATTR{idVendor}=="1267", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aristocrat Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="126c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bel Stewart -SUBSYSTEM=="usb", ATTR{idVendor}=="126d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Strobe Data, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="126e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TwinMOS -SUBSYSTEM=="usb", ATTR{idVendor}=="126f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ensoniq -SUBSYSTEM=="usb", ATTR{idVendor}=="1274", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xaxero Marine Software Engineering, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1275", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Starlight Xpress -SUBSYSTEM=="usb", ATTR{idVendor}=="1278", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#zebris Medical GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1283", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Marvell Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1286", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qualcomm Flarion Technologies, Inc. / Leadtek Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1291", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innomedia -SUBSYSTEM=="usb", ATTR{idVendor}=="1292", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Belkin Components [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1293", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RISO KAGAKU CORP. -SUBSYSTEM=="usb", ATTR{idVendor}=="1294", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CyberTAN Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="129b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trendchip Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="12a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Honey Bee Electronic International Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="12ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zhejiang Xinya Electronic Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="12b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#E28 -SUBSYSTEM=="usb", ATTR{idVendor}=="12b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Licensed by Sony Computer Entertainment America -SUBSYSTEM=="usb", ATTR{idVendor}=="12ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Autocue Group Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="12c4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DEXIN -SUBSYSTEM=="usb", ATTR{idVendor}=="12cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Huawei Technologies Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="12d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LINE TECH INDUSTRIAL CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="12d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EMS Dr. Thomas Wuensche -SUBSYSTEM=="usb", ATTR{idVendor}=="12d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BETTER WIRE FACTORY CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="12d7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Araneus Information Systems Oy -SUBSYSTEM=="usb", ATTR{idVendor}=="12d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Waldorf Music GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="12e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tapwave, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="12ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dynamic System Electronics Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="12f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Memorex Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="12f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AIN Comm. Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="12fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fascinating Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="12ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Transcend Information, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1307", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shuttle, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1308", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Roper -SUBSYSTEM=="usb", ATTR{idVendor}=="1310", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ICS Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="1312", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ThorLabs -SUBSYSTEM=="usb", ATTR{idVendor}=="1313", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Natural Point -SUBSYSTEM=="usb", ATTR{idVendor}=="131d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Envara Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="132a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Konica Minolta -SUBSYSTEM=="usb", ATTR{idVendor}=="132b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mobility -SUBSYSTEM=="usb", ATTR{idVendor}=="1342", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Citizen Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="1343", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sino Lite Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1345", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Moravian Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="1347", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Katsuragawa Electric Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1348", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PanJit International Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="134c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digby's Bitpile, Inc. DBA D Bit -SUBSYSTEM=="usb", ATTR{idVendor}=="134e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#P&E Microcomputer Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="1357", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SEGGER -SUBSYSTEM=="usb", ATTR{idVendor}=="1366", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#STEC -SUBSYSTEM=="usb", ATTR{idVendor}=="136b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Swissbit -SUBSYSTEM=="usb", ATTR{idVendor}=="1370", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CNet Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1371", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vimtron Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1376", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SCAPS GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="137b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Netgear, Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="1385", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Validity Sensors, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="138a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Jungo LTD -SUBSYSTEM=="usb", ATTR{idVendor}=="138e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TOMTOM B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="1390", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IdealTEK, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1391", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sennheiser Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="1395", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BEHRINGER International GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1397", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Q-tec -SUBSYSTEM=="usb", ATTR{idVendor}=="1398", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Baltech -SUBSYSTEM=="usb", ATTR{idVendor}=="13ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PerkinElmer Optoelectronics -SUBSYSTEM=="usb", ATTR{idVendor}=="13b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linksys -SUBSYSTEM=="usb", ATTR{idVendor}=="13b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alesis -SUBSYSTEM=="usb", ATTR{idVendor}=="13b2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nippon Dics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PCPlay -SUBSYSTEM=="usb", ATTR{idVendor}=="13ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ricoh Printing Systems, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13be", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JyeTai Precision Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wisair Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Techsan Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A-Max Technology Macao Commercial Offshore Co. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shark Multimedia -SUBSYSTEM=="usb", ATTR{idVendor}=="13d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IMC Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="13d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALEREON, INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="13dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#i.Tech Dynamic Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="13dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kaibo Wire & Cable (Shenzhen) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rane -SUBSYSTEM=="usb", ATTR{idVendor}=="13e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechnoScope Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="13e6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hengstler -SUBSYSTEM=="usb", ATTR{idVendor}=="13ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zydacron -SUBSYSTEM=="usb", ATTR{idVendor}=="13ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MosArt -SUBSYSTEM=="usb", ATTR{idVendor}=="13ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Initio Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="13fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingston Technology Company Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="13fe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Axxion Group Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1400", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bowe Bell & Howell -SUBSYSTEM=="usb", ATTR{idVendor}=="1402", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sitronix -SUBSYSTEM=="usb", ATTR{idVendor}=="1403", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IDS Imaging Development Systems GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1409", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telechips, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="140e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Novatel Wireless -SUBSYSTEM=="usb", ATTR{idVendor}=="1410", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nam Tai E&E Products Ltd. or OmniVision Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1415", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ABILITY ENTERPRISE CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1419", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sensor Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="1421", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vega Technologies Industrial (Austria) Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="1429", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thales E-Transactions -SUBSYSTEM=="usb", ATTR{idVendor}=="142a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arbiter Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="142b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RedOctane -SUBSYSTEM=="usb", ATTR{idVendor}=="1430", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pertech Resources, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1431", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wistron NeWeb -SUBSYSTEM=="usb", ATTR{idVendor}=="1435", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Denali Software, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1436", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altek Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="143c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digilent -SUBSYSTEM=="usb", ATTR{idVendor}=="1443", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#X.J.GROUP -SUBSYSTEM=="usb", ATTR{idVendor}=="1446", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radio Shack -SUBSYSTEM=="usb", ATTR{idVendor}=="1453", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Extending Wire & Cable Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1456", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#First International Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1457", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trust -SUBSYSTEM=="usb", ATTR{idVendor}=="145f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tatung Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="1460", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Staccato Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="1461", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Star International -SUBSYSTEM=="usb", ATTR{idVendor}=="1462", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Huawei-3Com -SUBSYSTEM=="usb", ATTR{idVendor}=="1472", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Formosa Industrial Computing, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="147a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Upek -SUBSYSTEM=="usb", ATTR{idVendor}=="147e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hama GmbH & Co., KG -SUBSYSTEM=="usb", ATTR{idVendor}=="147f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vaillant -SUBSYSTEM=="usb", ATTR{idVendor}=="1482", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Elsa AG [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1484", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicom -SUBSYSTEM=="usb", ATTR{idVendor}=="1485", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DSP Group, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1487", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EVATRONIX SA -SUBSYSTEM=="usb", ATTR{idVendor}=="148e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ralink Technology, Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="148f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Futronic Technology Co. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1491", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Suunto -SUBSYSTEM=="usb", ATTR{idVendor}=="1493", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Panstrong Company Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1497", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Microtek International Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1498", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Imagination Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="149a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WideView Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CTK Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="14ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Printronix Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14ae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATP Electronics Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#StarTech.com Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="14b0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ralink Technology, Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="14b2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rockwell Automation, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gemlight Computer, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="14c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zytronic -SUBSYSTEM=="usb", ATTR{idVendor}=="14c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Super Top -SUBSYSTEM=="usb", ATTR{idVendor}=="14cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JAMER INDUSTRIES CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="14d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Raritan Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WiNRADiO Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="14e0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dialogue Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="14e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Broadcom Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="14e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SAIN Information & Communications Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="14e5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Planex Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="14ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shure Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="14ed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechniSat Digital GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="14f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ellisys -SUBSYSTEM=="usb", ATTR{idVendor}=="1500", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pine-Tum Enterprise Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1501", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#First International Computer, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1509", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#medMobile -SUBSYSTEM=="usb", ATTR{idVendor}=="1513", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Actel -SUBSYSTEM=="usb", ATTR{idVendor}=="1514", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CompUSA -SUBSYSTEM=="usb", ATTR{idVendor}=="1516", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cheshire Engineering Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1518", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Comneon -SUBSYSTEM=="usb", ATTR{idVendor}=="1519", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bitwire Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1520", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ENE Technology Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="1524", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Portals -SUBSYSTEM=="usb", ATTR{idVendor}=="1527", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UBIQUAM Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1529", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thesycon Systemsoftware & Consulting GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="152a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JMicron Technology Corp. / JMicron USA Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="152d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LG (HLDS) -SUBSYSTEM=="usb", ATTR{idVendor}=="152e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Razer USA, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1532", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TerraTec Electronic GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="153b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#U-Blox AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1546", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SG Intec Ltd & Co KG -SUBSYSTEM=="usb", ATTR{idVendor}=="1547", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Celectronic GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="154a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PNY -SUBSYSTEM=="usb", ATTR{idVendor}=="154b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ConnectCounty Holdings Berhad -SUBSYSTEM=="usb", ATTR{idVendor}=="154d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#D&M Holdings, Inc. (Denon/Marantz) -SUBSYSTEM=="usb", ATTR{idVendor}=="154e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SNBC CO., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="154f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prolink Microsystems Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1554", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OQO -SUBSYSTEM=="usb", ATTR{idVendor}=="1557", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunf Pu Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1568", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quantum Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="156f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALLTOP TECHNOLOGY CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1570", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ketron SRL -SUBSYSTEM=="usb", ATTR{idVendor}=="157b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TRENDnet -SUBSYSTEM=="usb", ATTR{idVendor}=="157e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fiberline -SUBSYSTEM=="usb", ATTR{idVendor}=="1582", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SMA Technologie AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1587", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oakley Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="158d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JDS Uniphase Corporation (JDSU) -SUBSYSTEM=="usb", ATTR{idVendor}=="158e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kunshan Guoji Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1598", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Freescale Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="15a2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Afatech Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="15a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teams Power Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="15a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gemtek -SUBSYSTEM=="usb", ATTR{idVendor}=="15a9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gearway Electronics (Dong Guan) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="15aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VMware Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="15ad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Olimex Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="15ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#XL Imaging -SUBSYSTEM=="usb", ATTR{idVendor}=="15c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SoundGraph Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="15c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advance Multimedia Internet Technology Inc. (AMIT) -SUBSYSTEM=="usb", ATTR{idVendor}=="15c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Laboratoires MXM -SUBSYSTEM=="usb", ATTR{idVendor}=="15c6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KTF Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="15c8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#D-Box Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="15c9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Textech International Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="15ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Coulomb Electronics Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="15d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trust International B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="15d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hynix Semiconductor Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="15dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seong Ji Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="15e0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RSA -SUBSYSTEM=="usb", ATTR{idVendor}=="15e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Numark -SUBSYSTEM=="usb", ATTR{idVendor}=="15e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SohoWare -SUBSYSTEM=="usb", ATTR{idVendor}=="15e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pacific Digital Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="15e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Belcarra Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="15ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HanfTek -SUBSYSTEM=="usb", ATTR{idVendor}=="15f4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tascam -SUBSYSTEM=="usb", ATTR{idVendor}=="1604", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Umax -SUBSYSTEM=="usb", ATTR{idVendor}=="1606", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Inside Out Networks [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1608", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VIA Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="160a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#INRO -SUBSYSTEM=="usb", ATTR{idVendor}=="160e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amoi Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="1614", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#L & K Precision Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1619", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wionics Research -SUBSYSTEM=="usb", ATTR{idVendor}=="1621", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stonestreet One, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1628", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Airgo Networks Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="162a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WiQuest Communications, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="162f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#2Wire, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1630", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Good Way Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="1631", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cross Match Technologies GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1645", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SofTec Microsystems -SUBSYSTEM=="usb", ATTR{idVendor}=="1649", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ChipX -SUBSYSTEM=="usb", ATTR{idVendor}=="164a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Matrix Vision GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="164c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Struck Innovative Systeme GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1657", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Frontier Design Group -SUBSYSTEM=="usb", ATTR{idVendor}=="165b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kondo Kagaku -SUBSYSTEM=="usb", ATTR{idVendor}=="165c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Creatix Polymedia GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1660", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Actiontec Electronics, Inc. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1668", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PiKRON Ltd. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1669", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Clipsal -SUBSYSTEM=="usb", ATTR{idVendor}=="166a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#China Huada Integrated Circuit Design (Group) Co., Ltd. (CIDC Group) -SUBSYSTEM=="usb", ATTR{idVendor}=="1677", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Total Phase -SUBSYSTEM=="usb", ATTR{idVendor}=="1679", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Golden Bridge Electech Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1680", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prevo Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1681", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Maxwise Production Enterprise Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1682", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Godspeed Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1684", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Delock -SUBSYSTEM=="usb", ATTR{idVendor}=="1685", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZOOM Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1686", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kingmax Digital Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1687", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Saab AB -SUBSYSTEM=="usb", ATTR{idVendor}=="1688", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Razer USA, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1689", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Atheros Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="168c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Askey Computer Corp. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="1690", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hitachi Video and Information System, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1696", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VTec Test, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1697", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Zhengerya Cable Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="16a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unigraf -SUBSYSTEM=="usb", ATTR{idVendor}=="16a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Global Sun Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="16ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dongguan ChingLung Wire & Cable Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="16ac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iStation -SUBSYSTEM=="usb", ATTR{idVendor}=="16b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Persentec, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Van Ooijen Technische Informatica -SUBSYSTEM=="usb", ATTR{idVendor}=="16c0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wireless Cables, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#silex technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MCS -SUBSYSTEM=="usb", ATTR{idVendor}=="16d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Suprema Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Frontline Test Equipment, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AnyDATA Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="16d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JABLOCOM s.r.o. -SUBSYSTEM=="usb", ATTR{idVendor}=="16d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CMOTECH Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="16d8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wiener, Plein & Baus -SUBSYSTEM=="usb", ATTR{idVendor}=="16dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#King Billion Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="16df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GN ReSound A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="16f0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Futurelogic Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="16f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BlueView Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1706", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ARTIMI -SUBSYSTEM=="usb", ATTR{idVendor}=="1707", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Swissonic -SUBSYSTEM=="usb", ATTR{idVendor}=="170b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avnera -SUBSYSTEM=="usb", ATTR{idVendor}=="170d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leica Microsystems -SUBSYSTEM=="usb", ATTR{idVendor}=="1711", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Meyer Instruments (MIS) -SUBSYSTEM=="usb", ATTR{idVendor}=="1724", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vitesse Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="1725", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Axesstel, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1726", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Waltop International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="172f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cellink Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1733", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CANON IMAGING SYSTEM TECHNOLOGIES INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="1736", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linksys -SUBSYSTEM=="usb", ATTR{idVendor}=="1737", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QSENN -SUBSYSTEM=="usb", ATTR{idVendor}=="173d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Senao -SUBSYSTEM=="usb", ATTR{idVendor}=="1740", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#General Atomics -SUBSYSTEM=="usb", ATTR{idVendor}=="1743", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MQP Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="1748", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASMedia Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="174c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Syntek -SUBSYSTEM=="usb", ATTR{idVendor}=="174f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GERTEC Telecomunicacoes Ltda. -SUBSYSTEM=="usb", ATTR{idVendor}=="1753", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ENENSYS Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="1756", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LucidPort Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1759", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASUSTek Computer, Inc. (wrong ID) -SUBSYSTEM=="usb", ATTR{idVendor}=="1761", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#System Level Solutions, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1772", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arowana -SUBSYSTEM=="usb", ATTR{idVendor}=="1776", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sweex -SUBSYSTEM=="usb", ATTR{idVendor}=="177f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Multiple Vendors -SUBSYSTEM=="usb", ATTR{idVendor}=="1781", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spreadtrum Communications Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1782", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TopSeed Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1784", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATI AIB -SUBSYSTEM=="usb", ATTR{idVendor}=="1787", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ShenZhen Litkconn Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1788", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Printrex, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1796", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JALCO CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1797", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Thales Norway A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="1799", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ricavision International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="179d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samson Technologies Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="17a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Concept2 -SUBSYSTEM=="usb", ATTR{idVendor}=="17a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Connection Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="17a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MICOMSOFT CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="17a7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kamstrup A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="17a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grey Innovation -SUBSYSTEM=="usb", ATTR{idVendor}=="17b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lunatone -SUBSYSTEM=="usb", ATTR{idVendor}=="17b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SAURIS GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="17ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Singim International Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="17c3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Native Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="17cc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hip Hing Cable & Plug Mfy. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="17cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sanford L.P. -SUBSYSTEM=="usb", ATTR{idVendor}=="17d0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Korea Techtron Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="17d3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DisplayLink -SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cornice, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="17eb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lenovo -SUBSYSTEM=="usb", ATTR{idVendor}=="17ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WaveSense -SUBSYSTEM=="usb", ATTR{idVendor}=="17f4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#K.K. Rocky -SUBSYSTEM=="usb", ATTR{idVendor}=="17f5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unicomp, Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="17f6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advantech -SUBSYSTEM=="usb", ATTR{idVendor}=="1809", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Twinhan -SUBSYSTEM=="usb", ATTR{idVendor}=="1822", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gwo Jinn Industries Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1831", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Huizhou Shenghua Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1832", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VIVOphone -SUBSYSTEM=="usb", ATTR{idVendor}=="183d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vaisala -SUBSYSTEM=="usb", ATTR{idVendor}=="1843", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASRock Incorporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1849", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GYROCOM C&C Co., LTD -SUBSYSTEM=="usb", ATTR{idVendor}=="1852", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Memory Devices Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1854", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Compro -SUBSYSTEM=="usb", ATTR{idVendor}=="185b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tech Technology Industrial Company -SUBSYSTEM=="usb", ATTR{idVendor}=="1861", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teridian Semiconductor Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1862", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nexio Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1870", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aveo Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1871", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Navilock -SUBSYSTEM=="usb", ATTR{idVendor}=="1873", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alienware Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="187c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Siano Mobile Silicon -SUBSYSTEM=="usb", ATTR{idVendor}=="187f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vast Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1892", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Topseed -SUBSYSTEM=="usb", ATTR{idVendor}=="1894", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Evertop Wire Cable Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="1897", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3Shape A/S -SUBSYSTEM=="usb", ATTR{idVendor}=="189f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CSSN -SUBSYSTEM=="usb", ATTR{idVendor}=="18a4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Verbatim, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="18a5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Petalynx -SUBSYSTEM=="usb", ATTR{idVendor}=="18b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e3C Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="18b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mikkon Technology Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="18b6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zotek Electronic Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="18b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AMIT Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18c5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ecamm -SUBSYSTEM=="usb", ATTR{idVendor}=="18cd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Google Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Starline International Group Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="18d5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kaba -SUBSYSTEM=="usb", ATTR{idVendor}=="18d9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LKC Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18dc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Planon System Solutions Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18dd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fitipower Integrated Technology Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="18e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qcom -SUBSYSTEM=="usb", ATTR{idVendor}=="18e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Matrox Graphics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18ea", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arkmicro Technologies Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FineArch Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="18fd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GEMBIRD -SUBSYSTEM=="usb", ATTR{idVendor}=="1908", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola GSG -SUBSYSTEM=="usb", ATTR{idVendor}=="190d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alco Digital Devices Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="1914", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nordic Semiconductor ASA -SUBSYSTEM=="usb", ATTR{idVendor}=="1915", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FitLinxx -SUBSYSTEM=="usb", ATTR{idVendor}=="1923", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NextWindow -SUBSYSTEM=="usb", ATTR{idVendor}=="1926", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Avago Technologies, Pte. -SUBSYSTEM=="usb", ATTR{idVendor}=="192f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Xianhe Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1930", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ningbo Broad Telecommunication Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1931", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Feature Integration Technology Inc. (Fintek) -SUBSYSTEM=="usb", ATTR{idVendor}=="1934", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dream Link -SUBSYSTEM=="usb", ATTR{idVendor}=="1941", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sensoray Co., Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1943", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lab126, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1949", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PreSonus Audio Electronics, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="194f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hyperstone AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1951", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ironkey Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1953", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Radiient Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="1954", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Itron Technology iONE -SUBSYSTEM=="usb", ATTR{idVendor}=="195d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Uniden Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1965", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CASIO HITACHI Mobile Communications Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1967", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wispro Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="196b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dane-Elec Corp. USA -SUBSYSTEM=="usb", ATTR{idVendor}=="1970", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dongguan Guneetal Wire & Cable Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1975", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chipsbrand Microelectronics (HK) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1976", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#T-Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="1977", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leuze electronic -SUBSYSTEM=="usb", ATTR{idVendor}=="197d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nuconn Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1989", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Beceem Communications Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="198f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acron Precision Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1990", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Trillium Technology Pty. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1995", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MicroStrain, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="199b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#The Imaging Source Europe GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="199e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Benica Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="199f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Biforst Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="19a8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bodelin -SUBSYSTEM=="usb", ATTR{idVendor}=="19ab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#S Life -SUBSYSTEM=="usb", ATTR{idVendor}=="19af", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Batronix -SUBSYSTEM=="usb", ATTR{idVendor}=="19b2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Celestron -SUBSYSTEM=="usb", ATTR{idVendor}=="19b4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#B & W Group -SUBSYSTEM=="usb", ATTR{idVendor}=="19b5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Infotech Logistic, LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="19b6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Robotics -SUBSYSTEM=="usb", ATTR{idVendor}=="19b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Futuba -SUBSYSTEM=="usb", ATTR{idVendor}=="19c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mindtribe -SUBSYSTEM=="usb", ATTR{idVendor}=="19ca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Parrot SA -SUBSYSTEM=="usb", ATTR{idVendor}=="19cf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZTE WCDMA Technologies MSM -SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KFI Printers -SUBSYSTEM=="usb", ATTR{idVendor}=="19db", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WeiDuan Electronic Accessory (S.Z.) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="19e1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Industrial Technology Research Institute -SUBSYSTEM=="usb", ATTR{idVendor}=="19e8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pak Heng Technology (Shenzhen) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="19ef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RODE Microphones -SUBSYSTEM=="usb", ATTR{idVendor}=="19f7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Gampaq Co.Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="19fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dynex -SUBSYSTEM=="usb", ATTR{idVendor}=="19ff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bellwood International, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USB-IF non-workshop -SUBSYSTEM=="usb", ATTR{idVendor}=="1a0a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KES Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a12", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Veho -SUBSYSTEM=="usb", ATTR{idVendor}=="1a1d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amphenol East Asia Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a25", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Seagate Branded Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="1a2a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#China Resource Semico Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1a2c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Quanta Microsystems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a32", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACRUX -SUBSYSTEM=="usb", ATTR{idVendor}=="1a34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Biwin Technology Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a36", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Terminus Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a40", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Action Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VASCO Data Security International -SUBSYSTEM=="usb", ATTR{idVendor}=="1a44", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Image -SUBSYSTEM=="usb", ATTR{idVendor}=="1a4a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SafeBoot International B.V. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a4b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tandberg Data -SUBSYSTEM=="usb", ATTR{idVendor}=="1a5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Abbott Diabetes Care -SUBSYSTEM=="usb", ATTR{idVendor}=="1a61", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Spansion Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a6a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SamYoung Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1a6d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Global Unichip Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a6e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sagem Orga GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1a6f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Physik Instrumente -SUBSYSTEM=="usb", ATTR{idVendor}=="1a72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bayer Health Care LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="1a79", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lumberg Connect -SUBSYSTEM=="usb", ATTR{idVendor}=="1a7b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Evoluent -SUBSYSTEM=="usb", ATTR{idVendor}=="1a7c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Holtek Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a81", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QinHeng Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="1a86", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dynalith Systems Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a89", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SGS Taiwan Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a8b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BandRich, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1a8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Leica Camera AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1a98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Data Drive Thru, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1aa4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UBeacon Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1aa5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eFortune Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1aa6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KeeTouch -SUBSYSTEM=="usb", ATTR{idVendor}=="1aad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Rigol Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="1ab1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Salcomp Plc -SUBSYSTEM=="usb", ATTR{idVendor}=="1acb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Midiplus Co, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1acc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Desay Wire Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ad1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#APS -SUBSYSTEM=="usb", ATTR{idVendor}=="1ad4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SEL C662 Serial Cable -SUBSYSTEM=="usb", ATTR{idVendor}=="1adb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ic-design Reinhard Gottinger GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1ae4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#X-TENSIONS -SUBSYSTEM=="usb", ATTR{idVendor}=="1ae7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#High Top Precision Electronic Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1aed", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Conntech Electronic (Suzhou) Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1aef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Connect One Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1af1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#A. Eberle GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="1afe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Meilhaus Electronic GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1b04", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BLUTRONICS S.r.l. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b0e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Corsair -SUBSYSTEM=="usb", ATTR{idVendor}=="1b1c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MStar Semiconductor, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b20", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WiLinx Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cellex Power Products, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b26", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Current Electronics Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NAVIsis Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b28", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ugobe Life Forms, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b32", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ViXS Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b36", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iPassion Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b3b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Generalplus Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b3f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Energizer Holdings, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b47", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Plastron Precision Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ARH Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b52", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#K.S. Terminals Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b59", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chao Zhou Kai Yuan Electric Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b5a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#The Hong Kong Standards and Testing Centre Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b65", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fushicai -SUBSYSTEM=="usb", ATTR{idVendor}=="1b71", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ATERGI TECHNOLOGY CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b72", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fresco Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="1b73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ovislink Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b75", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Legend Silicon Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b76", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Afatech -SUBSYSTEM=="usb", ATTR{idVendor}=="1b80", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dongguan Guanshang Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b86", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ShenMing Electron (Dong Guan) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b88", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Altium Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="1b8c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#e-MOVE Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b8d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amlogic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MA LABS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b8f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#N-Trig -SUBSYSTEM=="usb", ATTR{idVendor}=="1b96", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#YMax Communications Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1b98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Yuanchuan Electronic -SUBSYSTEM=="usb", ATTR{idVendor}=="1b99", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#JINQ CHERN ENTERPRISE CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ba1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lite Metals & Plastic (Shenzhen) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ba2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ember Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1ba4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Abilis Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="1ba6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#China Telecommunication Technology Labs -SUBSYSTEM=="usb", ATTR{idVendor}=="1ba8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Harmonix Music -SUBSYSTEM=="usb", ATTR{idVendor}=="1bad", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vuzix Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1bae", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#T & A Mobile Phones -SUBSYSTEM=="usb", ATTR{idVendor}=="1bbb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ford Motor Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bc4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AVIXE Technology (China) Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bc5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telit Wireless Solutions -SUBSYSTEM=="usb", ATTR{idVendor}=="1bc7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Contac Cable Industrial Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="1bce", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sunplus Innovation Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bcf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hangzhou Riyue Electronic Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bd0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#BG Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bd5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#P-TWO INDUSTRIES, INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shenzhen Tongyuan Network-Communication Cables Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1bef", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RealVision Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bf0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Extranet Systems Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bf5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Orient Semiconductor Electronics, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1bf6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TouchPack -SUBSYSTEM=="usb", ATTR{idVendor}=="1bfd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kreton Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1c02", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#QNAP System Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c04", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ionics EMS, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c0c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Relm Wireless -SUBSYSTEM=="usb", ATTR{idVendor}=="1c0d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lanterra Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c10", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALECTRONIC LIMITED -SUBSYSTEM=="usb", ATTR{idVendor}=="1c13", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datel Electronics Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c1a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Volkswagen of America, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c1b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Goldvish S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c1f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fuji Electric Device Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c20", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ADDMM LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="1c21", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ZHONGSHAN CHIANG YU ELECTRIC CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c22", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shanghai Haiying Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c26", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HuiYang D & S Cable Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LS Cable Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c31", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SpringCard -SUBSYSTEM=="usb", ATTR{idVendor}=="1c34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Authorizer Technologies, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c37", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NONIN MEDICAL INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Wep Peripherals -SUBSYSTEM=="usb", ATTR{idVendor}=="1c3e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EZPrototypes -SUBSYSTEM=="usb", ATTR{idVendor}=="1c40", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cherng Weei Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c49", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SiGma Micro -SUBSYSTEM=="usb", ATTR{idVendor}=="1c4f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Philips & Lite-ON Digital Solutions Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1c6b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Skydigital Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c6c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AMT -SUBSYSTEM=="usb", ATTR{idVendor}=="1c73", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kaetat Industrial Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c77", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Datascope Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c78", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unigen Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1c79", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LighTuning Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c7a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#LUXSHARE PRECISION INDUSTRY (SHENZHEN) CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c7b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Schomaecker GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1c83", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#2N TELEKOMUNIKACE a.s. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c87", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Somagic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c88", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HONGKONG WEIDIDA ELECTRON LIMITED -SUBSYSTEM=="usb", ATTR{idVendor}=="1c89", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASTRON INTERNATIONAL CORP. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c8e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALPINE ELECTRONICS, INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="1c98", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OMEGA TECHNOLOGY -SUBSYSTEM=="usb", ATTR{idVendor}=="1c9e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ACCARIO Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ca0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Symwave -SUBSYSTEM=="usb", ATTR{idVendor}=="1ca1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kinstone -SUBSYSTEM=="usb", ATTR{idVendor}=="1cac", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aces Electronic Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cb3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OPEX CORPORATION -SUBSYSTEM=="usb", ATTR{idVendor}=="1cb4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IdeaCom Technology Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cb6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Luminary Micro Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cbe", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#FORTAT SKYMARK INDUSTRIAL COMPANY -SUBSYSTEM=="usb", ATTR{idVendor}=="1cbf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PlantSense -SUBSYSTEM=="usb", ATTR{idVendor}=="1cc0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NextWave Broadband Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cca", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Bodatong Technology (Shenzhen) Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ccd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#adp corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1cd4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Firecomms Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cd5", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Antonio Precise Products Manufactory Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cd6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Telecommunications Technology Association (TTA) -SUBSYSTEM=="usb", ATTR{idVendor}=="1cde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WonTen Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cdf", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EDIMAX TECHNOLOGY CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ce0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Amphenol KAE -SUBSYSTEM=="usb", ATTR{idVendor}=="1ce1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dresden Elektronik -SUBSYSTEM=="usb", ATTR{idVendor}=="1cf1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ANDES TECHNOLOGY CORPORATION -SUBSYSTEM=="usb", ATTR{idVendor}=="1cfc", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Flextronics Digital Design Japan, LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1cfd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iCON -SUBSYSTEM=="usb", ATTR{idVendor}=="1d03", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Solid-Motion -SUBSYSTEM=="usb", ATTR{idVendor}=="1d07", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NINGBO HENTEK DRAGON ELECTRONICS CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d08", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TechFaith Wireless Technology Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="1d09", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Johnson Controls, Inc. The Automotive Business Unit -SUBSYSTEM=="usb", ATTR{idVendor}=="1d0a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#HAN HUA CABLE & WIRE TECHNOLOGY (J.X.) CO., LTD. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d0b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sonix Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d0f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ALPHA-SAT TECHNOLOGY LIMITED -SUBSYSTEM=="usb", ATTR{idVendor}=="1d14", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#C-Thru Music Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dexatek Technology Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d19", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Diostech Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d1f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SAMTACK INC. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d20", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASUS -SUBSYSTEM=="usb", ATTR{idVendor}=="1d27", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dream Cheeky -SUBSYSTEM=="usb", ATTR{idVendor}=="1d34", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Touch -SUBSYSTEM=="usb", ATTR{idVendor}=="1d45", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PEGATRON CORPORATION -SUBSYSTEM=="usb", ATTR{idVendor}=="1d4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OpenMoko, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d50", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xenta -SUBSYSTEM=="usb", ATTR{idVendor}=="1d57", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Smartronix, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1d5b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linux Foundation -SUBSYSTEM=="usb", ATTR{idVendor}=="1d6b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Citizen -SUBSYSTEM=="usb", ATTR{idVendor}=="1d90", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Actions Microelectronics Co. -SUBSYSTEM=="usb", ATTR{idVendor}=="1de1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qualcomm / Option -SUBSYSTEM=="usb", ATTR{idVendor}=="1e0e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Point Grey Research, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1e10", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Mirion Technologies Dosimetry Services Division -SUBSYSTEM=="usb", ATTR{idVendor}=="1e17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Lumension Security -SUBSYSTEM=="usb", ATTR{idVendor}=="1e1d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#INVIA -SUBSYSTEM=="usb", ATTR{idVendor}=="1e1f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Festo AG & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="1e29", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Chipsbank Microelectronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1e3d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cleverscope -SUBSYSTEM=="usb", ATTR{idVendor}=="1e41", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cubeternet -SUBSYSTEM=="usb", ATTR{idVendor}=="1e4e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TypeMatrix -SUBSYSTEM=="usb", ATTR{idVendor}=="1e54", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TrekStor GmbH & Co. KG -SUBSYSTEM=="usb", ATTR{idVendor}=="1e68", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NZXT -SUBSYSTEM=="usb", ATTR{idVendor}=="1e71", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Coby Electronics Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1e74", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ROCCAT -SUBSYSTEM=="usb", ATTR{idVendor}=="1e7d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NuCORE Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ebb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AirTies Wireless Networks -SUBSYSTEM=="usb", ATTR{idVendor}=="1eda", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Blackmagic design -SUBSYSTEM=="usb", ATTR{idVendor}=="1edb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ONDA COMMUNICATION S.p.a. -SUBSYSTEM=="usb", ATTR{idVendor}=="1ee8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EADS Deutschland GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1ef6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cal-Comp -SUBSYSTEM=="usb", ATTR{idVendor}=="1f28", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Onda (unverified) -SUBSYSTEM=="usb", ATTR{idVendor}=="1f3a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#The Neat Company -SUBSYSTEM=="usb", ATTR{idVendor}=="1f44", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#H-TRONIC GmbH -SUBSYSTEM=="usb", ATTR{idVendor}=="1f48", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#G-Tek Electronics Group -SUBSYSTEM=="usb", ATTR{idVendor}=="1f4d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SK Telesys -SUBSYSTEM=="usb", ATTR{idVendor}=="1f53", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aliph -SUBSYSTEM=="usb", ATTR{idVendor}=="1f6f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Innostor Technology Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1f75", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TANDBERG -SUBSYSTEM=="usb", ATTR{idVendor}=="1f82", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Alere, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1f84", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Stantum -SUBSYSTEM=="usb", ATTR{idVendor}=="1f87", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ubiquiti Networks, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1f9b", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Samsung Opto-Electroncs Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1fab", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Delphin Technology AG -SUBSYSTEM=="usb", ATTR{idVendor}=="1fbd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NXP Semiconductors -SUBSYSTEM=="usb", ATTR{idVendor}=="1fc9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ILX Lightwave Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="1fde", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Vertex Wireless Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="1fe7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CVT Electronics.Co.,Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="1ff7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ideofy Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="1fff", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#D-Link Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="2001", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DAP Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="2002", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Reloop -SUBSYSTEM=="usb", ATTR{idVendor}=="200c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PCTV Systems -SUBSYSTEM=="usb", ATTR{idVendor}=="2013", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#PLANEX -SUBSYSTEM=="usb", ATTR{idVendor}=="2019", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Haier -SUBSYSTEM=="usb", ATTR{idVendor}=="201e", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hauppauge -SUBSYSTEM=="usb", ATTR{idVendor}=="2040", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Texas Instruments -SUBSYSTEM=="usb", ATTR{idVendor}=="2047", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Barnes & Noble -SUBSYSTEM=="usb", ATTR{idVendor}=="2080", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Cando -SUBSYSTEM=="usb", ATTR{idVendor}=="2087", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Clay Logic -SUBSYSTEM=="usb", ATTR{idVendor}=="20a0", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#XMOS Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="20b1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hanvon -SUBSYSTEM=="usb", ATTR{idVendor}=="20b3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Qi Hardware -SUBSYSTEM=="usb", ATTR{idVendor}=="20b7", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Simtec Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="20df", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TRENDnet -SUBSYSTEM=="usb", ATTR{idVendor}=="20f4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ActionStar -SUBSYSTEM=="usb", ATTR{idVendor}=="2101", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KT Tech -SUBSYSTEM=="usb", ATTR{idVendor}=="2116", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Advanced Silicon S.A. -SUBSYSTEM=="usb", ATTR{idVendor}=="2149", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Creative (?) -SUBSYSTEM=="usb", ATTR{idVendor}=="2162", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GW Instek -SUBSYSTEM=="usb", ATTR{idVendor}=="2184", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Emotiv Systems Pty. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="21a1", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Agecodagis SARL -SUBSYSTEM=="usb", ATTR{idVendor}=="21d6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -# Fuzhou Rockchip Electronics -SUBSYSTEM=="usb", ATTR{idVendor}=="2207", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MacAlly -SUBSYSTEM=="usb", ATTR{idVendor}=="2222", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SAMWOO Enterprise -SUBSYSTEM=="usb", ATTR{idVendor}=="2227", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Silicon Motion -SUBSYSTEM=="usb", ATTR{idVendor}=="2232", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#RadioShack Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="2233", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Kobo Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="2237", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OTGV -SUBSYSTEM=="usb", ATTR{idVendor}=="2257", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oppo, Find 5 -SUBSYSTEM=="usb", ATTR{idVendor}=="2257", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#8D Technologies inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="228d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pie Digital, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="22a6", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Motorola PCS -SUBSYSTEM=="usb", ATTR{idVendor}=="22b8", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eTurboTouch Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="22b9", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Technology Innovation Holdings, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="22ba", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pinnacle Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="2304", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shining Technologies, Inc. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="2318", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Teleepoch -SUBSYSTEM=="usb", ATTR{idVendor}=="2340", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arduino SA -SUBSYSTEM=="usb", ATTR{idVendor}=="2341", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Pumatronix Ltda -SUBSYSTEM=="usb", ATTR{idVendor}=="2373", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Digit@lway, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="2375", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SANHO Digital Electronics Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="2406", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aessent Technology Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="2443", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Tripp-Lite -SUBSYSTEM=="usb", ATTR{idVendor}=="2478", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#K-Touch -SUBSYSTEM=="usb", ATTR{idVendor}=="24e3", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TwinMOS -SUBSYSTEM=="usb", ATTR{idVendor}=="2632", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Electronics For Imaging, Inc. [hex] -SUBSYSTEM=="usb", ATTR{idVendor}=="2650", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sundtek -SUBSYSTEM=="usb", ATTR{idVendor}=="2659", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#XiaoMi -SUBSYSTEM=="usb", ATTR{idVendor}=="2717", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Citizen -SUBSYSTEM=="usb", ATTR{idVendor}=="2730", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DigitalWay -SUBSYSTEM=="usb", ATTR{idVendor}=="2735", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#NHJ, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="2770", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#ASUSTek Computer Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="2821", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Toptronic Industrial Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="2899", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Meizu Telecom Equipment Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="2a45", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Planex Communications -SUBSYSTEM=="usb", ATTR{idVendor}=="2c02", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dolphin Peripherals -SUBSYSTEM=="usb", ATTR{idVendor}=="2c1a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Fujitsu, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="2fb2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Eagletron -SUBSYSTEM=="usb", ATTR{idVendor}=="3125", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Whanam Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="3176", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VidzMedia Pte Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="3275", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AEI -SUBSYSTEM=="usb", ATTR{idVendor}=="3334", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yakumo -SUBSYSTEM=="usb", ATTR{idVendor}=="3340", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Micro Star -SUBSYSTEM=="usb", ATTR{idVendor}=="3504", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Power Quotient International Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="3538", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#DIVA -SUBSYSTEM=="usb", ATTR{idVendor}=="3579", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#InVibro -SUBSYSTEM=="usb", ATTR{idVendor}=="3636", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WEM -SUBSYSTEM=="usb", ATTR{idVendor}=="3838", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#National Instruments Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="3923", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I-O Data -SUBSYSTEM=="usb", ATTR{idVendor}=="40bb", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#i-rocks -SUBSYSTEM=="usb", ATTR{idVendor}=="4101", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#iRiver, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="4102", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Dell Computer Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="413c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USBest Technology -SUBSYSTEM=="usb", ATTR{idVendor}=="4146", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#USB Design by Example -SUBSYSTEM=="usb", ATTR{idVendor}=="4242", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Broadcom Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="4317", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WinChipHead -SUBSYSTEM=="usb", ATTR{idVendor}=="4348", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shuttle, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="4572", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Panram -SUBSYSTEM=="usb", ATTR{idVendor}=="4586", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EMS Production -SUBSYSTEM=="usb", ATTR{idVendor}=="4670", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Miditech -SUBSYSTEM=="usb", ATTR{idVendor}=="4752", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GW Instek -SUBSYSTEM=="usb", ATTR{idVendor}=="4757", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Aceeca -SUBSYSTEM=="usb", ATTR{idVendor}=="4766", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Memorex -SUBSYSTEM=="usb", ATTR{idVendor}=="4855", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#SimpleTech -SUBSYSTEM=="usb", ATTR{idVendor}=="4971", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Musical Fidelity -SUBSYSTEM=="usb", ATTR{idVendor}=="4d46", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grandtec -SUBSYSTEM=="usb", ATTR{idVendor}=="5032", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Linksys (?) -SUBSYSTEM=="usb", ATTR{idVendor}=="5041", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Averatec (?) -SUBSYSTEM=="usb", ATTR{idVendor}=="50c2", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sweex -SUBSYSTEM=="usb", ATTR{idVendor}=="5173", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#I-Tetra -SUBSYSTEM=="usb", ATTR{idVendor}=="5219", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Owon -SUBSYSTEM=="usb", ATTR{idVendor}=="5345", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Transmeta Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="544d", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#UC-Logic Technology Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="5543", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Epiphan Systems Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="5555", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#OnSpec Electronic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="55aa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Uni-Trend Group Limited -SUBSYSTEM=="usb", ATTR{idVendor}=="5656", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IRTOUCHSYSTEMS Co. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="595a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Acer, Inc -SUBSYSTEM=="usb", ATTR{idVendor}=="5986", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Zinwell -SUBSYSTEM=="usb", ATTR{idVendor}=="5a57", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Beholder International Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="6000", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ingenic Semiconductor Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="601a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sitecom -SUBSYSTEM=="usb", ATTR{idVendor}=="6189", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TwinHan Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="6253", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CoreLogic, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="636c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown (Sony?) -SUBSYSTEM=="usb", ATTR{idVendor}=="6472", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Arkmicro Technologies Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="6547", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#IRTOUCHSYSTEMS Co. Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="6615", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Prototype product Vendor ID -SUBSYSTEM=="usb", ATTR{idVendor}=="6666", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#WiseGroup, Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="6677", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3Com -SUBSYSTEM=="usb", ATTR{idVendor}=="6891", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Opera1 -SUBSYSTEM=="usb", ATTR{idVendor}=="695c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Yealink Network Technology Co., Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="6993", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Shanghai Jujo Electronics Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="6a75", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CME (Central Music Co.) -SUBSYSTEM=="usb", ATTR{idVendor}=="7104", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#StackFoundry LLC -SUBSYSTEM=="usb", ATTR{idVendor}=="726c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TBS Technologies China -SUBSYSTEM=="usb", ATTR{idVendor}=="734c", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Edimax Technology Co., Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="7392", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="8086", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Intel Corp. -SUBSYSTEM=="usb", ATTR{idVendor}=="8087", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#VirtualBox -SUBSYSTEM=="usb", ATTR{idVendor}=="80ee", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keio -SUBSYSTEM=="usb", ATTR{idVendor}=="8282", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#EGO Systems, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="8341", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Sitecom -SUBSYSTEM=="usb", ATTR{idVendor}=="9016", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#TeVii Technology Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="9022", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#GeoLab, Ltd -SUBSYSTEM=="usb", ATTR{idVendor}=="9148", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MosChip Semiconductor -SUBSYSTEM=="usb", ATTR{idVendor}=="9710", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Grandtec -SUBSYSTEM=="usb", ATTR{idVendor}=="99fa", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#J. Westhues -SUBSYSTEM=="usb", ATTR{idVendor}=="9ac4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AnMo Electronics Corp. / Dino-Lite (?) -SUBSYSTEM=="usb", ATTR{idVendor}=="a128", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#AnMo Electronics Corporation -SUBSYSTEM=="usb", ATTR{idVendor}=="a168", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Asix -SUBSYSTEM=="usb", ATTR{idVendor}=="a600", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#3Com -SUBSYSTEM=="usb", ATTR{idVendor}=="a727", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Unknown -SUBSYSTEM=="usb", ATTR{idVendor}=="abcd", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Keil Software, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="c251", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#CACE Technologies Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="cace", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Ultimarc -SUBSYSTEM=="usb", ATTR{idVendor}=="d209", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Xorcom Ltd. -SUBSYSTEM=="usb", ATTR{idVendor}=="e4e4", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#MakingThings -SUBSYSTEM=="usb", ATTR{idVendor}=="eb03", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#eMPIA Technology, Inc. -SUBSYSTEM=="usb", ATTR{idVendor}=="eb1a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#KWorld -SUBSYSTEM=="usb", ATTR{idVendor}=="eb2a", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Hewlett Packard -SUBSYSTEM=="usb", ATTR{idVendor}=="f003", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Atten Electronics / Siglent Technologies -SUBSYSTEM=="usb", ATTR{idVendor}=="f4ec", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Oneplus -SUBSYSTEM=="usb", ATTR{idVendor}=="2a70", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -# Essential Products -SUBSYSTEM=="usb", ATTR{idVendor}=="2e17", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" - -#Nextbit -SUBSYSTEM=="usb", ATTR{idVendor}=="2c3f", TAG+="systemd", ENV{SYSTEMD_WANTS}="adb.service" diff --git a/adb.service b/adb.service deleted file mode 100644 index 6d81107..0000000 --- a/adb.service +++ /dev/null @@ -1,14 +0,0 @@ -# Systemd unit file for adb - -[Unit] -Description=Android Debug Bridge (adb) service - -[Service] -Type=forking -ExecStart=/usr/bin/adb start-server -ExecStop=/usr/bin/adb kill-server -PrivateTmp=yes -Environment=HOME=/var/lib/adb - -[Install] -WantedBy=multi-user.target diff --git a/android-tools.spec b/android-tools.spec index 3a23412..3bd3398 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -13,8 +13,6 @@ URL: http://developer.android.com/guide/developing/tools/ # Sources with all needed patches and cmakelists live there now: Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz -Source1: 51-android.rules -Source2: adb.service # https://github.com/nmeum/android-tools/issues/153 Patch0: 0001-Fix-libusb-enumeration.patch @@ -72,7 +70,6 @@ setup between the host and the target phone as adb. %prep %autosetup -p1 -cp -p %{SOURCE1} 51-android.rules %build export GO111MODULE=off @@ -81,24 +78,8 @@ export GO111MODULE=off %install %cmake_install -install -p -D -m 0644 %{SOURCE2} \ - %{buildroot}%{_unitdir}/adb.service -install -d -m 0775 ${RPM_BUILD_ROOT}%{_sharedstatedir}/adb - -%post -%systemd_post adb.service - -%preun -%systemd_preun adb.service - -%postun -%systemd_postun_with_restart adb.service %files -%doc 51-android.rules -%{_unitdir}/adb.service -%attr(0755,root,root) %dir %{_sharedstatedir}/adb -%attr(0755,root,root) %dir %{_datadir}/android-tools #ASL2.0 and BSD %{_bindir}/adb #ASL2.0 From 08f8a5794533dd54eb61e8f01484edf35b9e1dad Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Sat, 10 May 2025 12:57:01 +0200 Subject: [PATCH 63/71] Remove _hardened_build global Default as of Fedora 23. [1] https://fedoraproject.org/wiki/Changes/Harden_All_Packages --- android-tools.spec | 2 -- 1 file changed, 2 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index 3bd3398..5efc2ed 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,5 +1,3 @@ -%global _hardened_build 1 - Name: android-tools Version: 35.0.2 Release: %autorelease From f46d5a55f0fecb696c3b63115a59f76b4dd200b2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Wed, 23 Jul 2025 16:58:41 +0000 Subject: [PATCH 64/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_43_Mass_Rebuild From 20bf6bd2165763adeac26115f2126b2bc2fe1037 Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Fri, 15 Aug 2025 14:19:37 -0500 Subject: [PATCH 65/71] Rebuild for golang-1.25.0 --- android-tools.spec | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/android-tools.spec b/android-tools.spec index 5efc2ed..5d9a8cf 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,6 +1,6 @@ Name: android-tools Version: 35.0.2 -Release: %autorelease +Release: %autorelease.1 Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -109,4 +109,7 @@ export GO111MODULE=off %{_mandir}/man1/adb.1.* %changelog +* Fri Aug 15 2025 Maxwell G - 1:35.0.2-1.1 +- Rebuild for golang-1.25.0 + %autochangelog From 2490cf9e7c7e0c45210cd2f9cbf7ac4f93898f21 Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Fri, 15 Aug 2025 15:24:52 -0500 Subject: [PATCH 66/71] Revert "Rebuild for golang-1.25.0" This reverts commit 20bf6bd2165763adeac26115f2126b2bc2fe1037. --- android-tools.spec | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/android-tools.spec b/android-tools.spec index 5d9a8cf..5efc2ed 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -1,6 +1,6 @@ Name: android-tools Version: 35.0.2 -Release: %autorelease.1 +Release: %autorelease Epoch: 1 Summary: Android platform tools(adb, fastboot) @@ -109,7 +109,4 @@ export GO111MODULE=off %{_mandir}/man1/adb.1.* %changelog -* Fri Aug 15 2025 Maxwell G - 1:35.0.2-1.1 -- Rebuild for golang-1.25.0 - %autochangelog From a7811d0d8c806976231be3cbc4b14c03cdbf6594 Mon Sep 17 00:00:00 2001 From: Maxwell G Date: Fri, 15 Aug 2025 16:00:27 -0500 Subject: [PATCH 67/71] Rebuild for golang-1.25.0 From fe376952de4b7d0bac1e97df50c021c7b7645dd5 Mon Sep 17 00:00:00 2001 From: Zephyr Lykos Date: Tue, 19 Aug 2025 12:39:48 +0800 Subject: [PATCH 68/71] Fix compilation on Protobuf v30 --- ...ix-incompatibility-with-protobuf-v30.patch | 36 +++++++++++++++++++ android-tools.spec | 2 ++ 2 files changed, 38 insertions(+) create mode 100644 0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch diff --git a/0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch b/0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch new file mode 100644 index 0000000..fd6a890 --- /dev/null +++ b/0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch @@ -0,0 +1,36 @@ +From 36c605004ae1c75813181ffe4c59907016aaf9e9 Mon Sep 17 00:00:00 2001 +From: Biswapriyo Nath +Date: Tue, 22 Apr 2025 15:12:23 +0000 +Subject: [PATCH] extras/libjsonpb: Fix incompatibility with protobuf v30 + +This commit fixes the following compiler error. + +jsonpb.cpp:36:44: error: invalid operands to binary expression ( +'basic_string, allocator>' and +'internal::DescriptorStringView' (aka 'basic_string_view')) +36 | return std::string(kTypeUrlPrefix) + "/" + message.GetDescriptor()->full_name(); + | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +More info here https://protobuf.dev/news/2024-10-02/#descriptor-apis + +Change-Id: I3c76d51dfdfbe013eaa5031e6194bf5edae1be35 +--- + libjsonpb/parse/jsonpb.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/vendor/extras/libjsonpb/parse/jsonpb.cpp b/vendor/extras/libjsonpb/parse/jsonpb.cpp +index b342c2b..ebd71bf 100644 +--- a/vendor/extras/libjsonpb/parse/jsonpb.cpp ++++ b/vendor/extras/libjsonpb/parse/jsonpb.cpp +@@ -33,7 +33,7 @@ using google::protobuf::util::TypeResolver; + static constexpr char kTypeUrlPrefix[] = "type.googleapis.com"; + + std::string GetTypeUrl(const Message& message) { +- return std::string(kTypeUrlPrefix) + "/" + message.GetDescriptor()->full_name(); ++ return std::string(kTypeUrlPrefix) + "/" + std::string(message.GetDescriptor()->full_name()); + } + + ErrorOr MessageToJsonString(const Message& message) { +-- +2.49.0 + diff --git a/android-tools.spec b/android-tools.spec index 5efc2ed..6e2a87a 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -13,6 +13,8 @@ URL: http://developer.android.com/guide/developing/tools/ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{name}-%{version}.tar.xz # https://github.com/nmeum/android-tools/issues/153 Patch0: 0001-Fix-libusb-enumeration.patch +# https://github.com/nmeum/android-tools/pull/172 +Patch1: 0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch BuildRequires: brotli-devel BuildRequires: cmake From 4f0625a69aa4677821de15bffed006d8b85ecd73 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alejandro=20S=C3=A1ez?= Date: Fri, 10 Oct 2025 16:40:54 +0200 Subject: [PATCH 69/71] rebuild From f4e618fff04037c6aac85882f7d8ee2b3cf29296 Mon Sep 17 00:00:00 2001 From: LuK1337 Date: Tue, 13 Jan 2026 16:22:16 +0100 Subject: [PATCH 70/71] Backport "Make legacy USB driver default on Linux" from 16.0.0_r4 --- ...e-legacy-USB-driver-default-on-Linux.patch | 34 +++++++++++++++++++ android-tools.spec | 2 ++ 2 files changed, 36 insertions(+) create mode 100644 0003-Make-legacy-USB-driver-default-on-Linux.patch diff --git a/0003-Make-legacy-USB-driver-default-on-Linux.patch b/0003-Make-legacy-USB-driver-default-on-Linux.patch new file mode 100644 index 0000000..15291f2 --- /dev/null +++ b/0003-Make-legacy-USB-driver-default-on-Linux.patch @@ -0,0 +1,34 @@ +From 55d30a3098c29431bcbeb2d2a5f1a0c40844c311 Mon Sep 17 00:00:00 2001 +From: Fabien Sanglard +Date: Mon, 23 Jun 2025 11:21:16 -0700 +Subject: [PATCH] Make legacy USB driver default on Linux + +Bug: 366314975 +Bug: 398328647 +Test: Manual +Flag: EXEMPT (adb.exe) +Change-Id: Id49df58587d3f479d263a5b2da1679a1e675feb5 +--- + client/transport_usb.cpp | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/vendor/adb/client/transport_usb.cpp b/vendor/adb/client/transport_usb.cpp +index 3b0b4906..d3b4929c 100644 +--- a/vendor/adb/client/transport_usb.cpp ++++ b/vendor/adb/client/transport_usb.cpp +@@ -177,9 +177,9 @@ bool is_adb_interface(int usb_class, int usb_subclass, int usb_protocol) { + } + + bool is_libusb_enabled() { +- bool enable = true; +-#if defined(_WIN32) +- enable = false; ++ bool enable = false; ++#if defined(__APPLE__) ++ enable = true; + #endif + char* env = getenv("ADB_LIBUSB"); + if (env) { +-- +2.52.0 + diff --git a/android-tools.spec b/android-tools.spec index 6e2a87a..b0b03ae 100644 --- a/android-tools.spec +++ b/android-tools.spec @@ -15,6 +15,8 @@ Source0: https://github.com/nmeum/%{name}/releases/download/%{version}/%{n Patch0: 0001-Fix-libusb-enumeration.patch # https://github.com/nmeum/android-tools/pull/172 Patch1: 0002-extras-libjsonpb-Fix-incompatibility-with-protobuf-v30.patch +# https://github.com/nmeum/android-tools/pull/190 +Patch2: 0003-Make-legacy-USB-driver-default-on-Linux.patch BuildRequires: brotli-devel BuildRequires: cmake From eb666bfdb714a53c12a4574110a8a8013a68e3c2 Mon Sep 17 00:00:00 2001 From: Fedora Release Engineering Date: Fri, 16 Jan 2026 03:40:16 +0000 Subject: [PATCH 71/71] Rebuilt for https://fedoraproject.org/wiki/Fedora_44_Mass_Rebuild