diff --git a/ME/SOO.refso3_64/README b/ME/SOO.refso3_64/README deleted file mode 100644 index 309a846059..0000000000 --- a/ME/SOO.refso3_64/README +++ /dev/null @@ -1 +0,0 @@ -This directory contains the ITB of the SOO.refso3_64 ME. diff --git a/ME/so3 b/ME/so3 index a632a92f62..6cdf1208c2 160000 --- a/ME/so3 +++ b/ME/so3 @@ -1 +1 @@ -Subproject commit a632a92f6297d480e2b4c0391df7695d88594866 +Subproject commit 6cdf1208c2f8b5d39d3e9f7f6e8a2091661bc008 diff --git a/ME/soo/so3/so3/configs/emiso_64_defconfig b/ME/soo/so3/so3/configs/emiso_64_defconfig new file mode 100644 index 0000000000..6f5bff3b5e --- /dev/null +++ b/ME/soo/so3/so3/configs/emiso_64_defconfig @@ -0,0 +1,115 @@ +# +# Automatically generated make config: don't edit +# SO3 Polymorphic OS Configuration +# +# CONFIG_ARCH_ARM32 is not set +CONFIG_ARCH_ARM64=y +CONFIG_SO3VIRT=y +CONFIG_ARCH="arm64" +CONFIG_CROSS_COMPILE="aarch64-none-linux-gnu-" +# CONFIG_ARM_TRUSTZONE is not set +CONFIG_KERNEL_VADDR=0xffff800010000000 + +# +# Platform +# +CONFIG_VIRT64=y +# CONFIG_RPI4_64 is not set +# CONFIG_VA_BITS_39 is not set +CONFIG_VA_BITS_48=y +CONFIG_THREAD_ENV=y + +# +# Kernel & CPU features +# +# CONFIG_SMP is not set +CONFIG_NR_CPUS=1 +CONFIG_HZ=100 +CONFIG_SCHED_FLIP_SCHEDFREQ=30 + +# +# SO3 Scheduling configuration +# +CONFIG_SCHED_RR=y +# CONFIG_SCHED_PRIO is not set +CONFIG_SCHED_FREQ_PREEMPTION=y + +# +# Drivers +# +CONFIG_UART=y +CONFIG_IO_MAPPING_BASE=0xffff900000000000 +# CONFIG_I2C is not set +# CONFIG_NET is not set +# CONFIG_FB is not set +# CONFIG_INPUT is not set +# CONFIG_NS16550 is not set +# CONFIG_PL011_UART is not set +CONFIG_UART_LL_PADDR=0x09000000 +CONFIG_SOO_SERIAL=y +# CONFIG_MMC is not set +# CONFIG_RAMDEV is not set +# CONFIG_ARM_TIMER is not set +CONFIG_SOO_TIMER=y +# CONFIG_GIC is not set +CONFIG_SOO_IRQ=y +# CONFIG_PL111_CLCD is not set +# CONFIG_QEMU_RAMFB is not set +# CONFIG_SOO_FB is not set +# CONFIG_PL050_KMI is not set +# CONFIG_SOO_INPUT is not set + +# +# SO3 Applications +# +# CONFIG_APP_SAMPLE is not set + +# +# Filesystems +# +CONFIG_ROOTFS_NONE=y +# CONFIG_ROOTFS_MMC is not set +# CONFIG_ROOTFS_RAMDEV is not set + +# +# IPC +# +# CONFIG_IPC_SIGNAL is not set +# CONFIG_IPC_PIPE is not set +CONFIG_HEAP_SIZE=8 +# CONFIG_RTOS is not set +# CONFIG_AVZ is not set +CONFIG_SOO=y +CONFIG_MMU=y +# CONFIG_DEBUG_PRINTK is not set + +# +# SOO Mobile Entity - Smart Object Oriented subsystem +# +# CONFIG_SOO_REFSO3 is not set +# CONFIG_SOO_BLIND is not set +# CONFIG_SOO_OUTDOOR is not set +# CONFIG_SOO_AGENCY is not set +# CONFIG_SOO_NET is not set +# CONFIG_SOO_LEDCTRL is not set +# CONFIG_SOO_CHAT is not set +# CONFIG_SOO_WAGOLED is not set +# CONFIG_SOO_IUOC is not set +# CONFIG_SOO_SWITCH_KNX is not set +# CONFIG_SOO_SWITCH_ENOCEAN is not set +CONFIG_SOO_EMISO=y + +# +# SOO Mobile Entity frontend drivers +# +# CONFIG_VDUMMY_FRONTEND is not set +CONFIG_VUART_FRONTEND=y +# CONFIG_VDOGA12V6NM_FRONTEND is not set +# CONFIG_VWEATHER_FRONTEND is not set +# CONFIG_VUIHANDLER_FRONTEND is not set +# CONFIG_VSENSELED_FRONTEND is not set +# CONFIG_VSENSEJ_FRONTEND is not set +# CONFIG_VENOCEAN_FRONTEND is not set +# CONFIG_VWAGOLED_FRONTEND is not set +# CONFIG_VIUOC_FRONTEND is not set +# CONFIG_VKNX_FRONTEND is not set diff --git a/ME/soo/so3/so3/dts/Makefile b/ME/soo/so3/so3/dts/Makefile index 192f9e6825..f13cdf4761 100644 --- a/ME/soo/so3/so3/dts/Makefile +++ b/ME/soo/so3/so3/dts/Makefile @@ -25,6 +25,7 @@ dtb-$(CONFIG_SOO_WAGOLED) += wagoled.dtb dtb-$(CONFIG_SOO_SWITCH_KNX) += switch_knx.dtb dtb-$(CONFIG_SOO_SWITCH_ENOCEAN) += switch_enocean.dtb dtb-$(CONFIG_SOO_IUOC) += iuoc.dtb +dtb-$(CONFIG_SOO_EMISO) += emiso.dtb endif endif diff --git a/ME/soo/so3/so3/dts/emiso.dts b/ME/soo/so3/so3/dts/emiso.dts new file mode 100644 index 0000000000..06e100cd88 --- /dev/null +++ b/ME/soo/so3/so3/dts/emiso.dts @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2016-2023 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/dts-v1/; + +#include "soo.dtsi" + +&ME { + /* 16 MB should be enough for major cases. */ + domain-size = <0x1000000>; + + /* SPID on 64-bit encoding */ + spid = /bits/ 64 <0x0010000000000001>; + + /* SPAD capabilities on 64-bit encoding */ + spadcaps = /bits/ 64 <0x0000000000000000>; + + /* Name of this ME */ + me_name = "SOO.refso3"; + + /* Short description */ + me_shortdesc = + +"This is the standard reference ME that can be used as template or simply to \ +perform various tests. This variant has no rootfs (only kernel threads)."; + + frontends { + + /* Enabling the console */ + vuart { + status = "ok"; + }; + }; +}; + diff --git a/ME/soo/so3/so3/soo/me/Kconfig b/ME/soo/so3/so3/soo/me/Kconfig index cab71171e4..f8be4c9182 100644 --- a/ME/soo/so3/so3/soo/me/Kconfig +++ b/ME/soo/so3/so3/soo/me/Kconfig @@ -68,4 +68,12 @@ choice config SOO_SWITCH_ENOCEAN bool "SOO.switch Mobile Entity using enocean" + config SOO_EMISO + bool "SOO.emiso Mobile Entity" + help + SOO.emiso ME simply logs messages each second. + It is a simple example of SO3 container and can be used with + Portainer server + + endchoice diff --git a/ME/soo/so3/so3/soo/me/Makefile b/ME/soo/so3/so3/soo/me/Makefile index e00293de27..067b3edb5c 100644 --- a/ME/soo/so3/so3/soo/me/Makefile +++ b/ME/soo/so3/so3/soo/me/Makefile @@ -11,6 +11,7 @@ obj-$(CONFIG_SOO_WAGOLED) += wagoled/ obj-$(CONFIG_SOO_IUOC) += iuoc/ obj-$(CONFIG_SOO_SWITCH_ENOCEAN) += switch/ obj-$(CONFIG_SOO_SWITCH_KNX) += switch/ +obj-$(CONFIG_SOO_EMISO) += emiso/ diff --git a/ME/soo/so3/so3/soo/me/emiso/Makefile b/ME/soo/so3/so3/soo/me/emiso/Makefile new file mode 100644 index 0000000000..34a3accd97 --- /dev/null +++ b/ME/soo/so3/so3/soo/me/emiso/Makefile @@ -0,0 +1,3 @@ + +obj-y += emiso.o callbacks.o + diff --git a/ME/soo/so3/so3/soo/me/emiso/callbacks.c b/ME/soo/so3/so3/soo/me/emiso/callbacks.c new file mode 100644 index 0000000000..26043564b9 --- /dev/null +++ b/ME/soo/so3/so3/soo/me/emiso/callbacks.c @@ -0,0 +1,201 @@ +/* + * Copyright (C) 2014-2023 Daniel Rossier + * Copyright (C) March 2018 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#if 0 +#define DEBUG +#endif + +#include +#include + +#include +#include +#include +#include +#include +#include + +#include + +#include + +static LIST_HEAD(visits); +static LIST_HEAD(known_soo_list); + +/* Reference to the shared content helpful during synergy with other MEs */ +sh_refso3_t *sh_refso3; + +/** + * PRE-ACTIVATE + * + * Should receive local information through args + */ +void cb_pre_activate(soo_domcall_arg_t *args) { + + DBG(">> ME %d: cb_pre_activate...\n", ME_domID()); + +#if 0 /* To be implemented... */ + logmsg("[soo:me:SOO.refSO3] ME %d: cb_pre_activate..\n", ME_domID()); +#endif + +} + +/** + * PRE-PROPAGATE + * + * The callback is executed in first stage to give a chance to a resident ME to stay or disappear, for example. + */ +void cb_pre_propagate(soo_domcall_arg_t *args) { + + pre_propagate_args_t *pre_propagate_args = (pre_propagate_args_t *) &args->u.pre_propagate_args; + + DBG(">> ME %d: cb_pre_propagate...\n", ME_domID()); + + pre_propagate_args->propagate_status = PROPAGATE_STATUS_YES; +} + +/** + * Kill domcall - if another ME tries to kill us. + */ +void cb_kill_me(soo_domcall_arg_t *args) { + + DBG(">> ME %d: cb_kill_me...\n", ME_domID()); + + /* Do we accept to be killed? yes... */ + set_ME_state(ME_state_killed); +} + +/** + * PRE_SUSPEND + * + * This callback is executed right before suspending the state of frontend drivers, before migrating + * + */ +void cb_pre_suspend(soo_domcall_arg_t *args) { + DBG(">> ME %d: cb_pre_suspend...\n", ME_domID()); +} + +/** + * COOPERATE + * + * This callback is executed when an arriving ME (initiator) decides to cooperate with a residing ME (target). + */ +void cb_cooperate(soo_domcall_arg_t *args) { + cooperate_args_t *cooperate_args = (cooperate_args_t *) &args->u.cooperate_args; + agency_ctl_args_t agency_ctl_args; + + lprintk("[soo:me:SOO.refSO3] ME %d: cb_cooperate...\n", ME_domID()); + + switch (cooperate_args->role) { + case COOPERATE_INITIATOR: + + if (cooperate_args->alone) + return ; + + /* Collaboration ... */ + + /* Update the list of hosts */ + sh_refso3->me_common.soohost_nr = concat_hosts(&visits, (uint8_t *) sh_refso3->me_common.soohosts); + + agency_ctl_args.u.cooperate_args.pfn = phys_to_pfn(virt_to_phys_pt((addr_t) sh_refso3)); + agency_ctl_args.u.cooperate_args.slotID = ME_domID(); /* Will be copied in initiator_cooperate_args */ + + /* This pattern enables the cooperation with the target ME */ + + agency_ctl_args.cmd = AG_COOPERATE; + agency_ctl_args.slotID = cooperate_args->u.target_coop.slotID; + + /* Perform the cooperate in the target ME */ + args->__agency_ctl(&agency_ctl_args); +#if 0 + set_ME_state(ME_state_killed); +#endif + break; + + case COOPERATE_TARGET: + DBG("Cooperate: Target %d\n", ME_domID()); +#if 1 + /* Destroy us */ + set_ME_state(ME_state_terminated); +#endif + + break; + + default: + lprintk("Cooperate: Bad role %d\n", cooperate_args->role); + BUG(); + } + +} + +/** + * PRE_RESUME + * + * This callback is executed right before resuming the frontend drivers, right after ME activation + * + * Returns 0 if no propagation to the user space is required, 1 otherwise + */ +void cb_pre_resume(soo_domcall_arg_t *args) { + DBG(">> ME %d: cb_pre_resume...\n", ME_domID()); +} + +/** + * POST_ACTIVATE callback (async) + */ +void cb_post_activate(soo_domcall_arg_t *args) { +#if 0 + agency_ctl_args_t agency_ctl_args; + static uint32_t count = 0; +#endif + + DBG(">> ME %d: cb_post_activate...\n", ME_domID()); +} + +/** + * FORCE_TERMINATE callback (async) + * + * Returns 0 if no propagation to the user space is required, 1 otherwise + * + */ + +void cb_force_terminate(void) { + DBG(">> ME %d: cb_force_terminate...\n", ME_domID()); + DBG("ME state: %d\n", get_ME_state()); + + /* We do nothing particular here for this ME, + * however we proceed with the normal termination of execution. + */ + + set_ME_state(ME_state_terminated); +} + +void callbacks_init(void) { + + /* Allocate the shared page. */ + sh_refso3 = (sh_refso3_t *) get_contig_free_vpages(1); + + /* Initialize the shared content page used to exchange information between other MEs */ + memset(sh_refso3, 0, PAGE_SIZE); + + /* Set the SPAD capabilities (currently not used) */ + memset(&get_ME_desc()->spad, 0, sizeof(spad_t)); + +} + + diff --git a/ME/soo/so3/so3/soo/me/emiso/emiso.c b/ME/soo/so3/so3/soo/me/emiso/emiso.c new file mode 100644 index 0000000000..4107d2f86a --- /dev/null +++ b/ME/soo/so3/so3/soo/me/emiso/emiso.c @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2016-2020 Daniel Rossier + * Copyright (C) 2016-2019 Baptiste Delporte + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#if 0 +#define DEBUG +#endif + +#include +#include +#include +#include +#include +#include + +#include + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/** + * This ME does nothing particular. It is aimed at giving a template to develop + * a new ME. + * + * Please, have a look at the SOO.ledctrl which is an example of ME intended to + * pilot LEDs on the Sense HAT extension. + * + * Note that SOO.refso3 can be configured with a rootfs (ramfs) which contains + * small applications like a shell and the LVGL demo application. + * + */ +void *app_thread_main(void *args) { + + static int idx = 0; + + /* The ME can cooperate with the others. */ + spad_enable_cooperate(); + + while (1) { + + msleep(1000); + logs("message#%d\n", idx++); + } + + return NULL; +} diff --git a/ME/soo/so3/target/emiso_64.its b/ME/soo/so3/target/emiso_64.its new file mode 100644 index 0000000000..076ccb2d22 --- /dev/null +++ b/ME/soo/so3/target/emiso_64.its @@ -0,0 +1,43 @@ +/* + * Copyright (C) 2018-2019 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/dts-v1/; + +/ { + description = "SO3 image for the SOO.refso3 ME (without rootfs)"; + + images { + + so3 { + description = "SO3 OS kernel"; + data = /incbin/("../so3/so3.bin"); + type = "ME"; + arch = "arm64"; + os = "linux"; + compression = "none"; + }; + + fdt { + description = "Flattened Device Tree blob"; + data = /incbin/("../so3/dts/emiso.dtb"); + type = "flat_dt"; + arch = "arm64"; + compression = "none"; + }; + }; +}; diff --git a/ME/work/so3/u-boot/include/ctype.h b/ME/work/so3/u-boot/include/ctype.h new file mode 120000 index 0000000000..9e43f9c6c6 --- /dev/null +++ b/ME/work/so3/u-boot/include/ctype.h @@ -0,0 +1 @@ +linux/ctype.h \ No newline at end of file diff --git a/doc/source/ME/ME.rst b/doc/source/ME/ME.rst index d02b116600..e02b76e1bc 100644 --- a/doc/source/ME/ME.rst +++ b/doc/source/ME/ME.rst @@ -1,4 +1,4 @@ -.. _ME: +.. _ME_so3: Mobile Entities ############### diff --git a/doc/source/docker/docker.rst b/doc/source/docker/docker.rst new file mode 100644 index 0000000000..f27a8c2c35 --- /dev/null +++ b/doc/source/docker/docker.rst @@ -0,0 +1,85 @@ +.. _docker: + +###### +Docker +###### + +This chapter provides some information on how to integrate and to use the *Docker* +engine in the ``SOO`` environment. + +.. note:: + + The *Docker* engine is not integrated in the ``SOO`` environment. + +*********** +Integration +*********** + +**Kernel**: + +The script ``check-config.sh`` serves the purpose of generating the list of the +kernel modules required to enable Docker support. + +* Usage: ``check-config.sh `` + +It is located in ``/docker/`` folder. + +**rootfs** + +The following options have to be enabled to add docker tool and engine in the rootfs: + +.. code-block:: shell + + BR2_PACKAGE_DOCKER_CLI + BR2_PACKAGE_DOCKER_CLI_STATIC + BR2_PACKAGE_DOCKER_ENGINE + BR2_PACKAGE_DOCKER_PROXY + +***************** +Images Management +***************** + +*Docker* images are typically obtained by utilizing the docker pull command. It +relies on an active internet connection. However, an internet connection cannot +be guaranteed. To overcome this limitation, the *docker* images are embedded in +the target rootfs (path: ``/root/docker_images/``) + +Image integration +================= + +The image should be placed in one of the following directories: + +* /agency/usr/docker_images/{aarch32, aarch64} + +The following commands shows how to retrieve a *docker* image and place it at the +correct place in `SOO` repo + +.. code-block:: shell + + $ docker pull + $ docker save -o .docker + $ zip .zip .docker + $ mv .zip /agency/usr/docker_images/{aarch32, aarch64} + +.. warning:: + + The `docker pull` command will pull the image for the host platform (x86 for + an x86 PC for example) + +Here are the commands to load an image in the target: + +1. Extract the image: ``unzip docker_images/.zip`` +2. Load the image: ``docker load -i .docker`` +3. (optional) remove the image file: ``rm .docker`` + +************** +Basic commands +************** + +* List of available images: ``docker image ls`` +* Remove an images: ``docker image rm `` +* List of running containers: ``docker container ls`` +* List of all containers: ``docker container ls -a`` +* Start a container: ``docker container start `` +* Stop a container: ``docker container stop `` +* Remove the stopped containers: ``docker container prune`` diff --git a/doc/source/emiso_engine/emiso_engine.rst b/doc/source/emiso_engine/emiso_engine.rst new file mode 100644 index 0000000000..4e9eb8613b --- /dev/null +++ b/doc/source/emiso_engine/emiso_engine.rst @@ -0,0 +1,203 @@ +.. _emiso_engine: + +EMISO Engine +############ + +The EMISO Engine replaces the docker engine in the `EMISO` environment. It supports +a subset of the Docker APIs set. +The following picture presents the communication flow between the *Portainer* Server +and *SO3 Containers*. + +.. figure:: /img/emiso_engine/EMISO-message_flow.png + :name: _fig-Communication flow + :alt: Communication flow + :align: center + + Communication flow + +**Legends** + + (1) The Portainer Server communicates directly with the EMISO Engine running + on the Smart Object. The communication is done via HTTP or HTTPS/TLS using + a RESTful API + (2) EMISO Engine provides an interface to control the SO3 containers. + +The application can be called as following: + +.. code-block:: shell + + $ emiso_engine [-s] [-i] + +Where + +* (optional) ``-s``: Start the webserver in secure mode (HTTPS/TLS) +* (optional) ``-i``: Interactive mode - start the cli interface instead of the + webserver. + +.. note:: + + The `interactive` (``cli``) mode is not implemented yet + +.. note:: + + Due to some `limitation `_ + with `Portainer` Server, the Secure mode is not supported + +******* +Service +******* + +A ``emiso`` service has been added to help control the engine. Currently this +service only starts the ``emiso-engine``. + +Usage: + +* Control + +.. code-block:: shell + + systemctl {start,stop,status,restart} emiso.service + +* Retrieve logs + +.. code-block:: shell + + journalctl -fu emiso.service + +************ +Architecture +************ + +The following picture depicts the architecture of the EMISO engine. It is constituted +by: + +.. figure:: /img/emiso_engine/EMISO-engine_architecture.png + :name: _fig-engine_architecture + :alt: Engine Architecture + :align: center + + Engine Architecture + +The different blocks of the engine are: + +* A web server compliant with a subset of the Docker APIs. +* EMISO Daemon handles the interactions with the SO3 Containers +* The cli interface offers an entry point to interact with the EMISO Daemon. It + is used to directly interact with the SO3 Containers, bypassing the webserver. + It can be used for debugging purposes, for example. + +.. note:: + + The cli interface is not implemented in current ``emiso-engine`` version + +****** +Daemon +****** + +The EMISO engine *Daemon* provides an interface to interact with the SO3 containers. +SO3 Container are SOO Mobile Entity (ME). ME has been instrumented to be controlled +by the daemon. + +The following table provides the mapping between the Docker and SO3 elements. The +Docker elements which are not present in the table - like volumes, networks, … - +are not handled by the SO3 containers. + + ============== ============================= + Docker SO3 container + ============== ============================= + Dockerfile SO3 Container sources + Image SO3 itb file + Container SO3 “injected” container + ============== ============================= + +The EMISO Engine daemon provides supports the following features: + +* Retrieving status/info about the SO3 Images/Containers +* SO3 Container deployment/injection/creation +* SO3 Container start/stop/restart +* SO3 Container pause/unpause +* SO3 Container termination / kill +* SO3 Container update with a new container version + +SO3 Images +========== + +An SO3 Container image consists in a SO3 “itb” file. These images are stored in +``/mnt/ME/`` SD card partition. + +SO3 Container - Creation +======================== + +The creation of an SO3 container consists in a SO3 injection. At the end of the +injection process, the container state is “booting”. + +SO3 Container - Start +===================== + +Starting a SO3 container is similar to the Migration finalization process in SOO +framework. + +It is expected that the SO3 container state is “booting” before starting it. The +final state is “living”. + +SO3 Container - Stop +==================== + +In Docker, the container stop command consists in sending the ``SIGTERM``, and +after a grace period, ``SIGKILL``. It is a “gentle” container kill procedure. Once +a container has been stopped, it is possible to restart the container by calling +the “start” command. + +To provide the same behaviors, the SO3 container stop command performs the following +tasks: + +* Force terminate the ME +* Re-Inject the ME + +The Container is then ready to be started! + +SO3 Container – Pause / Unpause +=============================== + +The SO3 container pause / unpause consists in a ME migration ``init`` and finalization +commands respectively. + +SO3 Container - Logs +==================== + +SO3 Containers have to provide a method to retrieve their logs through Docker APIs. +This improvement involves enhancing the VUART backend driver. When a print is made +from a SO3 Container, the message is sent to the Linux kernel via the VUART +backend/frontend drives. Then, the backend driver prints these messages by directly interfacing with the UART driver. + +In this update, the logged messages are now also stored in dedicated log files. +Each container has its own file. The file path for these logs is as follows: + +* File path: ``/var/log/soo/me_.log`` + +The following image shows an overview of this log's mechanism. + +.. figure:: pictures/emiso_engine_logs_flow.png + :name: _fig-emiso_engine_logs_flow + :alt: EMISO engine logs flow + :align: center + + EMISO engine logs flow + +The behaviors is implemented this way: +* **SO3 Container**: The ``logs`` function has been added to SO3 containers. This +function adds ``[ME:]`` prefix to the messages. +* **linux**: syslog-ng has been configured to store the messages with this prefix +in the logs files. + +.. note:: + + All the ``me_.log`` files are deleted at boot time + +************* +cli interface +************* + +.. note:: + + The cli interface is not implemented in current ``emiso-engine`` version diff --git a/doc/source/img/emiso_engine/EMISO-engine_architecture.png b/doc/source/img/emiso_engine/EMISO-engine_architecture.png new file mode 100644 index 0000000000..0a3496c310 Binary files /dev/null and b/doc/source/img/emiso_engine/EMISO-engine_architecture.png differ diff --git a/doc/source/img/emiso_engine/EMISO-message_flow.png b/doc/source/img/emiso_engine/EMISO-message_flow.png new file mode 100644 index 0000000000..d08fc764b3 Binary files /dev/null and b/doc/source/img/emiso_engine/EMISO-message_flow.png differ diff --git a/doc/source/index.rst b/doc/source/index.rst index 0ac9561c10..301ae39cd4 100644 --- a/doc/source/index.rst +++ b/doc/source/index.rst @@ -22,6 +22,9 @@ drivers/drivers rootfs/rootfs user_guide + docker/docker + emiso_engine/emiso_engine + portainer/portainer logging board_issues aarch64 diff --git a/doc/source/portainer/portainer.rst b/doc/source/portainer/portainer.rst new file mode 100644 index 0000000000..7c41384564 --- /dev/null +++ b/doc/source/portainer/portainer.rst @@ -0,0 +1,112 @@ +.. _portainer: + +######### +Portainer +######### + +*Portainer CE* (Community Edition) is an open-source container management tool +that simplifies the deployment, management, and monitoring of Docker containers +and containerized applications. It provides a user-friendly web-based interface +that allows users to interact with Docker and manage containers, images, networks, +and volumes without needing to use complex command-line tools. + +In the SOO framework, `Portainer Server CE` is used as the Container Orchestration +Use User Interface (COUI). + +************ +Installation +************ + +Portainer Server runs as lightweight Docker containers on a Docker engine. It means +docker must be installed on the Host PC. + +* Creation of a volume that Portainer Server use to store it database: + +.. code-block:: shell + + docker volume create portainer_data + +* Download and install Portainer Server container: + +.. code-block:: shell + + $ docker run -d -p 8000:8000 -p 9443:9443 \ + --name portainer \ + --restart=always \ + -v /var/run/docker.sock:/var/run/docker.sock \ + -v portainer_data:/data \ + portainer/portainer-ce:latest + +``docker ps`` command can be used to check if the Portainer server is running + +To log-in, open a web browser and to to: + +.. code-block:: shell + + https://localhost:9443 + +************* +Initial setup +************* + +Once the Portainer Server has been deployed, and you have navigated to the instance's +URL, you are ready for the initial setup. + +First time connected to the Portainer server; the first user has to be created. +This first user will be an administrator. The username defaults to admin and the +password must be at least 12 characters long. + +Once the admin user has been created, the Environment Wizard will automatically +launch. The wizard will help get you started with Portainer. + +The installation process automatically detects your local environment and sets it +up for you. If you want to add additional environments to manage with this Portainer +instance, click Add Environments. Otherwise, click Get Started to start using +Portainer! + +********************* +Create an environment +********************* + +In short, an environment in Portainer represents a SOO mobile entity. + +* Select "environment" +* Click "+ Add environment" +* Select "Docker Standalone" --> click "Start Wizard" + * Select "API" + * Provide a name to the environment + * Set the API + port (default port is 2375) + * no TLS + +********************** +Create a SO3 container +********************** + +* Select the environment on which to create the container +* Select "Containers" --> click "+ Add container" + * Give a name at the container + * Provide the image name in image field (``/mnt/ME/.itb)`` + * Click on "Advanced mode" to select the "Simple mode" + * Disable "Always pull the image" button + * Click on "Deploy the container" + + +*************** +EMISO Container +*************** + +A simple container, called ``emiso_64`` has been created. It can be used as an +example of of SO3 container. It simply prints a message/log each second. + +* Compilation: + +.. code-block:: shell + + $ cd /ME + $ ./build.sh -k SOO.emiso_64 + +* Deployment: + +.. code-block:: shell + + ./deploy.sh -m SOO.emiso_64 diff --git a/linux/linux/arch/arm/configs/bbb_defconfig b/linux/linux/arch/arm/configs/bbb_defconfig new file mode 100644 index 0000000000..26f22c1eea --- /dev/null +++ b/linux/linux/arch/arm/configs/bbb_defconfig @@ -0,0 +1,5367 @@ +# +# Automatically generated file; DO NOT EDIT. +# Linux/arm 5.18.0-rc4 Kernel Configuration +# +CONFIG_CC_VERSION_TEXT="arm-linux-gnueabihf-gcc (GCC) 11.3.1 20220604 [releases/gcc-11 revision 591c0f4b92548e3ae2e8173f4f93984b1c7f62bb]" +CONFIG_CC_IS_GCC=y +CONFIG_GCC_VERSION=110301 +CONFIG_CLANG_VERSION=0 +CONFIG_AS_IS_GNU=y +CONFIG_AS_VERSION=20243822 +CONFIG_LD_IS_BFD=y +CONFIG_LD_VERSION=20243822 +CONFIG_LLD_VERSION=0 +CONFIG_CC_CAN_LINK=y +CONFIG_CC_CAN_LINK_STATIC=y +CONFIG_CC_HAS_ASM_GOTO=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y +CONFIG_CC_HAS_ASM_INLINE=y +CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y +CONFIG_PAHOLE_VERSION=0 +CONFIG_IRQ_WORK=y +CONFIG_BUILDTIME_TABLE_SORT=y +CONFIG_THREAD_INFO_IN_TASK=y + +# +# General setup +# +CONFIG_INIT_ENV_ARG_LIMIT=32 +# CONFIG_COMPILE_TEST is not set +# CONFIG_WERROR is not set +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_BUILD_SALT="" +CONFIG_HAVE_KERNEL_GZIP=y +CONFIG_HAVE_KERNEL_LZMA=y +CONFIG_HAVE_KERNEL_XZ=y +CONFIG_HAVE_KERNEL_LZO=y +CONFIG_HAVE_KERNEL_LZ4=y +CONFIG_KERNEL_GZIP=y +# CONFIG_KERNEL_LZMA is not set +# CONFIG_KERNEL_XZ is not set +# CONFIG_KERNEL_LZO is not set +# CONFIG_KERNEL_LZ4 is not set +CONFIG_DEFAULT_INIT="" +CONFIG_DEFAULT_HOSTNAME="(none)" +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_SYSVIPC_SYSCTL=y +# CONFIG_POSIX_MQUEUE is not set +# CONFIG_WATCH_QUEUE is not set +CONFIG_CROSS_MEMORY_ATTACH=y +# CONFIG_USELIB is not set +# CONFIG_AUDIT is not set +CONFIG_HAVE_ARCH_AUDITSYSCALL=y + +# +# IRQ subsystem +# +CONFIG_GENERIC_IRQ_PROBE=y +CONFIG_GENERIC_IRQ_SHOW=y +CONFIG_GENERIC_IRQ_SHOW_LEVEL=y +CONFIG_GENERIC_IRQ_EFFECTIVE_AFF_MASK=y +CONFIG_GENERIC_IRQ_MIGRATION=y +CONFIG_HARDIRQS_SW_RESEND=y +CONFIG_GENERIC_IRQ_CHIP=y +CONFIG_IRQ_DOMAIN=y +CONFIG_IRQ_DOMAIN_HIERARCHY=y +CONFIG_GENERIC_IRQ_IPI=y +CONFIG_IRQ_FORCED_THREADING=y +CONFIG_SPARSE_IRQ=y +# CONFIG_GENERIC_IRQ_DEBUGFS is not set +# end of IRQ subsystem + +CONFIG_GENERIC_IRQ_MULTI_HANDLER=y +CONFIG_GENERIC_TIME_VSYSCALL=y +CONFIG_GENERIC_CLOCKEVENTS=y +CONFIG_ARCH_HAS_TICK_BROADCAST=y +CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y + +# +# Timers subsystem +# +CONFIG_TICK_ONESHOT=y +CONFIG_NO_HZ_COMMON=y +# CONFIG_HZ_PERIODIC is not set +CONFIG_NO_HZ_IDLE=y +# CONFIG_NO_HZ_FULL is not set +CONFIG_NO_HZ=y +CONFIG_HIGH_RES_TIMERS=y +# end of Timers subsystem + +CONFIG_BPF=y +CONFIG_HAVE_EBPF_JIT=y + +# +# BPF subsystem +# +# CONFIG_BPF_SYSCALL is not set +# CONFIG_BPF_JIT is not set +# end of BPF subsystem + +CONFIG_PREEMPT_NONE_BUILD=y +CONFIG_PREEMPT_NONE=y +# CONFIG_PREEMPT_VOLUNTARY is not set +# CONFIG_PREEMPT is not set + +# +# CPU/Task time and stats accounting +# +CONFIG_TICK_CPU_ACCOUNTING=y +# CONFIG_VIRT_CPU_ACCOUNTING_GEN is not set +# CONFIG_IRQ_TIME_ACCOUNTING is not set +CONFIG_SCHED_THERMAL_PRESSURE=y +# CONFIG_BSD_PROCESS_ACCT is not set +# CONFIG_TASKSTATS is not set +# CONFIG_PSI is not set +# end of CPU/Task time and stats accounting + +CONFIG_CPU_ISOLATION=y + +# +# RCU Subsystem +# +CONFIG_TREE_RCU=y +# CONFIG_RCU_EXPERT is not set +CONFIG_SRCU=y +CONFIG_TREE_SRCU=y +CONFIG_RCU_STALL_COMMON=y +CONFIG_RCU_NEED_SEGCBLIST=y +# end of RCU Subsystem + +# CONFIG_IKCONFIG is not set +# CONFIG_IKHEADERS is not set +CONFIG_LOG_BUF_SHIFT=17 +CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 +CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 +# CONFIG_PRINTK_INDEX is not set +CONFIG_GENERIC_SCHED_CLOCK=y + +# +# Scheduler features +# +# CONFIG_UCLAMP_TASK is not set +# end of Scheduler features + +CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough=5" +CONFIG_CGROUPS=y +# CONFIG_MEMCG is not set +# CONFIG_BLK_CGROUP is not set +# CONFIG_CGROUP_SCHED is not set +# CONFIG_CGROUP_PIDS is not set +# CONFIG_CGROUP_RDMA is not set +# CONFIG_CGROUP_FREEZER is not set +# CONFIG_CPUSETS is not set +# CONFIG_CGROUP_DEVICE is not set +# CONFIG_CGROUP_CPUACCT is not set +# CONFIG_CGROUP_PERF is not set +# CONFIG_CGROUP_MISC is not set +# CONFIG_CGROUP_DEBUG is not set +# CONFIG_NAMESPACES is not set +# CONFIG_CHECKPOINT_RESTORE is not set +# CONFIG_SCHED_AUTOGROUP is not set +# CONFIG_SYSFS_DEPRECATED is not set +# CONFIG_RELAY is not set +CONFIG_BLK_DEV_INITRD=y +CONFIG_INITRAMFS_SOURCE="" +CONFIG_RD_GZIP=y +CONFIG_RD_BZIP2=y +CONFIG_RD_LZMA=y +CONFIG_RD_XZ=y +CONFIG_RD_LZO=y +CONFIG_RD_LZ4=y +CONFIG_RD_ZSTD=y +# CONFIG_BOOT_CONFIG is not set +CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y +# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set +CONFIG_LD_ORPHAN_WARN=y +CONFIG_SYSCTL=y +CONFIG_HAVE_UID16=y +CONFIG_EXPERT=y +CONFIG_UID16=y +CONFIG_MULTIUSER=y +# CONFIG_SGETMASK_SYSCALL is not set +CONFIG_SYSFS_SYSCALL=y +CONFIG_FHANDLE=y +CONFIG_POSIX_TIMERS=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_ELF_CORE=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_FUTEX_PI=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_AIO=y +CONFIG_IO_URING=y +CONFIG_ADVISE_SYSCALLS=y +CONFIG_MEMBARRIER=y +CONFIG_KALLSYMS=y +# CONFIG_KALLSYMS_ALL is not set +CONFIG_KALLSYMS_BASE_RELATIVE=y +# CONFIG_USERFAULTFD is not set +CONFIG_ARCH_HAS_MEMBARRIER_SYNC_CORE=y +CONFIG_KCMP=y +CONFIG_RSEQ=y +# CONFIG_DEBUG_RSEQ is not set +CONFIG_EMBEDDED=y +CONFIG_HAVE_PERF_EVENTS=y +CONFIG_PERF_USE_VMALLOC=y +# CONFIG_PC104 is not set + +# +# Kernel Performance Events And Counters +# +CONFIG_PERF_EVENTS=y +# CONFIG_DEBUG_PERF_USE_VMALLOC is not set +# end of Kernel Performance Events And Counters + +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLUB_DEBUG=y +CONFIG_COMPAT_BRK=y +# CONFIG_SLAB is not set +CONFIG_SLUB=y +# CONFIG_SLOB is not set +CONFIG_SLAB_MERGE_DEFAULT=y +# CONFIG_SLAB_FREELIST_RANDOM is not set +# CONFIG_SLAB_FREELIST_HARDENED is not set +# CONFIG_SHUFFLE_PAGE_ALLOCATOR is not set +CONFIG_SLUB_CPU_PARTIAL=y +# CONFIG_PROFILING is not set +CONFIG_TRACEPOINTS=y +# end of General setup + +CONFIG_ARM=y +CONFIG_ARM_HAS_GROUP_RELOCS=y +CONFIG_ARM_HAS_SG_CHAIN=y +CONFIG_SYS_SUPPORTS_APM_EMULATION=y +CONFIG_HAVE_PROC_CPU=y +CONFIG_NO_IOPORT_MAP=y +CONFIG_STACKTRACE_SUPPORT=y +CONFIG_LOCKDEP_SUPPORT=y +CONFIG_ARCH_HAS_BANDGAP=y +CONFIG_FIX_EARLYCON_MEM=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_ARCH_SUPPORTS_UPROBES=y +CONFIG_ARM_PATCH_PHYS_VIRT=y +CONFIG_GENERIC_BUG=y +CONFIG_PGTABLE_LEVELS=2 + +# +# System Type +# +CONFIG_MMU=y +CONFIG_ARCH_MMAP_RND_BITS_MIN=8 +CONFIG_ARCH_MMAP_RND_BITS_MAX=16 +CONFIG_ARCH_MULTIPLATFORM=y +# CONFIG_ARCH_EP93XX is not set +# CONFIG_ARCH_FOOTBRIDGE is not set +# CONFIG_ARCH_IOP32X is not set +# CONFIG_ARCH_IXP4XX is not set +# CONFIG_ARCH_DOVE is not set +# CONFIG_ARCH_PXA is not set +# CONFIG_ARCH_SA1100 is not set +# CONFIG_ARCH_S3C24XX is not set +# CONFIG_ARCH_OMAP1 is not set + +# +# Multiple platform selection +# + +# +# CPU Core family selection +# +# CONFIG_ARCH_MULTI_V6 is not set +CONFIG_ARCH_MULTI_V7=y +CONFIG_ARCH_MULTI_V6_V7=y +# end of Multiple platform selection + +# CONFIG_ARCH_VIRT is not set +# CONFIG_ARCH_AIROHA is not set +# CONFIG_ARCH_ACTIONS is not set +# CONFIG_ARCH_ALPINE is not set +# CONFIG_ARCH_ARTPEC is not set +# CONFIG_ARCH_ASPEED is not set +# CONFIG_ARCH_AT91 is not set +# CONFIG_ARCH_BCM is not set +# CONFIG_ARCH_BERLIN is not set +# CONFIG_ARCH_DIGICOLOR is not set +# CONFIG_ARCH_EXYNOS is not set +# CONFIG_ARCH_HIGHBANK is not set +# CONFIG_ARCH_HISI is not set +# CONFIG_ARCH_MXC is not set +# CONFIG_ARCH_KEYSTONE is not set +# CONFIG_ARCH_MEDIATEK is not set +# CONFIG_ARCH_MESON is not set +# CONFIG_ARCH_MILBEAUT is not set +# CONFIG_ARCH_MMP is not set +# CONFIG_ARCH_MSTARV7 is not set +# CONFIG_ARCH_MVEBU is not set +# CONFIG_ARCH_NPCM is not set +CONFIG_ARCH_OMAP=y + +# +# TI OMAP Common Features +# + +# +# OMAP Feature Selections +# +# CONFIG_POWER_AVS_OMAP is not set +# CONFIG_OMAP_RESET_CLOCKS is not set +CONFIG_OMAP_32K_TIMER=y +# CONFIG_OMAP3_L2_AUX_SECURE_SAVE_RESTORE is not set +# end of TI OMAP Common Features + +CONFIG_MACH_OMAP_GENERIC=y + +# +# TI OMAP/AM/DM/DRA Family +# +CONFIG_OMAP_HWMOD=y +CONFIG_ARCH_OMAP3=y +CONFIG_ARCH_OMAP4=y +CONFIG_SOC_OMAP5=y +CONFIG_SOC_AM33XX=y +CONFIG_SOC_AM43XX=y +CONFIG_SOC_DRA7XX=y +CONFIG_ARCH_OMAP2PLUS=y +CONFIG_OMAP_INTERCONNECT_BARRIER=y + +# +# TI OMAP2/3/4 Specific Features +# +CONFIG_ARCH_OMAP2PLUS_TYPICAL=y +CONFIG_SOC_HAS_OMAP2_SDRC=y +CONFIG_SOC_HAS_REALTIME_COUNTER=y +CONFIG_SOC_OMAP3430=y +CONFIG_SOC_TI81XX=y + +# +# OMAP Legacy Platform Data Board Type +# +# CONFIG_OMAP3_SDRC_AC_TIMING is not set +# end of TI OMAP2/3/4 Specific Features + +# CONFIG_OMAP5_ERRATA_801819 is not set +# end of TI OMAP/AM/DM/DRA Family + +# CONFIG_ARCH_QCOM is not set +# CONFIG_ARCH_RDA is not set +# CONFIG_ARCH_REALTEK is not set +# CONFIG_ARCH_REALVIEW is not set +# CONFIG_ARCH_ROCKCHIP is not set +# CONFIG_ARCH_S5PV210 is not set +# CONFIG_ARCH_RENESAS is not set +# CONFIG_ARCH_INTEL_SOCFPGA is not set +# CONFIG_PLAT_SPEAR is not set +# CONFIG_ARCH_STI is not set +# CONFIG_ARCH_STM32 is not set +# CONFIG_ARCH_SUNXI is not set +# CONFIG_ARCH_TEGRA is not set +# CONFIG_ARCH_UNIPHIER is not set +# CONFIG_ARCH_U8500 is not set +CONFIG_ARCH_VEXPRESS=y +CONFIG_ARCH_VEXPRESS_CORTEX_A5_A9_ERRATA=y +# CONFIG_ARCH_VEXPRESS_DCSCB is not set +CONFIG_ARCH_VEXPRESS_SPC=y +CONFIG_ARCH_VEXPRESS_TC2_PM=y +# CONFIG_ARCH_WM8850 is not set +# CONFIG_ARCH_ZYNQ is not set +CONFIG_PLAT_VERSATILE=y + +# +# Processor Type +# +CONFIG_CPU_V7=y +CONFIG_CPU_THUMB_CAPABLE=y +CONFIG_CPU_32v6K=y +CONFIG_CPU_32v7=y +CONFIG_CPU_ABRT_EV7=y +CONFIG_CPU_PABRT_V7=y +CONFIG_CPU_CACHE_V7=y +CONFIG_CPU_CACHE_VIPT=y +CONFIG_CPU_COPY_V6=y +CONFIG_CPU_TLB_V7=y +CONFIG_CPU_HAS_ASID=y +CONFIG_CPU_CP15=y +CONFIG_CPU_CP15_MMU=y + +# +# Processor Features +# +# CONFIG_ARM_LPAE is not set +CONFIG_ARM_THUMB=y +CONFIG_ARM_THUMBEE=y +CONFIG_ARM_VIRT_EXT=y +CONFIG_SWP_EMULATE=y +# CONFIG_CPU_BIG_ENDIAN is not set +# CONFIG_CPU_ICACHE_DISABLE is not set +# CONFIG_CPU_ICACHE_MISMATCH_WORKAROUND is not set +# CONFIG_CPU_BPREDICT_DISABLE is not set +CONFIG_CPU_SPECTRE=y +CONFIG_HARDEN_BRANCH_PREDICTOR=y +CONFIG_HARDEN_BRANCH_HISTORY=y +CONFIG_KUSER_HELPERS=y +CONFIG_VDSO=y +CONFIG_OUTER_CACHE=y +CONFIG_OUTER_CACHE_SYNC=y +CONFIG_MIGHT_HAVE_CACHE_L2X0=y +CONFIG_CACHE_L2X0=y +# CONFIG_CACHE_L2X0_PMU is not set +CONFIG_PL310_ERRATA_588369=y +CONFIG_PL310_ERRATA_727915=y +CONFIG_PL310_ERRATA_753970=y +CONFIG_PL310_ERRATA_769419=y +CONFIG_ARM_L1_CACHE_SHIFT_6=y +CONFIG_ARM_L1_CACHE_SHIFT=6 +CONFIG_ARM_DMA_MEM_BUFFERABLE=y +CONFIG_ARM_HEAVY_MB=y +CONFIG_ARCH_SUPPORTS_BIG_ENDIAN=y +CONFIG_DEBUG_ALIGN_RODATA=y +CONFIG_ARM_ERRATA_430973=y +CONFIG_ARM_ERRATA_643719=y +CONFIG_ARM_ERRATA_720789=y +CONFIG_ARM_ERRATA_754322=y +CONFIG_ARM_ERRATA_754327=y +CONFIG_ARM_ERRATA_764369=y +CONFIG_ARM_ERRATA_775420=y +CONFIG_ARM_ERRATA_798181=y +# CONFIG_ARM_ERRATA_773022 is not set +# CONFIG_ARM_ERRATA_818325_852422 is not set +# CONFIG_ARM_ERRATA_821420 is not set +# CONFIG_ARM_ERRATA_825619 is not set +# CONFIG_ARM_ERRATA_857271 is not set +# CONFIG_ARM_ERRATA_852421 is not set +# CONFIG_ARM_ERRATA_852423 is not set +# CONFIG_ARM_ERRATA_857272 is not set +# end of System Type + +# +# Bus support +# +CONFIG_ARM_ERRATA_814220=y +# end of Bus support + +# +# Kernel Features +# +CONFIG_HAVE_SMP=y +CONFIG_SMP=y +CONFIG_SMP_ON_UP=y +CONFIG_CURRENT_POINTER_IN_TPIDRURO=y +CONFIG_IRQSTACKS=y +CONFIG_ARM_CPU_TOPOLOGY=y +# CONFIG_SCHED_MC is not set +# CONFIG_SCHED_SMT is not set +CONFIG_HAVE_ARM_SCU=y +CONFIG_HAVE_ARM_ARCH_TIMER=y +CONFIG_HAVE_ARM_TWD=y +CONFIG_MCPM=y +# CONFIG_BIG_LITTLE is not set +CONFIG_VMSPLIT_3G=y +# CONFIG_VMSPLIT_3G_OPT is not set +# CONFIG_VMSPLIT_2G is not set +# CONFIG_VMSPLIT_1G is not set +CONFIG_PAGE_OFFSET=0xC0000000 +CONFIG_NR_CPUS=16 +CONFIG_HOTPLUG_CPU=y +CONFIG_ARM_PSCI=y +CONFIG_ARCH_NR_GPIO=512 +CONFIG_HZ_FIXED=0 +CONFIG_HZ_100=y +# CONFIG_HZ_200 is not set +# CONFIG_HZ_250 is not set +# CONFIG_HZ_300 is not set +# CONFIG_HZ_500 is not set +# CONFIG_HZ_1000 is not set +CONFIG_HZ=100 +CONFIG_SCHED_HRTICK=y +# CONFIG_THUMB2_KERNEL is not set +CONFIG_ARM_PATCH_IDIV=y +CONFIG_AEABI=y +# CONFIG_OABI_COMPAT is not set +CONFIG_ARCH_SELECT_MEMORY_MODEL=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_SPARSEMEM_ENABLE=y +CONFIG_HIGHMEM=y +CONFIG_HIGHPTE=y +CONFIG_CPU_SW_DOMAIN_PAN=y +CONFIG_HW_PERF_EVENTS=y +CONFIG_ARM_MODULE_PLTS=y +CONFIG_FORCE_MAX_ZONEORDER=12 +CONFIG_ALIGNMENT_TRAP=y +# CONFIG_UACCESS_WITH_MEMCPY is not set +# CONFIG_PARAVIRT is not set +# CONFIG_PARAVIRT_TIME_ACCOUNTING is not set +# CONFIG_XEN is not set +CONFIG_STACKPROTECTOR_PER_TASK=y +# end of Kernel Features + +# +# Boot options +# +CONFIG_USE_OF=y +CONFIG_ATAGS=y +# CONFIG_DEPRECATED_PARAM_STRUCT is not set +CONFIG_ZBOOT_ROM_TEXT=0x0 +CONFIG_ZBOOT_ROM_BSS=0x0 +CONFIG_ARM_APPENDED_DTB=y +CONFIG_ARM_ATAG_DTB_COMPAT=y +CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_FROM_BOOTLOADER=y +# CONFIG_ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEND is not set +CONFIG_CMDLINE="" +CONFIG_KEXEC=y +CONFIG_ATAGS_PROC=y +# CONFIG_CRASH_DUMP is not set +CONFIG_AUTO_ZRELADDR=y +CONFIG_EFI_STUB=y +CONFIG_EFI=y +CONFIG_DMI=y +# end of Boot options + +# +# CPU Power Management +# + +# +# CPU Frequency scaling +# +CONFIG_CPU_FREQ=y +CONFIG_CPU_FREQ_GOV_ATTR_SET=y +CONFIG_CPU_FREQ_GOV_COMMON=y +CONFIG_CPU_FREQ_STAT=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set +# CONFIG_CPU_FREQ_DEFAULT_GOV_SCHEDUTIL is not set +CONFIG_CPU_FREQ_GOV_PERFORMANCE=y +# CONFIG_CPU_FREQ_GOV_POWERSAVE is not set +# CONFIG_CPU_FREQ_GOV_USERSPACE is not set +CONFIG_CPU_FREQ_GOV_ONDEMAND=y +# CONFIG_CPU_FREQ_GOV_CONSERVATIVE is not set +CONFIG_CPU_FREQ_GOV_SCHEDUTIL=y + +# +# CPU frequency scaling drivers +# +CONFIG_CPUFREQ_DT=y +CONFIG_CPUFREQ_DT_PLATDEV=y +# CONFIG_ARM_VEXPRESS_SPC_CPUFREQ is not set +CONFIG_ARM_OMAP2PLUS_CPUFREQ=y +CONFIG_ARM_SCMI_CPUFREQ=y +CONFIG_ARM_TI_CPUFREQ=y +# end of CPU Frequency scaling + +# +# CPU Idle +# +CONFIG_CPU_IDLE=y +CONFIG_CPU_IDLE_MULTIPLE_DRIVERS=y +# CONFIG_CPU_IDLE_GOV_LADDER is not set +CONFIG_CPU_IDLE_GOV_MENU=y +# CONFIG_CPU_IDLE_GOV_TEO is not set +CONFIG_DT_IDLE_STATES=y +CONFIG_DT_IDLE_GENPD=y + +# +# ARM CPU Idle Drivers +# +CONFIG_ARM_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE=y +CONFIG_ARM_PSCI_CPUIDLE_DOMAIN=y +# CONFIG_ARM_BIG_LITTLE_CPUIDLE is not set +# CONFIG_ARM_HIGHBANK_CPUIDLE is not set +# end of ARM CPU Idle Drivers + +CONFIG_ARCH_NEEDS_CPU_IDLE_COUPLED=y +# end of CPU Idle +# end of CPU Power Management + +# +# Floating point emulation +# + +# +# At least one emulation must be selected +# +CONFIG_VFP=y +CONFIG_VFPv3=y +CONFIG_NEON=y +CONFIG_KERNEL_MODE_NEON=y +# end of Floating point emulation + +# +# Power management options +# +CONFIG_SUSPEND=y +CONFIG_SUSPEND_FREEZER=y +# CONFIG_SUSPEND_SKIP_SYNC is not set +# CONFIG_HIBERNATION is not set +CONFIG_PM_SLEEP=y +CONFIG_PM_SLEEP_SMP=y +# CONFIG_PM_AUTOSLEEP is not set +# CONFIG_PM_WAKELOCKS is not set +CONFIG_PM=y +# CONFIG_PM_DEBUG is not set +# CONFIG_APM_EMULATION is not set +CONFIG_PM_CLK=y +CONFIG_PM_GENERIC_DOMAINS=y +# CONFIG_WQ_POWER_EFFICIENT_DEFAULT is not set +CONFIG_PM_GENERIC_DOMAINS_SLEEP=y +CONFIG_PM_GENERIC_DOMAINS_OF=y +CONFIG_CPU_PM=y +# CONFIG_ENERGY_MODEL is not set +CONFIG_ARCH_SUSPEND_POSSIBLE=y +CONFIG_ARM_CPU_SUSPEND=y +CONFIG_ARCH_HIBERNATION_POSSIBLE=y +# end of Power management options + +CONFIG_ARM_CRYPTO=y +# CONFIG_CRYPTO_SHA1_ARM is not set +# CONFIG_CRYPTO_SHA1_ARM_NEON is not set +# CONFIG_CRYPTO_SHA1_ARM_CE is not set +# CONFIG_CRYPTO_SHA2_ARM_CE is not set +# CONFIG_CRYPTO_SHA256_ARM is not set +# CONFIG_CRYPTO_SHA512_ARM is not set +# CONFIG_CRYPTO_BLAKE2S_ARM is not set +# CONFIG_CRYPTO_BLAKE2B_NEON is not set +# CONFIG_CRYPTO_AES_ARM is not set +# CONFIG_CRYPTO_AES_ARM_BS is not set +# CONFIG_CRYPTO_AES_ARM_CE is not set +# CONFIG_CRYPTO_GHASH_ARM_CE is not set +# CONFIG_CRYPTO_CRC32_ARM_CE is not set +# CONFIG_CRYPTO_CHACHA20_NEON is not set +# CONFIG_CRYPTO_POLY1305_ARM is not set +# CONFIG_CRYPTO_NHPOLY1305_NEON is not set +# CONFIG_CRYPTO_CURVE25519_NEON is not set +CONFIG_AS_VFP_VMRS_FPINST=y + +# +# General architecture-dependent options +# +CONFIG_CRASH_CORE=y +CONFIG_KEXEC_CORE=y +# CONFIG_KPROBES is not set +# CONFIG_JUMP_LABEL is not set +CONFIG_UPROBES=y +CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y +CONFIG_ARCH_USE_BUILTIN_BSWAP=y +CONFIG_HAVE_KPROBES=y +CONFIG_HAVE_KRETPROBES=y +CONFIG_HAVE_OPTPROBES=y +CONFIG_HAVE_NMI=y +CONFIG_TRACE_IRQFLAGS_SUPPORT=y +CONFIG_HAVE_ARCH_TRACEHOOK=y +CONFIG_HAVE_DMA_CONTIGUOUS=y +CONFIG_GENERIC_SMP_IDLE_THREAD=y +CONFIG_GENERIC_IDLE_POLL_SETUP=y +CONFIG_ARCH_HAS_FORTIFY_SOURCE=y +CONFIG_ARCH_HAS_KEEPINITRD=y +CONFIG_ARCH_HAS_SET_MEMORY=y +CONFIG_HAVE_ARCH_THREAD_STRUCT_WHITELIST=y +CONFIG_ARCH_32BIT_OFF_T=y +CONFIG_HAVE_REGS_AND_STACK_ACCESS_API=y +CONFIG_HAVE_RSEQ=y +CONFIG_HAVE_HW_BREAKPOINT=y +CONFIG_HAVE_PERF_REGS=y +CONFIG_HAVE_PERF_USER_STACK_DUMP=y +CONFIG_HAVE_ARCH_JUMP_LABEL=y +CONFIG_ARCH_HAVE_NMI_SAFE_CMPXCHG=y +CONFIG_ARCH_WANT_IPC_PARSE_VERSION=y +CONFIG_HAVE_ARCH_SECCOMP=y +CONFIG_HAVE_ARCH_SECCOMP_FILTER=y +CONFIG_SECCOMP=y +CONFIG_SECCOMP_FILTER=y +# CONFIG_SECCOMP_CACHE_DEBUG is not set +CONFIG_HAVE_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR=y +CONFIG_STACKPROTECTOR_STRONG=y +CONFIG_LTO_NONE=y +CONFIG_HAVE_CONTEXT_TRACKING=y +CONFIG_HAVE_VIRT_CPU_ACCOUNTING_GEN=y +CONFIG_HAVE_IRQ_TIME_ACCOUNTING=y +CONFIG_HAVE_MOD_ARCH_SPECIFIC=y +CONFIG_MODULES_USE_ELF_REL=y +CONFIG_HAVE_IRQ_EXIT_ON_IRQ_STACK=y +CONFIG_HAVE_SOFTIRQ_ON_OWN_STACK=y +CONFIG_ARCH_HAS_ELF_RANDOMIZE=y +CONFIG_HAVE_ARCH_MMAP_RND_BITS=y +CONFIG_HAVE_EXIT_THREAD=y +CONFIG_ARCH_MMAP_RND_BITS=8 +CONFIG_PAGE_SIZE_LESS_THAN_64KB=y +CONFIG_PAGE_SIZE_LESS_THAN_256KB=y +CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT=y +CONFIG_CLONE_BACKWARDS=y +CONFIG_OLD_SIGSUSPEND3=y +CONFIG_OLD_SIGACTION=y +CONFIG_COMPAT_32BIT_TIME=y +CONFIG_HAVE_ARCH_VMAP_STACK=y +CONFIG_VMAP_STACK=y +CONFIG_ARCH_OPTIONAL_KERNEL_RWX=y +CONFIG_ARCH_OPTIONAL_KERNEL_RWX_DEFAULT=y +CONFIG_ARCH_HAS_STRICT_KERNEL_RWX=y +CONFIG_STRICT_KERNEL_RWX=y +CONFIG_ARCH_HAS_STRICT_MODULE_RWX=y +CONFIG_STRICT_MODULE_RWX=y +CONFIG_ARCH_HAS_PHYS_TO_DMA=y +# CONFIG_LOCK_EVENT_COUNTS is not set +CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y +CONFIG_HAVE_ARCH_PFN_VALID=y + +# +# GCOV-based kernel profiling +# +# CONFIG_GCOV_KERNEL is not set +CONFIG_ARCH_HAS_GCOV_PROFILE_ALL=y +# end of GCOV-based kernel profiling + +CONFIG_HAVE_GCC_PLUGINS=y +CONFIG_GCC_PLUGINS=y +# CONFIG_GCC_PLUGIN_LATENT_ENTROPY is not set +# CONFIG_GCC_PLUGIN_RANDSTRUCT is not set +CONFIG_GCC_PLUGIN_ARM_SSP_PER_TASK=y +# end of General architecture-dependent options + +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 +CONFIG_MODULES=y +# CONFIG_MODULE_FORCE_LOAD is not set +CONFIG_MODULE_UNLOAD=y +# CONFIG_MODULE_FORCE_UNLOAD is not set +# CONFIG_MODVERSIONS is not set +# CONFIG_MODULE_SRCVERSION_ALL is not set +# CONFIG_MODULE_SIG is not set +CONFIG_MODULE_COMPRESS_NONE=y +# CONFIG_MODULE_COMPRESS_GZIP is not set +# CONFIG_MODULE_COMPRESS_XZ is not set +# CONFIG_MODULE_COMPRESS_ZSTD is not set +# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set +CONFIG_MODPROBE_PATH="/sbin/modprobe" +# CONFIG_TRIM_UNUSED_KSYMS is not set +CONFIG_MODULES_TREE_LOOKUP=y +CONFIG_BLOCK=y +CONFIG_BLOCK_LEGACY_AUTOLOAD=y +CONFIG_BLK_DEV_BSG_COMMON=y +# CONFIG_BLK_DEV_BSGLIB is not set +# CONFIG_BLK_DEV_INTEGRITY is not set +# CONFIG_BLK_DEV_ZONED is not set +# CONFIG_BLK_WBT is not set +CONFIG_BLK_DEBUG_FS=y +# CONFIG_BLK_SED_OPAL is not set +# CONFIG_BLK_INLINE_ENCRYPTION is not set + +# +# Partition Types +# +CONFIG_PARTITION_ADVANCED=y +# CONFIG_ACORN_PARTITION is not set +# CONFIG_AIX_PARTITION is not set +# CONFIG_OSF_PARTITION is not set +# CONFIG_AMIGA_PARTITION is not set +# CONFIG_ATARI_PARTITION is not set +# CONFIG_MAC_PARTITION is not set +CONFIG_MSDOS_PARTITION=y +# CONFIG_BSD_DISKLABEL is not set +# CONFIG_MINIX_SUBPARTITION is not set +# CONFIG_SOLARIS_X86_PARTITION is not set +# CONFIG_UNIXWARE_DISKLABEL is not set +# CONFIG_LDM_PARTITION is not set +# CONFIG_SGI_PARTITION is not set +# CONFIG_ULTRIX_PARTITION is not set +# CONFIG_SUN_PARTITION is not set +# CONFIG_KARMA_PARTITION is not set +CONFIG_EFI_PARTITION=y +# CONFIG_SYSV68_PARTITION is not set +CONFIG_CMDLINE_PARTITION=y +# end of Partition Types + +CONFIG_BLK_MQ_VIRTIO=y +CONFIG_BLK_PM=y + +# +# IO Schedulers +# +CONFIG_MQ_IOSCHED_DEADLINE=y +CONFIG_MQ_IOSCHED_KYBER=y +# CONFIG_IOSCHED_BFQ is not set +# end of IO Schedulers + +CONFIG_ASN1=y +CONFIG_INLINE_SPIN_UNLOCK_IRQ=y +CONFIG_INLINE_READ_UNLOCK=y +CONFIG_INLINE_READ_UNLOCK_IRQ=y +CONFIG_INLINE_WRITE_UNLOCK=y +CONFIG_INLINE_WRITE_UNLOCK_IRQ=y +CONFIG_ARCH_SUPPORTS_ATOMIC_RMW=y +CONFIG_MUTEX_SPIN_ON_OWNER=y +CONFIG_RWSEM_SPIN_ON_OWNER=y +CONFIG_LOCK_SPIN_ON_OWNER=y +CONFIG_ARCH_HAS_NON_OVERLAPPING_ADDRESS_SPACE=y +CONFIG_FREEZER=y + +# +# Executable file formats +# +CONFIG_BINFMT_ELF=y +# CONFIG_BINFMT_ELF_FDPIC is not set +CONFIG_ELFCORE=y +CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS=y +CONFIG_BINFMT_SCRIPT=y +CONFIG_ARCH_HAS_BINFMT_FLAT=y +# CONFIG_BINFMT_FLAT is not set +CONFIG_BINFMT_FLAT_ARGVP_ENVP_ON_STACK=y +# CONFIG_BINFMT_MISC is not set +CONFIG_COREDUMP=y +# end of Executable file formats + +# +# Memory Management options +# +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +# CONFIG_SPARSEMEM_MANUAL is not set +CONFIG_FLATMEM=y +CONFIG_ARCH_KEEP_MEMBLOCK=y +CONFIG_MEMORY_ISOLATION=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_COMPACTION=y +# CONFIG_PAGE_REPORTING is not set +CONFIG_MIGRATION=y +CONFIG_CONTIG_ALLOC=y +CONFIG_BOUNCE=y +# CONFIG_KSM is not set +CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 +CONFIG_ARCH_WANT_GENERAL_HUGETLB=y +CONFIG_CMA=y +# CONFIG_CMA_DEBUG is not set +# CONFIG_CMA_DEBUGFS is not set +# CONFIG_CMA_SYSFS is not set +CONFIG_CMA_AREAS=7 +# CONFIG_ZSWAP is not set +# CONFIG_ZPOOL is not set +# CONFIG_ZSMALLOC is not set +CONFIG_GENERIC_EARLY_IOREMAP=y +# CONFIG_IDLE_PAGE_TRACKING is not set +CONFIG_ARCH_HAS_CURRENT_STACK_POINTER=y +# CONFIG_PERCPU_STATS is not set +# CONFIG_GUP_TEST is not set +CONFIG_KMAP_LOCAL=y +CONFIG_KMAP_LOCAL_NON_LINEAR_PTE_ARRAY=y +# CONFIG_ANON_VMA_NAME is not set + +# +# Data Access Monitoring +# +# CONFIG_DAMON is not set +# end of Data Access Monitoring +# end of Memory Management options + +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +# CONFIG_PACKET_DIAG is not set +CONFIG_UNIX=y +CONFIG_UNIX_SCM=y +CONFIG_AF_UNIX_OOB=y +# CONFIG_UNIX_DIAG is not set +# CONFIG_TLS is not set +# CONFIG_XFRM_USER is not set +# CONFIG_NET_KEY is not set +CONFIG_INET=y +# CONFIG_IP_MULTICAST is not set +# CONFIG_IP_ADVANCED_ROUTER is not set +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_IP_PNP_RARP=y +# CONFIG_NET_IPIP is not set +# CONFIG_NET_IPGRE_DEMUX is not set +CONFIG_NET_IP_TUNNEL=y +# CONFIG_SYN_COOKIES is not set +# CONFIG_NET_IPVTI is not set +# CONFIG_NET_FOU is not set +# CONFIG_NET_FOU_IP_TUNNELS is not set +# CONFIG_INET_AH is not set +# CONFIG_INET_ESP is not set +# CONFIG_INET_IPCOMP is not set +CONFIG_INET_TUNNEL=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +# CONFIG_INET_UDP_DIAG is not set +# CONFIG_INET_RAW_DIAG is not set +# CONFIG_INET_DIAG_DESTROY is not set +# CONFIG_TCP_CONG_ADVANCED is not set +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_TCP_MD5SIG is not set +CONFIG_IPV6=y +CONFIG_IPV6_ROUTER_PREF=y +# CONFIG_IPV6_ROUTE_INFO is not set +CONFIG_IPV6_OPTIMISTIC_DAD=y +# CONFIG_INET6_AH is not set +# CONFIG_INET6_ESP is not set +# CONFIG_INET6_IPCOMP is not set +# CONFIG_IPV6_MIP6 is not set +# CONFIG_IPV6_VTI is not set +CONFIG_IPV6_SIT=y +# CONFIG_IPV6_SIT_6RD is not set +CONFIG_IPV6_NDISC_NODETYPE=y +# CONFIG_IPV6_TUNNEL is not set +CONFIG_IPV6_MULTIPLE_TABLES=y +# CONFIG_IPV6_SUBTREES is not set +# CONFIG_IPV6_MROUTE is not set +# CONFIG_IPV6_SEG6_LWTUNNEL is not set +# CONFIG_IPV6_SEG6_HMAC is not set +# CONFIG_IPV6_RPL_LWTUNNEL is not set +# CONFIG_IPV6_IOAM6_LWTUNNEL is not set +# CONFIG_MPTCP is not set +# CONFIG_NETWORK_SECMARK is not set +CONFIG_NET_PTP_CLASSIFY=y +# CONFIG_NETWORK_PHY_TIMESTAMPING is not set +# CONFIG_NETFILTER is not set +# CONFIG_BPFILTER is not set +# CONFIG_IP_DCCP is not set +# CONFIG_IP_SCTP is not set +# CONFIG_RDS is not set +# CONFIG_TIPC is not set +# CONFIG_ATM is not set +# CONFIG_L2TP is not set +# CONFIG_BRIDGE is not set +# CONFIG_NET_DSA is not set +# CONFIG_VLAN_8021Q is not set +# CONFIG_DECNET is not set +# CONFIG_LLC2 is not set +# CONFIG_ATALK is not set +# CONFIG_X25 is not set +# CONFIG_LAPB is not set +# CONFIG_PHONET is not set +# CONFIG_6LOWPAN is not set +# CONFIG_IEEE802154 is not set +# CONFIG_NET_SCHED is not set +# CONFIG_DCB is not set +CONFIG_DNS_RESOLVER=y +# CONFIG_BATMAN_ADV is not set +# CONFIG_OPENVSWITCH is not set +# CONFIG_VSOCKETS is not set +# CONFIG_NETLINK_DIAG is not set +# CONFIG_MPLS is not set +# CONFIG_NET_NSH is not set +# CONFIG_HSR is not set +CONFIG_NET_SWITCHDEV=y +# CONFIG_NET_L3_MASTER_DEV is not set +# CONFIG_QRTR is not set +# CONFIG_NET_NCSI is not set +CONFIG_PCPU_DEV_REFCNT=y +CONFIG_RPS=y +CONFIG_RFS_ACCEL=y +CONFIG_SOCK_RX_QUEUE_MAPPING=y +CONFIG_XPS=y +# CONFIG_CGROUP_NET_PRIO is not set +# CONFIG_CGROUP_NET_CLASSID is not set +CONFIG_NET_RX_BUSY_POLL=y +CONFIG_BQL=y +CONFIG_NET_FLOW_LIMIT=y + +# +# Network testing +# +# CONFIG_NET_PKTGEN is not set +# CONFIG_NET_DROP_MONITOR is not set +# end of Network testing +# end of Networking options + +# CONFIG_HAMRADIO is not set +# CONFIG_CAN is not set +# CONFIG_BT is not set +# CONFIG_AF_RXRPC is not set +# CONFIG_AF_KCM is not set +# CONFIG_MCTP is not set +CONFIG_FIB_RULES=y +# CONFIG_WIRELESS is not set +# CONFIG_RFKILL is not set +# CONFIG_NET_9P is not set +# CONFIG_CAIF is not set +# CONFIG_CEPH_LIB is not set +# CONFIG_NFC is not set +# CONFIG_PSAMPLE is not set +# CONFIG_NET_IFE is not set +# CONFIG_LWTUNNEL is not set +CONFIG_DST_CACHE=y +CONFIG_GRO_CELLS=y +CONFIG_NET_SELFTESTS=y +CONFIG_NET_DEVLINK=y +CONFIG_PAGE_POOL=y +# CONFIG_PAGE_POOL_STATS is not set +CONFIG_FAILOVER=y +CONFIG_ETHTOOL_NETLINK=y + +# +# Device Drivers +# +CONFIG_ARM_AMBA=y +CONFIG_HAVE_PCI=y +# CONFIG_PCI is not set +# CONFIG_PCCARD is not set + +# +# Generic Driver Options +# +# CONFIG_UEVENT_HELPER is not set +CONFIG_DEVTMPFS=y +CONFIG_DEVTMPFS_MOUNT=y +# CONFIG_DEVTMPFS_SAFE is not set +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y + +# +# Firmware loader +# +CONFIG_FW_LOADER=y +CONFIG_EXTRA_FIRMWARE="" +# CONFIG_FW_LOADER_USER_HELPER is not set +# CONFIG_FW_LOADER_COMPRESS is not set +CONFIG_FW_CACHE=y +# end of Firmware loader + +CONFIG_WANT_DEV_COREDUMP=y +CONFIG_ALLOW_DEV_COREDUMP=y +CONFIG_DEV_COREDUMP=y +# CONFIG_DEBUG_DRIVER is not set +# CONFIG_DEBUG_DEVRES is not set +# CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set +# CONFIG_TEST_ASYNC_DRIVER_PROBE is not set +CONFIG_GENERIC_CPU_AUTOPROBE=y +CONFIG_GENERIC_CPU_VULNERABILITIES=y +CONFIG_SOC_BUS=y +CONFIG_REGMAP=y +CONFIG_REGMAP_I2C=y +CONFIG_REGMAP_SPI=y +CONFIG_REGMAP_MMIO=y +CONFIG_REGMAP_IRQ=y +CONFIG_DMA_SHARED_BUFFER=y +# CONFIG_DMA_FENCE_TRACE is not set +CONFIG_GENERIC_ARCH_TOPOLOGY=y +# end of Generic Driver Options + +# +# Bus devices +# +CONFIG_ARM_CCI=y +CONFIG_ARM_CCI400_COMMON=y +CONFIG_ARM_CCI400_PORT_CTRL=y +CONFIG_BRCMSTB_GISB_ARB=y +# CONFIG_MOXTET is not set +CONFIG_OMAP_INTERCONNECT=y +CONFIG_OMAP_OCP2SCP=y +CONFIG_TI_PWMSS=y +CONFIG_TI_SYSC=y +CONFIG_VEXPRESS_CONFIG=y +# CONFIG_MHI_BUS is not set +# end of Bus devices + +# CONFIG_CONNECTOR is not set + +# +# Firmware Drivers +# + +# +# ARM System Control and Management Interface Protocol +# +CONFIG_ARM_SCMI_PROTOCOL=y +CONFIG_ARM_SCMI_HAVE_TRANSPORT=y +CONFIG_ARM_SCMI_HAVE_SHMEM=y +CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y +CONFIG_ARM_SCMI_TRANSPORT_SMC=y +# CONFIG_ARM_SCMI_TRANSPORT_SMC_ATOMIC_ENABLE is not set +# CONFIG_ARM_SCMI_TRANSPORT_VIRTIO is not set +CONFIG_ARM_SCMI_POWER_DOMAIN=y +# end of ARM System Control and Management Interface Protocol + +# CONFIG_ARM_SCPI_PROTOCOL is not set +# CONFIG_FIRMWARE_MEMMAP is not set +CONFIG_DMIID=y +# CONFIG_DMI_SYSFS is not set +CONFIG_SYSFB=y +# CONFIG_SYSFB_SIMPLEFB is not set +CONFIG_TRUSTED_FOUNDATIONS=y +# CONFIG_GOOGLE_FIRMWARE is not set + +# +# EFI (Extensible Firmware Interface) Support +# +CONFIG_EFI_ESRT=y +CONFIG_EFI_VARS_PSTORE=y +# CONFIG_EFI_VARS_PSTORE_DEFAULT_DISABLE is not set +CONFIG_EFI_PARAMS_FROM_FDT=y +CONFIG_EFI_RUNTIME_WRAPPERS=y +CONFIG_EFI_GENERIC_STUB=y +CONFIG_EFI_ARMSTUB_DTB_LOADER=y +# CONFIG_EFI_GENERIC_STUB_INITRD_CMDLINE_LOADER is not set +# CONFIG_EFI_BOOTLOADER_CONTROL is not set +# CONFIG_EFI_CAPSULE_LOADER is not set +# CONFIG_EFI_TEST is not set +# CONFIG_RESET_ATTACK_MITIGATION is not set +# CONFIG_EFI_DISABLE_PCI_DMA is not set +# end of EFI (Extensible Firmware Interface) Support + +CONFIG_ARM_PSCI_FW=y +# CONFIG_ARM_PSCI_CHECKER is not set +CONFIG_HAVE_ARM_SMCCC=y +CONFIG_HAVE_ARM_SMCCC_DISCOVERY=y +CONFIG_ARM_SMCCC_SOC_ID=y + +# +# Tegra firmware driver +# +# end of Tegra firmware driver +# end of Firmware Drivers + +# CONFIG_GNSS is not set +CONFIG_MTD=y +# CONFIG_MTD_TESTS is not set + +# +# Partition parsers +# +# CONFIG_MTD_AR7_PARTS is not set +CONFIG_MTD_CMDLINE_PARTS=y +CONFIG_MTD_OF_PARTS=y +# CONFIG_MTD_AFS_PARTS is not set +# CONFIG_MTD_REDBOOT_PARTS is not set +# end of Partition parsers + +# +# User Modules And Translation Layers +# +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y + +# +# Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. +# +# CONFIG_FTL is not set +# CONFIG_NFTL is not set +# CONFIG_INFTL is not set +# CONFIG_RFD_FTL is not set +# CONFIG_SSFDC is not set +# CONFIG_SM_FTL is not set +# CONFIG_MTD_OOPS is not set +# CONFIG_MTD_SWAP is not set +# CONFIG_MTD_PARTITIONED_MASTER is not set + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +# CONFIG_MTD_JEDECPROBE is not set +CONFIG_MTD_GEN_PROBE=y +# CONFIG_MTD_CFI_ADV_OPTIONS is not set +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_MAP_BANK_WIDTH_2=y +CONFIG_MTD_MAP_BANK_WIDTH_4=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_I2=y +CONFIG_MTD_CFI_INTELEXT=y +# CONFIG_MTD_CFI_AMDSTD is not set +# CONFIG_MTD_CFI_STAA is not set +CONFIG_MTD_CFI_UTIL=y +# CONFIG_MTD_RAM is not set +# CONFIG_MTD_ROM is not set +# CONFIG_MTD_ABSENT is not set +# end of RAM/ROM/Flash chip drivers + +# +# Mapping drivers for chip access +# +# CONFIG_MTD_COMPLEX_MAPPINGS is not set +CONFIG_MTD_PHYSMAP=y +# CONFIG_MTD_PHYSMAP_COMPAT is not set +CONFIG_MTD_PHYSMAP_OF=y +# CONFIG_MTD_PHYSMAP_VERSATILE is not set +# CONFIG_MTD_PHYSMAP_GEMINI is not set +# CONFIG_MTD_PHYSMAP_IXP4XX is not set +# CONFIG_MTD_PLATRAM is not set +# end of Mapping drivers for chip access + +# +# Self-contained MTD device drivers +# +# CONFIG_MTD_DATAFLASH is not set +# CONFIG_MTD_MCHP23K256 is not set +# CONFIG_MTD_MCHP48L640 is not set +# CONFIG_MTD_SST25L is not set +# CONFIG_MTD_SLRAM is not set +# CONFIG_MTD_PHRAM is not set +# CONFIG_MTD_MTDRAM is not set +# CONFIG_MTD_BLOCK2MTD is not set + +# +# Disk-On-Chip Device Drivers +# +# CONFIG_MTD_DOCG3 is not set +# end of Self-contained MTD device drivers + +# +# NAND +# +CONFIG_MTD_NAND_CORE=y +# CONFIG_MTD_ONENAND is not set +CONFIG_MTD_RAW_NAND=y + +# +# Raw/parallel NAND flash controllers +# +CONFIG_MTD_NAND_DENALI=y +CONFIG_MTD_NAND_DENALI_DT=y +CONFIG_MTD_NAND_OMAP2=y +CONFIG_MTD_NAND_OMAP_BCH=y +CONFIG_MTD_NAND_OMAP_BCH_BUILD=y +CONFIG_MTD_NAND_BRCMNAND=y +# CONFIG_MTD_NAND_MXIC is not set +# CONFIG_MTD_NAND_GPIO is not set +# CONFIG_MTD_NAND_PLATFORM is not set +# CONFIG_MTD_NAND_CADENCE is not set +# CONFIG_MTD_NAND_ARASAN is not set +# CONFIG_MTD_NAND_INTEL_LGM is not set +CONFIG_MTD_NAND_PL35X=y + +# +# Misc +# +# CONFIG_MTD_NAND_NANDSIM is not set +# CONFIG_MTD_NAND_DISKONCHIP is not set +# CONFIG_MTD_SPI_NAND is not set + +# +# ECC engine support +# +CONFIG_MTD_NAND_ECC=y +CONFIG_MTD_NAND_ECC_SW_HAMMING=y +# CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set +# CONFIG_MTD_NAND_ECC_SW_BCH is not set +# CONFIG_MTD_NAND_ECC_MXIC is not set +# end of ECC engine support +# end of NAND + +# +# LPDDR & LPDDR2 PCM memory drivers +# +# CONFIG_MTD_LPDDR is not set +# CONFIG_MTD_LPDDR2_NVM is not set +# end of LPDDR & LPDDR2 PCM memory drivers + +CONFIG_MTD_SPI_NOR=y +CONFIG_MTD_SPI_NOR_USE_4K_SECTORS=y +# CONFIG_MTD_SPI_NOR_SWP_DISABLE is not set +CONFIG_MTD_SPI_NOR_SWP_DISABLE_ON_VOLATILE=y +# CONFIG_MTD_SPI_NOR_SWP_KEEP is not set +CONFIG_MTD_UBI=y +CONFIG_MTD_UBI_WL_THRESHOLD=4096 +CONFIG_MTD_UBI_BEB_LIMIT=20 +# CONFIG_MTD_UBI_FASTMAP is not set +# CONFIG_MTD_UBI_GLUEBI is not set +# CONFIG_MTD_UBI_BLOCK is not set +# CONFIG_MTD_HYPERBUS is not set +CONFIG_DTC=y +CONFIG_OF=y +# CONFIG_OF_UNITTEST is not set +CONFIG_OF_FLATTREE=y +CONFIG_OF_EARLY_FLATTREE=y +CONFIG_OF_KOBJ=y +CONFIG_OF_DYNAMIC=y +CONFIG_OF_ADDRESS=y +CONFIG_OF_IRQ=y +CONFIG_OF_RESERVED_MEM=y +CONFIG_OF_RESOLVE=y +CONFIG_OF_OVERLAY=y +CONFIG_ARCH_MIGHT_HAVE_PC_PARPORT=y +# CONFIG_PARPORT is not set +CONFIG_BLK_DEV=y +# CONFIG_BLK_DEV_NULL_BLK is not set +CONFIG_CDROM=y +CONFIG_BLK_DEV_LOOP=y +CONFIG_BLK_DEV_LOOP_MIN_COUNT=8 +# CONFIG_BLK_DEV_DRBD is not set +# CONFIG_BLK_DEV_NBD is not set +CONFIG_BLK_DEV_RAM=y +CONFIG_BLK_DEV_RAM_COUNT=16 +CONFIG_BLK_DEV_RAM_SIZE=65536 +# CONFIG_CDROM_PKTCDVD is not set +# CONFIG_ATA_OVER_ETH is not set +CONFIG_VIRTIO_BLK=y +# CONFIG_BLK_DEV_RBD is not set + +# +# NVME Support +# +# CONFIG_NVME_FC is not set +# CONFIG_NVME_TCP is not set +# CONFIG_NVME_TARGET is not set +# end of NVME Support + +# +# Misc devices +# +CONFIG_AD525X_DPOT=y +CONFIG_AD525X_DPOT_I2C=y +# CONFIG_AD525X_DPOT_SPI is not set +# CONFIG_DUMMY_IRQ is not set +CONFIG_ICS932S401=y +# CONFIG_ENCLOSURE_SERVICES is not set +# CONFIG_HI6421V600_IRQ is not set +CONFIG_APDS9802ALS=y +CONFIG_ISL29003=y +# CONFIG_ISL29020 is not set +# CONFIG_SENSORS_TSL2550 is not set +# CONFIG_SENSORS_BH1770 is not set +# CONFIG_SENSORS_APDS990X is not set +# CONFIG_HMC6352 is not set +# CONFIG_DS1682 is not set +# CONFIG_LATTICE_ECP3_CONFIG is not set +CONFIG_SRAM=y +CONFIG_SRAM_EXEC=y +# CONFIG_XILINX_SDFEC is not set +# CONFIG_HISI_HIKEY_USB is not set +# CONFIG_OPEN_DICE is not set +# CONFIG_C2PORT is not set + +# +# EEPROM support +# +CONFIG_EEPROM_AT24=y +# CONFIG_EEPROM_AT25 is not set +# CONFIG_EEPROM_LEGACY is not set +# CONFIG_EEPROM_MAX6875 is not set +CONFIG_EEPROM_93CX6=y +# CONFIG_EEPROM_93XX46 is not set +# CONFIG_EEPROM_IDT_89HPESX is not set +# CONFIG_EEPROM_EE1004 is not set +# end of EEPROM support + +# +# Texas Instruments shared transport line discipline +# +# CONFIG_TI_ST is not set +# end of Texas Instruments shared transport line discipline + +# CONFIG_SENSORS_LIS3_SPI is not set +# CONFIG_SENSORS_LIS3_I2C is not set +# CONFIG_ALTERA_STAPL is not set +# CONFIG_ECHO is not set +# CONFIG_MISC_RTSX_USB is not set +# CONFIG_PVPANIC is not set +# end of Misc devices + +# +# SCSI device support +# +CONFIG_SCSI_MOD=y +# CONFIG_RAID_ATTRS is not set +CONFIG_SCSI_COMMON=y +CONFIG_SCSI=y +CONFIG_SCSI_DMA=y +CONFIG_SCSI_PROC_FS=y + +# +# SCSI support type (disk, tape, CD-ROM) +# +CONFIG_BLK_DEV_SD=y +# CONFIG_CHR_DEV_ST is not set +CONFIG_BLK_DEV_SR=y +# CONFIG_CHR_DEV_SG is not set +CONFIG_BLK_DEV_BSG=y +# CONFIG_CHR_DEV_SCH is not set +# CONFIG_SCSI_CONSTANTS is not set +# CONFIG_SCSI_LOGGING is not set +# CONFIG_SCSI_SCAN_ASYNC is not set + +# +# SCSI Transports +# +# CONFIG_SCSI_SPI_ATTRS is not set +# CONFIG_SCSI_FC_ATTRS is not set +# CONFIG_SCSI_ISCSI_ATTRS is not set +# CONFIG_SCSI_SAS_ATTRS is not set +# CONFIG_SCSI_SAS_LIBSAS is not set +# CONFIG_SCSI_SRP_ATTRS is not set +# end of SCSI Transports + +CONFIG_SCSI_LOWLEVEL=y +# CONFIG_ISCSI_TCP is not set +# CONFIG_ISCSI_BOOT_SYSFS is not set +# CONFIG_SCSI_UFSHCD is not set +# CONFIG_SCSI_DEBUG is not set +# CONFIG_SCSI_VIRTIO is not set +# CONFIG_SCSI_DH is not set +# end of SCSI device support + +CONFIG_HAVE_PATA_PLATFORM=y +CONFIG_ATA=y +CONFIG_SATA_HOST=y +CONFIG_ATA_VERBOSE_ERROR=y +CONFIG_ATA_FORCE=y +CONFIG_SATA_PMP=y + +# +# Controllers with non-SFF native interface +# +CONFIG_SATA_AHCI_PLATFORM=y +CONFIG_AHCI_DM816=y +# CONFIG_AHCI_CEVA is not set +# CONFIG_AHCI_QORIQ is not set +CONFIG_ATA_SFF=y + +# +# SFF controllers with custom DMA interface +# +CONFIG_ATA_BMDMA=y + +# +# SATA SFF controllers with BMDMA +# +# CONFIG_SATA_DWC is not set + +# +# PATA SFF controllers with BMDMA +# + +# +# PIO-only SFF controllers +# +# CONFIG_PATA_PLATFORM is not set + +# +# Generic fallback / legacy drivers +# +# CONFIG_MD is not set +# CONFIG_TARGET_CORE is not set +CONFIG_NETDEVICES=y +CONFIG_MII=y +CONFIG_NET_CORE=y +# CONFIG_BONDING is not set +# CONFIG_DUMMY is not set +# CONFIG_WIREGUARD is not set +# CONFIG_EQUALIZER is not set +# CONFIG_NET_TEAM is not set +# CONFIG_MACVLAN is not set +# CONFIG_IPVLAN is not set +# CONFIG_VXLAN is not set +# CONFIG_GENEVE is not set +# CONFIG_BAREUDP is not set +# CONFIG_GTP is not set +# CONFIG_MACSEC is not set +# CONFIG_NETCONSOLE is not set +# CONFIG_TUN is not set +# CONFIG_TUN_VNET_CROSS_LE is not set +# CONFIG_VETH is not set +CONFIG_VIRTIO_NET=y +# CONFIG_NLMON is not set +CONFIG_ETHERNET=y +CONFIG_NET_VENDOR_ALACRITECH=y +# CONFIG_ALTERA_TSE is not set +CONFIG_NET_VENDOR_AMAZON=y +CONFIG_NET_VENDOR_AQUANTIA=y +CONFIG_NET_VENDOR_ARC=y +CONFIG_NET_VENDOR_ASIX=y +# CONFIG_SPI_AX88796C is not set +CONFIG_NET_VENDOR_BROADCOM=y +# CONFIG_B44 is not set +# CONFIG_BCMGENET is not set +# CONFIG_SYSTEMPORT is not set +CONFIG_NET_VENDOR_CADENCE=y +CONFIG_MACB=y +CONFIG_MACB_USE_HWSTAMP=y +CONFIG_NET_VENDOR_CAVIUM=y +CONFIG_NET_VENDOR_CIRRUS=y +# CONFIG_CS89x0_PLATFORM is not set +CONFIG_NET_VENDOR_CORTINA=y +# CONFIG_GEMINI_ETHERNET is not set +CONFIG_NET_VENDOR_DAVICOM=y +# CONFIG_DM9000 is not set +# CONFIG_DM9051 is not set +# CONFIG_DNET is not set +CONFIG_NET_VENDOR_ENGLEDER=y +# CONFIG_TSNEP is not set +CONFIG_NET_VENDOR_EZCHIP=y +# CONFIG_EZCHIP_NPS_MANAGEMENT_ENET is not set +CONFIG_NET_VENDOR_FARADAY=y +# CONFIG_FTMAC100 is not set +# CONFIG_FTGMAC100 is not set +CONFIG_NET_VENDOR_FUNGIBLE=y +CONFIG_NET_VENDOR_GOOGLE=y +CONFIG_NET_VENDOR_HISILICON=y +CONFIG_HIX5HD2_GMAC=y +# CONFIG_HISI_FEMAC is not set +# CONFIG_HIP04_ETH is not set +# CONFIG_HNS_DSAF is not set +# CONFIG_HNS_ENET is not set +CONFIG_NET_VENDOR_HUAWEI=y +CONFIG_NET_VENDOR_I825XX=y +CONFIG_NET_VENDOR_INTEL=y +CONFIG_NET_VENDOR_LITEX=y +# CONFIG_LITEX_LITEETH is not set +CONFIG_NET_VENDOR_MARVELL=y +CONFIG_MVMDIO=y +CONFIG_NET_VENDOR_MELLANOX=y +# CONFIG_MLXSW_CORE is not set +# CONFIG_MLXFW is not set +CONFIG_NET_VENDOR_MICREL=y +# CONFIG_KS8842 is not set +CONFIG_KS8851=y +# CONFIG_KS8851_MLL is not set +CONFIG_NET_VENDOR_MICROCHIP=y +# CONFIG_ENC28J60 is not set +# CONFIG_ENCX24J600 is not set +# CONFIG_LAN966X_SWITCH is not set +CONFIG_NET_VENDOR_MICROSEMI=y +# CONFIG_MSCC_OCELOT_SWITCH is not set +CONFIG_NET_VENDOR_MICROSOFT=y +CONFIG_NET_VENDOR_NI=y +# CONFIG_NI_XGE_MANAGEMENT_ENET is not set +CONFIG_NET_VENDOR_NATSEMI=y +CONFIG_NET_VENDOR_NETRONOME=y +CONFIG_NET_VENDOR_8390=y +# CONFIG_AX88796 is not set +# CONFIG_ETHOC is not set +CONFIG_NET_VENDOR_PENSANDO=y +CONFIG_NET_VENDOR_QUALCOMM=y +# CONFIG_QCA7000_SPI is not set +# CONFIG_QCA7000_UART is not set +# CONFIG_QCOM_EMAC is not set +# CONFIG_RMNET is not set +CONFIG_NET_VENDOR_RENESAS=y +CONFIG_NET_VENDOR_ROCKER=y +CONFIG_NET_VENDOR_SAMSUNG=y +# CONFIG_SXGBE_ETH is not set +CONFIG_NET_VENDOR_SEEQ=y +CONFIG_NET_VENDOR_SOLARFLARE=y +CONFIG_NET_VENDOR_SMSC=y +# CONFIG_SMC91X is not set +# CONFIG_SMC911X is not set +CONFIG_SMSC911X=y +CONFIG_NET_VENDOR_SOCIONEXT=y +CONFIG_NET_VENDOR_STMICRO=y +CONFIG_STMMAC_ETH=y +# CONFIG_STMMAC_SELFTESTS is not set +CONFIG_STMMAC_PLATFORM=y +CONFIG_DWMAC_DWC_QOS_ETH=y +CONFIG_DWMAC_GENERIC=y +# CONFIG_DWMAC_INTEL_PLAT is not set +CONFIG_NET_VENDOR_SYNOPSYS=y +# CONFIG_DWC_XLGMAC is not set +CONFIG_NET_VENDOR_TI=y +# CONFIG_TI_DAVINCI_EMAC is not set +CONFIG_TI_DAVINCI_MDIO=y +# CONFIG_TI_CPSW_PHY_SEL is not set +CONFIG_TI_CPSW=y +CONFIG_TI_CPSW_SWITCHDEV=y +CONFIG_TI_CPTS=y +CONFIG_NET_VENDOR_VERTEXCOM=y +# CONFIG_MSE102X is not set +CONFIG_NET_VENDOR_VIA=y +# CONFIG_VIA_VELOCITY is not set +CONFIG_NET_VENDOR_WIZNET=y +# CONFIG_WIZNET_W5100 is not set +# CONFIG_WIZNET_W5300 is not set +CONFIG_NET_VENDOR_XILINX=y +CONFIG_XILINX_EMACLITE=y +# CONFIG_XILINX_AXI_EMAC is not set +# CONFIG_XILINX_LL_TEMAC is not set +CONFIG_PHYLINK=y +CONFIG_PHYLIB=y +CONFIG_SWPHY=y +# CONFIG_LED_TRIGGER_PHY is not set +CONFIG_FIXED_PHY=y +# CONFIG_SFP is not set + +# +# MII PHY device drivers +# +# CONFIG_AMD_PHY is not set +# CONFIG_ADIN_PHY is not set +# CONFIG_AQUANTIA_PHY is not set +CONFIG_AX88796B_PHY=y +# CONFIG_BROADCOM_PHY is not set +# CONFIG_BCM54140_PHY is not set +# CONFIG_BCM7XXX_PHY is not set +# CONFIG_BCM84881_PHY is not set +# CONFIG_BCM87XX_PHY is not set +# CONFIG_CICADA_PHY is not set +# CONFIG_CORTINA_PHY is not set +# CONFIG_DAVICOM_PHY is not set +CONFIG_ICPLUS_PHY=y +# CONFIG_LXT_PHY is not set +# CONFIG_INTEL_XWAY_PHY is not set +# CONFIG_LSI_ET1011C_PHY is not set +CONFIG_MARVELL_PHY=y +# CONFIG_MARVELL_10G_PHY is not set +# CONFIG_MARVELL_88X2222_PHY is not set +# CONFIG_MAXLINEAR_GPHY is not set +# CONFIG_MEDIATEK_GE_PHY is not set +CONFIG_MICREL_PHY=y +# CONFIG_MICROCHIP_PHY is not set +# CONFIG_MICROCHIP_T1_PHY is not set +# CONFIG_MICROSEMI_PHY is not set +# CONFIG_MOTORCOMM_PHY is not set +# CONFIG_NATIONAL_PHY is not set +# CONFIG_NXP_C45_TJA11XX_PHY is not set +# CONFIG_NXP_TJA11XX_PHY is not set +CONFIG_AT803X_PHY=y +# CONFIG_QSEMI_PHY is not set +CONFIG_REALTEK_PHY=y +# CONFIG_RENESAS_PHY is not set +CONFIG_ROCKCHIP_PHY=y +CONFIG_SMSC_PHY=y +# CONFIG_STE10XP is not set +# CONFIG_TERANETICS_PHY is not set +# CONFIG_DP83822_PHY is not set +# CONFIG_DP83TC811_PHY is not set +# CONFIG_DP83848_PHY is not set +CONFIG_DP83867_PHY=y +# CONFIG_DP83869_PHY is not set +# CONFIG_VITESSE_PHY is not set +# CONFIG_XILINX_GMII2RGMII is not set +# CONFIG_MICREL_KS8995MA is not set +CONFIG_MDIO_DEVICE=y +CONFIG_MDIO_BUS=y +CONFIG_FWNODE_MDIO=y +CONFIG_OF_MDIO=y +CONFIG_MDIO_DEVRES=y +CONFIG_MDIO_BITBANG=y +# CONFIG_MDIO_BCM_UNIMAC is not set +# CONFIG_MDIO_GPIO is not set +# CONFIG_MDIO_HISI_FEMAC is not set +# CONFIG_MDIO_MVUSB is not set +# CONFIG_MDIO_MSCC_MIIM is not set +# CONFIG_MDIO_IPQ4019 is not set +# CONFIG_MDIO_IPQ8064 is not set + +# +# MDIO Multiplexers +# +# CONFIG_MDIO_BUS_MUX_GPIO is not set +# CONFIG_MDIO_BUS_MUX_MULTIPLEXER is not set +# CONFIG_MDIO_BUS_MUX_MMIOREG is not set + +# +# PCS device drivers +# +CONFIG_PCS_XPCS=y +# end of PCS device drivers + +# CONFIG_PPP is not set +# CONFIG_SLIP is not set +CONFIG_USB_NET_DRIVERS=y +# CONFIG_USB_CATC is not set +# CONFIG_USB_KAWETH is not set +CONFIG_USB_PEGASUS=y +# CONFIG_USB_RTL8150 is not set +# CONFIG_USB_RTL8152 is not set +# CONFIG_USB_LAN78XX is not set +CONFIG_USB_USBNET=y +CONFIG_USB_NET_AX8817X=y +CONFIG_USB_NET_AX88179_178A=y +CONFIG_USB_NET_CDCETHER=y +# CONFIG_USB_NET_CDC_EEM is not set +CONFIG_USB_NET_CDC_NCM=y +# CONFIG_USB_NET_HUAWEI_CDC_NCM is not set +# CONFIG_USB_NET_CDC_MBIM is not set +# CONFIG_USB_NET_DM9601 is not set +# CONFIG_USB_NET_SR9700 is not set +# CONFIG_USB_NET_SR9800 is not set +CONFIG_USB_NET_SMSC75XX=y +CONFIG_USB_NET_SMSC95XX=y +# CONFIG_USB_NET_GL620A is not set +CONFIG_USB_NET_NET1080=y +# CONFIG_USB_NET_PLUSB is not set +# CONFIG_USB_NET_MCS7830 is not set +# CONFIG_USB_NET_RNDIS_HOST is not set +CONFIG_USB_NET_CDC_SUBSET_ENABLE=y +CONFIG_USB_NET_CDC_SUBSET=y +# CONFIG_USB_ALI_M5632 is not set +# CONFIG_USB_AN2720 is not set +CONFIG_USB_BELKIN=y +CONFIG_USB_ARMLINUX=y +# CONFIG_USB_EPSON2888 is not set +# CONFIG_USB_KC2190 is not set +CONFIG_USB_NET_ZAURUS=y +# CONFIG_USB_NET_CX82310_ETH is not set +# CONFIG_USB_NET_KALMIA is not set +# CONFIG_USB_NET_QMI_WWAN is not set +# CONFIG_USB_NET_INT51X1 is not set +# CONFIG_USB_IPHETH is not set +# CONFIG_USB_SIERRA_NET is not set +# CONFIG_USB_VL600 is not set +# CONFIG_USB_NET_CH9200 is not set +# CONFIG_USB_NET_AQC111 is not set +# CONFIG_USB_RTL8153_ECM is not set +# CONFIG_WLAN is not set +# CONFIG_WAN is not set + +# +# Wireless WAN +# +# CONFIG_WWAN is not set +# end of Wireless WAN + +# CONFIG_NETDEVSIM is not set +CONFIG_NET_FAILOVER=y +# CONFIG_ISDN is not set + +# +# Input device support +# +CONFIG_INPUT=y +CONFIG_INPUT_LEDS=y +# CONFIG_INPUT_FF_MEMLESS is not set +# CONFIG_INPUT_SPARSEKMAP is not set +CONFIG_INPUT_MATRIXKMAP=y +CONFIG_INPUT_VIVALDIFMAP=y + +# +# Userland interfaces +# +# CONFIG_INPUT_MOUSEDEV is not set +CONFIG_INPUT_JOYDEV=y +CONFIG_INPUT_EVDEV=y +# CONFIG_INPUT_EVBUG is not set + +# +# Input Device Drivers +# +CONFIG_INPUT_KEYBOARD=y +# CONFIG_KEYBOARD_ADC is not set +# CONFIG_KEYBOARD_ADP5588 is not set +# CONFIG_KEYBOARD_ADP5589 is not set +CONFIG_KEYBOARD_ATKBD=y +# CONFIG_KEYBOARD_QT1050 is not set +# CONFIG_KEYBOARD_QT1070 is not set +# CONFIG_KEYBOARD_QT2160 is not set +# CONFIG_KEYBOARD_DLINK_DIR685 is not set +# CONFIG_KEYBOARD_LKKBD is not set +CONFIG_KEYBOARD_GPIO=y +# CONFIG_KEYBOARD_GPIO_POLLED is not set +# CONFIG_KEYBOARD_TCA6416 is not set +# CONFIG_KEYBOARD_TCA8418 is not set +# CONFIG_KEYBOARD_MATRIX is not set +# CONFIG_KEYBOARD_LM8323 is not set +# CONFIG_KEYBOARD_LM8333 is not set +# CONFIG_KEYBOARD_MAX7359 is not set +# CONFIG_KEYBOARD_MCS is not set +# CONFIG_KEYBOARD_MPR121 is not set +# CONFIG_KEYBOARD_NEWTON is not set +# CONFIG_KEYBOARD_OPENCORES is not set +# CONFIG_KEYBOARD_PMIC8XXX is not set +# CONFIG_KEYBOARD_SAMSUNG is not set +# CONFIG_KEYBOARD_STOWAWAY is not set +# CONFIG_KEYBOARD_SUNKBD is not set +# CONFIG_KEYBOARD_STMPE is not set +# CONFIG_KEYBOARD_OMAP4 is not set +# CONFIG_KEYBOARD_TM2_TOUCHKEY is not set +# CONFIG_KEYBOARD_TWL4030 is not set +# CONFIG_KEYBOARD_XTKBD is not set +# CONFIG_KEYBOARD_CAP11XX is not set +CONFIG_KEYBOARD_BCM=y +# CONFIG_KEYBOARD_CYPRESS_SF is not set +# CONFIG_INPUT_MOUSE is not set +# CONFIG_INPUT_JOYSTICK is not set +# CONFIG_INPUT_TABLET is not set +# CONFIG_INPUT_TOUCHSCREEN is not set +CONFIG_INPUT_MISC=y +# CONFIG_INPUT_AD714X is not set +# CONFIG_INPUT_ATMEL_CAPTOUCH is not set +# CONFIG_INPUT_BMA150 is not set +# CONFIG_INPUT_E3X0_BUTTON is not set +# CONFIG_INPUT_PM8XXX_VIBRATOR is not set +# CONFIG_INPUT_PMIC8XXX_PWRKEY is not set +# CONFIG_INPUT_MAX8997_HAPTIC is not set +# CONFIG_INPUT_MMA8450 is not set +# CONFIG_INPUT_GPIO_BEEPER is not set +# CONFIG_INPUT_GPIO_DECODER is not set +# CONFIG_INPUT_GPIO_VIBRA is not set +# CONFIG_INPUT_CPCAP_PWRBUTTON is not set +# CONFIG_INPUT_ATI_REMOTE2 is not set +# CONFIG_INPUT_KEYSPAN_REMOTE is not set +# CONFIG_INPUT_KXTJ9 is not set +# CONFIG_INPUT_POWERMATE is not set +# CONFIG_INPUT_YEALINK is not set +# CONFIG_INPUT_CM109 is not set +# CONFIG_INPUT_REGULATOR_HAPTIC is not set +# CONFIG_INPUT_TPS65218_PWRBUTTON is not set +# CONFIG_INPUT_AXP20X_PEK is not set +# CONFIG_INPUT_TWL4030_PWRBUTTON is not set +# CONFIG_INPUT_TWL4030_VIBRA is not set +# CONFIG_INPUT_UINPUT is not set +# CONFIG_INPUT_PALMAS_PWRBUTTON is not set +# CONFIG_INPUT_PCF8574 is not set +# CONFIG_INPUT_PWM_BEEPER is not set +# CONFIG_INPUT_PWM_VIBRA is not set +# CONFIG_INPUT_RK805_PWRKEY is not set +# CONFIG_INPUT_GPIO_ROTARY_ENCODER is not set +# CONFIG_INPUT_DA7280_HAPTICS is not set +# CONFIG_INPUT_ADXL34X is not set +# CONFIG_INPUT_IMS_PCU is not set +# CONFIG_INPUT_IQS269A is not set +# CONFIG_INPUT_IQS626A is not set +# CONFIG_INPUT_CMA3000 is not set +# CONFIG_INPUT_DRV260X_HAPTICS is not set +# CONFIG_INPUT_DRV2665_HAPTICS is not set +# CONFIG_INPUT_DRV2667_HAPTICS is not set +CONFIG_INPUT_STPMIC1_ONKEY=y +# CONFIG_RMI4_CORE is not set + +# +# Hardware I/O ports +# +CONFIG_SERIO=y +CONFIG_SERIO_SERPORT=y +CONFIG_SERIO_AMBAKMI=y +CONFIG_SERIO_LIBPS2=y +# CONFIG_SERIO_RAW is not set +# CONFIG_SERIO_ALTERA_PS2 is not set +# CONFIG_SERIO_PS2MULT is not set +# CONFIG_SERIO_ARC_PS2 is not set +# CONFIG_SERIO_APBPS2 is not set +# CONFIG_SERIO_GPIO_PS2 is not set +# CONFIG_USERIO is not set +# CONFIG_GAMEPORT is not set +# end of Hardware I/O ports +# end of Input device support + +# +# Character devices +# +CONFIG_TTY=y +CONFIG_VT=y +CONFIG_CONSOLE_TRANSLATIONS=y +CONFIG_VT_CONSOLE=y +CONFIG_VT_CONSOLE_SLEEP=y +CONFIG_HW_CONSOLE=y +CONFIG_VT_HW_CONSOLE_BINDING=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 +CONFIG_LDISC_AUTOLOAD=y + +# +# Serial drivers +# +CONFIG_SERIAL_EARLYCON=y +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_DEPRECATED_OPTIONS=y +CONFIG_SERIAL_8250_16550A_VARIANTS=y +# CONFIG_SERIAL_8250_FINTEK is not set +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_DMA=y +CONFIG_SERIAL_8250_NR_UARTS=5 +CONFIG_SERIAL_8250_RUNTIME_UARTS=5 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_MANY_PORTS=y +# CONFIG_SERIAL_8250_ASPEED_VUART is not set +CONFIG_SERIAL_8250_SHARE_IRQ=y +# CONFIG_SERIAL_8250_DETECT_IRQ is not set +# CONFIG_SERIAL_8250_RSA is not set +CONFIG_SERIAL_8250_DWLIB=y +CONFIG_SERIAL_8250_FSL=y +CONFIG_SERIAL_8250_DW=y +# CONFIG_SERIAL_8250_RT288X is not set +CONFIG_SERIAL_8250_OMAP=y +CONFIG_SERIAL_8250_OMAP_TTYO_FIXUP=y +CONFIG_SERIAL_OF_PLATFORM=y + +# +# Non-8250 serial port support +# +# CONFIG_SERIAL_AMBA_PL010 is not set +CONFIG_SERIAL_AMBA_PL011=y +CONFIG_SERIAL_AMBA_PL011_CONSOLE=y +# CONFIG_SERIAL_EARLYCON_ARM_SEMIHOST is not set +# CONFIG_SERIAL_MAX3100 is not set +# CONFIG_SERIAL_MAX310X is not set +# CONFIG_SERIAL_UARTLITE is not set +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +# CONFIG_SERIAL_SIFIVE is not set +# CONFIG_SERIAL_SCCNXP is not set +# CONFIG_SERIAL_SC16IS7XX is not set +# CONFIG_SERIAL_ALTERA_JTAGUART is not set +# CONFIG_SERIAL_ALTERA_UART is not set +CONFIG_SERIAL_XILINX_PS_UART=y +CONFIG_SERIAL_XILINX_PS_UART_CONSOLE=y +# CONFIG_SERIAL_ARC is not set +CONFIG_SERIAL_FSL_LPUART=y +CONFIG_SERIAL_FSL_LPUART_CONSOLE=y +# CONFIG_SERIAL_FSL_LINFLEXUART is not set +CONFIG_SERIAL_CONEXANT_DIGICOLOR=y +CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y +CONFIG_SERIAL_ST_ASC=y +CONFIG_SERIAL_ST_ASC_CONSOLE=y +# CONFIG_SERIAL_SPRD is not set +# end of Serial drivers + +CONFIG_SERIAL_MCTRL_GPIO=y +# CONFIG_SERIAL_NONSTANDARD is not set +# CONFIG_N_GSM is not set +# CONFIG_NULL_TTY is not set +CONFIG_HVC_DRIVER=y +# CONFIG_HVC_DCC is not set +CONFIG_SERIAL_DEV_BUS=y +CONFIG_SERIAL_DEV_CTRL_TTYPORT=y +# CONFIG_TTY_PRINTK is not set +CONFIG_VIRTIO_CONSOLE=y +# CONFIG_IPMI_HANDLER is not set +# CONFIG_IPMB_DEVICE_INTERFACE is not set +CONFIG_HW_RANDOM=y +# CONFIG_HW_RANDOM_TIMERIOMEM is not set +# CONFIG_HW_RANDOM_BA431 is not set +CONFIG_HW_RANDOM_OMAP=y +CONFIG_HW_RANDOM_OMAP3_ROM=y +# CONFIG_HW_RANDOM_VIRTIO is not set +# CONFIG_HW_RANDOM_CCTRNG is not set +# CONFIG_HW_RANDOM_XIPHERA is not set +CONFIG_HW_RANDOM_ARM_SMCCC_TRNG=y +CONFIG_DEVMEM=y +# CONFIG_TCG_TPM is not set +# CONFIG_XILLYBUS is not set +# CONFIG_XILLYUSB is not set +# CONFIG_RANDOM_TRUST_BOOTLOADER is not set +# end of Character devices + +# +# I2C support +# +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_COMPAT=y +CONFIG_I2C_CHARDEV=y +CONFIG_I2C_MUX=y + +# +# Multiplexer I2C Chip support +# +# CONFIG_I2C_ARB_GPIO_CHALLENGE is not set +CONFIG_I2C_MUX_GPIO=y +# CONFIG_I2C_MUX_GPMUX is not set +# CONFIG_I2C_MUX_LTC4306 is not set +# CONFIG_I2C_MUX_PCA9541 is not set +CONFIG_I2C_MUX_PCA954x=y +CONFIG_I2C_MUX_PINCTRL=y +# CONFIG_I2C_MUX_REG is not set +CONFIG_I2C_DEMUX_PINCTRL=y +# CONFIG_I2C_MUX_MLXCPLD is not set +# end of Multiplexer I2C Chip support + +CONFIG_I2C_HELPER_AUTO=y +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# + +# +# I2C system bus drivers (mostly embedded / system-on-chip) +# +# CONFIG_I2C_CBUS_GPIO is not set +CONFIG_I2C_DESIGNWARE_CORE=y +# CONFIG_I2C_DESIGNWARE_SLAVE is not set +CONFIG_I2C_DESIGNWARE_PLATFORM=y +# CONFIG_I2C_EMEV2 is not set +# CONFIG_I2C_GPIO is not set +CONFIG_I2C_NOMADIK=y +# CONFIG_I2C_OCORES is not set +CONFIG_I2C_OMAP=y +# CONFIG_I2C_PCA_PLATFORM is not set +CONFIG_I2C_RK3X=y +# CONFIG_I2C_SIMTEC is not set +# CONFIG_I2C_VERSATILE is not set +CONFIG_I2C_XILINX=y + +# +# External I2C/SMBus adapter drivers +# +# CONFIG_I2C_DIOLAN_U2C is not set +# CONFIG_I2C_CP2615 is not set +# CONFIG_I2C_ROBOTFUZZ_OSIF is not set +# CONFIG_I2C_TAOS_EVM is not set +# CONFIG_I2C_TINY_USB is not set + +# +# Other I2C/SMBus bus drivers +# +# CONFIG_I2C_VIRTIO is not set +# end of I2C Hardware Bus support + +# CONFIG_I2C_STUB is not set +CONFIG_I2C_SLAVE=y +CONFIG_I2C_SLAVE_EEPROM=y +# CONFIG_I2C_SLAVE_TESTUNIT is not set +# CONFIG_I2C_DEBUG_CORE is not set +# CONFIG_I2C_DEBUG_ALGO is not set +# CONFIG_I2C_DEBUG_BUS is not set +# end of I2C support + +# CONFIG_I3C is not set +CONFIG_SPI=y +CONFIG_SPI_DEBUG=y +CONFIG_SPI_MASTER=y +CONFIG_SPI_MEM=y + +# +# SPI Master Controller Drivers +# +# CONFIG_SPI_ALTERA is not set +# CONFIG_SPI_AXI_SPI_ENGINE is not set +CONFIG_SPI_BITBANG=y +CONFIG_SPI_CADENCE=y +# CONFIG_SPI_CADENCE_QUADSPI is not set +# CONFIG_SPI_CADENCE_XSPI is not set +# CONFIG_SPI_DESIGNWARE is not set +# CONFIG_SPI_NXP_FLEXSPI is not set +# CONFIG_SPI_GPIO is not set +# CONFIG_SPI_FSL_SPI is not set +# CONFIG_SPI_OC_TINY is not set +CONFIG_SPI_OMAP24XX=y +# CONFIG_SPI_TI_QSPI is not set +CONFIG_SPI_PL022=y +# CONFIG_SPI_ROCKCHIP is not set +# CONFIG_SPI_SC18IS602 is not set +# CONFIG_SPI_SIFIVE is not set +# CONFIG_SPI_MXIC is not set +# CONFIG_SPI_XCOMM is not set +CONFIG_SPI_XILINX=y +# CONFIG_SPI_ZYNQMP_GQSPI is not set +# CONFIG_SPI_AMD is not set + +# +# SPI Multiplexer support +# +# CONFIG_SPI_MUX is not set + +# +# SPI Protocol Masters +# +CONFIG_SPI_SPIDEV=y +# CONFIG_SPI_LOOPBACK_TEST is not set +# CONFIG_SPI_TLE62X0 is not set +CONFIG_SPI_SLAVE=y +# CONFIG_SPI_SLAVE_TIME is not set +# CONFIG_SPI_SLAVE_SYSTEM_CONTROL is not set +CONFIG_SPI_DYNAMIC=y +CONFIG_SPMI=y +# CONFIG_SPMI_HISI3670 is not set +# CONFIG_HSI is not set +CONFIG_PPS=y +# CONFIG_PPS_DEBUG is not set + +# +# PPS clients support +# +# CONFIG_PPS_CLIENT_KTIMER is not set +# CONFIG_PPS_CLIENT_LDISC is not set +# CONFIG_PPS_CLIENT_GPIO is not set + +# +# PPS generators support +# + +# +# PTP clock support +# +CONFIG_PTP_1588_CLOCK=y +CONFIG_PTP_1588_CLOCK_OPTIONAL=y + +# +# Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. +# +CONFIG_PTP_1588_CLOCK_KVM=y +# CONFIG_PTP_1588_CLOCK_IDT82P33 is not set +# CONFIG_PTP_1588_CLOCK_IDTCM is not set +# end of PTP clock support + +CONFIG_PINCTRL=y +CONFIG_GENERIC_PINCTRL_GROUPS=y +CONFIG_PINMUX=y +CONFIG_GENERIC_PINMUX_FUNCTIONS=y +CONFIG_PINCONF=y +CONFIG_GENERIC_PINCONF=y +# CONFIG_DEBUG_PINCTRL is not set +CONFIG_PINCTRL_AS3722=y +# CONFIG_PINCTRL_AXP209 is not set +# CONFIG_PINCTRL_MCP23S08 is not set +# CONFIG_PINCTRL_MICROCHIP_SGPIO is not set +# CONFIG_PINCTRL_OCELOT is not set +CONFIG_PINCTRL_PALMAS=y +# CONFIG_PINCTRL_RK805 is not set +CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_STMFX=y +# CONFIG_PINCTRL_SX150X is not set + +# +# Renesas pinctrl drivers +# +# end of Renesas pinctrl drivers + +CONFIG_PINCTRL_TI_IODELAY=y +CONFIG_ARCH_HAVE_CUSTOM_GPIO_H=y +CONFIG_GPIOLIB=y +CONFIG_GPIOLIB_FASTPATH_LIMIT=512 +CONFIG_OF_GPIO=y +CONFIG_GPIOLIB_IRQCHIP=y +# CONFIG_DEBUG_GPIO is not set +# CONFIG_GPIO_SYSFS is not set +CONFIG_GPIO_CDEV=y +CONFIG_GPIO_CDEV_V1=y +CONFIG_GPIO_GENERIC=y + +# +# Memory mapped GPIO drivers +# +# CONFIG_GPIO_74XX_MMIO is not set +# CONFIG_GPIO_ALTERA is not set +# CONFIG_GPIO_CADENCE is not set +CONFIG_GPIO_DWAPB=y +# CONFIG_GPIO_FTGPIO010 is not set +CONFIG_GPIO_GENERIC_PLATFORM=y +# CONFIG_GPIO_GRGPIO is not set +# CONFIG_GPIO_HLWD is not set +# CONFIG_GPIO_LOGICVC is not set +# CONFIG_GPIO_MB86S7X is not set +# CONFIG_GPIO_MPC8XXX is not set +CONFIG_GPIO_OMAP=y +CONFIG_GPIO_PL061=y +# CONFIG_GPIO_SAMA5D2_PIOBU is not set +# CONFIG_GPIO_SIFIVE is not set +CONFIG_GPIO_SYSCON=y +CONFIG_GPIO_XILINX=y +# CONFIG_GPIO_ZEVIO is not set +# CONFIG_GPIO_AMD_FCH is not set +# end of Memory mapped GPIO drivers + +# +# I2C GPIO expanders +# +# CONFIG_GPIO_ADP5588 is not set +# CONFIG_GPIO_ADNP is not set +# CONFIG_GPIO_GW_PLD is not set +# CONFIG_GPIO_MAX7300 is not set +# CONFIG_GPIO_MAX732X is not set +CONFIG_GPIO_PCA953X=y +CONFIG_GPIO_PCA953X_IRQ=y +# CONFIG_GPIO_PCA9570 is not set +CONFIG_GPIO_PCF857X=y +# CONFIG_GPIO_TPIC2810 is not set +# end of I2C GPIO expanders + +# +# MFD GPIO expanders +# +# CONFIG_HTC_EGPIO is not set +CONFIG_GPIO_PALMAS=y +# CONFIG_GPIO_STMPE is not set +# CONFIG_GPIO_TPS65218 is not set +CONFIG_GPIO_TPS6586X=y +CONFIG_GPIO_TPS65910=y +CONFIG_GPIO_TWL4030=y +# end of MFD GPIO expanders + +# +# SPI GPIO expanders +# +# CONFIG_GPIO_74X164 is not set +# CONFIG_GPIO_MAX3191X is not set +# CONFIG_GPIO_MAX7301 is not set +# CONFIG_GPIO_MC33880 is not set +# CONFIG_GPIO_PISOSR is not set +# CONFIG_GPIO_XRA1403 is not set +# end of SPI GPIO expanders + +# +# USB GPIO expanders +# +# end of USB GPIO expanders + +# +# Virtual GPIO drivers +# +# CONFIG_GPIO_AGGREGATOR is not set +# CONFIG_GPIO_MOCKUP is not set +# CONFIG_GPIO_VIRTIO is not set +# CONFIG_GPIO_SIM is not set +# end of Virtual GPIO drivers + +# CONFIG_W1 is not set +CONFIG_POWER_RESET=y +CONFIG_POWER_RESET_AS3722=y +CONFIG_POWER_RESET_BRCMKONA=y +CONFIG_POWER_RESET_BRCMSTB=y +CONFIG_POWER_RESET_GPIO=y +CONFIG_POWER_RESET_GPIO_RESTART=y +# CONFIG_POWER_RESET_LTC2952 is not set +# CONFIG_POWER_RESET_REGULATOR is not set +# CONFIG_POWER_RESET_RESTART is not set +# CONFIG_POWER_RESET_VERSATILE is not set +CONFIG_POWER_RESET_VEXPRESS=y +CONFIG_POWER_RESET_SYSCON=y +CONFIG_POWER_RESET_SYSCON_POWEROFF=y +# CONFIG_SYSCON_REBOOT_MODE is not set +# CONFIG_NVMEM_REBOOT_MODE is not set +CONFIG_POWER_SUPPLY=y +# CONFIG_POWER_SUPPLY_DEBUG is not set +CONFIG_POWER_SUPPLY_HWMON=y +# CONFIG_PDA_POWER is not set +# CONFIG_GENERIC_ADC_BATTERY is not set +# CONFIG_IP5XXX_POWER is not set +# CONFIG_TEST_POWER is not set +# CONFIG_CHARGER_ADP5061 is not set +CONFIG_BATTERY_ACT8945A=y +# CONFIG_BATTERY_CPCAP is not set +# CONFIG_BATTERY_CW2015 is not set +# CONFIG_BATTERY_DS2780 is not set +# CONFIG_BATTERY_DS2781 is not set +# CONFIG_BATTERY_DS2782 is not set +# CONFIG_BATTERY_SAMSUNG_SDI is not set +CONFIG_BATTERY_SBS=y +# CONFIG_CHARGER_SBS is not set +# CONFIG_MANAGER_SBS is not set +# CONFIG_BATTERY_BQ27XXX is not set +# CONFIG_AXP20X_POWER is not set +# CONFIG_BATTERY_MAX17040 is not set +# CONFIG_BATTERY_MAX17042 is not set +# CONFIG_CHARGER_CPCAP is not set +# CONFIG_CHARGER_ISP1704 is not set +# CONFIG_CHARGER_MAX8903 is not set +# CONFIG_CHARGER_TWL4030 is not set +# CONFIG_CHARGER_LP8727 is not set +# CONFIG_CHARGER_GPIO is not set +# CONFIG_CHARGER_MANAGER is not set +# CONFIG_CHARGER_LT3651 is not set +# CONFIG_CHARGER_LTC4162L is not set +# CONFIG_CHARGER_MAX14577 is not set +# CONFIG_CHARGER_DETECTOR_MAX14656 is not set +# CONFIG_CHARGER_MAX77976 is not set +# CONFIG_CHARGER_BQ2415X is not set +# CONFIG_CHARGER_BQ24190 is not set +# CONFIG_CHARGER_BQ24257 is not set +# CONFIG_CHARGER_BQ24735 is not set +# CONFIG_CHARGER_BQ2515X is not set +# CONFIG_CHARGER_BQ25890 is not set +# CONFIG_CHARGER_BQ25980 is not set +# CONFIG_CHARGER_BQ256XX is not set +# CONFIG_CHARGER_SMB347 is not set +CONFIG_CHARGER_TPS65090=y +# CONFIG_CHARGER_TPS65217 is not set +# CONFIG_BATTERY_GAUGE_LTC2941 is not set +# CONFIG_BATTERY_GOLDFISH is not set +# CONFIG_BATTERY_RT5033 is not set +# CONFIG_CHARGER_RT9455 is not set +# CONFIG_CHARGER_UCS1002 is not set +# CONFIG_CHARGER_BD99954 is not set +# CONFIG_BATTERY_UG3105 is not set +CONFIG_HWMON=y +# CONFIG_HWMON_DEBUG_CHIP is not set + +# +# Native drivers +# +# CONFIG_SENSORS_AD7314 is not set +# CONFIG_SENSORS_AD7414 is not set +# CONFIG_SENSORS_AD7418 is not set +# CONFIG_SENSORS_ADM1021 is not set +# CONFIG_SENSORS_ADM1025 is not set +# CONFIG_SENSORS_ADM1026 is not set +# CONFIG_SENSORS_ADM1029 is not set +# CONFIG_SENSORS_ADM1031 is not set +# CONFIG_SENSORS_ADM1177 is not set +# CONFIG_SENSORS_ADM9240 is not set +# CONFIG_SENSORS_ADT7310 is not set +# CONFIG_SENSORS_ADT7410 is not set +# CONFIG_SENSORS_ADT7411 is not set +# CONFIG_SENSORS_ADT7462 is not set +# CONFIG_SENSORS_ADT7470 is not set +# CONFIG_SENSORS_ADT7475 is not set +# CONFIG_SENSORS_AHT10 is not set +# CONFIG_SENSORS_AQUACOMPUTER_D5NEXT is not set +# CONFIG_SENSORS_AS370 is not set +# CONFIG_SENSORS_ASC7621 is not set +# CONFIG_SENSORS_AXI_FAN_CONTROL is not set +CONFIG_SENSORS_ARM_SCMI=y +# CONFIG_SENSORS_ASPEED is not set +# CONFIG_SENSORS_ATXP1 is not set +# CONFIG_SENSORS_CORSAIR_CPRO is not set +# CONFIG_SENSORS_CORSAIR_PSU is not set +# CONFIG_SENSORS_DRIVETEMP is not set +# CONFIG_SENSORS_DS620 is not set +# CONFIG_SENSORS_DS1621 is not set +# CONFIG_SENSORS_F71805F is not set +# CONFIG_SENSORS_F71882FG is not set +# CONFIG_SENSORS_F75375S is not set +# CONFIG_SENSORS_FTSTEUTATES is not set +# CONFIG_SENSORS_GL518SM is not set +# CONFIG_SENSORS_GL520SM is not set +# CONFIG_SENSORS_G760A is not set +# CONFIG_SENSORS_G762 is not set +# CONFIG_SENSORS_GPIO_FAN is not set +# CONFIG_SENSORS_HIH6130 is not set +CONFIG_SENSORS_IIO_HWMON=y +# CONFIG_SENSORS_IT87 is not set +# CONFIG_SENSORS_JC42 is not set +# CONFIG_SENSORS_POWR1220 is not set +# CONFIG_SENSORS_LINEAGE is not set +# CONFIG_SENSORS_LTC2945 is not set +# CONFIG_SENSORS_LTC2947_I2C is not set +# CONFIG_SENSORS_LTC2947_SPI is not set +# CONFIG_SENSORS_LTC2990 is not set +# CONFIG_SENSORS_LTC2992 is not set +# CONFIG_SENSORS_LTC4151 is not set +# CONFIG_SENSORS_LTC4215 is not set +# CONFIG_SENSORS_LTC4222 is not set +# CONFIG_SENSORS_LTC4245 is not set +# CONFIG_SENSORS_LTC4260 is not set +# CONFIG_SENSORS_LTC4261 is not set +# CONFIG_SENSORS_MAX1111 is not set +# CONFIG_SENSORS_MAX127 is not set +# CONFIG_SENSORS_MAX16065 is not set +# CONFIG_SENSORS_MAX1619 is not set +# CONFIG_SENSORS_MAX1668 is not set +# CONFIG_SENSORS_MAX197 is not set +# CONFIG_SENSORS_MAX31722 is not set +# CONFIG_SENSORS_MAX31730 is not set +# CONFIG_SENSORS_MAX6620 is not set +# CONFIG_SENSORS_MAX6621 is not set +# CONFIG_SENSORS_MAX6639 is not set +# CONFIG_SENSORS_MAX6642 is not set +# CONFIG_SENSORS_MAX6650 is not set +# CONFIG_SENSORS_MAX6697 is not set +# CONFIG_SENSORS_MAX31790 is not set +# CONFIG_SENSORS_MCP3021 is not set +# CONFIG_SENSORS_TC654 is not set +# CONFIG_SENSORS_TPS23861 is not set +# CONFIG_SENSORS_MR75203 is not set +# CONFIG_SENSORS_ADCXX is not set +# CONFIG_SENSORS_LM63 is not set +# CONFIG_SENSORS_LM70 is not set +# CONFIG_SENSORS_LM73 is not set +# CONFIG_SENSORS_LM75 is not set +# CONFIG_SENSORS_LM77 is not set +# CONFIG_SENSORS_LM78 is not set +# CONFIG_SENSORS_LM80 is not set +# CONFIG_SENSORS_LM83 is not set +# CONFIG_SENSORS_LM85 is not set +# CONFIG_SENSORS_LM87 is not set +CONFIG_SENSORS_LM90=y +# CONFIG_SENSORS_LM92 is not set +# CONFIG_SENSORS_LM93 is not set +# CONFIG_SENSORS_LM95234 is not set +# CONFIG_SENSORS_LM95241 is not set +CONFIG_SENSORS_LM95245=y +# CONFIG_SENSORS_PC87360 is not set +# CONFIG_SENSORS_PC87427 is not set +# CONFIG_SENSORS_NTC_THERMISTOR is not set +# CONFIG_SENSORS_NCT6683 is not set +# CONFIG_SENSORS_NCT6775 is not set +# CONFIG_SENSORS_NCT7802 is not set +# CONFIG_SENSORS_NCT7904 is not set +# CONFIG_SENSORS_NPCM7XX is not set +# CONFIG_SENSORS_NZXT_KRAKEN2 is not set +# CONFIG_SENSORS_NZXT_SMART2 is not set +# CONFIG_SENSORS_OCC_P8_I2C is not set +# CONFIG_SENSORS_PCF8591 is not set +# CONFIG_PMBUS is not set +# CONFIG_SENSORS_PWM_FAN is not set +# CONFIG_SENSORS_SBTSI is not set +# CONFIG_SENSORS_SBRMI is not set +# CONFIG_SENSORS_SHT15 is not set +# CONFIG_SENSORS_SHT21 is not set +# CONFIG_SENSORS_SHT3x is not set +# CONFIG_SENSORS_SHT4x is not set +# CONFIG_SENSORS_SHTC1 is not set +# CONFIG_SENSORS_SY7636A is not set +# CONFIG_SENSORS_DME1737 is not set +# CONFIG_SENSORS_EMC1403 is not set +# CONFIG_SENSORS_EMC2103 is not set +# CONFIG_SENSORS_EMC6W201 is not set +# CONFIG_SENSORS_SMSC47M1 is not set +# CONFIG_SENSORS_SMSC47M192 is not set +# CONFIG_SENSORS_SMSC47B397 is not set +# CONFIG_SENSORS_SCH5627 is not set +# CONFIG_SENSORS_SCH5636 is not set +# CONFIG_SENSORS_STTS751 is not set +# CONFIG_SENSORS_SMM665 is not set +# CONFIG_SENSORS_ADC128D818 is not set +# CONFIG_SENSORS_ADS7828 is not set +# CONFIG_SENSORS_ADS7871 is not set +# CONFIG_SENSORS_AMC6821 is not set +# CONFIG_SENSORS_INA209 is not set +# CONFIG_SENSORS_INA2XX is not set +# CONFIG_SENSORS_INA238 is not set +# CONFIG_SENSORS_INA3221 is not set +# CONFIG_SENSORS_TC74 is not set +# CONFIG_SENSORS_THMC50 is not set +# CONFIG_SENSORS_TMP102 is not set +# CONFIG_SENSORS_TMP103 is not set +# CONFIG_SENSORS_TMP108 is not set +# CONFIG_SENSORS_TMP401 is not set +# CONFIG_SENSORS_TMP421 is not set +# CONFIG_SENSORS_TMP464 is not set +# CONFIG_SENSORS_TMP513 is not set +# CONFIG_SENSORS_VEXPRESS is not set +# CONFIG_SENSORS_VT1211 is not set +# CONFIG_SENSORS_W83773G is not set +# CONFIG_SENSORS_W83781D is not set +# CONFIG_SENSORS_W83791D is not set +# CONFIG_SENSORS_W83792D is not set +# CONFIG_SENSORS_W83793 is not set +# CONFIG_SENSORS_W83795 is not set +# CONFIG_SENSORS_W83L785TS is not set +# CONFIG_SENSORS_W83L786NG is not set +# CONFIG_SENSORS_W83627HF is not set +# CONFIG_SENSORS_W83627EHF is not set +CONFIG_THERMAL=y +# CONFIG_THERMAL_NETLINK is not set +# CONFIG_THERMAL_STATISTICS is not set +CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 +CONFIG_THERMAL_HWMON=y +CONFIG_THERMAL_OF=y +# CONFIG_THERMAL_WRITABLE_TRIPS is not set +CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE=y +# CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set +# CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE is not set +# CONFIG_THERMAL_GOV_FAIR_SHARE is not set +CONFIG_THERMAL_GOV_STEP_WISE=y +# CONFIG_THERMAL_GOV_BANG_BANG is not set +# CONFIG_THERMAL_GOV_USER_SPACE is not set +CONFIG_CPU_THERMAL=y +CONFIG_CPU_FREQ_THERMAL=y +CONFIG_DEVFREQ_THERMAL=y +# CONFIG_THERMAL_EMULATION is not set +# CONFIG_THERMAL_MMIO is not set + +# +# Texas Instruments thermal drivers +# +CONFIG_TI_SOC_THERMAL=y +# CONFIG_TI_THERMAL is not set +# CONFIG_OMAP3_THERMAL is not set +# CONFIG_OMAP4_THERMAL is not set +# CONFIG_OMAP5_THERMAL is not set +# CONFIG_DRA752_THERMAL is not set +# end of Texas Instruments thermal drivers + +# CONFIG_GENERIC_ADC_THERMAL is not set +CONFIG_WATCHDOG=y +CONFIG_WATCHDOG_CORE=y +# CONFIG_WATCHDOG_NOWAYOUT is not set +CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED=y +CONFIG_WATCHDOG_OPEN_TIMEOUT=0 +# CONFIG_WATCHDOG_SYSFS is not set +# CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT is not set + +# +# Watchdog Pretimeout Governors +# +# CONFIG_WATCHDOG_PRETIMEOUT_GOV is not set + +# +# Watchdog Device Drivers +# +# CONFIG_SOFT_WATCHDOG is not set +# CONFIG_GPIO_WATCHDOG is not set +CONFIG_XILINX_WATCHDOG=y +# CONFIG_ZIIRAVE_WATCHDOG is not set +CONFIG_ARM_SP805_WATCHDOG=y +# CONFIG_CADENCE_WATCHDOG is not set +# CONFIG_FTWDT010_WATCHDOG is not set +CONFIG_DW_WATCHDOG=y +# CONFIG_OMAP_WATCHDOG is not set +CONFIG_RN5T618_WATCHDOG=y +# CONFIG_TWL4030_WATCHDOG is not set +# CONFIG_MAX63XX_WATCHDOG is not set +# CONFIG_ARM_SMC_WATCHDOG is not set +CONFIG_STPMIC1_WATCHDOG=y +# CONFIG_MEN_A21_WDT is not set + +# +# USB-based Watchdog Cards +# +# CONFIG_USBPCWATCHDOG is not set +CONFIG_SSB_POSSIBLE=y +# CONFIG_SSB is not set +CONFIG_BCMA_POSSIBLE=y +CONFIG_BCMA=y +# CONFIG_BCMA_HOST_SOC is not set +# CONFIG_BCMA_DRIVER_GMAC_CMN is not set +# CONFIG_BCMA_DRIVER_GPIO is not set +# CONFIG_BCMA_DEBUG is not set + +# +# Multifunction device drivers +# +CONFIG_MFD_CORE=y +CONFIG_MFD_ACT8945A=y +CONFIG_MFD_AS3711=y +CONFIG_MFD_AS3722=y +# CONFIG_PMIC_ADP5520 is not set +# CONFIG_MFD_AAT2870_CORE is not set +CONFIG_MFD_ATMEL_FLEXCOM=y +# CONFIG_MFD_ATMEL_HLCDC is not set +CONFIG_MFD_BCM590XX=y +# CONFIG_MFD_BD9571MWV is not set +CONFIG_MFD_AXP20X=y +CONFIG_MFD_AXP20X_I2C=y +# CONFIG_MFD_MADERA is not set +# CONFIG_MFD_ASIC3 is not set +# CONFIG_PMIC_DA903X is not set +# CONFIG_MFD_DA9052_SPI is not set +# CONFIG_MFD_DA9052_I2C is not set +# CONFIG_MFD_DA9055 is not set +# CONFIG_MFD_DA9062 is not set +# CONFIG_MFD_DA9063 is not set +# CONFIG_MFD_DA9150 is not set +# CONFIG_MFD_DLN2 is not set +# CONFIG_MFD_GATEWORKS_GSC is not set +# CONFIG_MFD_MC13XXX_SPI is not set +# CONFIG_MFD_MC13XXX_I2C is not set +# CONFIG_MFD_MP2629 is not set +# CONFIG_MFD_HI6421_PMIC is not set +# CONFIG_MFD_HI6421_SPMI is not set +# CONFIG_HTC_PASIC3 is not set +# CONFIG_HTC_I2CPLD is not set +# CONFIG_MFD_IQS62X is not set +# CONFIG_MFD_KEMPLD is not set +# CONFIG_MFD_88PM800 is not set +# CONFIG_MFD_88PM805 is not set +# CONFIG_MFD_88PM860X is not set +CONFIG_MFD_MAX14577=y +# CONFIG_MFD_MAX77620 is not set +# CONFIG_MFD_MAX77650 is not set +CONFIG_MFD_MAX77686=y +# CONFIG_MFD_MAX77693 is not set +# CONFIG_MFD_MAX77714 is not set +# CONFIG_MFD_MAX77843 is not set +CONFIG_MFD_MAX8907=y +# CONFIG_MFD_MAX8925 is not set +CONFIG_MFD_MAX8997=y +CONFIG_MFD_MAX8998=y +# CONFIG_MFD_MT6360 is not set +# CONFIG_MFD_MT6397 is not set +# CONFIG_MFD_MENF21BMC is not set +# CONFIG_EZX_PCAP is not set +CONFIG_MFD_CPCAP=y +# CONFIG_MFD_VIPERBOARD is not set +# CONFIG_MFD_NTXEC is not set +# CONFIG_MFD_RETU is not set +# CONFIG_MFD_PCF50633 is not set +CONFIG_MFD_PM8XXX=y +# CONFIG_MFD_RT4831 is not set +# CONFIG_MFD_RT5033 is not set +# CONFIG_MFD_RC5T583 is not set +CONFIG_MFD_RK808=y +CONFIG_MFD_RN5T618=y +CONFIG_MFD_SEC_CORE=y +# CONFIG_MFD_SI476X_CORE is not set +# CONFIG_MFD_SIMPLE_MFD_I2C is not set +# CONFIG_MFD_SM501 is not set +# CONFIG_MFD_SKY81452 is not set +CONFIG_MFD_STMPE=y + +# +# STMicroelectronics STMPE Interface Drivers +# +CONFIG_STMPE_I2C=y +# CONFIG_STMPE_SPI is not set +# end of STMicroelectronics STMPE Interface Drivers + +CONFIG_MFD_SYSCON=y +CONFIG_MFD_TI_AM335X_TSCADC=y +# CONFIG_MFD_LP3943 is not set +# CONFIG_MFD_LP8788 is not set +# CONFIG_MFD_TI_LMU is not set +CONFIG_MFD_OMAP_USB_HOST=y +CONFIG_MFD_PALMAS=y +# CONFIG_TPS6105X is not set +# CONFIG_TPS65010 is not set +# CONFIG_TPS6507X is not set +# CONFIG_MFD_TPS65086 is not set +CONFIG_MFD_TPS65090=y +CONFIG_MFD_TPS65217=y +# CONFIG_MFD_TI_LP873X is not set +# CONFIG_MFD_TI_LP87565 is not set +CONFIG_MFD_TPS65218=y +CONFIG_MFD_TPS6586X=y +CONFIG_MFD_TPS65910=y +# CONFIG_MFD_TPS65912_I2C is not set +# CONFIG_MFD_TPS65912_SPI is not set +CONFIG_TWL4030_CORE=y +CONFIG_TWL4030_POWER=y +# CONFIG_MFD_TWL4030_AUDIO is not set +# CONFIG_TWL6040_CORE is not set +# CONFIG_MFD_WL1273_CORE is not set +# CONFIG_MFD_LM3533 is not set +# CONFIG_MFD_TC3589X is not set +# CONFIG_MFD_T7L66XB is not set +# CONFIG_MFD_TC6387XB is not set +# CONFIG_MFD_TC6393XB is not set +# CONFIG_MFD_TQMX86 is not set +# CONFIG_MFD_LOCHNAGAR is not set +# CONFIG_MFD_ARIZONA_I2C is not set +# CONFIG_MFD_ARIZONA_SPI is not set +# CONFIG_MFD_WM8400 is not set +# CONFIG_MFD_WM831X_I2C is not set +# CONFIG_MFD_WM831X_SPI is not set +# CONFIG_MFD_WM8350_I2C is not set +# CONFIG_MFD_WM8994 is not set +# CONFIG_MFD_ROHM_BD718XX is not set +# CONFIG_MFD_ROHM_BD71828 is not set +# CONFIG_MFD_ROHM_BD957XMUF is not set +CONFIG_MFD_STPMIC1=y +CONFIG_MFD_STMFX=y +# CONFIG_MFD_ATC260X_I2C is not set +# CONFIG_MFD_QCOM_PM8008 is not set +CONFIG_MFD_VEXPRESS_SYSREG=y +# CONFIG_RAVE_SP_CORE is not set +# CONFIG_MFD_INTEL_M10_BMC is not set +# CONFIG_MFD_RSMU_I2C is not set +# CONFIG_MFD_RSMU_SPI is not set +# end of Multifunction device drivers + +CONFIG_REGULATOR=y +# CONFIG_REGULATOR_DEBUG is not set +CONFIG_REGULATOR_FIXED_VOLTAGE=y +# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set +# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set +# CONFIG_REGULATOR_88PG86X is not set +CONFIG_REGULATOR_ACT8865=y +CONFIG_REGULATOR_ACT8945A=y +# CONFIG_REGULATOR_AD5398 is not set +# CONFIG_REGULATOR_ARM_SCMI is not set +CONFIG_REGULATOR_AS3711=y +CONFIG_REGULATOR_AS3722=y +CONFIG_REGULATOR_AXP20X=y +CONFIG_REGULATOR_BCM590XX=y +CONFIG_REGULATOR_CPCAP=y +# CONFIG_REGULATOR_DA9121 is not set +CONFIG_REGULATOR_DA9210=y +# CONFIG_REGULATOR_DA9211 is not set +CONFIG_REGULATOR_FAN53555=y +# CONFIG_REGULATOR_FAN53880 is not set +CONFIG_REGULATOR_GPIO=y +# CONFIG_REGULATOR_ISL9305 is not set +# CONFIG_REGULATOR_ISL6271A is not set +# CONFIG_REGULATOR_LP3971 is not set +# CONFIG_REGULATOR_LP3972 is not set +CONFIG_REGULATOR_LP872X=y +# CONFIG_REGULATOR_LP8755 is not set +# CONFIG_REGULATOR_LTC3589 is not set +# CONFIG_REGULATOR_LTC3676 is not set +# CONFIG_REGULATOR_MAX14577 is not set +# CONFIG_REGULATOR_MAX1586 is not set +# CONFIG_REGULATOR_MAX8649 is not set +# CONFIG_REGULATOR_MAX8660 is not set +# CONFIG_REGULATOR_MAX8893 is not set +CONFIG_REGULATOR_MAX8907=y +# CONFIG_REGULATOR_MAX8952 is not set +CONFIG_REGULATOR_MAX8973=y +# CONFIG_REGULATOR_MAX8997 is not set +# CONFIG_REGULATOR_MAX8998 is not set +# CONFIG_REGULATOR_MAX20086 is not set +CONFIG_REGULATOR_MAX77686=y +CONFIG_REGULATOR_MAX77802=y +# CONFIG_REGULATOR_MAX77826 is not set +# CONFIG_REGULATOR_MCP16502 is not set +# CONFIG_REGULATOR_MP5416 is not set +# CONFIG_REGULATOR_MP8859 is not set +# CONFIG_REGULATOR_MP886X is not set +# CONFIG_REGULATOR_MPQ7920 is not set +# CONFIG_REGULATOR_MT6311 is not set +# CONFIG_REGULATOR_MT6315 is not set +CONFIG_REGULATOR_PALMAS=y +CONFIG_REGULATOR_PBIAS=y +# CONFIG_REGULATOR_PCA9450 is not set +# CONFIG_REGULATOR_PF8X00 is not set +# CONFIG_REGULATOR_PFUZE100 is not set +# CONFIG_REGULATOR_PV88060 is not set +# CONFIG_REGULATOR_PV88080 is not set +# CONFIG_REGULATOR_PV88090 is not set +CONFIG_REGULATOR_PWM=y +CONFIG_REGULATOR_QCOM_SPMI=y +# CONFIG_REGULATOR_QCOM_USB_VBUS is not set +# CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY is not set +CONFIG_REGULATOR_RK808=y +CONFIG_REGULATOR_RN5T618=y +# CONFIG_REGULATOR_RT4801 is not set +# CONFIG_REGULATOR_RT5190A is not set +# CONFIG_REGULATOR_RT6160 is not set +# CONFIG_REGULATOR_RT6245 is not set +# CONFIG_REGULATOR_RTQ2134 is not set +# CONFIG_REGULATOR_RTMV20 is not set +# CONFIG_REGULATOR_RTQ6752 is not set +# CONFIG_REGULATOR_S2MPA01 is not set +CONFIG_REGULATOR_S2MPS11=y +CONFIG_REGULATOR_S5M8767=y +# CONFIG_REGULATOR_SLG51000 is not set +CONFIG_REGULATOR_STPMIC1=y +CONFIG_REGULATOR_TI_ABB=y +# CONFIG_REGULATOR_SY7636A is not set +# CONFIG_REGULATOR_SY8106A is not set +# CONFIG_REGULATOR_SY8824X is not set +# CONFIG_REGULATOR_SY8827N is not set +CONFIG_REGULATOR_TPS51632=y +CONFIG_REGULATOR_TPS62360=y +# CONFIG_REGULATOR_TPS6286X is not set +# CONFIG_REGULATOR_TPS65023 is not set +# CONFIG_REGULATOR_TPS6507X is not set +CONFIG_REGULATOR_TPS65090=y +# CONFIG_REGULATOR_TPS65132 is not set +CONFIG_REGULATOR_TPS65217=y +CONFIG_REGULATOR_TPS65218=y +# CONFIG_REGULATOR_TPS6524X is not set +CONFIG_REGULATOR_TPS6586X=y +CONFIG_REGULATOR_TPS65910=y +CONFIG_REGULATOR_TWL4030=y +# CONFIG_REGULATOR_VCTRL is not set +CONFIG_REGULATOR_VEXPRESS=y +# CONFIG_REGULATOR_QCOM_LABIBB is not set +# CONFIG_RC_CORE is not set + +# +# CEC support +# +CONFIG_MEDIA_CEC_SUPPORT=y +# CONFIG_CEC_CH7322 is not set +# CONFIG_USB_PULSE8_CEC is not set +# CONFIG_USB_RAINSHADOW_CEC is not set +# end of CEC support + +# CONFIG_MEDIA_SUPPORT is not set + +# +# Graphics support +# +# CONFIG_IMX_IPUV3_CORE is not set +CONFIG_DRM=y +CONFIG_DRM_DP_AUX_BUS=y +# CONFIG_DRM_DP_AUX_CHARDEV is not set +# CONFIG_DRM_DEBUG_MM is not set +# CONFIG_DRM_DEBUG_SELFTEST is not set +CONFIG_DRM_DP_HELPER=y +CONFIG_DRM_KMS_HELPER=y +# CONFIG_DRM_DEBUG_DP_MST_TOPOLOGY_REFS is not set +# CONFIG_DRM_DEBUG_MODESET_LOCK is not set +CONFIG_DRM_FBDEV_EMULATION=y +CONFIG_DRM_FBDEV_OVERALLOC=100 +# CONFIG_DRM_FBDEV_LEAK_PHYS_SMEM is not set +# CONFIG_DRM_LOAD_EDID_FIRMWARE is not set +# CONFIG_DRM_DP_CEC is not set + +# +# I2C encoder or helper chips +# +# CONFIG_DRM_I2C_CH7006 is not set +# CONFIG_DRM_I2C_SIL164 is not set +# CONFIG_DRM_I2C_NXP_TDA998X is not set +# CONFIG_DRM_I2C_NXP_TDA9950 is not set +# end of I2C encoder or helper chips + +# +# ARM devices +# +# CONFIG_DRM_HDLCD is not set +# CONFIG_DRM_MALI_DISPLAY is not set +# CONFIG_DRM_KOMEDA is not set +# end of ARM devices + +# CONFIG_DRM_VGEM is not set +# CONFIG_DRM_VKMS is not set +# CONFIG_DRM_EXYNOS is not set +# CONFIG_DRM_UDL is not set +# CONFIG_DRM_ARMADA is not set +# CONFIG_DRM_RCAR_DW_HDMI is not set +# CONFIG_DRM_RCAR_USE_LVDS is not set +# CONFIG_DRM_RCAR_MIPI_DSI is not set +# CONFIG_DRM_OMAP is not set +# CONFIG_DRM_TILCDC is not set +# CONFIG_DRM_VIRTIO_GPU is not set +# CONFIG_DRM_FSL_DCU is not set +# CONFIG_DRM_STM is not set +CONFIG_DRM_PANEL=y + +# +# Display Panels +# +# CONFIG_DRM_PANEL_ABT_Y030XX067A is not set +# CONFIG_DRM_PANEL_ARM_VERSATILE is not set +# CONFIG_DRM_PANEL_LVDS is not set +CONFIG_DRM_PANEL_SIMPLE=y +CONFIG_DRM_PANEL_EDP=y +# CONFIG_DRM_PANEL_ILITEK_IL9322 is not set +# CONFIG_DRM_PANEL_INNOLUX_EJ030NA is not set +# CONFIG_DRM_PANEL_SAMSUNG_LD9040 is not set +# CONFIG_DRM_PANEL_LG_LB035Q02 is not set +# CONFIG_DRM_PANEL_LG_LG4573 is not set +# CONFIG_DRM_PANEL_NEC_NL8048HL11 is not set +# CONFIG_DRM_PANEL_NOVATEK_NT39016 is not set +# CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO is not set +# CONFIG_DRM_PANEL_SAMSUNG_ATNA33XC20 is not set +# CONFIG_DRM_PANEL_SAMSUNG_DB7430 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6D27A1 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E63M0 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01 is not set +# CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set +# CONFIG_DRM_PANEL_SEIKO_43WVF1G is not set +# CONFIG_DRM_PANEL_SHARP_LS037V7DW01 is not set +# CONFIG_DRM_PANEL_SITRONIX_ST7789V is not set +# CONFIG_DRM_PANEL_SONY_ACX565AKM is not set +# CONFIG_DRM_PANEL_TPO_TD028TTEC1 is not set +# CONFIG_DRM_PANEL_TPO_TD043MTEA1 is not set +# CONFIG_DRM_PANEL_TPO_TPG110 is not set +# CONFIG_DRM_PANEL_WIDECHIPS_WS2401 is not set +# end of Display Panels + +CONFIG_DRM_BRIDGE=y +CONFIG_DRM_PANEL_BRIDGE=y + +# +# Display Interface Bridges +# +# CONFIG_DRM_CDNS_DSI is not set +# CONFIG_DRM_CHIPONE_ICN6211 is not set +# CONFIG_DRM_CHRONTEL_CH7033 is not set +# CONFIG_DRM_DISPLAY_CONNECTOR is not set +# CONFIG_DRM_ITE_IT6505 is not set +# CONFIG_DRM_LONTIUM_LT8912B is not set +# CONFIG_DRM_LONTIUM_LT9611 is not set +# CONFIG_DRM_LONTIUM_LT9611UXC is not set +# CONFIG_DRM_ITE_IT66121 is not set +# CONFIG_DRM_LVDS_CODEC is not set +# CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW is not set +# CONFIG_DRM_NWL_MIPI_DSI is not set +# CONFIG_DRM_NXP_PTN3460 is not set +# CONFIG_DRM_PARADE_PS8622 is not set +# CONFIG_DRM_PARADE_PS8640 is not set +# CONFIG_DRM_SIL_SII8620 is not set +# CONFIG_DRM_SII902X is not set +# CONFIG_DRM_SII9234 is not set +# CONFIG_DRM_SIMPLE_BRIDGE is not set +# CONFIG_DRM_THINE_THC63LVD1024 is not set +# CONFIG_DRM_TOSHIBA_TC358762 is not set +# CONFIG_DRM_TOSHIBA_TC358764 is not set +# CONFIG_DRM_TOSHIBA_TC358767 is not set +# CONFIG_DRM_TOSHIBA_TC358768 is not set +# CONFIG_DRM_TOSHIBA_TC358775 is not set +# CONFIG_DRM_TI_TFP410 is not set +# CONFIG_DRM_TI_SN65DSI83 is not set +# CONFIG_DRM_TI_SN65DSI86 is not set +# CONFIG_DRM_TI_TPD12S015 is not set +# CONFIG_DRM_ANALOGIX_ANX6345 is not set +# CONFIG_DRM_ANALOGIX_ANX78XX is not set +# CONFIG_DRM_ANALOGIX_ANX7625 is not set +# CONFIG_DRM_I2C_ADV7511 is not set +# CONFIG_DRM_CDNS_MHDP8546 is not set +# end of Display Interface Bridges + +# CONFIG_DRM_STI is not set +# CONFIG_DRM_ETNAVIV is not set +# CONFIG_DRM_MXSFB is not set +# CONFIG_DRM_ARCPGU is not set +# CONFIG_DRM_GM12U320 is not set +# CONFIG_DRM_PANEL_MIPI_DBI is not set +# CONFIG_DRM_SIMPLEDRM is not set +# CONFIG_TINYDRM_HX8357D is not set +# CONFIG_TINYDRM_ILI9163 is not set +# CONFIG_TINYDRM_ILI9225 is not set +# CONFIG_TINYDRM_ILI9341 is not set +# CONFIG_TINYDRM_ILI9486 is not set +# CONFIG_TINYDRM_MI0283QT is not set +# CONFIG_TINYDRM_REPAPER is not set +# CONFIG_TINYDRM_ST7586 is not set +# CONFIG_TINYDRM_ST7735R is not set +# CONFIG_DRM_PL111 is not set +# CONFIG_DRM_TVE200 is not set +# CONFIG_DRM_LIMA is not set +# CONFIG_DRM_PANFROST is not set +# CONFIG_DRM_MCDE is not set +# CONFIG_DRM_TIDSS is not set +# CONFIG_DRM_GUD is not set +# CONFIG_DRM_SSD130X is not set +CONFIG_DRM_LEGACY=y +CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y +CONFIG_DRM_NOMODESET=y + +# +# Frame buffer Devices +# +CONFIG_FB_CMDLINE=y +CONFIG_FB_NOTIFY=y +CONFIG_FB=y +# CONFIG_FIRMWARE_EDID is not set +CONFIG_FB_CFB_FILLRECT=y +CONFIG_FB_CFB_COPYAREA=y +CONFIG_FB_CFB_IMAGEBLIT=y +CONFIG_FB_SYS_FILLRECT=y +CONFIG_FB_SYS_COPYAREA=y +CONFIG_FB_SYS_IMAGEBLIT=y +# CONFIG_FB_FOREIGN_ENDIAN is not set +CONFIG_FB_SYS_FOPS=y +CONFIG_FB_DEFERRED_IO=y +CONFIG_FB_MODE_HELPERS=y +# CONFIG_FB_TILEBLITTING is not set + +# +# Frame buffer hardware drivers +# +# CONFIG_FB_ARMCLCD is not set +CONFIG_FB_EFI=y +# CONFIG_FB_OPENCORES is not set +# CONFIG_FB_S1D13XXX is not set +# CONFIG_FB_SMSCUFX is not set +# CONFIG_FB_UDL is not set +# CONFIG_FB_IBM_GXT4500 is not set +# CONFIG_FB_DA8XX is not set +# CONFIG_FB_VIRTUAL is not set +# CONFIG_FB_METRONOME is not set +CONFIG_FB_SIMPLE=y +# CONFIG_FB_SSD1307 is not set +# CONFIG_FB_OMAP2 is not set +# end of Frame buffer Devices + +# +# Backlight & LCD device support +# +# CONFIG_LCD_CLASS_DEVICE is not set +CONFIG_BACKLIGHT_CLASS_DEVICE=y +# CONFIG_BACKLIGHT_KTD253 is not set +CONFIG_BACKLIGHT_PWM=y +# CONFIG_BACKLIGHT_QCOM_WLED is not set +# CONFIG_BACKLIGHT_ADP8860 is not set +# CONFIG_BACKLIGHT_ADP8870 is not set +# CONFIG_BACKLIGHT_LM3630A is not set +# CONFIG_BACKLIGHT_LM3639 is not set +# CONFIG_BACKLIGHT_LP855X is not set +# CONFIG_BACKLIGHT_PANDORA is not set +# CONFIG_BACKLIGHT_TPS65217 is not set +CONFIG_BACKLIGHT_AS3711=y +CONFIG_BACKLIGHT_GPIO=y +# CONFIG_BACKLIGHT_LV5207LP is not set +# CONFIG_BACKLIGHT_BD6107 is not set +# CONFIG_BACKLIGHT_ARCXCNN is not set +# CONFIG_BACKLIGHT_LED is not set +# end of Backlight & LCD device support + +CONFIG_VIDEOMODE_HELPERS=y +CONFIG_HDMI=y + +# +# Console display driver support +# +CONFIG_DUMMY_CONSOLE=y +CONFIG_FRAMEBUFFER_CONSOLE=y +# CONFIG_FRAMEBUFFER_CONSOLE_LEGACY_ACCELERATION is not set +CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY=y +CONFIG_FRAMEBUFFER_CONSOLE_ROTATION=y +# CONFIG_FRAMEBUFFER_CONSOLE_DEFERRED_TAKEOVER is not set +# end of Console display driver support + +# CONFIG_LOGO is not set +# end of Graphics support + +# CONFIG_SOUND is not set + +# +# HID support +# +CONFIG_HID=y +# CONFIG_HID_BATTERY_STRENGTH is not set +# CONFIG_HIDRAW is not set +# CONFIG_UHID is not set +CONFIG_HID_GENERIC=y + +# +# Special HID drivers +# +# CONFIG_HID_A4TECH is not set +# CONFIG_HID_ACCUTOUCH is not set +# CONFIG_HID_ACRUX is not set +# CONFIG_HID_APPLE is not set +# CONFIG_HID_APPLEIR is not set +# CONFIG_HID_ASUS is not set +# CONFIG_HID_AUREAL is not set +# CONFIG_HID_BELKIN is not set +# CONFIG_HID_BETOP_FF is not set +# CONFIG_HID_BIGBEN_FF is not set +# CONFIG_HID_CHERRY is not set +# CONFIG_HID_CHICONY is not set +# CONFIG_HID_CORSAIR is not set +# CONFIG_HID_COUGAR is not set +# CONFIG_HID_MACALLY is not set +# CONFIG_HID_CMEDIA is not set +# CONFIG_HID_CREATIVE_SB0540 is not set +# CONFIG_HID_CYPRESS is not set +# CONFIG_HID_DRAGONRISE is not set +# CONFIG_HID_EMS_FF is not set +# CONFIG_HID_ELAN is not set +# CONFIG_HID_ELECOM is not set +# CONFIG_HID_ELO is not set +# CONFIG_HID_EZKEY is not set +# CONFIG_HID_GEMBIRD is not set +# CONFIG_HID_GFRM is not set +# CONFIG_HID_GLORIOUS is not set +# CONFIG_HID_HOLTEK is not set +# CONFIG_HID_VIVALDI is not set +# CONFIG_HID_GT683R is not set +# CONFIG_HID_KEYTOUCH is not set +# CONFIG_HID_KYE is not set +# CONFIG_HID_UCLOGIC is not set +# CONFIG_HID_WALTOP is not set +# CONFIG_HID_VIEWSONIC is not set +# CONFIG_HID_XIAOMI is not set +# CONFIG_HID_GYRATION is not set +# CONFIG_HID_ICADE is not set +# CONFIG_HID_ITE is not set +# CONFIG_HID_JABRA is not set +# CONFIG_HID_TWINHAN is not set +# CONFIG_HID_KENSINGTON is not set +# CONFIG_HID_LCPOWER is not set +# CONFIG_HID_LED is not set +# CONFIG_HID_LENOVO is not set +# CONFIG_HID_LETSKETCH is not set +# CONFIG_HID_LOGITECH is not set +# CONFIG_HID_MAGICMOUSE is not set +# CONFIG_HID_MALTRON is not set +# CONFIG_HID_MAYFLASH is not set +# CONFIG_HID_REDRAGON is not set +# CONFIG_HID_MICROSOFT is not set +# CONFIG_HID_MONTEREY is not set +# CONFIG_HID_MULTITOUCH is not set +# CONFIG_HID_NINTENDO is not set +# CONFIG_HID_NTI is not set +# CONFIG_HID_NTRIG is not set +# CONFIG_HID_ORTEK is not set +# CONFIG_HID_PANTHERLORD is not set +# CONFIG_HID_PENMOUNT is not set +# CONFIG_HID_PETALYNX is not set +# CONFIG_HID_PICOLCD is not set +# CONFIG_HID_PLANTRONICS is not set +# CONFIG_HID_RAZER is not set +# CONFIG_HID_PRIMAX is not set +# CONFIG_HID_RETRODE is not set +# CONFIG_HID_ROCCAT is not set +# CONFIG_HID_SAITEK is not set +# CONFIG_HID_SAMSUNG is not set +# CONFIG_HID_SEMITEK is not set +# CONFIG_HID_SIGMAMICRO is not set +# CONFIG_HID_SONY is not set +# CONFIG_HID_SPEEDLINK is not set +# CONFIG_HID_STEAM is not set +# CONFIG_HID_STEELSERIES is not set +# CONFIG_HID_SUNPLUS is not set +# CONFIG_HID_RMI is not set +# CONFIG_HID_GREENASIA is not set +# CONFIG_HID_SMARTJOYPLUS is not set +# CONFIG_HID_TIVO is not set +# CONFIG_HID_TOPSEED is not set +# CONFIG_HID_THINGM is not set +# CONFIG_HID_THRUSTMASTER is not set +# CONFIG_HID_UDRAW_PS3 is not set +# CONFIG_HID_U2FZERO is not set +# CONFIG_HID_WACOM is not set +# CONFIG_HID_WIIMOTE is not set +# CONFIG_HID_XINMO is not set +# CONFIG_HID_ZEROPLUS is not set +# CONFIG_HID_ZYDACRON is not set +# CONFIG_HID_SENSOR_HUB is not set +# CONFIG_HID_ALPS is not set +# CONFIG_HID_MCP2221 is not set +# end of Special HID drivers + +# +# USB HID support +# +CONFIG_USB_HID=y +# CONFIG_HID_PID is not set +# CONFIG_USB_HIDDEV is not set +# end of USB HID support + +# +# I2C HID support +# +# CONFIG_I2C_HID_OF is not set +# CONFIG_I2C_HID_OF_GOODIX is not set +# end of I2C HID support +# end of HID support + +CONFIG_USB_OHCI_LITTLE_ENDIAN=y +CONFIG_USB_SUPPORT=y +CONFIG_USB_COMMON=y +# CONFIG_USB_LED_TRIG is not set +CONFIG_USB_ULPI_BUS=y +CONFIG_USB_CONN_GPIO=y +CONFIG_USB_ARCH_HAS_HCD=y +CONFIG_USB=y +# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set + +# +# Miscellaneous USB options +# +CONFIG_USB_DEFAULT_PERSIST=y +# CONFIG_USB_FEW_INIT_RETRIES is not set +# CONFIG_USB_DYNAMIC_MINORS is not set +CONFIG_USB_OTG=y +# CONFIG_USB_OTG_PRODUCTLIST is not set +# CONFIG_USB_OTG_DISABLE_EXTERNAL_HUB is not set +# CONFIG_USB_OTG_FSM is not set +# CONFIG_USB_LEDS_TRIGGER_USBPORT is not set +CONFIG_USB_AUTOSUSPEND_DELAY=2 +# CONFIG_USB_MON is not set + +# +# USB Host Controller Drivers +# +# CONFIG_USB_C67X00_HCD is not set +CONFIG_USB_XHCI_HCD=y +# CONFIG_USB_XHCI_DBGCAP is not set +# CONFIG_USB_XHCI_PCI_RENESAS is not set +CONFIG_USB_XHCI_PLATFORM=y +CONFIG_USB_EHCI_HCD=y +CONFIG_USB_EHCI_ROOT_HUB_TT=y +CONFIG_USB_EHCI_TT_NEWSCHED=y +# CONFIG_USB_EHCI_FSL is not set +CONFIG_USB_EHCI_HCD_OMAP=y +CONFIG_USB_EHCI_HCD_PLATFORM=y +# CONFIG_USB_OXU210HP_HCD is not set +# CONFIG_USB_ISP116X_HCD is not set +# CONFIG_USB_FOTG210_HCD is not set +# CONFIG_USB_MAX3421_HCD is not set +CONFIG_USB_OHCI_HCD=y +CONFIG_USB_OHCI_HCD_OMAP3=y +CONFIG_USB_OHCI_HCD_PLATFORM=y +# CONFIG_USB_SL811_HCD is not set +# CONFIG_USB_R8A66597_HCD is not set +# CONFIG_USB_HCD_BCMA is not set +# CONFIG_USB_HCD_TEST_MODE is not set + +# +# USB Device Class drivers +# +# CONFIG_USB_ACM is not set +# CONFIG_USB_PRINTER is not set +# CONFIG_USB_WDM is not set +# CONFIG_USB_TMC is not set + +# +# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may +# + +# +# also be needed; see USB_STORAGE Help for more info +# +CONFIG_USB_STORAGE=y +# CONFIG_USB_STORAGE_DEBUG is not set +# CONFIG_USB_STORAGE_REALTEK is not set +# CONFIG_USB_STORAGE_DATAFAB is not set +# CONFIG_USB_STORAGE_FREECOM is not set +# CONFIG_USB_STORAGE_ISD200 is not set +# CONFIG_USB_STORAGE_USBAT is not set +# CONFIG_USB_STORAGE_SDDR09 is not set +# CONFIG_USB_STORAGE_SDDR55 is not set +# CONFIG_USB_STORAGE_JUMPSHOT is not set +# CONFIG_USB_STORAGE_ALAUDA is not set +# CONFIG_USB_STORAGE_ONETOUCH is not set +# CONFIG_USB_STORAGE_KARMA is not set +# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set +# CONFIG_USB_STORAGE_ENE_UB6250 is not set +# CONFIG_USB_UAS is not set + +# +# USB Imaging devices +# +# CONFIG_USB_MDC800 is not set +# CONFIG_USB_MICROTEK is not set +# CONFIG_USBIP_CORE is not set +# CONFIG_USB_CDNS_SUPPORT is not set +# CONFIG_USB_MUSB_HDRC is not set +CONFIG_USB_DWC3=y +# CONFIG_USB_DWC3_ULPI is not set +# CONFIG_USB_DWC3_HOST is not set +# CONFIG_USB_DWC3_GADGET is not set +CONFIG_USB_DWC3_DUAL_ROLE=y + +# +# Platform Glue Driver Support +# +CONFIG_USB_DWC3_OMAP=y +CONFIG_USB_DWC3_OF_SIMPLE=y +CONFIG_USB_DWC2=y +# CONFIG_USB_DWC2_HOST is not set + +# +# Gadget/Dual-role mode requires USB Gadget support to be enabled +# +# CONFIG_USB_DWC2_PERIPHERAL is not set +CONFIG_USB_DWC2_DUAL_ROLE=y +# CONFIG_USB_DWC2_DEBUG is not set +# CONFIG_USB_DWC2_TRACK_MISSED_SOFS is not set +CONFIG_USB_CHIPIDEA=y +CONFIG_USB_CHIPIDEA_UDC=y +CONFIG_USB_CHIPIDEA_HOST=y +CONFIG_USB_CHIPIDEA_MSM=y +CONFIG_USB_CHIPIDEA_IMX=y +CONFIG_USB_CHIPIDEA_GENERIC=y +CONFIG_USB_CHIPIDEA_TEGRA=y +CONFIG_USB_ISP1760=y +CONFIG_USB_ISP1760_HCD=y +CONFIG_USB_ISP1761_UDC=y +# CONFIG_USB_ISP1760_HOST_ROLE is not set +# CONFIG_USB_ISP1760_GADGET_ROLE is not set +CONFIG_USB_ISP1760_DUAL_ROLE=y + +# +# USB port drivers +# +# CONFIG_USB_SERIAL is not set + +# +# USB Miscellaneous drivers +# +# CONFIG_USB_EMI62 is not set +# CONFIG_USB_EMI26 is not set +# CONFIG_USB_ADUTUX is not set +# CONFIG_USB_SEVSEG is not set +# CONFIG_USB_LEGOTOWER is not set +# CONFIG_USB_LCD is not set +# CONFIG_USB_CYPRESS_CY7C63 is not set +# CONFIG_USB_CYTHERM is not set +# CONFIG_USB_IDMOUSE is not set +# CONFIG_USB_FTDI_ELAN is not set +# CONFIG_USB_APPLEDISPLAY is not set +# CONFIG_APPLE_MFI_FASTCHARGE is not set +# CONFIG_USB_SISUSBVGA is not set +# CONFIG_USB_LD is not set +# CONFIG_USB_TRANCEVIBRATOR is not set +# CONFIG_USB_IOWARRIOR is not set +# CONFIG_USB_TEST is not set +# CONFIG_USB_EHSET_TEST_FIXTURE is not set +# CONFIG_USB_ISIGHTFW is not set +# CONFIG_USB_YUREX is not set +# CONFIG_USB_EZUSB_FX2 is not set +# CONFIG_USB_HUB_USB251XB is not set +CONFIG_USB_HSIC_USB3503=y +# CONFIG_USB_HSIC_USB4604 is not set +# CONFIG_USB_LINK_LAYER_TEST is not set +# CONFIG_USB_CHAOSKEY is not set + +# +# USB Physical Layer drivers +# +CONFIG_USB_PHY=y +CONFIG_NOP_USB_XCEIV=y +# CONFIG_AM335X_PHY_USB is not set +CONFIG_USB_GPIO_VBUS=y +CONFIG_USB_ISP1301=y +CONFIG_USB_ULPI=y +CONFIG_USB_ULPI_VIEWPORT=y +# end of USB Physical Layer drivers + +CONFIG_USB_GADGET=y +# CONFIG_USB_GADGET_DEBUG is not set +# CONFIG_USB_GADGET_DEBUG_FILES is not set +# CONFIG_USB_GADGET_DEBUG_FS is not set +CONFIG_USB_GADGET_VBUS_DRAW=2 +CONFIG_USB_GADGET_STORAGE_NUM_BUFFERS=2 + +# +# USB Peripheral Controller +# +# CONFIG_USB_FUSB300 is not set +# CONFIG_USB_FOTG210_UDC is not set +# CONFIG_USB_GR_UDC is not set +# CONFIG_USB_R8A66597 is not set +# CONFIG_USB_PXA27X is not set +# CONFIG_USB_MV_UDC is not set +# CONFIG_USB_MV_U3D is not set +CONFIG_USB_SNP_CORE=y +CONFIG_USB_SNP_UDC_PLAT=y +# CONFIG_USB_M66592 is not set +CONFIG_USB_BDC_UDC=y +# CONFIG_USB_NET2272 is not set +# CONFIG_USB_GADGET_XILINX is not set +# CONFIG_USB_MAX3420_UDC is not set +# CONFIG_USB_DUMMY_HCD is not set +# end of USB Peripheral Controller + +# CONFIG_USB_CONFIGFS is not set + +# +# USB Gadget precomposed configurations +# +# CONFIG_USB_ZERO is not set +# CONFIG_USB_ETH is not set +# CONFIG_USB_G_NCM is not set +# CONFIG_USB_GADGETFS is not set +# CONFIG_USB_FUNCTIONFS is not set +# CONFIG_USB_MASS_STORAGE is not set +# CONFIG_USB_G_SERIAL is not set +# CONFIG_USB_G_PRINTER is not set +# CONFIG_USB_CDC_COMPOSITE is not set +# CONFIG_USB_G_ACM_MS is not set +# CONFIG_USB_G_MULTI is not set +# CONFIG_USB_G_HID is not set +# CONFIG_USB_G_DBGP is not set +# CONFIG_USB_RAW_GADGET is not set +# end of USB Gadget precomposed configurations + +# CONFIG_TYPEC is not set +CONFIG_USB_ROLE_SWITCH=y +CONFIG_MMC=y +CONFIG_PWRSEQ_EMMC=y +CONFIG_PWRSEQ_SIMPLE=y +CONFIG_MMC_BLOCK=y +CONFIG_MMC_BLOCK_MINORS=16 +# CONFIG_SDIO_UART is not set +# CONFIG_MMC_TEST is not set + +# +# MMC/SD/SDIO Host Controller Drivers +# +# CONFIG_MMC_DEBUG is not set +CONFIG_MMC_ARMMMCI=y +CONFIG_MMC_STM32_SDMMC=y +CONFIG_MMC_SDHCI=y +CONFIG_MMC_SDHCI_PLTFM=y +CONFIG_MMC_SDHCI_OF_ARASAN=y +# CONFIG_MMC_SDHCI_OF_ASPEED is not set +CONFIG_MMC_SDHCI_OF_AT91=y +# CONFIG_MMC_SDHCI_OF_DWCMSHC is not set +# CONFIG_MMC_SDHCI_CADENCE is not set +# CONFIG_MMC_SDHCI_F_SDH30 is not set +# CONFIG_MMC_SDHCI_MILBEAUT is not set +CONFIG_MMC_OMAP=y +CONFIG_MMC_OMAP_HS=y +# CONFIG_MMC_SPI is not set +CONFIG_MMC_DW=y +CONFIG_MMC_DW_PLTFM=y +# CONFIG_MMC_DW_BLUEFIELD is not set +CONFIG_MMC_DW_EXYNOS=y +# CONFIG_MMC_DW_HI3798CV200 is not set +# CONFIG_MMC_DW_K3 is not set +# CONFIG_MMC_VUB300 is not set +# CONFIG_MMC_USHC is not set +# CONFIG_MMC_USDHI6ROL0 is not set +CONFIG_MMC_CQHCI=y +# CONFIG_MMC_HSQ is not set +# CONFIG_MMC_MTK is not set +# CONFIG_MMC_SDHCI_XENON is not set +CONFIG_MMC_SDHCI_OMAP=y +# CONFIG_MMC_SDHCI_AM654 is not set +CONFIG_MMC_SDHCI_EXTERNAL_DMA=y +# CONFIG_MEMSTICK is not set +CONFIG_NEW_LEDS=y +CONFIG_LEDS_CLASS=y +# CONFIG_LEDS_CLASS_FLASH is not set +# CONFIG_LEDS_CLASS_MULTICOLOR is not set +# CONFIG_LEDS_BRIGHTNESS_HW_CHANGED is not set + +# +# LED drivers +# +# CONFIG_LEDS_AN30259A is not set +# CONFIG_LEDS_AW2013 is not set +# CONFIG_LEDS_BCM6328 is not set +# CONFIG_LEDS_BCM6358 is not set +# CONFIG_LEDS_CPCAP is not set +# CONFIG_LEDS_CR0014114 is not set +# CONFIG_LEDS_EL15203000 is not set +# CONFIG_LEDS_LM3530 is not set +# CONFIG_LEDS_LM3532 is not set +# CONFIG_LEDS_LM3642 is not set +# CONFIG_LEDS_LM3692X is not set +# CONFIG_LEDS_PCA9532 is not set +CONFIG_LEDS_GPIO=y +# CONFIG_LEDS_LP3944 is not set +# CONFIG_LEDS_LP3952 is not set +# CONFIG_LEDS_LP50XX is not set +# CONFIG_LEDS_LP55XX_COMMON is not set +# CONFIG_LEDS_LP8860 is not set +# CONFIG_LEDS_PCA955X is not set +# CONFIG_LEDS_PCA963X is not set +# CONFIG_LEDS_DAC124S085 is not set +CONFIG_LEDS_PWM=y +# CONFIG_LEDS_REGULATOR is not set +# CONFIG_LEDS_BD2802 is not set +# CONFIG_LEDS_LT3593 is not set +# CONFIG_LEDS_TCA6507 is not set +# CONFIG_LEDS_TLC591XX is not set +# CONFIG_LEDS_MAX8997 is not set +# CONFIG_LEDS_LM355x is not set +# CONFIG_LEDS_IS31FL319X is not set +# CONFIG_LEDS_IS31FL32XX is not set + +# +# LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) +# +# CONFIG_LEDS_BLINKM is not set +# CONFIG_LEDS_SYSCON is not set +# CONFIG_LEDS_PM8058 is not set +# CONFIG_LEDS_MLXREG is not set +# CONFIG_LEDS_USER is not set +# CONFIG_LEDS_SPI_BYTE is not set +# CONFIG_LEDS_TI_LMU_COMMON is not set + +# +# Flash and Torch LED drivers +# + +# +# LED Triggers +# +CONFIG_LEDS_TRIGGERS=y +CONFIG_LEDS_TRIGGER_TIMER=y +CONFIG_LEDS_TRIGGER_ONESHOT=y +# CONFIG_LEDS_TRIGGER_DISK is not set +# CONFIG_LEDS_TRIGGER_MTD is not set +CONFIG_LEDS_TRIGGER_HEARTBEAT=y +CONFIG_LEDS_TRIGGER_BACKLIGHT=y +CONFIG_LEDS_TRIGGER_CPU=y +# CONFIG_LEDS_TRIGGER_ACTIVITY is not set +CONFIG_LEDS_TRIGGER_GPIO=y +CONFIG_LEDS_TRIGGER_DEFAULT_ON=y + +# +# iptables trigger is under Netfilter config (LED target) +# +CONFIG_LEDS_TRIGGER_TRANSIENT=y +CONFIG_LEDS_TRIGGER_CAMERA=y +# CONFIG_LEDS_TRIGGER_PANIC is not set +# CONFIG_LEDS_TRIGGER_NETDEV is not set +# CONFIG_LEDS_TRIGGER_PATTERN is not set +# CONFIG_LEDS_TRIGGER_AUDIO is not set +# CONFIG_LEDS_TRIGGER_TTY is not set + +# +# Simple LED drivers +# +# CONFIG_ACCESSIBILITY is not set +# CONFIG_INFINIBAND is not set +CONFIG_EDAC_ATOMIC_SCRUB=y +CONFIG_EDAC_SUPPORT=y +CONFIG_EDAC=y +CONFIG_EDAC_LEGACY_SYSFS=y +# CONFIG_EDAC_DEBUG is not set +# CONFIG_EDAC_TI is not set +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" +CONFIG_RTC_SYSTOHC=y +CONFIG_RTC_SYSTOHC_DEVICE="rtc0" +# CONFIG_RTC_DEBUG is not set +CONFIG_RTC_NVMEM=y + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set +# CONFIG_RTC_DRV_TEST is not set + +# +# I2C RTC drivers +# +# CONFIG_RTC_DRV_ABB5ZES3 is not set +# CONFIG_RTC_DRV_ABEOZ9 is not set +# CONFIG_RTC_DRV_ABX80X is not set +CONFIG_RTC_DRV_AS3722=y +CONFIG_RTC_DRV_DS1307=y +# CONFIG_RTC_DRV_DS1307_CENTURY is not set +# CONFIG_RTC_DRV_DS1374 is not set +# CONFIG_RTC_DRV_DS1672 is not set +# CONFIG_RTC_DRV_HYM8563 is not set +# CONFIG_RTC_DRV_MAX6900 is not set +CONFIG_RTC_DRV_MAX8907=y +# CONFIG_RTC_DRV_MAX8998 is not set +# CONFIG_RTC_DRV_MAX8997 is not set +CONFIG_RTC_DRV_MAX77686=y +# CONFIG_RTC_DRV_RK808 is not set +# CONFIG_RTC_DRV_RS5C372 is not set +# CONFIG_RTC_DRV_ISL1208 is not set +# CONFIG_RTC_DRV_ISL12022 is not set +# CONFIG_RTC_DRV_ISL12026 is not set +# CONFIG_RTC_DRV_X1205 is not set +# CONFIG_RTC_DRV_PCF8523 is not set +# CONFIG_RTC_DRV_PCF85063 is not set +# CONFIG_RTC_DRV_PCF85363 is not set +# CONFIG_RTC_DRV_PCF8563 is not set +# CONFIG_RTC_DRV_PCF8583 is not set +# CONFIG_RTC_DRV_M41T80 is not set +# CONFIG_RTC_DRV_BQ32K is not set +CONFIG_RTC_DRV_TWL4030=y +CONFIG_RTC_DRV_PALMAS=y +CONFIG_RTC_DRV_TPS6586X=y +CONFIG_RTC_DRV_TPS65910=y +# CONFIG_RTC_DRV_RC5T619 is not set +# CONFIG_RTC_DRV_S35390A is not set +# CONFIG_RTC_DRV_FM3130 is not set +# CONFIG_RTC_DRV_RX8010 is not set +# CONFIG_RTC_DRV_RX8581 is not set +# CONFIG_RTC_DRV_RX8025 is not set +CONFIG_RTC_DRV_EM3027=y +# CONFIG_RTC_DRV_RV3028 is not set +# CONFIG_RTC_DRV_RV3032 is not set +# CONFIG_RTC_DRV_RV8803 is not set +# CONFIG_RTC_DRV_S5M is not set +# CONFIG_RTC_DRV_SD3078 is not set + +# +# SPI RTC drivers +# +# CONFIG_RTC_DRV_M41T93 is not set +# CONFIG_RTC_DRV_M41T94 is not set +# CONFIG_RTC_DRV_DS1302 is not set +# CONFIG_RTC_DRV_DS1305 is not set +# CONFIG_RTC_DRV_DS1343 is not set +# CONFIG_RTC_DRV_DS1347 is not set +# CONFIG_RTC_DRV_DS1390 is not set +# CONFIG_RTC_DRV_MAX6916 is not set +# CONFIG_RTC_DRV_R9701 is not set +# CONFIG_RTC_DRV_RX4581 is not set +# CONFIG_RTC_DRV_RS5C348 is not set +# CONFIG_RTC_DRV_MAX6902 is not set +# CONFIG_RTC_DRV_PCF2123 is not set +# CONFIG_RTC_DRV_MCP795 is not set +CONFIG_RTC_I2C_AND_SPI=y + +# +# SPI and I2C RTC drivers +# +# CONFIG_RTC_DRV_DS3232 is not set +# CONFIG_RTC_DRV_PCF2127 is not set +# CONFIG_RTC_DRV_RV3029C2 is not set +# CONFIG_RTC_DRV_RX6110 is not set + +# +# Platform RTC drivers +# +# CONFIG_RTC_DRV_CMOS is not set +# CONFIG_RTC_DRV_DS1286 is not set +# CONFIG_RTC_DRV_DS1511 is not set +# CONFIG_RTC_DRV_DS1553 is not set +# CONFIG_RTC_DRV_DS1685_FAMILY is not set +# CONFIG_RTC_DRV_DS1742 is not set +# CONFIG_RTC_DRV_DS2404 is not set +# CONFIG_RTC_DRV_EFI is not set +# CONFIG_RTC_DRV_STK17TA8 is not set +# CONFIG_RTC_DRV_M48T86 is not set +# CONFIG_RTC_DRV_M48T35 is not set +# CONFIG_RTC_DRV_M48T59 is not set +# CONFIG_RTC_DRV_MSM6242 is not set +# CONFIG_RTC_DRV_BQ4802 is not set +# CONFIG_RTC_DRV_RP5C01 is not set +# CONFIG_RTC_DRV_V3020 is not set +# CONFIG_RTC_DRV_ZYNQMP is not set + +# +# on-CPU RTC drivers +# +# CONFIG_RTC_DRV_OMAP is not set +# CONFIG_RTC_DRV_PL030 is not set +CONFIG_RTC_DRV_PL031=y +# CONFIG_RTC_DRV_CADENCE is not set +# CONFIG_RTC_DRV_FTRTC010 is not set +# CONFIG_RTC_DRV_PM8XXX is not set +# CONFIG_RTC_DRV_R7301 is not set +# CONFIG_RTC_DRV_CPCAP is not set + +# +# HID Sensor RTC drivers +# +# CONFIG_RTC_DRV_GOLDFISH is not set +CONFIG_DMADEVICES=y +# CONFIG_DMADEVICES_DEBUG is not set + +# +# DMA Devices +# +CONFIG_DMA_ENGINE=y +CONFIG_DMA_VIRTUAL_CHANNELS=y +CONFIG_DMA_OF=y +# CONFIG_ALTERA_MSGDMA is not set +# CONFIG_AMBA_PL08X is not set +# CONFIG_DW_AXI_DMAC is not set +CONFIG_FSL_EDMA=y +# CONFIG_FSL_QDMA is not set +# CONFIG_INTEL_IDMA64 is not set +# CONFIG_NBPFAXI_DMA is not set +CONFIG_PL330_DMA=y +# CONFIG_XILINX_ZYNQMP_DPDMA is not set +# CONFIG_QCOM_HIDMA_MGMT is not set +# CONFIG_QCOM_HIDMA is not set +CONFIG_DW_DMAC_CORE=y +CONFIG_DW_DMAC=y +# CONFIG_SF_PDMA is not set +# CONFIG_TI_CPPI41 is not set +CONFIG_TI_EDMA=y +CONFIG_DMA_OMAP=y +CONFIG_TI_DMA_CROSSBAR=y + +# +# DMA Clients +# +# CONFIG_ASYNC_TX_DMA is not set +# CONFIG_DMATEST is not set + +# +# DMABUF options +# +CONFIG_SYNC_FILE=y +# CONFIG_SW_SYNC is not set +# CONFIG_UDMABUF is not set +# CONFIG_DMABUF_MOVE_NOTIFY is not set +# CONFIG_DMABUF_DEBUG is not set +# CONFIG_DMABUF_SELFTESTS is not set +# CONFIG_DMABUF_HEAPS is not set +# CONFIG_DMABUF_SYSFS_STATS is not set +# end of DMABUF options + +# CONFIG_AUXDISPLAY is not set +# CONFIG_UIO is not set +# CONFIG_VFIO is not set +# CONFIG_VIRT_DRIVERS is not set +CONFIG_VIRTIO=y +CONFIG_VIRTIO_MENU=y +# CONFIG_VIRTIO_BALLOON is not set +# CONFIG_VIRTIO_INPUT is not set +CONFIG_VIRTIO_MMIO=y +# CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES is not set +# CONFIG_VDPA is not set +CONFIG_VHOST_MENU=y +# CONFIG_VHOST_NET is not set +# CONFIG_VHOST_CROSS_ENDIAN_LEGACY is not set + +# +# Microsoft Hyper-V guest support +# +# end of Microsoft Hyper-V guest support + +# CONFIG_GREYBUS is not set +# CONFIG_COMEDI is not set +CONFIG_STAGING=y + +# +# IIO staging drivers +# + +# +# Accelerometers +# +# CONFIG_ADIS16203 is not set +# CONFIG_ADIS16240 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD7816 is not set +# end of Analog to digital converters + +# +# Analog digital bi-direction converters +# +# CONFIG_ADT7316 is not set +# end of Analog digital bi-direction converters + +# +# Capacitance to digital converters +# +# CONFIG_AD7746 is not set +# end of Capacitance to digital converters + +# +# Direct Digital Synthesis +# +# CONFIG_AD9832 is not set +# CONFIG_AD9834 is not set +# end of Direct Digital Synthesis + +# +# Network Analyzer, Impedance Converters +# +# CONFIG_AD5933 is not set +# end of Network Analyzer, Impedance Converters + +# +# Active energy metering IC +# +# CONFIG_ADE7854 is not set +# end of Active energy metering IC + +# +# Resolver to digital converters +# +# CONFIG_AD2S1210 is not set +# end of Resolver to digital converters +# end of IIO staging drivers + +# CONFIG_STAGING_MEDIA is not set +CONFIG_STAGING_BOARD=y +# CONFIG_LTE_GDM724X is not set +# CONFIG_UNISYSSPAR is not set +# CONFIG_COMMON_CLK_XLNX_CLKWZRD is not set +# CONFIG_FB_TFT is not set +# CONFIG_PI433 is not set +# CONFIG_XIL_AXIS_FIFO is not set +# CONFIG_FIELDBUS_DEV is not set +# CONFIG_GOLDFISH is not set +# CONFIG_CHROME_PLATFORMS is not set +# CONFIG_MELLANOX_PLATFORM is not set +CONFIG_HAVE_CLK=y +CONFIG_HAVE_CLK_PREPARE=y +CONFIG_COMMON_CLK=y + +# +# Clock driver for ARM Reference designs +# +CONFIG_CLK_ICST=y +CONFIG_CLK_SP810=y +# CONFIG_CLK_VEXPRESS_OSC is not set +# end of Clock driver for ARM Reference designs + +# CONFIG_LMK04832 is not set +CONFIG_COMMON_CLK_MAX77686=y +# CONFIG_COMMON_CLK_MAX9485 is not set +# CONFIG_COMMON_CLK_RK808 is not set +CONFIG_COMMON_CLK_SCMI=y +# CONFIG_COMMON_CLK_SI5341 is not set +# CONFIG_COMMON_CLK_SI5351 is not set +# CONFIG_COMMON_CLK_SI514 is not set +# CONFIG_COMMON_CLK_SI544 is not set +# CONFIG_COMMON_CLK_SI570 is not set +# CONFIG_COMMON_CLK_CDCE706 is not set +# CONFIG_COMMON_CLK_CDCE925 is not set +# CONFIG_COMMON_CLK_CS2000_CP is not set +# CONFIG_COMMON_CLK_S2MPS11 is not set +# CONFIG_COMMON_CLK_AXI_CLKGEN is not set +# CONFIG_COMMON_CLK_PALMAS is not set +# CONFIG_COMMON_CLK_PWM is not set +# CONFIG_COMMON_CLK_RS9_PCIE is not set +# CONFIG_COMMON_CLK_VC5 is not set +# CONFIG_COMMON_CLK_FIXED_MMIO is not set +CONFIG_COMMON_CLK_TI_ADPLL=y +# CONFIG_XILINX_VCU is not set +CONFIG_HWSPINLOCK=y +# CONFIG_HWSPINLOCK_OMAP is not set + +# +# Clock Source drivers +# +CONFIG_TIMER_OF=y +CONFIG_TIMER_PROBE=y +CONFIG_OMAP_DM_TIMER=y +CONFIG_CLKSRC_MMIO=y +CONFIG_CLKSRC_TI_32K=y +CONFIG_ARM_ARCH_TIMER=y +CONFIG_ARM_ARCH_TIMER_EVTSTREAM=y +CONFIG_ARM_GLOBAL_TIMER=y +CONFIG_ARM_GT_INITIAL_PRESCALER_VAL=2 +CONFIG_ARM_TIMER_SP804=y +CONFIG_CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK=y +CONFIG_CLKSRC_VERSATILE=y +CONFIG_MICROCHIP_PIT64B=y +# end of Clock Source drivers + +CONFIG_MAILBOX=y +# CONFIG_ARM_MHU is not set +# CONFIG_ARM_MHU_V2 is not set +# CONFIG_PLATFORM_MHU is not set +CONFIG_PL320_MBOX=y +# CONFIG_OMAP2PLUS_MBOX is not set +# CONFIG_ALTERA_MBOX is not set +# CONFIG_MAILBOX_TEST is not set +CONFIG_IOMMU_SUPPORT=y + +# +# Generic IOMMU Pagetable Support +# +CONFIG_IOMMU_IO_PGTABLE=y +CONFIG_IOMMU_IO_PGTABLE_LPAE=y +# CONFIG_IOMMU_IO_PGTABLE_LPAE_SELFTEST is not set +# CONFIG_IOMMU_IO_PGTABLE_ARMV7S is not set +# end of Generic IOMMU Pagetable Support + +# CONFIG_IOMMU_DEBUGFS is not set +# CONFIG_OMAP_IOMMU is not set +# CONFIG_ARM_SMMU is not set + +# +# Remoteproc drivers +# +CONFIG_REMOTEPROC=y +# CONFIG_REMOTEPROC_CDEV is not set +# CONFIG_WKUP_M3_RPROC is not set +# end of Remoteproc drivers + +# +# Rpmsg drivers +# +# CONFIG_RPMSG_QCOM_GLINK_RPM is not set +# CONFIG_RPMSG_VIRTIO is not set +# end of Rpmsg drivers + +# CONFIG_SOUNDWIRE is not set + +# +# SOC (System On Chip) specific Drivers +# + +# +# Amlogic SoC drivers +# +# end of Amlogic SoC drivers + +# +# Broadcom SoC drivers +# +CONFIG_SOC_BRCMSTB=y +# end of Broadcom SoC drivers + +# +# NXP/Freescale QorIQ SoC drivers +# +# CONFIG_QUICC_ENGINE is not set +# CONFIG_FSL_RCPM is not set +# end of NXP/Freescale QorIQ SoC drivers + +# +# i.MX SoC drivers +# +# end of i.MX SoC drivers + +# +# Enable LiteX SoC Builder specific drivers +# +# CONFIG_LITEX_SOC_CONTROLLER is not set +# end of Enable LiteX SoC Builder specific drivers + +# +# Qualcomm SoC drivers +# +# end of Qualcomm SoC drivers + +# CONFIG_SOC_TI is not set + +# +# Xilinx SoC drivers +# +# end of Xilinx SoC drivers +# end of SOC (System On Chip) specific Drivers + +CONFIG_PM_DEVFREQ=y + +# +# DEVFREQ Governors +# +CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y +# CONFIG_DEVFREQ_GOV_PERFORMANCE is not set +# CONFIG_DEVFREQ_GOV_POWERSAVE is not set +# CONFIG_DEVFREQ_GOV_USERSPACE is not set +# CONFIG_DEVFREQ_GOV_PASSIVE is not set + +# +# DEVFREQ Drivers +# +CONFIG_PM_DEVFREQ_EVENT=y +CONFIG_EXTCON=y + +# +# Extcon Device Drivers +# +# CONFIG_EXTCON_ADC_JACK is not set +# CONFIG_EXTCON_FSA9480 is not set +# CONFIG_EXTCON_GPIO is not set +# CONFIG_EXTCON_MAX14577 is not set +# CONFIG_EXTCON_MAX3355 is not set +# CONFIG_EXTCON_MAX8997 is not set +# CONFIG_EXTCON_PALMAS is not set +# CONFIG_EXTCON_PTN5150 is not set +# CONFIG_EXTCON_RT8973A is not set +# CONFIG_EXTCON_SM5502 is not set +CONFIG_EXTCON_USB_GPIO=y +# CONFIG_EXTCON_USBC_TUSB320 is not set +CONFIG_MEMORY=y +# CONFIG_ARM_PL172_MPMC is not set +# CONFIG_TI_EMIF is not set +CONFIG_OMAP_GPMC=y +# CONFIG_OMAP_GPMC_DEBUG is not set +# CONFIG_TI_EMIF_SRAM is not set +CONFIG_PL353_SMC=y +CONFIG_IIO=y +CONFIG_IIO_BUFFER=y +CONFIG_IIO_BUFFER_CB=y +# CONFIG_IIO_BUFFER_DMA is not set +# CONFIG_IIO_BUFFER_DMAENGINE is not set +CONFIG_IIO_BUFFER_HW_CONSUMER=y +CONFIG_IIO_KFIFO_BUF=y +CONFIG_IIO_TRIGGERED_BUFFER=y +CONFIG_IIO_CONFIGFS=y +CONFIG_IIO_TRIGGER=y +CONFIG_IIO_CONSUMERS_PER_TRIGGER=2 +# CONFIG_IIO_SW_DEVICE is not set +CONFIG_IIO_SW_TRIGGER=y +# CONFIG_IIO_TRIGGERED_EVENT is not set + +# +# Accelerometers +# +# CONFIG_ADIS16201 is not set +# CONFIG_ADIS16209 is not set +# CONFIG_ADXL313_I2C is not set +# CONFIG_ADXL313_SPI is not set +# CONFIG_ADXL345_I2C is not set +# CONFIG_ADXL345_SPI is not set +# CONFIG_ADXL355_I2C is not set +# CONFIG_ADXL355_SPI is not set +# CONFIG_ADXL367_SPI is not set +# CONFIG_ADXL367_I2C is not set +# CONFIG_ADXL372_SPI is not set +# CONFIG_ADXL372_I2C is not set +# CONFIG_BMA180 is not set +# CONFIG_BMA220 is not set +# CONFIG_BMA400 is not set +# CONFIG_BMC150_ACCEL is not set +# CONFIG_BMI088_ACCEL is not set +# CONFIG_DA280 is not set +# CONFIG_DA311 is not set +# CONFIG_DMARD06 is not set +# CONFIG_DMARD09 is not set +# CONFIG_DMARD10 is not set +# CONFIG_FXLS8962AF_I2C is not set +# CONFIG_FXLS8962AF_SPI is not set +# CONFIG_IIO_ST_ACCEL_3AXIS is not set +# CONFIG_KXSD9 is not set +# CONFIG_KXCJK1013 is not set +# CONFIG_MC3230 is not set +# CONFIG_MMA7455_I2C is not set +# CONFIG_MMA7455_SPI is not set +# CONFIG_MMA7660 is not set +# CONFIG_MMA8452 is not set +# CONFIG_MMA9551 is not set +# CONFIG_MMA9553 is not set +# CONFIG_MXC4005 is not set +# CONFIG_MXC6255 is not set +# CONFIG_SCA3000 is not set +# CONFIG_SCA3300 is not set +# CONFIG_STK8312 is not set +# CONFIG_STK8BA50 is not set +# end of Accelerometers + +# +# Analog to digital converters +# +# CONFIG_AD7091R5 is not set +# CONFIG_AD7124 is not set +# CONFIG_AD7192 is not set +# CONFIG_AD7266 is not set +# CONFIG_AD7280 is not set +# CONFIG_AD7291 is not set +# CONFIG_AD7292 is not set +# CONFIG_AD7298 is not set +# CONFIG_AD7476 is not set +# CONFIG_AD7606_IFACE_PARALLEL is not set +# CONFIG_AD7606_IFACE_SPI is not set +# CONFIG_AD7766 is not set +# CONFIG_AD7768_1 is not set +# CONFIG_AD7780 is not set +# CONFIG_AD7791 is not set +# CONFIG_AD7793 is not set +# CONFIG_AD7887 is not set +# CONFIG_AD7923 is not set +# CONFIG_AD7949 is not set +# CONFIG_AD799X is not set +# CONFIG_ADI_AXI_ADC is not set +# CONFIG_AXP20X_ADC is not set +# CONFIG_AXP288_ADC is not set +# CONFIG_CC10001_ADC is not set +# CONFIG_CPCAP_ADC is not set +# CONFIG_ENVELOPE_DETECTOR is not set +# CONFIG_HI8435 is not set +# CONFIG_HX711 is not set +# CONFIG_INA2XX_ADC is not set +# CONFIG_LTC2471 is not set +# CONFIG_LTC2485 is not set +# CONFIG_LTC2496 is not set +# CONFIG_LTC2497 is not set +# CONFIG_MAX1027 is not set +# CONFIG_MAX11100 is not set +# CONFIG_MAX1118 is not set +# CONFIG_MAX1241 is not set +# CONFIG_MAX1363 is not set +# CONFIG_MAX9611 is not set +# CONFIG_MCP320X is not set +# CONFIG_MCP3422 is not set +# CONFIG_MCP3911 is not set +# CONFIG_NAU7802 is not set +# CONFIG_PALMAS_GPADC is not set +# CONFIG_QCOM_PM8XXX_XOADC is not set +# CONFIG_QCOM_SPMI_IADC is not set +# CONFIG_QCOM_SPMI_VADC is not set +# CONFIG_QCOM_SPMI_ADC5 is not set +# CONFIG_RN5T618_ADC is not set +# CONFIG_SD_ADC_MODULATOR is not set +# CONFIG_STMPE_ADC is not set +# CONFIG_TI_ADC081C is not set +# CONFIG_TI_ADC0832 is not set +# CONFIG_TI_ADC084S021 is not set +# CONFIG_TI_ADC12138 is not set +# CONFIG_TI_ADC108S102 is not set +# CONFIG_TI_ADC128S052 is not set +# CONFIG_TI_ADC161S626 is not set +# CONFIG_TI_ADS1015 is not set +# CONFIG_TI_ADS7950 is not set +# CONFIG_TI_ADS8344 is not set +# CONFIG_TI_ADS8688 is not set +# CONFIG_TI_ADS124S08 is not set +# CONFIG_TI_ADS131E08 is not set +CONFIG_TI_AM335X_ADC=y +# CONFIG_TI_TLC4541 is not set +# CONFIG_TI_TSC2046 is not set +# CONFIG_TWL4030_MADC is not set +# CONFIG_TWL6030_GPADC is not set +# CONFIG_VF610_ADC is not set +CONFIG_XILINX_XADC=y +# end of Analog to digital converters + +# +# Analog to digital and digital to analog converters +# +# CONFIG_AD74413R is not set +# end of Analog to digital and digital to analog converters + +# +# Analog Front Ends +# +# CONFIG_IIO_RESCALE is not set +# end of Analog Front Ends + +# +# Amplifiers +# +# CONFIG_AD8366 is not set +# CONFIG_ADA4250 is not set +# CONFIG_HMC425 is not set +# end of Amplifiers + +# +# Capacitance to digital converters +# +# CONFIG_AD7150 is not set +# end of Capacitance to digital converters + +# +# Chemical Sensors +# +# CONFIG_ATLAS_PH_SENSOR is not set +# CONFIG_ATLAS_EZO_SENSOR is not set +# CONFIG_BME680 is not set +# CONFIG_CCS811 is not set +# CONFIG_IAQCORE is not set +# CONFIG_PMS7003 is not set +# CONFIG_SCD30_CORE is not set +# CONFIG_SCD4X is not set +# CONFIG_SENSIRION_SGP30 is not set +# CONFIG_SENSIRION_SGP40 is not set +# CONFIG_SPS30_I2C is not set +# CONFIG_SPS30_SERIAL is not set +# CONFIG_SENSEAIR_SUNRISE_CO2 is not set +# CONFIG_VZ89X is not set +# end of Chemical Sensors + +# +# Hid Sensor IIO Common +# +# end of Hid Sensor IIO Common + +# +# IIO SCMI Sensors +# +# CONFIG_IIO_SCMI is not set +# end of IIO SCMI Sensors + +# +# SSP Sensor Common +# +# CONFIG_IIO_SSP_SENSORHUB is not set +# end of SSP Sensor Common + +# +# Digital to analog converters +# +# CONFIG_AD3552R is not set +# CONFIG_AD5064 is not set +# CONFIG_AD5360 is not set +# CONFIG_AD5380 is not set +# CONFIG_AD5421 is not set +# CONFIG_AD5446 is not set +# CONFIG_AD5449 is not set +# CONFIG_AD5592R is not set +# CONFIG_AD5593R is not set +# CONFIG_AD5504 is not set +# CONFIG_AD5624R_SPI is not set +# CONFIG_LTC2688 is not set +# CONFIG_AD5686_SPI is not set +# CONFIG_AD5696_I2C is not set +# CONFIG_AD5755 is not set +# CONFIG_AD5758 is not set +# CONFIG_AD5761 is not set +# CONFIG_AD5764 is not set +# CONFIG_AD5766 is not set +# CONFIG_AD5770R is not set +# CONFIG_AD5791 is not set +# CONFIG_AD7293 is not set +# CONFIG_AD7303 is not set +# CONFIG_AD8801 is not set +# CONFIG_DPOT_DAC is not set +# CONFIG_DS4424 is not set +# CONFIG_LTC1660 is not set +# CONFIG_LTC2632 is not set +# CONFIG_M62332 is not set +# CONFIG_MAX517 is not set +# CONFIG_MAX5821 is not set +# CONFIG_MCP4725 is not set +# CONFIG_MCP4922 is not set +# CONFIG_TI_DAC082S085 is not set +# CONFIG_TI_DAC5571 is not set +# CONFIG_TI_DAC7311 is not set +# CONFIG_TI_DAC7612 is not set +# CONFIG_VF610_DAC is not set +# end of Digital to analog converters + +# +# IIO dummy driver +# +# end of IIO dummy driver + +# +# Filters +# +# end of Filters + +# +# Frequency Synthesizers DDS/PLL +# + +# +# Clock Generator/Distribution +# +# CONFIG_AD9523 is not set +# end of Clock Generator/Distribution + +# +# Phase-Locked Loop (PLL) frequency synthesizers +# +# CONFIG_ADF4350 is not set +# CONFIG_ADF4371 is not set +# CONFIG_ADMV1013 is not set +# CONFIG_ADMV4420 is not set +# CONFIG_ADRF6780 is not set +# end of Phase-Locked Loop (PLL) frequency synthesizers +# end of Frequency Synthesizers DDS/PLL + +# +# Digital gyroscope sensors +# +# CONFIG_ADIS16080 is not set +# CONFIG_ADIS16130 is not set +# CONFIG_ADIS16136 is not set +# CONFIG_ADIS16260 is not set +# CONFIG_ADXRS290 is not set +# CONFIG_ADXRS450 is not set +# CONFIG_BMG160 is not set +# CONFIG_FXAS21002C is not set +CONFIG_MPU3050=y +CONFIG_MPU3050_I2C=y +# CONFIG_IIO_ST_GYRO_3AXIS is not set +# CONFIG_ITG3200 is not set +# end of Digital gyroscope sensors + +# +# Health Sensors +# + +# +# Heart Rate Monitors +# +# CONFIG_AFE4403 is not set +# CONFIG_AFE4404 is not set +# CONFIG_MAX30100 is not set +# CONFIG_MAX30102 is not set +# end of Heart Rate Monitors +# end of Health Sensors + +# +# Humidity sensors +# +# CONFIG_AM2315 is not set +# CONFIG_DHT11 is not set +# CONFIG_HDC100X is not set +# CONFIG_HDC2010 is not set +# CONFIG_HTS221 is not set +# CONFIG_HTU21 is not set +# CONFIG_SI7005 is not set +# CONFIG_SI7020 is not set +# end of Humidity sensors + +# +# Inertial measurement units +# +# CONFIG_ADIS16400 is not set +# CONFIG_ADIS16460 is not set +# CONFIG_ADIS16475 is not set +# CONFIG_ADIS16480 is not set +# CONFIG_BMI160_I2C is not set +# CONFIG_BMI160_SPI is not set +# CONFIG_FXOS8700_I2C is not set +# CONFIG_FXOS8700_SPI is not set +# CONFIG_KMX61 is not set +# CONFIG_INV_ICM42600_I2C is not set +# CONFIG_INV_ICM42600_SPI is not set +# CONFIG_INV_MPU6050_I2C is not set +# CONFIG_INV_MPU6050_SPI is not set +# CONFIG_IIO_ST_LSM6DSX is not set +# CONFIG_IIO_ST_LSM9DS0 is not set +# end of Inertial measurement units + +# +# Light sensors +# +# CONFIG_ADJD_S311 is not set +# CONFIG_ADUX1020 is not set +# CONFIG_AL3010 is not set +# CONFIG_AL3320A is not set +# CONFIG_APDS9300 is not set +# CONFIG_APDS9960 is not set +# CONFIG_AS73211 is not set +# CONFIG_BH1750 is not set +# CONFIG_BH1780 is not set +# CONFIG_CM32181 is not set +# CONFIG_CM3232 is not set +# CONFIG_CM3323 is not set +# CONFIG_CM3605 is not set +# CONFIG_CM36651 is not set +# CONFIG_GP2AP002 is not set +# CONFIG_GP2AP020A00F is not set +CONFIG_SENSORS_ISL29018=y +CONFIG_SENSORS_ISL29028=y +# CONFIG_ISL29125 is not set +# CONFIG_JSA1212 is not set +# CONFIG_RPR0521 is not set +# CONFIG_LTR501 is not set +# CONFIG_LV0104CS is not set +# CONFIG_MAX44000 is not set +# CONFIG_MAX44009 is not set +# CONFIG_NOA1305 is not set +# CONFIG_OPT3001 is not set +# CONFIG_PA12203001 is not set +# CONFIG_SI1133 is not set +# CONFIG_SI1145 is not set +# CONFIG_STK3310 is not set +# CONFIG_ST_UVIS25 is not set +# CONFIG_TCS3414 is not set +# CONFIG_TCS3472 is not set +# CONFIG_SENSORS_TSL2563 is not set +# CONFIG_TSL2583 is not set +# CONFIG_TSL2591 is not set +# CONFIG_TSL2772 is not set +# CONFIG_TSL4531 is not set +# CONFIG_US5182D is not set +# CONFIG_VCNL4000 is not set +# CONFIG_VCNL4035 is not set +# CONFIG_VEML6030 is not set +# CONFIG_VEML6070 is not set +# CONFIG_VL6180 is not set +# CONFIG_ZOPT2201 is not set +# end of Light sensors + +# +# Magnetometer sensors +# +# CONFIG_AK8974 is not set +CONFIG_AK8975=y +# CONFIG_AK09911 is not set +# CONFIG_BMC150_MAGN_I2C is not set +# CONFIG_BMC150_MAGN_SPI is not set +# CONFIG_MAG3110 is not set +# CONFIG_MMC35240 is not set +# CONFIG_IIO_ST_MAGN_3AXIS is not set +# CONFIG_SENSORS_HMC5843_I2C is not set +# CONFIG_SENSORS_HMC5843_SPI is not set +# CONFIG_SENSORS_RM3100_I2C is not set +# CONFIG_SENSORS_RM3100_SPI is not set +# CONFIG_YAMAHA_YAS530 is not set +# end of Magnetometer sensors + +# +# Multiplexers +# +# CONFIG_IIO_MUX is not set +# end of Multiplexers + +# +# Inclinometer sensors +# +# end of Inclinometer sensors + +# +# Triggers - standalone +# +CONFIG_IIO_HRTIMER_TRIGGER=y +# CONFIG_IIO_INTERRUPT_TRIGGER is not set +# CONFIG_IIO_TIGHTLOOP_TRIGGER is not set +# CONFIG_IIO_SYSFS_TRIGGER is not set +# end of Triggers - standalone + +# +# Linear and angular position sensors +# +# end of Linear and angular position sensors + +# +# Digital potentiometers +# +# CONFIG_AD5110 is not set +# CONFIG_AD5272 is not set +# CONFIG_DS1803 is not set +# CONFIG_MAX5432 is not set +# CONFIG_MAX5481 is not set +# CONFIG_MAX5487 is not set +# CONFIG_MCP4018 is not set +# CONFIG_MCP4131 is not set +# CONFIG_MCP4531 is not set +# CONFIG_MCP41010 is not set +# CONFIG_TPL0102 is not set +# end of Digital potentiometers + +# +# Digital potentiostats +# +# CONFIG_LMP91000 is not set +# end of Digital potentiostats + +# +# Pressure sensors +# +# CONFIG_ABP060MG is not set +# CONFIG_BMP280 is not set +# CONFIG_DLHL60D is not set +# CONFIG_DPS310 is not set +# CONFIG_HP03 is not set +# CONFIG_ICP10100 is not set +# CONFIG_MPL115_I2C is not set +# CONFIG_MPL115_SPI is not set +# CONFIG_MPL3115 is not set +# CONFIG_MS5611 is not set +# CONFIG_MS5637 is not set +# CONFIG_IIO_ST_PRESS is not set +# CONFIG_T5403 is not set +# CONFIG_HP206C is not set +# CONFIG_ZPA2326 is not set +# end of Pressure sensors + +# +# Lightning sensors +# +# CONFIG_AS3935 is not set +# end of Lightning sensors + +# +# Proximity and distance sensors +# +# CONFIG_ISL29501 is not set +# CONFIG_LIDAR_LITE_V2 is not set +# CONFIG_MB1232 is not set +# CONFIG_PING is not set +# CONFIG_RFD77402 is not set +# CONFIG_SRF04 is not set +# CONFIG_SX9310 is not set +# CONFIG_SX9324 is not set +# CONFIG_SX9360 is not set +# CONFIG_SX9500 is not set +# CONFIG_SRF08 is not set +# CONFIG_VCNL3020 is not set +# CONFIG_VL53L0X_I2C is not set +# end of Proximity and distance sensors + +# +# Resolver to digital converters +# +# CONFIG_AD2S90 is not set +# CONFIG_AD2S1200 is not set +# end of Resolver to digital converters + +# +# Temperature sensors +# +# CONFIG_LTC2983 is not set +# CONFIG_MAXIM_THERMOCOUPLE is not set +# CONFIG_MLX90614 is not set +# CONFIG_MLX90632 is not set +# CONFIG_TMP006 is not set +# CONFIG_TMP007 is not set +# CONFIG_TMP117 is not set +# CONFIG_TSYS01 is not set +# CONFIG_TSYS02D is not set +# CONFIG_MAX31856 is not set +# CONFIG_MAX31865 is not set +# end of Temperature sensors + +CONFIG_PWM=y +CONFIG_PWM_SYSFS=y +# CONFIG_PWM_DEBUG is not set +# CONFIG_PWM_ATMEL_TCB is not set +# CONFIG_PWM_FSL_FTM is not set +# CONFIG_PWM_OMAP_DMTIMER is not set +# CONFIG_PWM_PCA9685 is not set +# CONFIG_PWM_STMPE is not set +CONFIG_PWM_TIECAP=y +CONFIG_PWM_TIEHRPWM=y +# CONFIG_PWM_TWL is not set +# CONFIG_PWM_TWL_LED is not set + +# +# IRQ chip support +# +CONFIG_IRQCHIP=y +CONFIG_ARM_GIC=y +CONFIG_ARM_GIC_MAX_NR=1 +# CONFIG_AL_FIC is not set +CONFIG_OMAP_IRQCHIP=y +CONFIG_IRQ_CROSSBAR=y +# end of IRQ chip support + +# CONFIG_IPACK_BUS is not set +CONFIG_ARCH_HAS_RESET_CONTROLLER=y +CONFIG_RESET_CONTROLLER=y +CONFIG_RESET_SCMI=y +# CONFIG_RESET_TI_SYSCON is not set + +# +# PHY Subsystem +# +CONFIG_GENERIC_PHY=y +# CONFIG_PHY_CAN_TRANSCEIVER is not set + +# +# PHY drivers for Broadcom platforms +# +# CONFIG_BCM_KONA_USB2_PHY is not set +# end of PHY drivers for Broadcom platforms + +# CONFIG_PHY_CADENCE_TORRENT is not set +# CONFIG_PHY_CADENCE_DPHY is not set +# CONFIG_PHY_CADENCE_DPHY_RX is not set +# CONFIG_PHY_CADENCE_SIERRA is not set +# CONFIG_PHY_CADENCE_SALVO is not set +# CONFIG_PHY_PXA_28NM_HSIC is not set +# CONFIG_PHY_PXA_28NM_USB2 is not set +# CONFIG_PHY_LAN966X_SERDES is not set +# CONFIG_PHY_CPCAP_USB is not set +# CONFIG_PHY_MAPPHONE_MDM6600 is not set +# CONFIG_PHY_OCELOT_SERDES is not set +CONFIG_PHY_QCOM_USB_HS=y +# CONFIG_PHY_QCOM_USB_HSIC is not set +# CONFIG_PHY_SAMSUNG_USB2 is not set +# CONFIG_PHY_DM816X_USB is not set +CONFIG_OMAP_CONTROL_PHY=y +CONFIG_OMAP_USB2=y +CONFIG_TI_PIPE3=y +# CONFIG_PHY_TUSB1210 is not set +CONFIG_PHY_TI_GMII_SEL=y +# end of PHY Subsystem + +# CONFIG_POWERCAP is not set +# CONFIG_MCB is not set + +# +# Performance monitor support +# +# CONFIG_ARM_CCI_PMU is not set +# CONFIG_ARM_CCN is not set +CONFIG_ARM_PMU=y +# end of Performance monitor support + +CONFIG_RAS=y + +# +# Android +# +# CONFIG_ANDROID is not set +# end of Android + +# CONFIG_DAX is not set +CONFIG_NVMEM=y +CONFIG_NVMEM_SYSFS=y +# CONFIG_NVMEM_SPMI_SDAM is not set +# CONFIG_NVMEM_RMEM is not set + +# +# HW tracing support +# +# CONFIG_STM is not set +# CONFIG_INTEL_TH is not set +# end of HW tracing support + +# CONFIG_FPGA is not set +# CONFIG_FSI is not set +# CONFIG_TEE is not set +CONFIG_PM_OPP=y +# CONFIG_SIOX is not set +# CONFIG_SLIMBUS is not set +CONFIG_INTERCONNECT=y +# CONFIG_COUNTER is not set +# CONFIG_MOST is not set +# CONFIG_PECI is not set +# end of Device Drivers + +# +# File systems +# +CONFIG_DCACHE_WORD_ACCESS=y +# CONFIG_VALIDATE_FS_PARSER is not set +CONFIG_FS_IOMAP=y +# CONFIG_EXT2_FS is not set +# CONFIG_EXT3_FS is not set +CONFIG_EXT4_FS=y +CONFIG_EXT4_USE_FOR_EXT2=y +# CONFIG_EXT4_FS_POSIX_ACL is not set +# CONFIG_EXT4_FS_SECURITY is not set +# CONFIG_EXT4_DEBUG is not set +CONFIG_JBD2=y +# CONFIG_JBD2_DEBUG is not set +CONFIG_FS_MBCACHE=y +# CONFIG_REISERFS_FS is not set +# CONFIG_JFS_FS is not set +# CONFIG_XFS_FS is not set +# CONFIG_GFS2_FS is not set +# CONFIG_OCFS2_FS is not set +# CONFIG_BTRFS_FS is not set +# CONFIG_NILFS2_FS is not set +# CONFIG_F2FS_FS is not set +CONFIG_FS_POSIX_ACL=y +CONFIG_EXPORTFS=y +# CONFIG_EXPORTFS_BLOCK_OPS is not set +CONFIG_FILE_LOCKING=y +# CONFIG_FS_ENCRYPTION is not set +# CONFIG_FS_VERITY is not set +CONFIG_FSNOTIFY=y +CONFIG_DNOTIFY=y +CONFIG_INOTIFY_USER=y +# CONFIG_FANOTIFY is not set +# CONFIG_QUOTA is not set +CONFIG_AUTOFS4_FS=y +CONFIG_AUTOFS_FS=y +# CONFIG_FUSE_FS is not set +# CONFIG_OVERLAY_FS is not set + +# +# Caches +# +# CONFIG_FSCACHE is not set +# end of Caches + +# +# CD-ROM/DVD Filesystems +# +# CONFIG_ISO9660_FS is not set +# CONFIG_UDF_FS is not set +# end of CD-ROM/DVD Filesystems + +# +# DOS/FAT/EXFAT/NT Filesystems +# +CONFIG_FAT_FS=y +CONFIG_MSDOS_FS=y +CONFIG_VFAT_FS=y +CONFIG_FAT_DEFAULT_CODEPAGE=437 +CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" +# CONFIG_FAT_DEFAULT_UTF8 is not set +# CONFIG_EXFAT_FS is not set +CONFIG_NTFS_FS=y +# CONFIG_NTFS_DEBUG is not set +# CONFIG_NTFS_RW is not set +# CONFIG_NTFS3_FS is not set +# end of DOS/FAT/EXFAT/NT Filesystems + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_SYSCTL=y +CONFIG_PROC_PAGE_MONITOR=y +# CONFIG_PROC_CHILDREN is not set +CONFIG_KERNFS=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_TMPFS_XATTR=y +CONFIG_MEMFD_CREATE=y +CONFIG_CONFIGFS_FS=y +# CONFIG_EFIVAR_FS is not set +# end of Pseudo filesystems + +CONFIG_MISC_FILESYSTEMS=y +# CONFIG_ORANGEFS_FS is not set +# CONFIG_ADFS_FS is not set +# CONFIG_AFFS_FS is not set +# CONFIG_ECRYPT_FS is not set +# CONFIG_HFS_FS is not set +# CONFIG_HFSPLUS_FS is not set +# CONFIG_BEFS_FS is not set +# CONFIG_BFS_FS is not set +# CONFIG_EFS_FS is not set +# CONFIG_JFFS2_FS is not set +CONFIG_UBIFS_FS=y +# CONFIG_UBIFS_FS_ADVANCED_COMPR is not set +CONFIG_UBIFS_FS_LZO=y +CONFIG_UBIFS_FS_ZLIB=y +CONFIG_UBIFS_FS_ZSTD=y +# CONFIG_UBIFS_ATIME_SUPPORT is not set +CONFIG_UBIFS_FS_XATTR=y +CONFIG_UBIFS_FS_SECURITY=y +# CONFIG_UBIFS_FS_AUTHENTICATION is not set +# CONFIG_CRAMFS is not set +CONFIG_SQUASHFS=y +CONFIG_SQUASHFS_FILE_CACHE=y +# CONFIG_SQUASHFS_FILE_DIRECT is not set +CONFIG_SQUASHFS_DECOMP_SINGLE=y +# CONFIG_SQUASHFS_DECOMP_MULTI is not set +# CONFIG_SQUASHFS_DECOMP_MULTI_PERCPU is not set +# CONFIG_SQUASHFS_XATTR is not set +CONFIG_SQUASHFS_ZLIB=y +# CONFIG_SQUASHFS_LZ4 is not set +CONFIG_SQUASHFS_LZO=y +CONFIG_SQUASHFS_XZ=y +# CONFIG_SQUASHFS_ZSTD is not set +# CONFIG_SQUASHFS_4K_DEVBLK_SIZE is not set +# CONFIG_SQUASHFS_EMBEDDED is not set +CONFIG_SQUASHFS_FRAGMENT_CACHE_SIZE=3 +# CONFIG_VXFS_FS is not set +# CONFIG_MINIX_FS is not set +# CONFIG_OMFS_FS is not set +# CONFIG_HPFS_FS is not set +# CONFIG_QNX4FS_FS is not set +# CONFIG_QNX6FS_FS is not set +# CONFIG_ROMFS_FS is not set +CONFIG_PSTORE=y +CONFIG_PSTORE_DEFAULT_KMSG_BYTES=10240 +CONFIG_PSTORE_DEFLATE_COMPRESS=y +# CONFIG_PSTORE_LZO_COMPRESS is not set +# CONFIG_PSTORE_LZ4_COMPRESS is not set +# CONFIG_PSTORE_LZ4HC_COMPRESS is not set +# CONFIG_PSTORE_842_COMPRESS is not set +# CONFIG_PSTORE_ZSTD_COMPRESS is not set +CONFIG_PSTORE_COMPRESS=y +CONFIG_PSTORE_DEFLATE_COMPRESS_DEFAULT=y +CONFIG_PSTORE_COMPRESS_DEFAULT="deflate" +CONFIG_PSTORE_CONSOLE=y +CONFIG_PSTORE_PMSG=y +CONFIG_PSTORE_RAM=y +# CONFIG_PSTORE_BLK is not set +# CONFIG_SYSV_FS is not set +# CONFIG_UFS_FS is not set +# CONFIG_EROFS_FS is not set +CONFIG_NETWORK_FILESYSTEMS=y +CONFIG_NFS_FS=y +CONFIG_NFS_V2=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_V4=y +# CONFIG_NFS_SWAP is not set +CONFIG_NFS_V4_1=y +CONFIG_NFS_V4_2=y +CONFIG_PNFS_FILE_LAYOUT=y +CONFIG_PNFS_FLEXFILE_LAYOUT=y +CONFIG_NFS_V4_1_IMPLEMENTATION_ID_DOMAIN="kernel.org" +# CONFIG_NFS_V4_1_MIGRATION is not set +CONFIG_ROOT_NFS=y +# CONFIG_NFS_USE_LEGACY_DNS is not set +CONFIG_NFS_USE_KERNEL_DNS=y +CONFIG_NFS_DISABLE_UDP_SUPPORT=y +# CONFIG_NFS_V4_2_READ_PLUS is not set +# CONFIG_NFSD is not set +CONFIG_GRACE_PERIOD=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_NFS_V4_2_SSC_HELPER=y +CONFIG_SUNRPC=y +CONFIG_SUNRPC_GSS=y +CONFIG_SUNRPC_BACKCHANNEL=y +# CONFIG_SUNRPC_DEBUG is not set +# CONFIG_CEPH_FS is not set +# CONFIG_CIFS is not set +# CONFIG_SMB_SERVER is not set +# CONFIG_CODA_FS is not set +# CONFIG_AFS_FS is not set +CONFIG_NLS=y +CONFIG_NLS_DEFAULT="iso8859-1" +CONFIG_NLS_CODEPAGE_437=y +# CONFIG_NLS_CODEPAGE_737 is not set +# CONFIG_NLS_CODEPAGE_775 is not set +# CONFIG_NLS_CODEPAGE_850 is not set +# CONFIG_NLS_CODEPAGE_852 is not set +# CONFIG_NLS_CODEPAGE_855 is not set +# CONFIG_NLS_CODEPAGE_857 is not set +# CONFIG_NLS_CODEPAGE_860 is not set +# CONFIG_NLS_CODEPAGE_861 is not set +# CONFIG_NLS_CODEPAGE_862 is not set +# CONFIG_NLS_CODEPAGE_863 is not set +# CONFIG_NLS_CODEPAGE_864 is not set +# CONFIG_NLS_CODEPAGE_865 is not set +# CONFIG_NLS_CODEPAGE_866 is not set +# CONFIG_NLS_CODEPAGE_869 is not set +# CONFIG_NLS_CODEPAGE_936 is not set +# CONFIG_NLS_CODEPAGE_950 is not set +# CONFIG_NLS_CODEPAGE_932 is not set +# CONFIG_NLS_CODEPAGE_949 is not set +# CONFIG_NLS_CODEPAGE_874 is not set +# CONFIG_NLS_ISO8859_8 is not set +# CONFIG_NLS_CODEPAGE_1250 is not set +# CONFIG_NLS_CODEPAGE_1251 is not set +# CONFIG_NLS_ASCII is not set +CONFIG_NLS_ISO8859_1=y +# CONFIG_NLS_ISO8859_2 is not set +# CONFIG_NLS_ISO8859_3 is not set +# CONFIG_NLS_ISO8859_4 is not set +# CONFIG_NLS_ISO8859_5 is not set +# CONFIG_NLS_ISO8859_6 is not set +# CONFIG_NLS_ISO8859_7 is not set +# CONFIG_NLS_ISO8859_9 is not set +# CONFIG_NLS_ISO8859_13 is not set +# CONFIG_NLS_ISO8859_14 is not set +# CONFIG_NLS_ISO8859_15 is not set +# CONFIG_NLS_KOI8_R is not set +# CONFIG_NLS_KOI8_U is not set +# CONFIG_NLS_MAC_ROMAN is not set +# CONFIG_NLS_MAC_CELTIC is not set +# CONFIG_NLS_MAC_CENTEURO is not set +# CONFIG_NLS_MAC_CROATIAN is not set +# CONFIG_NLS_MAC_CYRILLIC is not set +# CONFIG_NLS_MAC_GAELIC is not set +# CONFIG_NLS_MAC_GREEK is not set +# CONFIG_NLS_MAC_ICELAND is not set +# CONFIG_NLS_MAC_INUIT is not set +# CONFIG_NLS_MAC_ROMANIAN is not set +# CONFIG_NLS_MAC_TURKISH is not set +CONFIG_NLS_UTF8=y +# CONFIG_DLM is not set +# CONFIG_UNICODE is not set +CONFIG_IO_WQ=y +# end of File systems + +# +# Security options +# +CONFIG_KEYS=y +# CONFIG_KEYS_REQUEST_CACHE is not set +# CONFIG_PERSISTENT_KEYRINGS is not set +# CONFIG_ENCRYPTED_KEYS is not set +# CONFIG_KEY_DH_OPERATIONS is not set +# CONFIG_SECURITY_DMESG_RESTRICT is not set +# CONFIG_SECURITY is not set +CONFIG_SECURITYFS=y +CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y +# CONFIG_HARDENED_USERCOPY is not set +# CONFIG_FORTIFY_SOURCE is not set +# CONFIG_STATIC_USERMODEHELPER is not set +CONFIG_DEFAULT_SECURITY_DAC=y +CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,bpf" + +# +# Kernel hardening options +# + +# +# Memory initialization +# +CONFIG_INIT_STACK_NONE=y +# CONFIG_GCC_PLUGIN_STRUCTLEAK_USER is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF is not set +# CONFIG_GCC_PLUGIN_STRUCTLEAK_BYREF_ALL is not set +# CONFIG_INIT_ON_ALLOC_DEFAULT_ON is not set +# CONFIG_INIT_ON_FREE_DEFAULT_ON is not set +CONFIG_CC_HAS_ZERO_CALL_USED_REGS=y +# CONFIG_ZERO_CALL_USED_REGS is not set +# end of Memory initialization +# end of Kernel hardening options +# end of Security options + +CONFIG_CRYPTO=y + +# +# Crypto core or helper +# +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_ALGAPI2=y +CONFIG_CRYPTO_AEAD2=y +CONFIG_CRYPTO_SKCIPHER=y +CONFIG_CRYPTO_SKCIPHER2=y +CONFIG_CRYPTO_HASH=y +CONFIG_CRYPTO_HASH2=y +CONFIG_CRYPTO_RNG2=y +CONFIG_CRYPTO_AKCIPHER2=y +CONFIG_CRYPTO_AKCIPHER=y +CONFIG_CRYPTO_KPP2=y +CONFIG_CRYPTO_ACOMP2=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MANAGER2=y +# CONFIG_CRYPTO_USER is not set +CONFIG_CRYPTO_MANAGER_DISABLE_TESTS=y +# CONFIG_CRYPTO_NULL is not set +CONFIG_CRYPTO_NULL2=y +# CONFIG_CRYPTO_PCRYPT is not set +# CONFIG_CRYPTO_CRYPTD is not set +# CONFIG_CRYPTO_AUTHENC is not set +# CONFIG_CRYPTO_TEST is not set + +# +# Public-key cryptography +# +CONFIG_CRYPTO_RSA=y +# CONFIG_CRYPTO_DH is not set +# CONFIG_CRYPTO_ECDH is not set +# CONFIG_CRYPTO_ECDSA is not set +# CONFIG_CRYPTO_ECRDSA is not set +# CONFIG_CRYPTO_SM2 is not set +# CONFIG_CRYPTO_CURVE25519 is not set + +# +# Authenticated Encryption with Associated Data +# +# CONFIG_CRYPTO_CCM is not set +# CONFIG_CRYPTO_GCM is not set +# CONFIG_CRYPTO_CHACHA20POLY1305 is not set +# CONFIG_CRYPTO_AEGIS128 is not set +# CONFIG_CRYPTO_SEQIV is not set +# CONFIG_CRYPTO_ECHAINIV is not set + +# +# Block modes +# +CONFIG_CRYPTO_CBC=y +# CONFIG_CRYPTO_CFB is not set +# CONFIG_CRYPTO_CTR is not set +# CONFIG_CRYPTO_CTS is not set +CONFIG_CRYPTO_ECB=y +# CONFIG_CRYPTO_LRW is not set +# CONFIG_CRYPTO_OFB is not set +# CONFIG_CRYPTO_PCBC is not set +# CONFIG_CRYPTO_XTS is not set +# CONFIG_CRYPTO_KEYWRAP is not set +# CONFIG_CRYPTO_ADIANTUM is not set +# CONFIG_CRYPTO_ESSIV is not set + +# +# Hash modes +# +# CONFIG_CRYPTO_CMAC is not set +# CONFIG_CRYPTO_HMAC is not set +# CONFIG_CRYPTO_XCBC is not set +# CONFIG_CRYPTO_VMAC is not set + +# +# Digest +# +CONFIG_CRYPTO_CRC32C=y +# CONFIG_CRYPTO_CRC32 is not set +# CONFIG_CRYPTO_XXHASH is not set +# CONFIG_CRYPTO_BLAKE2B is not set +# CONFIG_CRYPTO_BLAKE2S is not set +# CONFIG_CRYPTO_CRCT10DIF is not set +# CONFIG_CRYPTO_GHASH is not set +# CONFIG_CRYPTO_POLY1305 is not set +# CONFIG_CRYPTO_MD4 is not set +# CONFIG_CRYPTO_MD5 is not set +# CONFIG_CRYPTO_MICHAEL_MIC is not set +# CONFIG_CRYPTO_RMD160 is not set +# CONFIG_CRYPTO_SHA1 is not set +# CONFIG_CRYPTO_SHA256 is not set +# CONFIG_CRYPTO_SHA512 is not set +# CONFIG_CRYPTO_SHA3 is not set +# CONFIG_CRYPTO_SM3 is not set +# CONFIG_CRYPTO_STREEBOG is not set +# CONFIG_CRYPTO_WP512 is not set + +# +# Ciphers +# +CONFIG_CRYPTO_AES=y +# CONFIG_CRYPTO_AES_TI is not set +# CONFIG_CRYPTO_BLOWFISH is not set +# CONFIG_CRYPTO_CAMELLIA is not set +# CONFIG_CRYPTO_CAST5 is not set +# CONFIG_CRYPTO_CAST6 is not set +# CONFIG_CRYPTO_DES is not set +# CONFIG_CRYPTO_FCRYPT is not set +# CONFIG_CRYPTO_CHACHA20 is not set +# CONFIG_CRYPTO_SERPENT is not set +# CONFIG_CRYPTO_SM4 is not set +# CONFIG_CRYPTO_TWOFISH is not set + +# +# Compression +# +CONFIG_CRYPTO_DEFLATE=y +CONFIG_CRYPTO_LZO=y +# CONFIG_CRYPTO_842 is not set +# CONFIG_CRYPTO_LZ4 is not set +# CONFIG_CRYPTO_LZ4HC is not set +CONFIG_CRYPTO_ZSTD=y + +# +# Random Number Generation +# +# CONFIG_CRYPTO_ANSI_CPRNG is not set +# CONFIG_CRYPTO_DRBG_MENU is not set +# CONFIG_CRYPTO_JITTERENTROPY is not set +# CONFIG_CRYPTO_USER_API_HASH is not set +# CONFIG_CRYPTO_USER_API_SKCIPHER is not set +# CONFIG_CRYPTO_USER_API_RNG is not set +# CONFIG_CRYPTO_USER_API_AEAD is not set +CONFIG_CRYPTO_HASH_INFO=y +# CONFIG_CRYPTO_HW is not set +CONFIG_ASYMMETRIC_KEY_TYPE=y +CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y +CONFIG_X509_CERTIFICATE_PARSER=y +# CONFIG_PKCS8_PRIVATE_KEY_PARSER is not set +CONFIG_PKCS7_MESSAGE_PARSER=y + +# +# Certificates for signature checking +# +CONFIG_SYSTEM_TRUSTED_KEYRING=y +CONFIG_SYSTEM_TRUSTED_KEYS="" +# CONFIG_SYSTEM_EXTRA_CERTIFICATE is not set +# CONFIG_SECONDARY_TRUSTED_KEYRING is not set +# CONFIG_SYSTEM_BLACKLIST_KEYRING is not set +# end of Certificates for signature checking + +CONFIG_BINARY_PRINTF=y + +# +# Library routines +# +CONFIG_LINEAR_RANGES=y +# CONFIG_PACKING is not set +CONFIG_BITREVERSE=y +CONFIG_HAVE_ARCH_BITREVERSE=y +CONFIG_GENERIC_STRNCPY_FROM_USER=y +CONFIG_GENERIC_STRNLEN_USER=y +CONFIG_GENERIC_NET_UTILS=y +# CONFIG_CORDIC is not set +# CONFIG_PRIME_NUMBERS is not set +CONFIG_RATIONAL=y +CONFIG_GENERIC_PCI_IOMAP=y +CONFIG_ARCH_USE_CMPXCHG_LOCKREF=y + +# +# Crypto library routines +# +CONFIG_CRYPTO_LIB_AES=y +CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y +# CONFIG_CRYPTO_LIB_CHACHA is not set +# CONFIG_CRYPTO_LIB_CURVE25519 is not set +CONFIG_CRYPTO_LIB_POLY1305_RSIZE=9 +# CONFIG_CRYPTO_LIB_POLY1305 is not set +# CONFIG_CRYPTO_LIB_CHACHA20POLY1305 is not set +# end of Crypto library routines + +# CONFIG_CRC_CCITT is not set +CONFIG_CRC16=y +# CONFIG_CRC_T10DIF is not set +# CONFIG_CRC64_ROCKSOFT is not set +# CONFIG_CRC_ITU_T is not set +CONFIG_CRC32=y +# CONFIG_CRC32_SELFTEST is not set +CONFIG_CRC32_SLICEBY8=y +# CONFIG_CRC32_SLICEBY4 is not set +# CONFIG_CRC32_SARWATE is not set +# CONFIG_CRC32_BIT is not set +# CONFIG_CRC64 is not set +# CONFIG_CRC4 is not set +# CONFIG_CRC7 is not set +# CONFIG_LIBCRC32C is not set +# CONFIG_CRC8 is not set +CONFIG_XXHASH=y +# CONFIG_RANDOM32_SELFTEST is not set +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_LZO_COMPRESS=y +CONFIG_LZO_DECOMPRESS=y +CONFIG_LZ4_DECOMPRESS=y +CONFIG_ZSTD_COMPRESS=y +CONFIG_ZSTD_DECOMPRESS=y +CONFIG_XZ_DEC=y +CONFIG_XZ_DEC_X86=y +CONFIG_XZ_DEC_POWERPC=y +CONFIG_XZ_DEC_IA64=y +CONFIG_XZ_DEC_ARM=y +CONFIG_XZ_DEC_ARMTHUMB=y +CONFIG_XZ_DEC_SPARC=y +# CONFIG_XZ_DEC_MICROLZMA is not set +CONFIG_XZ_DEC_BCJ=y +# CONFIG_XZ_DEC_TEST is not set +CONFIG_DECOMPRESS_GZIP=y +CONFIG_DECOMPRESS_BZIP2=y +CONFIG_DECOMPRESS_LZMA=y +CONFIG_DECOMPRESS_XZ=y +CONFIG_DECOMPRESS_LZO=y +CONFIG_DECOMPRESS_LZ4=y +CONFIG_DECOMPRESS_ZSTD=y +CONFIG_GENERIC_ALLOCATOR=y +CONFIG_REED_SOLOMON=y +CONFIG_REED_SOLOMON_ENC8=y +CONFIG_REED_SOLOMON_DEC8=y +CONFIG_BCH=y +CONFIG_ASSOCIATIVE_ARRAY=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_DMA=y +CONFIG_DMA_OPS=y +CONFIG_NEED_DMA_MAP_STATE=y +CONFIG_DMA_DECLARE_COHERENT=y +CONFIG_ARCH_HAS_SETUP_DMA_OPS=y +CONFIG_ARCH_HAS_TEARDOWN_DMA_OPS=y +CONFIG_DMA_NONCOHERENT_MMAP=y +CONFIG_DMA_CMA=y +# CONFIG_DMA_PERNUMA_CMA is not set + +# +# Default contiguous memory area size: +# +CONFIG_CMA_SIZE_MBYTES=64 +CONFIG_CMA_SIZE_SEL_MBYTES=y +# CONFIG_CMA_SIZE_SEL_PERCENTAGE is not set +# CONFIG_CMA_SIZE_SEL_MIN is not set +# CONFIG_CMA_SIZE_SEL_MAX is not set +CONFIG_CMA_ALIGNMENT=8 +# CONFIG_DMA_API_DEBUG is not set +# CONFIG_DMA_MAP_BENCHMARK is not set +CONFIG_SGL_ALLOC=y +CONFIG_CPU_RMAP=y +CONFIG_DQL=y +CONFIG_GLOB=y +# CONFIG_GLOB_SELFTEST is not set +CONFIG_NLATTR=y +CONFIG_CLZ_TAB=y +# CONFIG_IRQ_POLL is not set +CONFIG_MPILIB=y +CONFIG_LIBFDT=y +CONFIG_OID_REGISTRY=y +CONFIG_UCS2_STRING=y +CONFIG_HAVE_GENERIC_VDSO=y +CONFIG_GENERIC_GETTIMEOFDAY=y +CONFIG_GENERIC_VDSO_32=y +CONFIG_FONT_SUPPORT=y +# CONFIG_FONTS is not set +CONFIG_FONT_8x8=y +CONFIG_FONT_8x16=y +CONFIG_SG_SPLIT=y +CONFIG_SG_POOL=y +CONFIG_SBITMAP=y +# end of Library routines + +CONFIG_GENERIC_LIB_DEVMEM_IS_ALLOWED=y + +# +# Kernel hacking +# + +# +# printk and dmesg options +# +CONFIG_PRINTK_TIME=y +# CONFIG_PRINTK_CALLER is not set +# CONFIG_STACKTRACE_BUILD_ID is not set +CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 +CONFIG_CONSOLE_LOGLEVEL_QUIET=4 +CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 +# CONFIG_BOOT_PRINTK_DELAY is not set +# CONFIG_DYNAMIC_DEBUG is not set +# CONFIG_DYNAMIC_DEBUG_CORE is not set +CONFIG_SYMBOLIC_ERRNAME=y +CONFIG_DEBUG_BUGVERBOSE=y +# end of printk and dmesg options + +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_MISC=y + +# +# Compile-time checks and compiler options +# +CONFIG_DEBUG_INFO_NONE=y +# CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT is not set +# CONFIG_DEBUG_INFO_DWARF4 is not set +# CONFIG_DEBUG_INFO_DWARF5 is not set +CONFIG_FRAME_WARN=1024 +# CONFIG_STRIP_ASM_SYMS is not set +# CONFIG_READABLE_ASM is not set +# CONFIG_HEADERS_INSTALL is not set +# CONFIG_DEBUG_SECTION_MISMATCH is not set +CONFIG_SECTION_MISMATCH_WARN_ONLY=y +# CONFIG_VMLINUX_MAP is not set +# CONFIG_DEBUG_FORCE_WEAK_PER_CPU is not set +# end of Compile-time checks and compiler options + +# +# Generic Kernel Debugging Instruments +# +CONFIG_MAGIC_SYSRQ=y +CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 +CONFIG_MAGIC_SYSRQ_SERIAL=y +CONFIG_MAGIC_SYSRQ_SERIAL_SEQUENCE="" +CONFIG_DEBUG_FS=y +CONFIG_DEBUG_FS_ALLOW_ALL=y +# CONFIG_DEBUG_FS_DISALLOW_MOUNT is not set +# CONFIG_DEBUG_FS_ALLOW_NONE is not set +CONFIG_HAVE_ARCH_KGDB=y +# CONFIG_KGDB is not set +# CONFIG_UBSAN is not set +CONFIG_HAVE_KCSAN_COMPILER=y +# end of Generic Kernel Debugging Instruments + +# +# Networking Debugging +# +# CONFIG_NET_DEV_REFCNT_TRACKER is not set +# CONFIG_NET_NS_REFCNT_TRACKER is not set +# end of Networking Debugging + +# +# Memory Debugging +# +# CONFIG_PAGE_EXTENSION is not set +# CONFIG_DEBUG_PAGEALLOC is not set +# CONFIG_PAGE_OWNER is not set +# CONFIG_PAGE_POISONING is not set +# CONFIG_DEBUG_PAGE_REF is not set +# CONFIG_DEBUG_RODATA_TEST is not set +# CONFIG_DEBUG_WX is not set +# CONFIG_DEBUG_OBJECTS is not set +# CONFIG_SLUB_DEBUG_ON is not set +# CONFIG_SLUB_STATS is not set +CONFIG_HAVE_DEBUG_KMEMLEAK=y +# CONFIG_DEBUG_KMEMLEAK is not set +# CONFIG_DEBUG_STACK_USAGE is not set +# CONFIG_SCHED_STACK_END_CHECK is not set +# CONFIG_DEBUG_VM is not set +CONFIG_ARCH_HAS_DEBUG_VIRTUAL=y +# CONFIG_DEBUG_VIRTUAL is not set +# CONFIG_DEBUG_MEMORY_INIT is not set +# CONFIG_DEBUG_PER_CPU_MAPS is not set +# CONFIG_DEBUG_KMAP_LOCAL is not set +# CONFIG_DEBUG_HIGHMEM is not set +CONFIG_HAVE_ARCH_KASAN=y +CONFIG_CC_HAS_KASAN_GENERIC=y +CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y +# CONFIG_KASAN is not set +CONFIG_HAVE_ARCH_KFENCE=y +# CONFIG_KFENCE is not set +# end of Memory Debugging + +# CONFIG_DEBUG_SHIRQ is not set + +# +# Debug Oops, Lockups and Hangs +# +# CONFIG_PANIC_ON_OOPS is not set +CONFIG_PANIC_ON_OOPS_VALUE=0 +CONFIG_PANIC_TIMEOUT=0 +# CONFIG_SOFTLOCKUP_DETECTOR is not set +# CONFIG_DETECT_HUNG_TASK is not set +# CONFIG_WQ_WATCHDOG is not set +# CONFIG_TEST_LOCKUP is not set +# end of Debug Oops, Lockups and Hangs + +# +# Scheduler Debugging +# +CONFIG_SCHED_DEBUG=y +# CONFIG_SCHEDSTATS is not set +# end of Scheduler Debugging + +# CONFIG_DEBUG_TIMEKEEPING is not set + +# +# Lock Debugging (spinlocks, mutexes, etc...) +# +CONFIG_LOCK_DEBUGGING_SUPPORT=y +# CONFIG_PROVE_LOCKING is not set +# CONFIG_LOCK_STAT is not set +# CONFIG_DEBUG_RT_MUTEXES is not set +# CONFIG_DEBUG_SPINLOCK is not set +# CONFIG_DEBUG_MUTEXES is not set +# CONFIG_DEBUG_WW_MUTEX_SLOWPATH is not set +# CONFIG_DEBUG_RWSEMS is not set +# CONFIG_DEBUG_LOCK_ALLOC is not set +# CONFIG_DEBUG_ATOMIC_SLEEP is not set +# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set +# CONFIG_LOCK_TORTURE_TEST is not set +# CONFIG_WW_MUTEX_SELFTEST is not set +# CONFIG_SCF_TORTURE_TEST is not set +# end of Lock Debugging (spinlocks, mutexes, etc...) + +# CONFIG_DEBUG_IRQFLAGS is not set +CONFIG_STACKTRACE=y +# CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set +# CONFIG_DEBUG_KOBJECT is not set + +# +# Debug kernel data structures +# +# CONFIG_DEBUG_LIST is not set +# CONFIG_DEBUG_PLIST is not set +# CONFIG_DEBUG_SG is not set +# CONFIG_DEBUG_NOTIFIERS is not set +# CONFIG_BUG_ON_DATA_CORRUPTION is not set +# end of Debug kernel data structures + +# CONFIG_DEBUG_CREDENTIALS is not set + +# +# RCU Debugging +# +# CONFIG_RCU_SCALE_TEST is not set +# CONFIG_RCU_TORTURE_TEST is not set +# CONFIG_RCU_REF_SCALE_TEST is not set +CONFIG_RCU_CPU_STALL_TIMEOUT=21 +CONFIG_RCU_TRACE=y +# CONFIG_RCU_EQS_DEBUG is not set +# end of RCU Debugging + +# CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set +# CONFIG_CPU_HOTPLUG_STATE_CONTROL is not set +# CONFIG_LATENCYTOP is not set +CONFIG_NOP_TRACER=y +CONFIG_HAVE_FUNCTION_TRACER=y +CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y +CONFIG_HAVE_DYNAMIC_FTRACE=y +CONFIG_HAVE_DYNAMIC_FTRACE_WITH_REGS=y +CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y +CONFIG_HAVE_SYSCALL_TRACEPOINTS=y +CONFIG_HAVE_C_RECORDMCOUNT=y +CONFIG_HAVE_BUILDTIME_MCOUNT_SORT=y +CONFIG_TRACE_CLOCK=y +CONFIG_RING_BUFFER=y +CONFIG_EVENT_TRACING=y +CONFIG_CONTEXT_SWITCH_TRACER=y +CONFIG_TRACING=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +# CONFIG_BOOTTIME_TRACING is not set +# CONFIG_FUNCTION_TRACER is not set +# CONFIG_STACK_TRACER is not set +# CONFIG_IRQSOFF_TRACER is not set +# CONFIG_SCHED_TRACER is not set +# CONFIG_HWLAT_TRACER is not set +# CONFIG_OSNOISE_TRACER is not set +# CONFIG_TIMERLAT_TRACER is not set +# CONFIG_ENABLE_DEFAULT_TRACERS is not set +# CONFIG_FTRACE_SYSCALLS is not set +# CONFIG_TRACER_SNAPSHOT is not set +CONFIG_BRANCH_PROFILE_NONE=y +# CONFIG_PROFILE_ANNOTATED_BRANCHES is not set +# CONFIG_PROFILE_ALL_BRANCHES is not set +# CONFIG_BLK_DEV_IO_TRACE is not set +CONFIG_UPROBE_EVENTS=y +CONFIG_DYNAMIC_EVENTS=y +CONFIG_PROBE_EVENTS=y +# CONFIG_SYNTH_EVENTS is not set +# CONFIG_HIST_TRIGGERS is not set +# CONFIG_TRACE_EVENT_INJECT is not set +# CONFIG_TRACEPOINT_BENCHMARK is not set +# CONFIG_RING_BUFFER_BENCHMARK is not set +# CONFIG_TRACE_EVAL_MAP_FILE is not set +# CONFIG_RING_BUFFER_STARTUP_TEST is not set +# CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS is not set +# CONFIG_PREEMPTIRQ_DELAY_TEST is not set +# CONFIG_SAMPLES is not set +# CONFIG_STRICT_DEVMEM is not set + +# +# arm Debugging +# +# CONFIG_ARM_PTDUMP_DEBUGFS is not set +# CONFIG_UNWINDER_FRAME_POINTER is not set +CONFIG_UNWINDER_ARM=y +CONFIG_ARM_UNWIND=y +# CONFIG_BACKTRACE_VERBOSE is not set +# CONFIG_DEBUG_USER is not set +# CONFIG_DEBUG_LL is not set +CONFIG_DEBUG_LL_INCLUDE="mach/debug-macro.S" +CONFIG_UNCOMPRESS_INCLUDE="debug/uncompress.h" +# CONFIG_PID_IN_CONTEXTIDR is not set +# CONFIG_CORESIGHT is not set +# end of arm Debugging + +# +# Kernel Testing and Coverage +# +# CONFIG_KUNIT is not set +# CONFIG_NOTIFIER_ERROR_INJECTION is not set +# CONFIG_FAULT_INJECTION is not set +CONFIG_ARCH_HAS_KCOV=y +CONFIG_CC_HAS_SANCOV_TRACE_PC=y +# CONFIG_KCOV is not set +CONFIG_RUNTIME_TESTING_MENU=y +# CONFIG_LKDTM is not set +# CONFIG_TEST_MIN_HEAP is not set +# CONFIG_TEST_DIV64 is not set +# CONFIG_BACKTRACE_SELF_TEST is not set +# CONFIG_TEST_REF_TRACKER is not set +# CONFIG_RBTREE_TEST is not set +# CONFIG_REED_SOLOMON_TEST is not set +# CONFIG_INTERVAL_TREE_TEST is not set +# CONFIG_PERCPU_TEST is not set +# CONFIG_ATOMIC64_SELFTEST is not set +# CONFIG_TEST_HEXDUMP is not set +# CONFIG_STRING_SELFTEST is not set +# CONFIG_TEST_STRING_HELPERS is not set +# CONFIG_TEST_STRSCPY is not set +# CONFIG_TEST_KSTRTOX is not set +# CONFIG_TEST_PRINTF is not set +# CONFIG_TEST_SCANF is not set +# CONFIG_TEST_BITMAP is not set +# CONFIG_TEST_UUID is not set +# CONFIG_TEST_XARRAY is not set +# CONFIG_TEST_RHASHTABLE is not set +# CONFIG_TEST_SIPHASH is not set +# CONFIG_TEST_IDA is not set +# CONFIG_TEST_LKM is not set +# CONFIG_TEST_BITOPS is not set +# CONFIG_TEST_VMALLOC is not set +# CONFIG_TEST_USER_COPY is not set +# CONFIG_TEST_BPF is not set +# CONFIG_TEST_BLACKHOLE_DEV is not set +# CONFIG_FIND_BIT_BENCHMARK is not set +# CONFIG_TEST_FIRMWARE is not set +# CONFIG_TEST_SYSCTL is not set +# CONFIG_TEST_UDELAY is not set +# CONFIG_TEST_STATIC_KEYS is not set +# CONFIG_TEST_KMOD is not set +# CONFIG_TEST_MEMCAT_P is not set +# CONFIG_TEST_MEMINIT is not set +# CONFIG_TEST_FREE_PAGES is not set +CONFIG_ARCH_USE_MEMTEST=y +# CONFIG_MEMTEST is not set +# end of Kernel Testing and Coverage +# end of Kernel hacking diff --git a/linux/linux/arch/arm64/configs/rpi4_64_defconfig b/linux/linux/arch/arm64/configs/rpi4_64_defconfig index 8269da9d9e..5da7322039 100644 --- a/linux/linux/arch/arm64/configs/rpi4_64_defconfig +++ b/linux/linux/arch/arm64/configs/rpi4_64_defconfig @@ -2,15 +2,16 @@ # Automatically generated file; DO NOT EDIT. # Linux/arm64 5.10.0 Kernel Configuration # -CONFIG_CC_VERSION_TEXT="aarch64-none-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture 10.2-2020.11 (arm-10.16)) 10.2.1 20201103" +CONFIG_CC_VERSION_TEXT="aarch64-none-linux-gnu-gcc (Arm GNU Toolchain 11.3.Rel1) 11.3.1 20220712" CONFIG_CC_IS_GCC=y -CONFIG_GCC_VERSION=100201 -CONFIG_LD_VERSION=235010000 +CONFIG_GCC_VERSION=110301 +CONFIG_LD_VERSION=202445080000 CONFIG_CLANG_VERSION=0 CONFIG_LLD_VERSION=0 CONFIG_CC_CAN_LINK=y CONFIG_CC_CAN_LINK_STATIC=y CONFIG_CC_HAS_ASM_GOTO=y +CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_IRQ_WORK=y CONFIG_BUILDTIME_TABLE_SORT=y @@ -4590,7 +4591,7 @@ CONFIG_DEBUG_INFO=y CONFIG_DEBUG_INFO_REDUCED=y # CONFIG_DEBUG_INFO_COMPRESSED is not set # CONFIG_DEBUG_INFO_SPLIT is not set -# CONFIG_DEBUG_INFO_DWARF4 is not set +CONFIG_DEBUG_INFO_DWARF4=y # CONFIG_GDB_SCRIPTS is not set CONFIG_ENABLE_MUST_CHECK=y CONFIG_FRAME_WARN=1024 @@ -4620,6 +4621,7 @@ CONFIG_HAVE_ARCH_KGDB=y # CONFIG_KGDB is not set CONFIG_ARCH_HAS_UBSAN_SANITIZE_ALL=y # CONFIG_UBSAN is not set +CONFIG_HAVE_KCSAN_COMPILER=y # end of Generic Kernel Debugging Instruments CONFIG_DEBUG_KERNEL=y diff --git a/linux/linux/soo/core/core.c b/linux/linux/soo/core/core.c index f9a1ab8024..13c5075711 100644 --- a/linux/linux/soo/core/core.c +++ b/linux/linux/soo/core/core.c @@ -284,6 +284,10 @@ long agency_ioctl(struct file *file, unsigned int cmd, unsigned long arg) { discovery_blacklist_neighbour((char *) args.buffer); break; + case AGENCY_IOCTL_INJECT_ME_WITH_SLOTID: + args.slotID = inject_ME_with_slotID(args.buffer, args.value, args.slotID); + break; + default: lprintk("%s: Unrecognized IOCTL: 0x%x\n", __func__, cmd); BUG(); diff --git a/linux/linux/soo/core/injector.c b/linux/linux/soo/core/injector.c index d0be4fafa6..3140db0abc 100644 --- a/linux/linux/soo/core/injector.c +++ b/linux/linux/soo/core/injector.c @@ -60,7 +60,7 @@ size_t current_size = 0; * @return slotID or -1 if no slotID available. */ int inject_ME(void *buffer, size_t size) { - int slotID; + int slotID = -1; DBG("Original contents at address: 0x%08x\n with size %d bytes\n", (unsigned int) buffer, size); @@ -69,6 +69,28 @@ int inject_ME(void *buffer, size_t size) { return slotID; } +/** + * Initiate the injection of a ME + * + * @param buffer + * @return slotID or -1 if no slotID available. + * + * + * Note: It is expected that the 'slotID' is free ! + * + */ +int inject_ME_with_slotID(void *buffer, size_t size, int slotID) { + int ret_slotID = slotID; + + DBG("Original contents at address: 0x%08x\n with size %d bytes\n", (unsigned int) buffer, size); + + printk("[INJECT ME] with slotID: %d\n", slotID); + + soo_hypercall(AVZ_INJECT_ME, buffer, NULL, &ret_slotID, &size); + + return ret_slotID; +} + /** * injector_receive_ME() - Receive the ME into the injector buffer diff --git a/linux/linux/soo/drivers/vuartback/vuart.c b/linux/linux/soo/drivers/vuartback/vuart.c index 8ffc7fa1ad..bcf6fec2be 100644 --- a/linux/linux/soo/drivers/vuartback/vuart.c +++ b/linux/linux/soo/drivers/vuartback/vuart.c @@ -126,8 +126,9 @@ void process_response(struct vbus_device *vdev) { notify_remote_via_virq(vuart_priv->vuart.irq); - } else - lprintch(ring_req->c); + } else { + printk(KERN_CONT "%c", ring_req->c); + } } vdevback_processing_end(vdev); diff --git a/linux/linux/soo/include/soo/uapi/injector.h b/linux/linux/soo/include/soo/uapi/injector.h index 0eae4ef44a..8d23bf0e97 100644 --- a/linux/linux/soo/include/soo/uapi/injector.h +++ b/linux/linux/soo/include/soo/uapi/injector.h @@ -99,6 +99,8 @@ void injector_receive_ME(void *ME, size_t size); int inject_ME(void *buffer, size_t size); +int inject_ME_with_slotID(void *buffer, size_t size, int slotID); + ssize_t agency_read(struct file *fp, char *buff, size_t length, loff_t *ppos); #endif /* __KERNEL__ */ diff --git a/linux/linux/soo/include/soo/uapi/soo.h b/linux/linux/soo/include/soo/uapi/soo.h index bf4d9ad2d9..7dfed7f5f4 100644 --- a/linux/linux/soo/include/soo/uapi/soo.h +++ b/linux/linux/soo/include/soo/uapi/soo.h @@ -116,6 +116,7 @@ int get_pfn_offset(void); #define AGENCY_IOCTL_GET_ME_SNAPSHOT _IOWR('S', 10, agency_ioctl_args_t) #define AGENCY_IOCTL_GET_ME_ID_ARRAY _IOR('S', 11, agency_ioctl_args_t) #define AGENCY_IOCTL_BLACKLIST_SOO _IOW('S', 12, agency_ioctl_args_t) +#define AGENCY_IOCTL_INJECT_ME_WITH_SLOTID _IOWR('S', 13, agency_ioctl_args_t) #define SOO_NAME_SIZE 16 diff --git a/linux/rootfs/board/common/rootfs_overlay/etc/network/interfaces b/linux/rootfs/board/common/rootfs_overlay/etc/network/interfaces index 5ee4469db6..33ab898c80 100755 --- a/linux/rootfs/board/common/rootfs_overlay/etc/network/interfaces +++ b/linux/rootfs/board/common/rootfs_overlay/etc/network/interfaces @@ -4,13 +4,11 @@ iface lo inet loopback # Physical eth0 interface auto eth0 -#iface eth0 inet dhcp -iface eth0 inet6 manual -up ip link set eth0 up -down ip link set eth0 down +iface eth0 inet static +address 192.168.53.15 +netmask 255.255.255.0 # wifi #auto wlan0 #allow-hotplug wlan0 - diff --git a/linux/rootfs/board/common/rootfs_overlay/etc/soo/remove_logs.sh b/linux/rootfs/board/common/rootfs_overlay/etc/soo/remove_logs.sh new file mode 100755 index 0000000000..6b77fefe35 --- /dev/null +++ b/linux/rootfs/board/common/rootfs_overlay/etc/soo/remove_logs.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# Remove SOO log files +rm -f /var/log/soo/* diff --git a/linux/rootfs/board/common/rootfs_overlay/etc/soo/startup.sh b/linux/rootfs/board/common/rootfs_overlay/etc/soo/startup.sh new file mode 100755 index 0000000000..ca13ffb7a4 --- /dev/null +++ b/linux/rootfs/board/common/rootfs_overlay/etc/soo/startup.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +SOO_CORE_MAJOR=126 +DCM_MAJOR=127 +ASF_MAJOR=100 + +echo -n "Creating SOO Agency devices..." +mkdir /dev/soo +mknod /dev/soo/core c ${SOO_CORE_MAJOR} 0 +mknod /dev/soo/dcm c ${DCM_MAJOR} 0 +mknod /dev/soo/asf c ${ASF_MAJOR} 0 +echo "OK" + +if [ -r /etc/soo/otherapps.sh ]; then + echo -n "Staring additional applications..." + /root/otherapps.sh + echo "OK" +fi diff --git a/linux/rootfs/board/common/rootfs_overlay/etc/syslog-ng.conf b/linux/rootfs/board/common/rootfs_overlay/etc/syslog-ng.conf index f74035b2ff..93e6a4331b 100644 --- a/linux/rootfs/board/common/rootfs_overlay/etc/syslog-ng.conf +++ b/linux/rootfs/board/common/rootfs_overlay/etc/syslog-ng.conf @@ -1,4 +1,4 @@ -@version: 3.24 +@version: 3.34 # syslog configuration for a smart object (SOO) @@ -19,68 +19,26 @@ options { log_msg_size(18192); }; -source s_sys { +source s_kernel { file("/proc/kmsg" program_override("kernel")); - unix-stream ("/dev/log"); - internal(); }; -source s_uspace { - pipe ("/dev/pipe_uspace_logs"); -}; - -destination d_all { - file("/var/log/messages"); -}; - -# Provide logs from the soolink subsystem -destination d_soolink { - file("/var/log/soo/soolink"); -}; -# Logging of agency (usr) messages -destination d_agency { - file("/var/log/soo/agency"); +# Define a custom parser +parser p_me { + regexp-parser( + prefix("parsed_") + patterns('\[ME:(?\d+)\].*$') + ); }; -# Logging of MEs +# Logging of MEs destination d_me { - file("/var/log/soo/me"); -}; - -filter f_all { - not match("\\[soo" value("MESSAGE")); -}; - -filter f_soolink { - match("\\[soo:soolink" value("MESSAGE")); -}; - -filter f_me { - match("\\[soo:me" value("MESSAGE")); -}; - - -#log { -# source(s_sys); -# filter(f_all); -# destination(d_all); -#}; - -log { - source(s_sys); - filter(f_soolink); - destination(d_soolink); + file("/var/log/soo/me_${parsed_id}.log"); }; log { - source(s_sys); - filter(f_me); + source(s_kernel); + parser(p_me); destination(d_me); }; - -log { - source(s_uspace); - destination(d_agency); -}; - diff --git a/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/emiso.service b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/emiso.service new file mode 100644 index 0000000000..a58e670db9 --- /dev/null +++ b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/emiso.service @@ -0,0 +1,16 @@ +[Unit] +Description=Starting Emiso-engine + +[Service] +Restart=always +ExecStart=/usr/local/bin/emiso_engine + +[Install] +WantedBy=multi-user.target +Enabled=true + + + + + + diff --git a/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/remove_logs.service b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/remove_logs.service new file mode 100644 index 0000000000..806602ccc8 --- /dev/null +++ b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/remove_logs.service @@ -0,0 +1,10 @@ +[Unit] +Description=Clean SOO Logs + +[Service] +Type=oneshot +ExecStart=/etc/soo/remove_logs.sh + +[Install] +WantedBy=multi-user.target +Enabled=true diff --git a/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/soo_startup.service b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/soo_startup.service new file mode 100644 index 0000000000..9009dc4f5d --- /dev/null +++ b/linux/rootfs/board/common/rootfs_overlay/usr/lib/systemd/system/soo_startup.service @@ -0,0 +1,10 @@ +[Unit] +Description=SOO startup Service + +[Service] +Type=oneshot +ExecStart=/etc/soo/startup.sh + +[Install] +WantedBy=multi-user.target +Enabled=true diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/libreg.so b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/libreg.so deleted file mode 100644 index 69bf66d370..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/libreg.so and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/benh@debian.org.key.pub.pem b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/benh@debian.org.key.pub.pem deleted file mode 100644 index 2bba176788..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/benh@debian.org.key.pub.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAneF3oCSg1XllOgeQyfal -ph+EHCMHS0+lA8YP91TVi355gQDS6T30l/6EzVW9yY8hV4gGOZBmQSZ5LMo/lYcB -ES8vsOELQ/xfL09nBNtNt3JN0cV2c02RabBxFzbqqwo6zZWbdhuOIRePxQK/JMfA -QLE7xIB8caVR3Pc6WH+xB4GKENH2kxdx4PpReRXU14+tvW844SZ9vPA+gIm07I5p -kNuXivAjI4OCO2qxrOvnmXQqNY6pZP1GnujlSGExbub8GRhUwxtP1gBEhxw3Rer1 -ycsPDFXsz2rCRSYjojFSTe4hff1YcsIoxY6p0O4Bdwil8CIrR3krz5pGtY/9ZKK1 -7QIDAQAB ------END PUBLIC KEY----- diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/linville.key.pub.pem b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/linville.key.pub.pem deleted file mode 100644 index 3a2e8d0454..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/linville.key.pub.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1leZcYjTXc4qLq1oN2Ak -8vLP85P5cFTrCpqdSI5W4VOwdaJB4TtaxU2fATcH/A2EsE3h1rOfzI0+fBV9DcOO -qyID+zdILBMb8xK5Zv+78OkBGls/WzvDDVhdmn1TRHvRvmJy7cX1mCT56cnHrZM/ -ZBaFwVfiD9TcqqisyF1sqE5+cMHTWRbxc1+rtojr0eGYrNfK20awlD5KVj6Ejzot -r9EDWAsL1bH/kGfMdnputcyMapLQpRVruO/jEdjSmhAE/sj1tmHcAXBT6j5al4Oa -LiBaWnP++rune7rjimwfzp0549/rupQUM7nAZRDLyzXj3J/KEci6dXtjonBUFqDY -4QIDAQAB ------END PUBLIC KEY----- diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/sforshee.key.pub.pem b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/sforshee.key.pub.pem deleted file mode 100644 index 73d580e8eb..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/pubkeys/sforshee.key.pub.pem +++ /dev/null @@ -1,9 +0,0 @@ ------BEGIN PUBLIC KEY----- -MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAtUDjnCiEOQPyOddmLEE4 -Fax+pYNxJX6QfGjdbz/Z11k4n3xqUsIDKi1+ZvQesxJwIFvUlzI9cYs7GwgXFGth -xFeLlhYc/STVCwn5aBGE+8pRDNFFGdoQRIrZ/nap/WAtGAsolbIt6oiYuNFWIfBT -H/ECb+lGm5NfKJAPrDb6aCNxV1b2zNPffSrZG3NF67onhe96f6XLgMcwNtJT7uys -Hucx8TainGPGZVt/JXVooerTfgBcml7YIBgydwcpEmYeNnPnlwRBN7Gxciv0oSkg -fJZ5CyvQ2N7IbD+T+8XueFIRFRt69uJomef7RhaE48eh5uDSRtXhxF+gZvTaxP+V -HQIDAQAB ------END PUBLIC KEY----- diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/regulatory.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/regulatory.bin deleted file mode 100644 index 19b18e82a3..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/regulatory.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/setregdomain b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/setregdomain deleted file mode 100755 index 532da5e9c4..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/crda/setregdomain +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -set -e - -REGDOMAIN= -CRDA_CONF=/etc/default/crda - -[ -r "$CRDA_CONF" ] && . "$CRDA_CONF" -[ -z "$REGDOMAIN" ] && exit 0 - -exec /sbin/iw reg set "$REGDOMAIN" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-FW.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-FW.bin deleted file mode 100644 index 61fb32f304..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-FW.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-MD.hex b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-MD.hex deleted file mode 100644 index 61b4dfec4f..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/BCM2033-MD.hex +++ /dev/null @@ -1,87 +0,0 @@ -:1076ED008F14D3E514648094894008E5142437FF82 -:0C76FD0002776AE5142430FF12776A223D -:0276B3008F1234 -:1076B500E5127804A2E713D8FB540FF513FF1276F1 -:0B76C500EDE512540FF513FF0276ED07 -:05780C007F5B02776ABA -:057811007F5D02776AB3 -:10758B0012780CE4F511E51190780693FF12776AE7 -:10759B000511E511C3940640ED7F021276ED7F5F76 -:1075AB0012776A7F041276ED7F5F12776A7F011282 -:1075BB0076ED907C00E0FF1276B3907C01E0FF1239 -:0575CB0076B302781107 -:0777F800907DC67401F02230 -:03781B00027400F4 -:107537001277F8C20112768DD290C296C2001277E6 -:10754700C38F10E51024DA601F24A86032245B7013 -:10755700EDAF1012776AC29012781B900001E0FE1F -:10756700A3E0FF1277FF80D6AF1012776AD2B4126A -:10757700781B900001E0FEA3E0FF1277FF80BF12A7 -:04758700758B80BAC6 -:0B77CF005390F3EF25E025E0429022EC -:10740000E4F511F512F513AF131277CFD201E5139E -:10741000640370030274E030021D127635400512D9 -:10742000778A80F6AE11AF12AD07AC06AB1A7F0AB1 -:107430007E7F1276D0801612772250FBAE11AF12EB -:10744000AD07AC06AB1A7F077E7F1276D0E51A2512 -:1074500012F512E43511F511E4F51AE5131460077D -:10746000146066240270A7E5127004E5116474705C -:1074700040E5127004E511648060933002151276C5 -:1074800035400512778A80F6AD1A7F0A7E7F127624 -:10749000E5800E12772250FBAD1A7F077E7F1276B1 -:1074A000E5E51A2512F512E43511F511E4F51A8017 -:1074B000C0E5124511600302740E751180F51205C6 -:1074C00013AF131277CF02740EE5127004E5116446 -:1074D000C0600302740E7F2E12776A051302740EC9 -:0174E0002289 -:05781600427BFE00F3BF -:0A77E500907F04EFF0A3F0A3F02260 -:10768D00C202E4F51A1277101277F87F011277E52E -:10769D001277B55003D202227F021277E512779945 -:0676AD0050E61274E12218 -:0F777B00907F00EFF0A3EDF0A37401F0E4F02293 -:1074E1007DC17F0712777B12775950FBE4F51112AA -:1074F10077590511E511C3942040F4907BFEE0FD1E -:10750100E4FF12777B907BFFE0FD0F12777BE4FDB8 -:107511007F0412777B7D287F0612777B7DE30F1234 -:10752100777B7D407F0B12777B7D607F0D12777BB0 -:067531007D201F02777BA4 -:10774800907F00EFF0907F027402F0907F01E0FFDD -:01775800220E -:0E7799007F0A127748EF20E003D38001C3225D -:0977EF0012779950031277F82279 -:107722001277EF907F247404F0E030E205751A407E -:04773200D322C32279 -:107759001277EF7F09127748EF30E203D38001C334 -:0177690022FD -:0E77A7008F1512775950FB907F07E515F022E1 -:107603001277EFE51A70271277225008751A401582 -:107613001AD32222907F24E0FFEF5408FFEFF0906B -:107623007F24E0FFEF30E303C32222D32222151A83 -:02763300D32260 -:0B77DA0012760350FB907F07E0FF22B7 -:0E77B500907F22E0FFEF30E703D38001C32274 -:0F778A00907F227480F01277B550031277F822A7 -:10763500E51A7028907F23E0FFEF30E11C907F234F -:10764500E0FFEF5402FFEFF0907F0FE0FF8F1AE5A8 -:0E7655001A7003C32222D32222C32222D32280 -:1075D0008F18907F20E0FFEF30E40B907F20741035 -:1075E000F012778A80EC907F09E518F0907F0DE02B -:1075F000FFEF4402FFEFF0907F0DE0FFEF54FDFF3F -:03760000EFF02286 -:10773600127635400512778A80F6151A907F0AE090 -:02774600FF2220 -:0C77C30030020512773622221277DA22FB -:10776A008F19200206AF191277A722AF191275D006 -:01777A0022EC -:0300000002766322 -:10766300D2900000758120907816127689F81276F0 -:1076730089F9127689FA127689FB88838982EAF07E -:0A768300A3EBF0027537E4A3932295 -:10770900F0A308B805FA22E4F8907F20141277094B -:09771900E4907F25F812770922A3 -:0777FF00E48F828E837322E8 -:1076D0008E838F828C858D84758600E00586F0A36D -:0D76E0000586DBF7228E838F82E0DDFD2220 -:067806004242544D445FB4 -:00000001FF diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/BCM4345C0.hcd b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/BCM4345C0.hcd deleted file mode 100644 index 4eab4c9655..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/BCM4345C0.hcd and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx-0.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx-0.fw deleted file mode 100644 index 9ee5ccc10a..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx-0.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx_hdr-0.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx_hdr-0.fw deleted file mode 100644 index a6db78de06..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/bcm43xx_hdr-0.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143-sdio.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143-sdio.bin deleted file mode 100644 index e4f56f3d1a..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143-sdio.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143.bin deleted file mode 100644 index 28b8db998e..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43143.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43236b.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43236b.bin deleted file mode 100644 index 8a2004a916..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43236b.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43242a.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43242a.bin deleted file mode 100644 index 80604d853b..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43242a.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4329-sdio.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4329-sdio.bin deleted file mode 100644 index d4c4560cdd..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4329-sdio.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.bin deleted file mode 100644 index 94f2add702..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob deleted file mode 100644 index 3b9b5bdc15..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.clm_blob and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt deleted file mode 100644 index 6801286179..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43455-sdio.txt +++ /dev/null @@ -1,97 +0,0 @@ -# Cloned from bcm94345wlpagb_p2xx.txt -NVRAMRev=$Rev: 498373 $ -sromrev=11 -vendid=0x14e4 -devid=0x43ab -manfid=0x2d0 -prodid=0x06e4 -#macaddr=00:90:4c:c5:12:38 -macaddr=b8:27:eb:74:f2:6c -nocrc=1 -boardtype=0x6e4 -boardrev=0x1304 - -#XTAL 37.4MHz -xtalfreq=37400 - -btc_mode=1 -#------------------------------------------------------ -#boardflags: 5GHz eTR switch by default -# 2.4GHz eTR switch by default -# bit1 for btcoex -boardflags=0x00480201 -boardflags2=0x40800000 -boardflags3=0x44200100 -phycal_tempdelta=15 -rxchain=1 -txchain=1 -aa2g=1 -aa5g=1 -tssipos5g=1 -tssipos2g=1 -femctrl=0 -AvVmid_c0=1,165,2,100,2,100,2,100,2,100 -pa2ga0=-129,6525,-718 -pa2ga1=-149,4408,-601 -pa5ga0=-185,6836,-815,-186,6838,-815,-184,6859,-815,-184,6882,-818 -pa5ga1=-202,4285,-574,-201,4312,-578,-196,4391,-586,-201,4294,-575 -itrsw=1 -pdoffsetcckma0=2 -pdoffset2gperchan=0,-2,1,0,1,0,1,1,1,0,0,-1,-1,0 -pdoffset2g40ma0=16 -pdoffset40ma0=0x8888 -pdoffset80ma0=0x8888 -extpagain5g=2 -extpagain2g=2 -tworangetssi2g=1 -tworangetssi5g=1 -# LTECX flags -# WCI2 -ltecxmux=0 -ltecxpadnum=0x0504 -ltecxfnsel=0x22 -ltecxgcigpio=0x32 - -maxp2ga0=80 -ofdmlrbw202gpo=0x0022 -dot11agofdmhrbw202gpo=0x4442 -mcsbw202gpo=0x98444422 -mcsbw402gpo=0x98444422 -maxp5ga0=82,82,82,82 -mcsbw205glpo=0xb9555000 -mcsbw205gmpo=0xb9555000 -mcsbw205ghpo=0xb9555000 -mcsbw405glpo=0xb9555000 -mcsbw405gmpo=0xb9555000 -mcsbw405ghpo=0xb9555000 -mcsbw805glpo=0xb9555000 -mcsbw805gmpo=0xb9555000 -mcsbw805ghpo=0xb9555000 - -swctrlmap_2g=0x00000000,0x00000000,0x00000000,0x010000,0x3ff -swctrlmap_5g=0x00100010,0x00200020,0x00200020,0x010000,0x3fe -swctrlmapext_5g=0x00000000,0x00000000,0x00000000,0x000000,0x3 -swctrlmapext_2g=0x00000000,0x00000000,0x00000000,0x000000,0x3 - -vcodivmode=1 -deadman_to=481500000 - -ed_thresh2g=-54 -ed_thresh5g=-54 -eu_edthresh2g=-54 -eu_edthresh5g=-54 -ldo1=4 -rawtempsense=0x1ff -cckPwrIdxCorr=3 -cckTssiDelay=150 -ofdmTssiDelay=150 -txpwr2gAdcScale=1 -txpwr5gAdcScale=1 -dot11b_opts=0x3aa85 -cbfilttype=1 -fdsslevel_ch11=6 - -# Improved Bluetooth coexistence parameters from Cypress -btc_mode=1 -btc_params8=0x4e20 -btc_params1=0x7530 diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4354-sdio.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4354-sdio.bin deleted file mode 100644 index e2f7b1f04f..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac4354-sdio.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43569.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43569.bin deleted file mode 100644 index 8323536a7b..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/brcm/brcmfmac43569.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192ee_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192ee_fw.bin deleted file mode 100644 index 7e5bcc0e60..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192ee_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192eu_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192eu_fw.bin deleted file mode 100644 index 7a13280cc2..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8192eu_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723a_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723a_fw.bin deleted file mode 100644 index b736f91e83..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723a_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723b_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723b_fw.bin deleted file mode 100644 index 49b2a26f83..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8723b_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8761a_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8761a_fw.bin deleted file mode 100644 index ee4f20180b..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8761a_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8812ae_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8812ae_fw.bin deleted file mode 100644 index 8aca8d28f7..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8812ae_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8821a_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8821a_fw.bin deleted file mode 100644 index c7dffe9938..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8821a_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_config.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_config.bin deleted file mode 100644 index b00270edca..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_config.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_fw.bin deleted file mode 100644 index 5a464614ff..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_bt/rtl8822b_fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8105e-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8105e-1.fw deleted file mode 100644 index 4c2cbd0e60..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8105e-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-1.fw deleted file mode 100644 index 85694cb6bf..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-2.fw deleted file mode 100644 index ac042757e1..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8106e-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-1.fw deleted file mode 100644 index c071c2f025..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-2.fw deleted file mode 100644 index 76fc0544f9..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8107e-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-1.fw deleted file mode 100644 index 99e002de1f..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-2.fw deleted file mode 100644 index 7022ab0af4..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168d-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-1.fw deleted file mode 100644 index d203bd5d0d..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-2.fw deleted file mode 100644 index 7ea5984cff..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-3.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-3.fw deleted file mode 100644 index 0f888a3267..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168e-3.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-1.fw deleted file mode 100644 index bf7883163e..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-2.fw deleted file mode 100644 index c3424929bd..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168f-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-1.fw deleted file mode 100644 index 2c628b03a7..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-2.fw deleted file mode 100644 index 944d44e6a6..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-3.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-3.fw deleted file mode 100644 index 0c97d7ea14..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168g-3.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-1.fw deleted file mode 100644 index 296813ab07..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-2.fw deleted file mode 100644 index df92848abb..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8168h-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8402-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8402-1.fw deleted file mode 100644 index 82fa35d709..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8402-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-1.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-1.fw deleted file mode 100644 index 72772dbc83..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-1.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-2.fw b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-2.fw deleted file mode 100644 index e3789fe576..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtl_nic/rtl8411-2.fw and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188efw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188efw.bin deleted file mode 100644 index ac9a430a83..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188efw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188eufw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188eufw.bin deleted file mode 100644 index 4ae7e1c5de..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8188eufw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfw.bin deleted file mode 100644 index 77eb1ebef5..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU.bin deleted file mode 100644 index b231e1d642..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU_B.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU_B.bin deleted file mode 100644 index 3a3e38675c..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cfwU_B.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw.bin deleted file mode 100644 index 3aa7506574..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_A.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_A.bin deleted file mode 100644 index 9569d0a236..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_A.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_B.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_B.bin deleted file mode 100644 index 96089c4c9e..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_B.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin deleted file mode 100644 index d1b84d4886..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192cufw_TMSC.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192defw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192defw.bin deleted file mode 100644 index cbb4b887c4..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192defw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eefw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eefw.bin deleted file mode 100644 index 4a034d3ae8..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eefw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eu_nic.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eu_nic.bin deleted file mode 100644 index 4a034d3ae8..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192eu_nic.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192sefw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192sefw.bin deleted file mode 100644 index ed4afe8598..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8192sefw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8712u.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8712u.bin deleted file mode 100644 index 3f965a652d..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8712u.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_A.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_A.bin deleted file mode 100644 index 7accded754..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_A.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B.bin deleted file mode 100644 index 5c37400025..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin deleted file mode 100644 index 8e9952cbe5..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723aufw_B_NoBT.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723befw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723befw.bin deleted file mode 100644 index 25e183cb15..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723befw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723bu_nic.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723bu_nic.bin deleted file mode 100644 index 8d53405382..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723bu_nic.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw.bin deleted file mode 100644 index 725f2138e1..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw_B.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw_B.bin deleted file mode 100644 index 993c7f6ece..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8723fw_B.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw.bin deleted file mode 100644 index 4f84cf94a1..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin deleted file mode 100644 index 115d49f157..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/firmware/rtlwifi/rtl8821aefw_wowlan.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ata_id b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ata_id deleted file mode 100755 index 5e075bc474..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ata_id and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/cdrom_id b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/cdrom_id deleted file mode 100755 index ef2315d6f7..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/cdrom_id and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/collect b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/collect deleted file mode 100755 index 694785dc3b..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/collect and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hid2hci b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hid2hci deleted file mode 100755 index 49c3bc52d8..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hid2hci and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwclock-set b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwclock-set deleted file mode 100755 index eacf948df8..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwclock-set +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -# Reset the System Clock to UTC if the hardware clock from which it -# was copied by the kernel was in localtime. - -dev=$1 - -if [ -e /run/systemd/system ] ; then - exit 0 -fi - -if [ -e /run/udev/hwclock-set ]; then - exit 0 -fi - -if [ -f /etc/default/rcS ] ; then - . /etc/default/rcS -fi - -# These defaults are user-overridable in /etc/default/hwclock -BADYEAR=no -HWCLOCKACCESS=yes -HWCLOCKPARS= -HCTOSYS_DEVICE=rtc0 -if [ -f /etc/default/hwclock ] ; then - . /etc/default/hwclock -fi - -if [ yes = "$BADYEAR" ] ; then - /sbin/hwclock --rtc=$dev --systz --badyear - /sbin/hwclock --rtc=$dev --hctosys --badyear -else - /sbin/hwclock --rtc=$dev --systz - /sbin/hwclock --rtc=$dev --hctosys -fi - -# Note 'touch' may not be available in initramfs -> /run/udev/hwclock-set diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwdb.bin b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwdb.bin deleted file mode 100644 index 8638d430ff..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/hwdb.bin and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ifupdown-hotplug b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ifupdown-hotplug deleted file mode 100755 index a78ae04a4f..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/ifupdown-hotplug +++ /dev/null @@ -1,143 +0,0 @@ -#!/bin/sh -e -# -# run /sbin/{ifup,ifdown} with the --allow=hotplug option. -# - -PATH='/sbin:/bin:/usr/sbin:/usr/bin' - -if [ -x /usr/bin/logger ]; then - LOGGER=/usr/bin/logger -elif [ -x /bin/logger ]; then - LOGGER=/bin/logger -else - unset LOGGER -fi - -# for diagnostics -if [ -t 1 -a -z "$LOGGER" ] || [ ! -e '/dev/log' ]; then - mesg() { - echo "$@" >&2 - } -elif [ -t 1 ]; then - mesg() { - echo "$@" - $LOGGER -t "${0##*/}[$$]" "$@" - } -else - mesg() { - $LOGGER -t "${0##*/}[$$]" "$@" - } -fi - -if [ -z "$INTERFACE" ]; then - mesg "Bad ifupdown udev helper invocation: \$INTERFACE is not set" - exit 1 -fi - -check_program() { - [ -x $1 ] && return 0 - - mesg "ERROR: $1 not found. You need to install the ifupdown package." - mesg "ifupdown udev helper $ACTION event for $INTERFACE not handled." - exit 1 -} - -wait_for_interface() { - local interface=$1 - local state - - while :; do - read state /sys/class/net/$interface/operstate 2>/dev/null || true - if [ "$state" != down ]; then - return 0 - fi - sleep 1 - done -} - -net_ifup() { - check_program /sbin/ifup - - # exit if the interface is not configured as allow-hotplug - if ! ifquery --allow hotplug -l | grep -q "^${INTERFACE}\$"; then - exit 0 - fi - - if [ -d /run/systemd/system ]; then - exec systemctl --no-block start $(systemd-escape --template ifup@.service $INTERFACE) - fi - - local out=$(ps -C ifup ho args) - if [ "${out%$INTERFACE*}" != "$out" ]; then - mesg "Already ifup-ing interface $INTERFACE" - exit 0 - fi - - wait_for_interface lo - - exec ifup --allow=hotplug $INTERFACE -} - -net_ifdown() { - check_program /sbin/ifdown - - # systemd will automatically ifdown the interface on device - # removal by binding the instanced service to the network device - if [ -d /run/systemd/system ]; then - exit 0 - fi - - local out=$(ps -C ifdown ho args) - if [ "${out%$INTERFACE*}" != "$out" ]; then - mesg "Already ifdown-ing interface $INTERFACE" - exit 0 - fi - - exec ifdown --allow=hotplug $INTERFACE -} - -do_everything() { - -case "$ACTION" in - add) - # these interfaces generate hotplug events *after* they are brought up - case $INTERFACE in - ppp*|ippp*|isdn*|plip*|lo|irda*|ipsec*) - exit 0 ;; - esac - - net_ifup - ;; - - remove) - # the pppd persist option may have been used, so it should not be killed - case $INTERFACE in - ppp*) - exit 0 ;; - esac - - net_ifdown - ;; - - *) - mesg "NET $ACTION event not supported" - exit 1 - ;; -esac - -} - -# under systemd we don't do synchronous operations, so we can run in the -# foreground; we also need to, as forked children get killed right away under -# systemd -if [ -d /run/systemd/system ]; then - do_everything -else - # under sysvinit/upstart we need to fork as we start the long-running - # "ifup". but there, forked processes won't get killed. - # When udev_log="debug" stdout and stderr are pipes connected to udevd. - # They need to be closed or udevd will wait for this process which will - # deadlock with udevsettle until the timeout. - exec > /dev/null 2> /dev/null - do_everything & -fi diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtd_probe b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtd_probe deleted file mode 100755 index 9a9750e640..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtd_probe and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtp-probe b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtp-probe deleted file mode 100755 index 4c586d4e03..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/mtp-probe and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/10-local-rpi.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/10-local-rpi.rules deleted file mode 100644 index 001571d3f5..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/10-local-rpi.rules +++ /dev/null @@ -1,3 +0,0 @@ -SUBSYSTEM=="vchiq", GROUP="video", MODE="0660" -SUBSYSTEM=="vc-sm", GROUP="video", MODE="0660" -SUBSYSTEM=="bcm2708_vcio", GROUP="video", MODE="0660" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/40-usb_modeswitch.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/40-usb_modeswitch.rules deleted file mode 100644 index 3d8de630d9..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/40-usb_modeswitch.rules +++ /dev/null @@ -1,1181 +0,0 @@ -# Part of usb-modeswitch-data, version 20170120 -# -# Works with usb_modeswitch versions >= 2.4.0. Slash before %k parameter -# is for compatibility only. Versions >= 2.5.0 don't need it. -# -ACTION!="add|change", GOTO="modeswitch_rules_end" - -# Adds a symlink "gsmmodem[n]" to the lowest ttyUSB port with interrupt -# transfer; checked against a list of known modems, or else no action -KERNEL=="ttyUSB*", ATTRS{bNumConfigurations}=="*", PROGRAM="usb_modeswitch --symlink-name %p %s{idVendor} %s{idProduct} %E{PRODUCT}", SYMLINK+="%c" - -SUBSYSTEM!="usb", ACTION!="add",, GOTO="modeswitch_rules_end" - -# Generic entry for most Huawei devices, excluding Android phones -ATTRS{idVendor}=="12d1", ATTRS{manufacturer}!="Android", ATTR{bInterfaceNumber}=="00", ATTR{bInterfaceClass}=="08", RUN+="usb_modeswitch '/%k'" - -# HP LaserJet Professional P1102 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="002a", RUN+="usb_modeswitch '/%k'" - -# HP LaserJet Professional P1102w -ATTR{idVendor}=="03f0", ATTR{idProduct}=="032a", RUN+="usb_modeswitch '/%k'" - -# HP hs3110 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="521d", RUN+="usb_modeswitch '/%k'" - -# HP hs3120 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="531d", RUN+="usb_modeswitch '/%k'" - -# HP hs3114 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="541d", RUN+="usb_modeswitch '/%k'" - -# HP hs4112 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="581d", RUN+="usb_modeswitch '/%k'" - -# HP lt4225 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="631d", RUN+="usb_modeswitch '/%k'" - -# HP lt4226 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="641d", RUN+="usb_modeswitch '/%k'" - -# HP lt4227 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="681d", RUN+="usb_modeswitch '/%k'" - -# HP lt4211 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="911d", RUN+="usb_modeswitch '/%k'" - -# HP lt4110 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="931d", RUN+="usb_modeswitch '/%k'" - -# HP lt4114 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="9a1d", RUN+="usb_modeswitch '/%k'" - -# HP lt4120 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="9d1d", RUN+="usb_modeswitch '/%k'" - -# Quanta MU-Q101 -ATTR{idVendor}=="0408", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Quanta 1KR / USB-lte 7410 -ATTR{idVendor}=="0408", ATTR{idProduct}=="ea17", RUN+="usb_modeswitch '/%k'" - -# Quanta 1K3 LTE -ATTR{idVendor}=="0408", ATTR{idProduct}=="ea25", RUN+="usb_modeswitch '/%k'" - -# Quanta MobileGenie 4G LTE, Quanta 1K6 -ATTR{idVendor}=="0408", ATTR{idProduct}=="ea43", RUN+="usb_modeswitch '/%k'" - -# MU-Q110, Yota Router (Quanta 1QDLZZZ0ST2) -ATTR{idVendor}=="0408", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# SpeedUp SU-8500U -ATTR{idVendor}=="0408", ATTR{idProduct}=="f001", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-10 -ATTR{idVendor}=="0421", ATTR{idProduct}=="060c", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-15 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0610", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-12 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0618", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-11 -ATTR{idVendor}=="0421", ATTR{idProduct}=="061d", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-17 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0622", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-18 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0627", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-19 -ATTR{idVendor}=="0421", ATTR{idProduct}=="062c", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-7M-01 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0632", RUN+="usb_modeswitch '/%k'" - -# Nokia CS-21M-02 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0637", RUN+="usb_modeswitch '/%k'" - -# Logitech G920 Racing Wheel -ATTR{idVendor}=="046d", ATTR{idProduct}=="c261", RUN+="usb_modeswitch '/%k'" - -# Philips (?), Vodafone MD950 (Wisue Technology) -ATTR{idVendor}=="0471", ATTR{idProduct}=="1210", RUN+="usb_modeswitch '/%k'" - -# Philips TalkTalk (NXP Semiconductors "Dragonfly") -ATTR{idVendor}=="0471", ATTR{idProduct}=="1237", RUN+="usb_modeswitch '/%k'" - -# Kyocera W06K CDMA modem -ATTR{idVendor}=="0482", ATTR{idProduct}=="024d", RUN+="usb_modeswitch '/%k'" - -# I-O Data WMX2-U Wimax -ATTR{idVendor}=="04bb", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" - -# Alcatel-Lucent ABS-T920 -ATTR{idVendor}=="04cc", ATTR{idProduct}=="2251", RUN+="usb_modeswitch '/%k'" - -# Alcatel-Lucent T930S -ATTR{idVendor}=="04cc", ATTR{idProduct}=="225c", RUN+="usb_modeswitch '/%k'" - -# Nexperia TM TD-SCDMA -ATTR{idVendor}=="04cc", ATTR{idProduct}=="226e", RUN+="usb_modeswitch '/%k'" - -# Nexperia TM TD-SCDMA (Variant) -ATTR{idVendor}=="04cc", ATTR{idProduct}=="226f", RUN+="usb_modeswitch '/%k'" - -# Samsung GT-B1110 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="680c", RUN+="usb_modeswitch '/%k'" - -# Samsung GT-B3730 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="689a", RUN+="usb_modeswitch '/%k'" - -# Samsung U209 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Sunplus Techn. SU-3200U -ATTR{idVendor}=="04fc", ATTR{idProduct}=="2140", RUN+="usb_modeswitch '/%k'" - -# AVM Fritz!Wlan USB Stick N v2 -ATTR{idVendor}=="057c", ATTR{idProduct}=="62ff", RUN+="usb_modeswitch '/%k'" - -# AVM Fritz!Wlan USB Stick N -ATTR{idVendor}=="057c", ATTR{idProduct}=="84ff", RUN+="usb_modeswitch '/%k'" - -# ZyXel WAH1004/WAH3004 -ATTR{idVendor}=="0586", ATTR{idProduct}=="2030", RUN+="usb_modeswitch '/%k'" - -# Axesstel Modems (w/ initial idProduct 0x0010) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="0010", RUN+="usb_modeswitch '/%k'" - -# Option GlobeTrotter GX0201, Older Option devices, AnyDATA devices, Bless UC165, Celot K-300 a.o., TechFaith Venus VT-18, Celot CT-680, Quirky Option devices, Samsung SGH-Z810, Prolink P2000 CDMA, StrongRising device, Vertex Wireless 100 Series -ATTR{idVendor}=="05c6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Various USB modems -ATTR{idVendor}=="05c6", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-162-U5, DWM-162 C1, Micromax MMX 300c -ATTR{idVendor}=="05c6", ATTR{idProduct}=="2001", RUN+="usb_modeswitch '/%k'" - -# AnyDATA APE-540H -ATTR{idVendor}=="05c6", ATTR{idProduct}=="6503", RUN+="usb_modeswitch '/%k'" - -# Alcatel-sbell ASB TL131 TD-LTE -ATTR{idVendor}=="05c6", ATTR{idProduct}=="9024", RUN+="usb_modeswitch '/%k'" - -# U901 (LTE modem) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" - -# Siptune LM-75 ("LinuxModem"), EWangshikong 4G -ATTR{idVendor}=="05c6", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Qtronix EVDO 3G Modem (for TianYi) -ATTR{idVendor}=="05c7", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# ZE-3G 7.2Mbs HSPA modem -ATTR{idVendor}=="0685", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" - -# InfoCert Business Key (SmartCard/Reader emulation) -ATTR{idVendor}=="072f", ATTR{idProduct}=="100d", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 HSUPA 3.75G a.o. -ATTR{idVendor}=="07d1", ATTR{idProduct}=="a800", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 HSUPA 3.75G USB Modem -ATTR{idVendor}=="07d1", ATTR{idProduct}=="a804", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-151 A1 -ATTR{idVendor}=="07d1", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Dymo LabelManager -ATTR{idVendor}=="0922", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" - -# Dymo LabelManager 420P -ATTR{idVendor}=="0922", ATTR{idProduct}=="1003", RUN+="usb_modeswitch '/%k'" - -# Dymo LabelManager Wireless PnP -ATTR{idVendor}=="0922", ATTR{idProduct}=="1007", RUN+="usb_modeswitch '/%k'" - -# Toshiba G450 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0d46", RUN+="usb_modeswitch '/%k'" - -# Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 1) -ATTR{idVendor}=="0ace", ATTR{idProduct}=="2011", RUN+="usb_modeswitch '/%k'" - -# Zydas ZD1211RW WLAN USB, Sphairon HomeLink 1202 (Variant 2) -ATTR{idVendor}=="0ace", ATTR{idProduct}=="20ff", RUN+="usb_modeswitch '/%k'" - -# Option iCon 711 -ATTR{idVendor}=="0af0", ATTR{idProduct}=="4007", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6711", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6731", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6751", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6771", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6791", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6811", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6911", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6951", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="6971", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7011", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7031", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7051", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7071", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7111", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7211", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7251", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7271", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7301", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7311", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7361", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7381", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7401", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7501", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7601", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7701", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7706", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7801", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7901", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7a01", RUN+="usb_modeswitch '/%k'" - -# Option iCon 461 -ATTR{idVendor}=="0af0", ATTR{idProduct}=="7a05", RUN+="usb_modeswitch '/%k'" - -# Option Globetrotter (Variant) -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8006", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8200", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8201", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8300", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8302", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8304", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8400", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8600", RUN+="usb_modeswitch '/%k'" - -# Option GI0643 (aka XYFI) -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8700", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8800", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="8900", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="9000", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="9200", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="c031", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="c100", RUN+="usb_modeswitch '/%k'" - -# Option GlobeTrotter GI1515 -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d001", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d013", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d031", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d033", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d035", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d055", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d057", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d058", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d155", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d157", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d255", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d257", RUN+="usb_modeswitch '/%k'" - -# Option HSO device -ATTR{idVendor}=="0af0", ATTR{idProduct}=="d357", RUN+="usb_modeswitch '/%k'" - -# Olivetti Olicard 100 and others -ATTR{idVendor}=="0b3c", ATTR{idProduct}=="c700", RUN+="usb_modeswitch '/%k'" - -# Olivetti Olicard 145, 155 -ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Olivetti Olicard 160 -ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f00c", RUN+="usb_modeswitch '/%k'" - -# Olivetti Olicard 500 -ATTR{idVendor}=="0b3c", ATTR{idProduct}=="f017", RUN+="usb_modeswitch '/%k'" - -# Ericsson F5521gw -ATTR{idVendor}=="0bdb", ATTR{idProduct}=="190d", RUN+="usb_modeswitch '/%k'" - -# Ericsson F5521gw (Variant) -ATTR{idVendor}=="0bdb", ATTR{idProduct}=="1910", RUN+="usb_modeswitch '/%k'" - -# Atheros Wireless / Netgear WNDA3200 -ATTR{idVendor}=="0cf3", ATTR{idProduct}=="20ff", RUN+="usb_modeswitch '/%k'" - -# Kobil mIdentity 3G (1) -ATTR{idVendor}=="0d46", ATTR{idProduct}=="45a1", RUN+="usb_modeswitch '/%k'" - -# Kobil mIdentity 3G (2) -ATTR{idVendor}=="0d46", ATTR{idProduct}=="45a5", RUN+="usb_modeswitch '/%k'" - -# Mobile Action ("Smart Cable") -ATTR{idVendor}=="0df7", ATTR{idProduct}=="0800", RUN+="usb_modeswitch '/%k'" - -# MediaTek MT6276M and others, MediaTek/Medion S4222 and probably others -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '/%k'" - -# MediaTek Wimax USB Card -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="7109", RUN+="usb_modeswitch '/%k'" - -# BlackBerry Q10 and Z10 -ATTR{idVendor}=="0fca", ATTR{idProduct}=="8020", RUN+="usb_modeswitch '/%k'" - -# Sony Ericsson MD300 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0cf", RUN+="usb_modeswitch '/%k'" - -# Sony Ericsson EC400 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0df", RUN+="usb_modeswitch '/%k'" - -# Sony Ericsson MD400 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d0e1", RUN+="usb_modeswitch '/%k'" - -# Sony Ericsson MD400G -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d103", RUN+="usb_modeswitch '/%k'" - -# GW D301 (Advinne AMC) -ATTR{idVendor}=="0fd1", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# LG LDU-1900D EV-DO (Rev. A) -ATTR{idVendor}=="1004", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# LG HDM-2100 (EVDO Rev.A USB modem) -ATTR{idVendor}=="1004", ATTR{idProduct}=="607f", RUN+="usb_modeswitch '/%k'" - -# LG L-02A -ATTR{idVendor}=="1004", ATTR{idProduct}=="610c", RUN+="usb_modeswitch '/%k'" - -# LG L-05A -ATTR{idVendor}=="1004", ATTR{idProduct}=="613a", RUN+="usb_modeswitch '/%k'" - -# LG LUU-2100TI (aka AT&T USBConnect Turbo) -ATTR{idVendor}=="1004", ATTR{idProduct}=="613f", RUN+="usb_modeswitch '/%k'" - -# LG L-07A -ATTR{idVendor}=="1004", ATTR{idProduct}=="614e", RUN+="usb_modeswitch '/%k'" - -# LG LUU-2110TI -ATTR{idVendor}=="1004", ATTR{idProduct}=="6156", RUN+="usb_modeswitch '/%k'" - -# LG AD600 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6190", RUN+="usb_modeswitch '/%k'" - -# LG VL600 -ATTR{idVendor}=="1004", ATTR{idProduct}=="61aa", RUN+="usb_modeswitch '/%k'" - -# LG L-02C LTE -ATTR{idVendor}=="1004", ATTR{idProduct}=="61dd", RUN+="usb_modeswitch '/%k'" - -# LG SD711 -ATTR{idVendor}=="1004", ATTR{idProduct}=="61e7", RUN+="usb_modeswitch '/%k'" - -# LG L-08C (NTT docomo) -ATTR{idVendor}=="1004", ATTR{idProduct}=="61eb", RUN+="usb_modeswitch '/%k'" - -# LG L-03D LTE/3G -ATTR{idVendor}=="1004", ATTR{idProduct}=="6327", RUN+="usb_modeswitch '/%k'" - -# UTStarcom UM175 (distributor "Alltel") -ATTR{idVendor}=="106c", ATTR{idProduct}=="3b03", RUN+="usb_modeswitch '/%k'" - -# Pantech / UTStarcom UMW190 (Verizon) -ATTR{idVendor}=="106c", ATTR{idProduct}=="3b05", RUN+="usb_modeswitch '/%k'" - -# UTStarcom UM185E (distributor "Alltel") -ATTR{idVendor}=="106c", ATTR{idProduct}=="3b06", RUN+="usb_modeswitch '/%k'" - -# Pantech UML290 -ATTR{idVendor}=="106c", ATTR{idProduct}=="3b11", RUN+="usb_modeswitch '/%k'" - -# Option Beemo / Pantech P4200 LTE -ATTR{idVendor}=="106c", ATTR{idProduct}=="3b14", RUN+="usb_modeswitch '/%k'" - -# Sagem F@ST 9520-35-GLR -ATTR{idVendor}=="1076", ATTR{idProduct}=="7f40", RUN+="usb_modeswitch '/%k'" - -# Hisense E910 EVDO Phone -ATTR{idVendor}=="109b", ATTR{idProduct}=="f009", RUN+="usb_modeswitch '/%k'" - -# Pantech/Verizon UML295 -ATTR{idVendor}=="10a9", ATTR{idProduct}=="606f", RUN+="usb_modeswitch '/%k'" - -# Pantech LTE Modem -ATTR{idVendor}=="10a9", ATTR{idProduct}=="6080", RUN+="usb_modeswitch '/%k'" - -# Sierra devices (specific driver) -ATTR{idVendor}=="1199", ATTR{idProduct}=="0fff", RUN+="usb_modeswitch '/%k'" - -# Sierra MC8305 -ATTR{idVendor}=="1199", ATTR{idProduct}=="9011", RUN+="usb_modeswitch '/%k'" - -# Sierra MC8355 -ATTR{idVendor}=="1199", ATTR{idProduct}=="9013", RUN+="usb_modeswitch '/%k'" - -# Sierra MC8355 Variant -ATTR{idVendor}=="1199", ATTR{idProduct}=="9017", RUN+="usb_modeswitch '/%k'" - -# Sierra MC7770 -ATTR{idVendor}=="1199", ATTR{idProduct}=="901b", RUN+="usb_modeswitch '/%k'" - -# Sierra EM7700 -ATTR{idVendor}=="1199", ATTR{idProduct}=="901c", RUN+="usb_modeswitch '/%k'" - -# Sierra EM7355 -ATTR{idVendor}=="1199", ATTR{idProduct}=="901f", RUN+="usb_modeswitch '/%k'" - -# Sierra EM7305 -ATTR{idVendor}=="1199", ATTR{idProduct}=="9041", RUN+="usb_modeswitch '/%k'" - -# Sierra AC340U -ATTR{idVendor}=="1199", ATTR{idProduct}=="9051", RUN+="usb_modeswitch '/%k'" - -# Sierra AC770S -ATTR{idVendor}=="1199", ATTR{idProduct}=="9053", RUN+="usb_modeswitch '/%k'" - -# Sierra EM7305 -ATTR{idVendor}=="1199", ATTR{idProduct}=="9063", RUN+="usb_modeswitch '/%k'" - -# Digicom 8E4455 (and all Pirelli devices - EXPERIMENTAL) -ATTR{idVendor}=="1266", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Huawei ME909u-521 (MBIM, dummy config) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1573", RUN+="usb_modeswitch '/%k'" - -# Huawei ME906, ME909 (MBIM, dummy config) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="15c1", RUN+="usb_modeswitch '/%k'" - -# Cisco AM10 "Valet Connector" -ATTR{idVendor}=="1307", ATTR{idProduct}=="1169", RUN+="usb_modeswitch '/%k'" - -# Novatel Wireless devices -ATTR{idVendor}=="1410", ATTR{idProduct}=="5010", RUN+="usb_modeswitch '/%k'" - -# Novatel MC990D -ATTR{idVendor}=="1410", ATTR{idProduct}=="5020", RUN+="usb_modeswitch '/%k'" - -# Novatel MC996D -ATTR{idVendor}=="1410", ATTR{idProduct}=="5023", RUN+="usb_modeswitch '/%k'" - -# Novatel U760 -ATTR{idVendor}=="1410", ATTR{idProduct}=="5030", RUN+="usb_modeswitch '/%k'" - -# Novatel MC760 3G -ATTR{idVendor}=="1410", ATTR{idProduct}=="5031", RUN+="usb_modeswitch '/%k'" - -# Novatel Generic MiFi 2352 / Vodafone MiFi 2352 -ATTR{idVendor}=="1410", ATTR{idProduct}=="5041", RUN+="usb_modeswitch '/%k'" - -# Novatel MiFi 4082 -ATTR{idVendor}=="1410", ATTR{idProduct}=="5055", RUN+="usb_modeswitch '/%k'" - -# Novatel Wireless MC545 HSPA, U679 LTE -ATTR{idVendor}=="1410", ATTR{idProduct}=="5059", RUN+="usb_modeswitch '/%k'" - -# Novatel Generic MiFi 2372 / Vodafone MiFi 2372 -ATTR{idVendor}=="1410", ATTR{idProduct}=="7001", RUN+="usb_modeswitch '/%k'" - -# Novatel U620L -ATTR{idVendor}=="1410", ATTR{idProduct}=="9020", RUN+="usb_modeswitch '/%k'" - -# Sequans SQN1210/SQN1220 (generic chipsets) -ATTR{idVendor}=="148e", ATTR{idProduct}=="a000", RUN+="usb_modeswitch '/%k'" - -# Motorola 802.11 bg WLAN (TER/GUSB3-E) -ATTR{idVendor}=="148f", ATTR{idProduct}=="2578", RUN+="usb_modeswitch '/%k'" - -# RaLink MT7601U -ATTR{idVendor}=="148f", ATTR{idProduct}=="2878", RUN+="usb_modeswitch '/%k'" - -# China TeleCom CBP7.0 -ATTR{idVendor}=="15eb", ATTR{idProduct}=="7153", RUN+="usb_modeswitch '/%k'" - -# Amoi H-01 -ATTR{idVendor}=="1614", ATTR{idProduct}=="0800", RUN+="usb_modeswitch '/%k'" - -# Amoi H-02 -ATTR{idVendor}=="1614", ATTR{idProduct}=="0802", RUN+="usb_modeswitch '/%k'" - -# Anydata ADU-890WH -ATTR{idVendor}=="16d5", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# C-motech CHU-628S -ATTR{idVendor}=="16d8", ATTR{idProduct}=="6281", RUN+="usb_modeswitch '/%k'" - -# C-motech D-50 (aka "CDU-680", "CNU-680") -ATTR{idVendor}=="16d8", ATTR{idProduct}=="6803", RUN+="usb_modeswitch '/%k'" - -# C-motech CDU-685a -ATTR{idVendor}=="16d8", ATTR{idProduct}=="6804", RUN+="usb_modeswitch '/%k'" - -# C-motech CHU-629S -ATTR{idVendor}=="16d8", ATTR{idProduct}=="700a", RUN+="usb_modeswitch '/%k'" - -# C-motech CHU-629S (Variant) -ATTR{idVendor}=="16d8", ATTR{idProduct}=="700b", RUN+="usb_modeswitch '/%k'" - -# C-motech CGU-628 (aka "Franklin Wireless CGU-628A" aka "4G Systems XS Stick W12") -ATTR{idVendor}=="16d8", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Axesstel MV210 -ATTR{idVendor}=="1726", ATTR{idProduct}=="1900", RUN+="usb_modeswitch '/%k'" - -# Axesstel MU130 -ATTR{idVendor}=="1726", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" - -# Spreadtrum SC7702 -ATTR{idVendor}=="1782", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" - -# Spreadtrum SC7702 (Variant) -ATTR{idVendor}=="1782", ATTR{idProduct}=="0023", RUN+="usb_modeswitch '/%k'" - -# JOA Telecom LM-700r -ATTR{idVendor}=="198a", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" - -# Beceem BCSM250 -ATTR{idVendor}=="198f", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" - -# ZTE MU351 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" - -# ZTE AC581 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0026", RUN+="usb_modeswitch '/%k'" - -# ZTE MF636DB -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0033", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K2525 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0040", RUN+="usb_modeswitch '/%k'" - -# ZTE MF110 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0053", RUN+="usb_modeswitch '/%k'" - -# ZTE MF110 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0083", RUN+="usb_modeswitch '/%k'" - -# ZTE MU330 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0090", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K4505-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0101", RUN+="usb_modeswitch '/%k'" - -# ZTE MF112 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0103", RUN+="usb_modeswitch '/%k'" - -# ZTE MF637 (Variant for Orange France) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0110", RUN+="usb_modeswitch '/%k'" - -# ZTE MF651 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0115", RUN+="usb_modeswitch '/%k'" - -# ZTE MF652 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0146", RUN+="usb_modeswitch '/%k'" - -# ZTE MF190 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0149", RUN+="usb_modeswitch '/%k'" - -# ZTE MF656A, MF668A, MF669 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0150", RUN+="usb_modeswitch '/%k'" - -# ZTE MF190 (Variant) and others -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0154", RUN+="usb_modeswitch '/%k'" - -# ZTE MF820 4G LTE -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0166", RUN+="usb_modeswitch '/%k'" - -# ZTE A371B -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0169", RUN+="usb_modeswitch '/%k'" - -# ZTE MF820s, MF832s -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0198", RUN+="usb_modeswitch '/%k'" - -# Onda MT8205 LTE -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0266", RUN+="usb_modeswitch '/%k'" - -# ZTE MF821D (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0304", RUN+="usb_modeswitch '/%k'" - -# ZTE MF821D/MF826 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0318", RUN+="usb_modeswitch '/%k'" - -# ZTE MF821D -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0325", RUN+="usb_modeswitch '/%k'" - -# ZTE MF90 Mobile Hotspot -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0388", RUN+="usb_modeswitch '/%k'" - -# Telewell TW-LTE 4G -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0413", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K3805-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K3570-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1007", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K3571-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1009", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K3806-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1013", RUN+="usb_modeswitch '/%k'" - -# Vodafone K5006Z (MF821) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1017", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE R203 Router -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1019", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE R203 Router -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1020", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE K4201-z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1022", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE R212 Router -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1026", RUN+="usb_modeswitch '/%k'" - -# Vodafone K5008-z (MF823) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1030", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE R206-z Router -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1034", RUN+="usb_modeswitch '/%k'" - -# ZTE / Vodafone K4607-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1038", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE R209-z Router -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1042", RUN+="usb_modeswitch '/%k'" - -# ZTE MF730 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1046", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K4510-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1171", RUN+="usb_modeswitch '/%k'" - -# Vodafone / ZTE K3770-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1175", RUN+="usb_modeswitch '/%k'" - -# Vodafone (ZTE) K3772-Z -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1179", RUN+="usb_modeswitch '/%k'" - -# ZTE MF691 (T-Mobile Rocket 2.0) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1201", RUN+="usb_modeswitch '/%k'" - -# ZTE MF192 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1207", RUN+="usb_modeswitch '/%k'" - -# ZTE MF195 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1210", RUN+="usb_modeswitch '/%k'" - -# ZTE MF192 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1216", RUN+="usb_modeswitch '/%k'" - -# ZTE MF192 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1219", RUN+="usb_modeswitch '/%k'" - -# ZTE MF190 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1224", RUN+="usb_modeswitch '/%k'" - -# ZTE MF668 (Variant), MF70 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1225", RUN+="usb_modeswitch '/%k'" - -# ZTE MF680 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1227", RUN+="usb_modeswitch '/%k'" - -# ZTE MFxxx -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1232", RUN+="usb_modeswitch '/%k'" - -# ZTE MFxxx -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1233", RUN+="usb_modeswitch '/%k'" - -# ZTE / Vodafone K4201 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1237", RUN+="usb_modeswitch '/%k'" - -# ZTE MF825A -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1238", RUN+="usb_modeswitch '/%k'" - -# ZTE MF730 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1420", RUN+="usb_modeswitch '/%k'" - -# ZTE MFxxx -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1511", RUN+="usb_modeswitch '/%k'" - -# ZTE MF192 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1514", RUN+="usb_modeswitch '/%k'" - -# ZTE MF192 (Variant) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1517", RUN+="usb_modeswitch '/%k'" - -# ZTE MF652 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1520", RUN+="usb_modeswitch '/%k'" - -# ZTE MF591 TMobile -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1523", RUN+="usb_modeswitch '/%k'" - -# ZTE MF196 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1528", RUN+="usb_modeswitch '/%k'" - -# ZTE MF190J -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1536", RUN+="usb_modeswitch '/%k'" - -# ZTE MF190J -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1542", RUN+="usb_modeswitch '/%k'" - -# ZTE MF195E -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1580", RUN+="usb_modeswitch '/%k'" - -# ZTE MF710M Variants -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1588", RUN+="usb_modeswitch '/%k'" - -# ZTE MF710 (Vietnam) a.o. -ATTR{idVendor}=="19d2", ATTR{idProduct}=="1595", RUN+="usb_modeswitch '/%k'" - -# ZTE devices, some Onda devices -ATTR{idVendor}=="19d2", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" - -# ZTE MF60 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="2004", RUN+="usb_modeswitch '/%k'" - -# ZTE AX226 WiMax -ATTR{idVendor}=="19d2", ATTR{idProduct}=="bccd", RUN+="usb_modeswitch '/%k'" - -# ZTE AC682 (a.k.a. SmartFren Connex) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffde", RUN+="usb_modeswitch '/%k'" - -# ZTE "ffe" devices 1 (e.g. Cricket A605) -ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffe6", RUN+="usb_modeswitch '/%k'" - -# ZTE "ff" devices 1 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="fff5", RUN+="usb_modeswitch '/%k'" - -# ZTE "fff" devices 2 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="fff6", RUN+="usb_modeswitch '/%k'" - -# BandRich BandLuxe C100, C120, C170, C270, C3xx, C508 -ATTR{idVendor}=="1a8d", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# BandRich BandLuxe C339 -ATTR{idVendor}=="1a8d", ATTR{idProduct}=="2000", RUN+="usb_modeswitch '/%k'" - -# Hummer DTM5731, Aircard 901 -ATTR{idVendor}=="1ab7", ATTR{idProduct}=="5700", RUN+="usb_modeswitch '/%k'" - -# EpiValley SEC-7089 (featured by Alegro and Starcomms / iZAP) -ATTR{idVendor}=="1b7d", ATTR{idProduct}=="0700", RUN+="usb_modeswitch '/%k'" - -# ETCOM E300 -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="000f", RUN+="usb_modeswitch '/%k'" - -# Alcatel OT-X080C -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="00ca", RUN+="usb_modeswitch '/%k'" - -# Haier EVDO Rev. A -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="011f", RUN+="usb_modeswitch '/%k'" - -# Alcatel X602D -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="022c", RUN+="usb_modeswitch '/%k'" - -# Yota 4G LTE W8 -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="025e", RUN+="usb_modeswitch '/%k'" - -# Alcatel X200/X200L/X060S/L100V, Archos G9 3G Key -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Alcatel OT-X220D, L100V -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f017", RUN+="usb_modeswitch '/%k'" - -# Alcatel OT X220L -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f052", RUN+="usb_modeswitch '/%k'" - -# Alcatel One Touch X020 -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="1001", RUN+="usb_modeswitch '/%k'" - -# TU930, IVIO IV-2010u -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="6000", RUN+="usb_modeswitch '/%k'" - -# Omega WL-72B ("Vibe 3G") -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="6061", RUN+="usb_modeswitch '/%k'" - -# Emobile D12LC -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9101", RUN+="usb_modeswitch '/%k'" - -# MyWave SW006 Sport Phone/Modem Combination -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9200", RUN+="usb_modeswitch '/%k'" - -# Emobile D21LC -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9401", RUN+="usb_modeswitch '/%k'" - -# Longcheer SU9800 -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9800", RUN+="usb_modeswitch '/%k'" - -# Telewell TW-3G HSPA+, FS01BU 3G, SmartBro WM66E -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" - -# XS Stick W100 (Omega) -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9bfe", RUN+="usb_modeswitch '/%k'" - -# Prolink PCM100 -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9d00", RUN+="usb_modeswitch '/%k'" - -# BSNL Capitel -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9e00", RUN+="usb_modeswitch '/%k'" - -# Explay Slim -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="9e08", RUN+="usb_modeswitch '/%k'" - -# Longcheer/Longsoon (aka Omega Technology) devices, MobiData MBD-200HU and others -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Micromax MMX400R / 4G Systems XSBOXGO -ATTR{idVendor}=="1c9e", ATTR{idProduct}=="f010", RUN+="usb_modeswitch '/%k'" - -# TechFaith BSNL Capitel -ATTR{idVendor}=="1d09", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Aiko 81D -ATTR{idVendor}=="1d09", ATTR{idProduct}=="1021", RUN+="usb_modeswitch '/%k'" - -# TechFaith FlyingLARK46 -ATTR{idVendor}=="1d09", ATTR{idProduct}=="1025", RUN+="usb_modeswitch '/%k'" - -# Qisda H21 Flying Beetle -ATTR{idVendor}=="1da5", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Wisue W340 -ATTR{idVendor}=="1dbc", ATTR{idProduct}=="0669", RUN+="usb_modeswitch '/%k'" - -# Solomon S3Gm-660 -ATTR{idVendor}=="1dd6", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Philips PicoPix 1020 Projector -ATTR{idVendor}=="1de1", ATTR{idProduct}=="1101", RUN+="usb_modeswitch '/%k'" - -# Option iCON 210, PROLiNK PHS100 + PH300, Hyundai MB-810, A-Link 3GU -ATTR{idVendor}=="1e0e", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# 3GO 3GO11 HSUPA -ATTR{idVendor}=="1e89", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# AirPlus MCD-800 -ATTR{idVendor}=="1edf", ATTR{idProduct}=="6003", RUN+="usb_modeswitch '/%k'" - -# Onda MV815U -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" - -# Onda POM1051 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0007", RUN+="usb_modeswitch '/%k'" - -# Onda MW833UP -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0009", RUN+="usb_modeswitch '/%k'" - -# Onda MW833UP + MW835UP -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0013", RUN+="usb_modeswitch '/%k'" - -# Onda MO835UP -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0018", RUN+="usb_modeswitch '/%k'" - -# Onda MW836UP-K -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0040", RUN+="usb_modeswitch '/%k'" - -# Onda MDC655 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0045", RUN+="usb_modeswitch '/%k'" - -# Onda MT655 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0048", RUN+="usb_modeswitch '/%k'" - -# Onda MDC655 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="004a", RUN+="usb_modeswitch '/%k'" - -# Onda MDC655 Variant -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="004f", RUN+="usb_modeswitch '/%k'" - -# Onda MW875UP -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0054", RUN+="usb_modeswitch '/%k'" - -# Onda MSA 14.4 (TIM Brasil) -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0060", RUN+="usb_modeswitch '/%k'" - -# Onda TM201, CM201 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0063", RUN+="usb_modeswitch '/%k'" - -# Onda WM301 -ATTR{idVendor}=="1ee8", ATTR{idProduct}=="0068", RUN+="usb_modeswitch '/%k'" - -# Cricket A600 -ATTR{idVendor}=="1f28", ATTR{idProduct}=="0021", RUN+="usb_modeswitch '/%k'" - -# Franklin Wireless U210 (Variant) -ATTR{idVendor}=="1fac", ATTR{idProduct}=="0032", RUN+="usb_modeswitch '/%k'" - -# Franklin Wireless U210 -ATTR{idVendor}=="1fac", ATTR{idProduct}=="0130", RUN+="usb_modeswitch '/%k'" - -# Franklin Wireless U600 -ATTR{idVendor}=="1fac", ATTR{idProduct}=="0150", RUN+="usb_modeswitch '/%k'" - -# Franklin Wireless U600 -ATTR{idVendor}=="1fac", ATTR{idProduct}=="0151", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-157 B1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="00a6", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-157 C1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="00a7", RUN+="usb_modeswitch '/%k'" - -# D-Link DWP-157 C1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="7600", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-221 -ATTR{idVendor}=="2001", ATTR{idProduct}=="98ff", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-221 B1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a401", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 A8, DWP-157 B1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a403", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-167 A1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a405", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-221 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a406", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-157 C1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a407", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 A8 (Myanmar) -ATTR{idVendor}=="2001", ATTR{idProduct}=="a40a", RUN+="usb_modeswitch '/%k'" - -# D-Link DWR-910 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a40d", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 A7 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a706", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-157 B1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a707", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-158 D1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a708", RUN+="usb_modeswitch '/%k'" - -# D-Link DWR-510 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a805", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-157 A1 -ATTR{idVendor}=="2001", ATTR{idProduct}=="a809", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-156 (Variant) -ATTR{idVendor}=="2001", ATTR{idProduct}=="a80b", RUN+="usb_modeswitch '/%k'" - -# D-Link DWM-222 -ATTR{idVendor}=="2001", ATTR{idProduct}=="ab00", RUN+="usb_modeswitch '/%k'" - -# Venus VT-18 -ATTR{idVendor}=="2015", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" - -# Haier CE682 (EVDO) -ATTR{idVendor}=="201e", ATTR{idProduct}=="1023", RUN+="usb_modeswitch '/%k'" - -# Haier CE 100 -ATTR{idVendor}=="201e", ATTR{idProduct}=="2009", RUN+="usb_modeswitch '/%k'" - -# Mediatek MT6229, Micromax MMX 377G, Olicard 300 -ATTR{idVendor}=="2020", ATTR{idProduct}=="0002", RUN+="usb_modeswitch '/%k'" - -# SpeedUp SU-8000 and others -ATTR{idVendor}=="2020", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" - -# SpeedUp SU-8000U -ATTR{idVendor}=="2020", ATTR{idProduct}=="f00f", RUN+="usb_modeswitch '/%k'" - -# Changhong CH690, D-Link DWM-163 + DWM-168 -ATTR{idVendor}=="2077", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Telenet 3G dongle (T&W WU160), Netgear AC327U and others -ATTR{idVendor}=="2077", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# BM WM78 -ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00a", RUN+="usb_modeswitch '/%k'" - -# Intex 3.5G -ATTR{idVendor}=="20a6", ATTR{idProduct}=="f00e", RUN+="usb_modeswitch '/%k'" - -# Tlaytech TEU800 -ATTR{idVendor}=="20b9", ATTR{idProduct}=="1682", RUN+="usb_modeswitch '/%k'" - -# StrongRising (China Telcom), Air FlexiNet -ATTR{idVendor}=="21f5", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# StrongRising STD808 -ATTR{idVendor}=="21f5", ATTR{idProduct}=="3010", RUN+="usb_modeswitch '/%k'" - -# Viettel VT100 -ATTR{idVendor}=="2262", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" - -# WeTelecom WM-D200 -ATTR{idVendor}=="22de", ATTR{idProduct}=="6801", RUN+="usb_modeswitch '/%k'" - -# WeTelecom WM-D200A -ATTR{idVendor}=="22de", ATTR{idProduct}=="6802", RUN+="usb_modeswitch '/%k'" - -# WeTelecom WM-D300 -ATTR{idVendor}=="22de", ATTR{idProduct}=="6803", RUN+="usb_modeswitch '/%k'" - -# Tata Photon+, Olive VME102 -ATTR{idVendor}=="22f4", ATTR{idProduct}=="0021", RUN+="usb_modeswitch '/%k'" - -# Linktop LW272/LW273 (BSNL Teracom) -ATTR{idVendor}=="230d", ATTR{idProduct}=="0001", RUN+="usb_modeswitch '/%k'" - -# Linktop LW272/LW273 (BSNL Teracom) -ATTR{idVendor}=="230d", ATTR{idProduct}=="0003", RUN+="usb_modeswitch '/%k'" - -# Visiontek 82GH 3G -ATTR{idVendor}=="230d", ATTR{idProduct}=="0007", RUN+="usb_modeswitch '/%k'" - -# Zoom 3G -ATTR{idVendor}=="230d", ATTR{idProduct}=="000b", RUN+="usb_modeswitch '/%k'" - -# Zoom 3G -ATTR{idVendor}=="230d", ATTR{idProduct}=="000c", RUN+="usb_modeswitch '/%k'" - -# Intex Speed 3G v7.2 -ATTR{idVendor}=="230d", ATTR{idProduct}=="000d", RUN+="usb_modeswitch '/%k'" - -# Linktop LW272/LW273 -ATTR{idVendor}=="230d", ATTR{idProduct}=="0101", RUN+="usb_modeswitch '/%k'" - -# Teracom LW272 -ATTR{idVendor}=="230d", ATTR{idProduct}=="0103", RUN+="usb_modeswitch '/%k'" - -# TP-Link MA180 -ATTR{idVendor}=="2357", ATTR{idProduct}=="0200", RUN+="usb_modeswitch '/%k'" - -# TP-Link MA260 -ATTR{idVendor}=="2357", ATTR{idProduct}=="f000", RUN+="usb_modeswitch '/%k'" - -# Titan 3.5G -ATTR{idVendor}=="23a2", ATTR{idProduct}=="1010", RUN+="usb_modeswitch '/%k'" - -# Unknown devices -ATTR{idVendor}=="257a", ATTR{idProduct}=="a000", RUN+="usb_modeswitch '/%k'" - -# Unknown devices -ATTR{idVendor}=="257a", ATTR{idProduct}=="b000", RUN+="usb_modeswitch '/%k'" - -# Unknown devices -ATTR{idVendor}=="257a", ATTR{idProduct}=="c000", RUN+="usb_modeswitch '/%k'" - -# Unknown devices -ATTR{idVendor}=="257a", ATTR{idProduct}=="d000", RUN+="usb_modeswitch '/%k'" - -# BlueLink BL-EV08C -ATTR{idVendor}=="6000", ATTR{idProduct}=="1000", RUN+="usb_modeswitch '/%k'" - -# Exiss Mobile E-190 series (made by C-motech) -ATTR{idVendor}=="8888", ATTR{idProduct}=="6500", RUN+="usb_modeswitch '/%k'" - -# Aiko 81D, fw with wrong vendor ID -ATTR{idVendor}=="ed09", ATTR{idProduct}=="1021", RUN+="usb_modeswitch '/%k'" - -LABEL="modeswitch_rules_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-firmware.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-firmware.rules deleted file mode 100644 index f7a08ce95e..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-firmware.rules +++ /dev/null @@ -1,3 +0,0 @@ -# stub for immediately telling the kernel that userspace firmware loading -# failed; necessary to avoid long timeouts with CONFIG_FW_LOADER_USER_HELPER=y -SUBSYSTEM=="firmware", ACTION=="add", ATTR{loading}="-1" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-udev-default.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-udev-default.rules deleted file mode 100644 index e9eeb8518e..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/50-udev-default.rules +++ /dev/null @@ -1,77 +0,0 @@ -# do not edit this file, it will be overwritten on update - -# run a command on remove events -ACTION=="remove", ENV{REMOVE_CMD}!="", RUN+="$env{REMOVE_CMD}" -ACTION=="remove", GOTO="default_end" - -SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}" - -# select "system RTC" or just use the first one -SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" -SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100" - -SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" -SUBSYSTEM=="input", ENV{ID_INPUT}=="", IMPORT{builtin}="input_id" -ENV{MODALIAS}!="", IMPORT{builtin}="hwdb --subsystem=$env{SUBSYSTEM}" - -ACTION!="add", GOTO="default_end" - -SUBSYSTEM=="tty", KERNEL=="ptmx", GROUP="tty", MODE="0666" -SUBSYSTEM=="tty", KERNEL=="tty", GROUP="tty", MODE="0666" -SUBSYSTEM=="tty", KERNEL=="tty[0-9]*", GROUP="tty", MODE="0620" -SUBSYSTEM=="tty", KERNEL=="sclp_line[0-9]*", GROUP="tty", MODE="0620" -SUBSYSTEM=="tty", KERNEL=="ttysclp[0-9]*", GROUP="tty", MODE="0620" -SUBSYSTEM=="tty", KERNEL=="3270/tty[0-9]*", GROUP="tty", MODE="0620" -SUBSYSTEM=="vc", KERNEL=="vcs*|vcsa*", GROUP="tty" -KERNEL=="tty[A-Z]*[0-9]|pppox[0-9]*|ircomm[0-9]*|noz[0-9]*|rfcomm[0-9]*", GROUP="dialout" - -SUBSYSTEM=="mem", KERNEL=="mem|kmem|port", GROUP="kmem", MODE="0640" - -SUBSYSTEM=="input", GROUP="input" -SUBSYSTEM=="input", KERNEL=="js[0-9]*", MODE="0664" - -SUBSYSTEM=="video4linux", GROUP="video" -SUBSYSTEM=="graphics", GROUP="video" -SUBSYSTEM=="drm", GROUP="video" -SUBSYSTEM=="dvb", GROUP="video" - -SUBSYSTEM=="sound", GROUP="audio", \ - OPTIONS+="static_node=snd/seq", OPTIONS+="static_node=snd/timer" - -SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", MODE="0664" - -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", GROUP="video" -SUBSYSTEM=="firewire", ATTR{units}=="*0x00b09d:0x00010*", GROUP="video" -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", GROUP="video" -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x014001*", GROUP="video" - -KERNEL=="parport[0-9]*", GROUP="lp" -SUBSYSTEM=="printer", KERNEL=="lp*", GROUP="lp" -SUBSYSTEM=="ppdev", GROUP="lp" -KERNEL=="lp[0-9]*", GROUP="lp" -KERNEL=="irlpt[0-9]*", GROUP="lp" -SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", GROUP="lp" - -SUBSYSTEM=="block", GROUP="disk" -SUBSYSTEM=="block", KERNEL=="sr[0-9]*", GROUP="cdrom" -SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", GROUP="cdrom" -KERNEL=="sch[0-9]*", GROUP="cdrom" -KERNEL=="pktcdvd[0-9]*", GROUP="cdrom" -KERNEL=="pktcdvd", GROUP="cdrom" - -SUBSYSTEM=="scsi_generic|scsi_tape", SUBSYSTEMS=="scsi", ATTRS{type}=="1|8", GROUP="tape" -SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="0", GROUP="disk" -KERNEL=="qft[0-9]*|nqft[0-9]*|zqft[0-9]*|nzqft[0-9]*|rawqft[0-9]*|nrawqft[0-9]*", GROUP="disk" -KERNEL=="loop-control", GROUP="disk", OPTIONS+="static_node=loop-control" -KERNEL=="btrfs-control", GROUP="disk" -KERNEL=="rawctl", GROUP="disk" -SUBSYSTEM=="raw", KERNEL=="raw[0-9]*", GROUP="disk" -SUBSYSTEM=="aoe", GROUP="disk", MODE="0220" -SUBSYSTEM=="aoe", KERNEL=="err", MODE="0440" - -KERNEL=="rfkill", MODE="0664" -KERNEL=="tun", MODE="0666", OPTIONS+="static_node=net/tun" - -KERNEL=="fuse", MODE="0666", OPTIONS+="static_node=fuse" - -LABEL="default_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/55-dm.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/55-dm.rules deleted file mode 100644 index 019c3af7f6..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/55-dm.rules +++ /dev/null @@ -1,144 +0,0 @@ -# Copyright (C) 2009 Red Hat, Inc. All rights reserved. -# -# This file is part of LVM2. - -# Udev rules for device-mapper devices. -# -# These rules create a DM control node in /dev/mapper directory. -# The rules also create nodes named dm-x (x is a number) in /dev -# directory and symlinks to these nodes with names given by -# the actual DM names. Some udev environment variables are set -# for use in later rules: -# DM_NAME - actual DM device's name -# DM_UUID - UUID set for DM device (blank if not specified) -# DM_SUSPENDED - suspended state of DM device (0 or 1) -# -# These rules cover only basic device-mapper functionality in udev. -# -# Various DM subsystems may contain further subsystem-specific rules -# in 11-dm-.rules which should be installed together -# with the DM subsystem and which extend these basic rules. -# For example: -# 11-dm-lvm.rules for LVM subsystem -# 11-dm-mpath.rules for multipath subsystem (since version 0.6.0, recommended!) -# -# Even more specific rules may be required by subsystems so always -# check subsystem's upstream repository for recent set of rules. -# Also, keep in mind that recent rules may also require recent -# subsystem-specific binaries. - -KERNEL=="device-mapper", NAME="mapper/control" - -# Decode udev control flags and set environment variables appropriately. -# These flags are encoded in DM_COOKIE variable that was introduced in -# kernel version 2.6.31. Therefore, we can use this feature with -# kernels >= 2.6.31 only. -ENV{DM_COOKIE}=="?*", IMPORT{program}="/sbin/dmsetup udevflags $env{DM_COOKIE}" -ENV{DM_COOKIE}=="?*", RUN+="/sbin/dmsetup udevcomplete $env{DM_COOKIE}" - -SUBSYSTEM!="block", GOTO="dm_end" -KERNEL!="dm-[0-9]*", GOTO="dm_end" - -# Device created, major and minor number assigned - "add" event generated. -# Table loaded - no event generated. -# Device resumed (or renamed) - "change" event generated. -# Device removed - "remove" event generated. -# -# The dm-X nodes are always created, even on "add" event, we can't suppress -# that (the node is created even earlier with devtmpfs). All the symlinks -# (e.g. /dev/mapper) are created in right time after a device has its table -# loaded and is properly resumed. For this reason, direct use of dm-X nodes -# is not recommended. -ACTION!="add|change", GOTO="dm_end" - -# Rule out easy-to-detect inappropriate events first. -ENV{DISK_RO}=="1", GOTO="dm_disable" - -# There is no cookie set nor any flags encoded in events not originating -# in libdevmapper so we need to detect this and try to behave correctly. -# For such spurious events, regenerate all flags from current udev database content -# (this information would normally be inaccessible for spurious ADD and CHANGE events). -ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}=="1", ENV{DM_ACTIVATION}="1", GOTO="dm_flags_done" -IMPORT{db}="DM_UDEV_DISABLE_DM_RULES_FLAG" -IMPORT{db}="DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG" -IMPORT{db}="DM_UDEV_DISABLE_DISK_RULES_FLAG" -IMPORT{db}="DM_UDEV_DISABLE_OTHER_RULES_FLAG" -IMPORT{db}="DM_UDEV_LOW_PRIORITY_FLAG" -IMPORT{db}="DM_UDEV_DISABLE_LIBRARY_FALLBACK_FLAG" -IMPORT{db}="DM_UDEV_PRIMARY_SOURCE_FLAG" -IMPORT{db}="DM_UDEV_FLAG7" -IMPORT{db}="DM_UDEV_RULES" -LABEL="dm_flags_done" - -# Normally, we operate on "change" events. But when coldplugging, there's an -# "add" event present. We have to recognize this and do our actions in this -# particular situation, too. Also, we don't want the nodes to be created -# prematurely on "add" events while not coldplugging. We check -# DM_UDEV_PRIMARY_SOURCE_FLAG to see if the device was activated correctly -# before and if not, we ignore the "add" event totally. This way we can support -# udev triggers generating "add" events (e.g. "udevadm trigger --action=add" or -# "echo add > /sys/block//uevent"). The trigger with "add" event is -# also used at boot to reevaluate udev rules for all existing devices activated -# before (e.g. in initrd). If udev is used in initrd, we require the udev init -# script to not remove the existing udev database so we can reuse the information -# stored at the time of device activation in the initrd. -ACTION!="add", GOTO="dm_no_coldplug" -ENV{DM_UDEV_PRIMARY_SOURCE_FLAG}!="1", GOTO="dm_disable" -ENV{DM_ACTIVATION}="1" -LABEL="dm_no_coldplug" - -# Putting it together, following table is used to recognize genuine and spurious events. -# N.B. Spurious events are generated based on use of the WATCH udev -# rule or by triggering an event manually by "udevadm trigger" call -# or by "echo > /sys/block/dm-X/uevent". -# -# EVENT DM_UDEV_PRIMARY_SOURCE_FLAG DM_ACTIVATION -# ====================================================================== -# add event (genuine) 0 0 -# change event (genuine) 1 1 -# add event (spurious) -# |_ dev still not active 0 0 -# \_ dev already active 1 1 -# change event (spurious) -# |_ dev still not active 0 0 -# \_ dev already active 1 0 - -# "dm" sysfs subdirectory is available in newer versions of DM -# only (kernels >= 2.6.29). We have to check for its existence -# and use dmsetup tool instead to get the DM name, uuid and -# suspended state if the "dm" subdirectory is not present. -# The "suspended" item was added even later (kernels >= 2.6.31), -# so we also have to call dmsetup if the kernel version used -# is in between these releases. -TEST=="dm", ENV{DM_NAME}="$attr{dm/name}", ENV{DM_UUID}="$attr{dm/uuid}", ENV{DM_SUSPENDED}="$attr{dm/suspended}" -TEST!="dm", IMPORT{program}="/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o name,uuid,suspended" -ENV{DM_SUSPENDED}!="?*", IMPORT{program}="/sbin/dmsetup info -j %M -m %m -c --nameprefixes --noheadings --rows -o suspended" - -# dmsetup tool provides suspended state information in textual -# form with values "Suspended"/"Active". We translate it to -# 0/1 respectively to be consistent with sysfs values. -ENV{DM_SUSPENDED}=="Active", ENV{DM_SUSPENDED}="0" -ENV{DM_SUSPENDED}=="Suspended", ENV{DM_SUSPENDED}="1" - -# This variable provides a reliable way to check that device-mapper -# rules were installed. It means that all needed variables are set -# by these rules directly so there's no need to acquire them again -# later. -ENV{DM_UDEV_RULES}="1" - -ENV{DM_UDEV_DISABLE_DM_RULES_FLAG}!="1", ENV{DM_NAME}=="?*", SYMLINK+="mapper/$env{DM_NAME}" - -# Avoid processing and scanning a DM device in the other (foreign) -# rules if it is in suspended state. However, we still keep 'disk' -# and 'DM subsystem' related rules enabled in this case. -ENV{DM_SUSPENDED}=="1", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" - -GOTO="dm_end" - -LABEL="dm_disable" -ENV{DM_UDEV_DISABLE_SUBSYSTEM_RULES_FLAG}="1" -ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}="1" -ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}="1" -OPTIONS:="nowatch" - -LABEL="dm_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-block.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-block.rules deleted file mode 100644 index 42c75974a5..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-block.rules +++ /dev/null @@ -1,11 +0,0 @@ -# do not edit this file, it will be overwritten on update - -# enable in-kernel media-presence polling -ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_poll_msecs}=="0", \ - ATTR{parameters/events_dfl_poll_msecs}="2000" - -# forward scsi device event to corresponding block device -ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change" - -# watch metadata changes, caused by tools closing the device node which was opened for writing -ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*|pmem*", OPTIONS+="watch" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-cdrom_id.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-cdrom_id.rules deleted file mode 100644 index 56fe7c9cad..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-cdrom_id.rules +++ /dev/null @@ -1,25 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="cdrom_end" -SUBSYSTEM!="block", GOTO="cdrom_end" -KERNEL!="sr[0-9]*|vdisk*|xvd*", GOTO="cdrom_end" -ENV{DEVTYPE}!="disk", GOTO="cdrom_end" - -# unconditionally tag device as CDROM -KERNEL=="sr[0-9]*", ENV{ID_CDROM}="1" - -# media eject button pressed -ENV{DISK_EJECT_REQUEST}=="?*", RUN+="cdrom_id --eject-media $devnode", GOTO="cdrom_end" - -# import device and media properties and lock tray to -# enable the receiving of media eject button events -IMPORT{program}="cdrom_id --lock-media $devnode" - -# ejecting a CD does not remove the device node, so mark the systemd device -# unit as inactive while there is no medium; this automatically cleans up of -# stale mounts after ejecting -ENV{DISK_MEDIA_CHANGE}=="?*", ENV{ID_CDROM_MEDIA}!="?*", ENV{SYSTEMD_READY}="0" - -KERNEL=="sr0", SYMLINK+="cdrom", OPTIONS+="link_priority=-100" - -LABEL="cdrom_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-crda.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-crda.rules deleted file mode 100644 index c28a2c9373..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-crda.rules +++ /dev/null @@ -1 +0,0 @@ -SUBSYSTEM=="ieee80211", ACTION=="add", RUN+="/lib/crda/setregdomain" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-drm.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-drm.rules deleted file mode 100644 index 1ed3e445f2..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-drm.rules +++ /dev/null @@ -1,3 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION!="remove", SUBSYSTEM=="drm", SUBSYSTEMS=="pci|usb|platform", IMPORT{builtin}="path_id" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-evdev.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-evdev.rules deleted file mode 100644 index ade7e7f646..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-evdev.rules +++ /dev/null @@ -1,19 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="evdev_end" -KERNEL!="event*", GOTO="evdev_end" - -# skip later rules when we find something for this input device -IMPORT{builtin}="hwdb --subsystem=input --lookup-prefix=evdev:", \ - RUN{builtin}+="keyboard", GOTO="evdev_end" - -# AT keyboard matching by the machine's DMI data -ENV{ID_INPUT_KEY}=="?*", DRIVERS=="atkbd", \ - IMPORT{builtin}="hwdb 'evdev:atkbd:$attr{[dmi/id]modalias}'", \ - RUN{builtin}+="keyboard", GOTO="evdev_end" - -# device matching the input device name and the machine's DMI data -KERNELS=="input*", IMPORT{builtin}="hwdb 'evdev:name:$attr{name}:$attr{[dmi/id]modalias}'", \ - RUN{builtin}+="keyboard", GOTO="evdev_end" - -LABEL="evdev_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-alsa.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-alsa.rules deleted file mode 100644 index 8154e2dbb5..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-alsa.rules +++ /dev/null @@ -1,14 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="persistent_alsa_end" -SUBSYSTEM!="sound", GOTO="persistent_alsa_end" -KERNEL!="controlC[0-9]*", GOTO="persistent_alsa_end" - -SUBSYSTEMS=="usb", ENV{ID_MODEL}=="", IMPORT{builtin}="usb_id" -ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" -ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", SYMLINK+="snd/by-id/$env{ID_BUS}-$env{ID_SERIAL}" - -IMPORT{builtin}="path_id" -ENV{ID_PATH}=="?*", SYMLINK+="snd/by-path/$env{ID_PATH}" - -LABEL="persistent_alsa_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-input.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-input.rules deleted file mode 100644 index 607144bf8a..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-input.rules +++ /dev/null @@ -1,40 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="persistent_input_end" -SUBSYSTEM!="input", GOTO="persistent_input_end" -SUBSYSTEMS=="bluetooth", ENV{ID_BUS}="bluetooth", GOTO="persistent_input_end" -SUBSYSTEMS=="rmi4", ENV{ID_BUS}="rmi", GOTO="persistent_input_end" -SUBSYSTEMS=="serio", ENV{ID_BUS}="i8042", GOTO="persistent_input_end" - -SUBSYSTEMS=="usb", ENV{ID_BUS}=="", IMPORT{builtin}="usb_id" - -# determine class name for persistent symlinks -ENV{ID_INPUT_KEYBOARD}=="?*", ENV{.INPUT_CLASS}="kbd" -ENV{ID_INPUT_MOUSE}=="?*", ENV{.INPUT_CLASS}="mouse" -ENV{ID_INPUT_TOUCHPAD}=="?*", ENV{.INPUT_CLASS}="mouse" -ENV{ID_INPUT_TABLET}=="?*", ENV{.INPUT_CLASS}="mouse" -ENV{ID_INPUT_JOYSTICK}=="?*", ENV{.INPUT_CLASS}="joystick" -DRIVERS=="pcspkr", ENV{.INPUT_CLASS}="spkr" -ATTRS{name}=="*dvb*|*DVB*|* IR *", ENV{.INPUT_CLASS}="ir" - -# fill empty serial number -ENV{.INPUT_CLASS}=="?*", ENV{ID_SERIAL}=="", ENV{ID_SERIAL}="noserial" - -# by-id links -KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-$env{.INPUT_CLASS}" -KERNEL=="mouse*|js*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-$env{.INPUT_CLASS}" -KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="|00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-$env{.INPUT_CLASS}" -KERNEL=="event*", ENV{ID_BUS}=="?*", ENV{.INPUT_CLASS}=="?*", ATTRS{bInterfaceNumber}=="?*", ATTRS{bInterfaceNumber}!="00", SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$attr{bInterfaceNumber}-event-$env{.INPUT_CLASS}" -# allow empty class for USB devices, by appending the interface number -SUBSYSTEMS=="usb", ENV{ID_BUS}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", ATTRS{bInterfaceNumber}=="?*", \ - SYMLINK+="input/by-id/$env{ID_BUS}-$env{ID_SERIAL}-event-if$attr{bInterfaceNumber}" - -# by-path -SUBSYSTEMS=="pci|usb|platform|acpi", IMPORT{builtin}="path_id" -ENV{ID_PATH}=="?*", KERNEL=="mouse*|js*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-$env{.INPUT_CLASS}" -ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="?*", SYMLINK+="input/by-path/$env{ID_PATH}-event-$env{.INPUT_CLASS}" -# allow empty class for platform and usb devices; platform supports only a single interface that way -SUBSYSTEMS=="usb|platform", ENV{ID_PATH}=="?*", KERNEL=="event*", ENV{.INPUT_CLASS}=="", \ - SYMLINK+="input/by-path/$env{ID_PATH}-event" - -LABEL="persistent_input_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-dm.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-dm.rules deleted file mode 100644 index 3fe3b6ce0d..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-dm.rules +++ /dev/null @@ -1,39 +0,0 @@ -# Copyright (C) 2009 Red Hat, Inc. All rights reserved. -# -# This file is part of LVM2. - -# Udev rules for device-mapper devices. -# -# These rules create symlinks in /dev/disk directory. -# Symlinks that depend on probing filesystem type, -# label and uuid are created only if the device is not -# suspended. - -# "add" event is processed on coldplug only! -ACTION!="add|change", GOTO="dm_end" -ENV{DM_UDEV_RULES}!="?*", GOTO="dm_end" -ENV{DM_UDEV_DISABLE_DISK_RULES_FLAG}=="1", GOTO="dm_end" - -SYMLINK+="disk/by-id/dm-name-$env{DM_NAME}" -ENV{DM_UUID}=="?*", SYMLINK+="disk/by-id/dm-uuid-$env{DM_UUID}" - -ENV{DM_SUSPENDED}=="1", GOTO="dm_end" -ENV{DM_NOSCAN}=="1", GOTO="dm_watch" - -IMPORT{builtin}="blkid" -ENV{DM_UDEV_LOW_PRIORITY_FLAG}=="1", OPTIONS="link_priority=-100" -ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" -ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" - -# Add inotify watch to track changes on this device. -# Using the watch rule is not optimal - it generates a lot of spurious -# and useless events whenever the device opened for read-write is closed. -# The best would be to generete the event directly in the tool changing -# relevant information so only relevant events will be processed -# (like creating a filesystem, changing filesystem label etc.). -# -# But let's use this until we have something better... -LABEL="dm_watch" -OPTIONS+="watch" - -LABEL="dm_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-tape.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-tape.rules deleted file mode 100644 index b604864ee8..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage-tape.rules +++ /dev/null @@ -1,26 +0,0 @@ -# do not edit this file, it will be overwritten on update - -# persistent storage links: /dev/tape/{by-id,by-path} - -ACTION=="remove", GOTO="persistent_storage_tape_end" -ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_tape_end" - -# type 8 devices are "Medium Changers" -SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="8", IMPORT{program}="scsi_id --sg-version=3 --export --whitelisted -d $devnode", \ - SYMLINK+="tape/by-id/scsi-$env{ID_SERIAL}" - -SUBSYSTEM!="scsi_tape", GOTO="persistent_storage_tape_end" - -KERNEL=="st*[0-9]|nst*[0-9]", ATTRS{ieee1394_id}=="?*", ENV{ID_SERIAL}="$attr{ieee1394_id}", ENV{ID_BUS}="ieee1394" -KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" -KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", KERNELS=="[0-9]*:*[0-9]", ENV{.BSG_DEV}="$root/bsg/$id" -KERNEL=="st*[0-9]|nst*[0-9]", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --whitelisted --export --device=$env{.BSG_DEV}", ENV{ID_BUS}="scsi" -KERNEL=="st*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}" -KERNEL=="nst*[0-9]", ENV{ID_SERIAL}=="?*", SYMLINK+="tape/by-id/$env{ID_BUS}-$env{ID_SERIAL}-nst" - -# by-path (parent device path) -KERNEL=="st*[0-9]|nst*[0-9]", IMPORT{builtin}="path_id" -KERNEL=="st*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}" -KERNEL=="nst*[0-9]", ENV{ID_PATH}=="?*", SYMLINK+="tape/by-path/$env{ID_PATH}-nst" - -LABEL="persistent_storage_tape_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage.rules deleted file mode 100644 index baf341dd6c..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-storage.rules +++ /dev/null @@ -1,95 +0,0 @@ -# do not edit this file, it will be overwritten on update - -# persistent storage links: /dev/disk/{by-id,by-uuid,by-label,by-path} -# scheme based on "Linux persistent device names", 2004, Hannes Reinecke - -ACTION=="remove", GOTO="persistent_storage_end" -ENV{UDEV_DISABLE_PERSISTENT_STORAGE_RULES_FLAG}=="1", GOTO="persistent_storage_end" - -SUBSYSTEM!="block", GOTO="persistent_storage_end" -KERNEL!="loop*|mmcblk*[0-9]|msblk*[0-9]|mspblk*[0-9]|nvme*|sd*|sr*|vd*|xvd*|bcache*|cciss*|dasd*|ubd*|scm*|pmem*|nbd*", GOTO="persistent_storage_end" - -# ignore partitions that span the entire disk -TEST=="whole_disk", GOTO="persistent_storage_end" - -# for partitions import parent information -ENV{DEVTYPE}=="partition", IMPORT{parent}="ID_*" - -# NVMe -KERNEL=="nvme*[0-9]n*[0-9]", ATTR{wwid}=="?*", SYMLINK+="disk/by-id/nvme-$attr{wwid}" -KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{wwid}=="?*", SYMLINK+="disk/by-id/nvme-$attr{wwid}-part%n" - -KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}" -KERNEL=="nvme*[0-9]n*[0-9]", ENV{DEVTYPE}=="disk", ATTRS{model}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_SERIAL}="$attr{model}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}" - -KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{serial}=="?*", ENV{ID_SERIAL_SHORT}="$attr{serial}" -KERNEL=="nvme*[0-9]n*[0-9]p*[0-9]", ENV{DEVTYPE}=="partition", ATTRS{model}=="?*", ENV{ID_SERIAL_SHORT}=="?*", ENV{ID_SERIAL}="$attr{model}_$env{ID_SERIAL_SHORT}", SYMLINK+="disk/by-id/nvme-$env{ID_SERIAL}-part%n" - -# virtio-blk -KERNEL=="vd*[!0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}" -KERNEL=="vd*[0-9]", ATTRS{serial}=="?*", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/virtio-$env{ID_SERIAL}-part%n" - -# ATA -KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{vendor}=="ATA", IMPORT{program}="ata_id --export $devnode" - -# ATAPI devices (SPC-3 or later) -KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="scsi", ATTRS{type}=="5", ATTRS{scsi_level}=="[6-9]*", IMPORT{program}="ata_id --export $devnode" - -# Run ata_id on non-removable USB Mass Storage (SATA/PATA disks in enclosures) -KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", ATTR{removable}=="0", SUBSYSTEMS=="usb", IMPORT{program}="ata_id --export $devnode" - -# Fall back usb_id for USB devices -KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" - -# SCSI devices -KERNEL=="sd*[!0-9]|sr*", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="scsi" -KERNEL=="cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}!="?*", IMPORT{program}="scsi_id --export --whitelisted -d $devnode", ENV{ID_BUS}="cciss" -KERNEL=="sd*|sr*|cciss*", ENV{DEVTYPE}=="disk", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}" -KERNEL=="sd*|cciss*", ENV{DEVTYPE}=="partition", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/$env{ID_BUS}-$env{ID_SERIAL}-part%n" - -# FireWire -KERNEL=="sd*[!0-9]|sr*", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}" -KERNEL=="sd*[0-9]", ATTRS{ieee1394_id}=="?*", SYMLINK+="disk/by-id/ieee1394-$attr{ieee1394_id}-part%n" - -# MMC -KERNEL=="mmcblk[0-9]", SUBSYSTEMS=="mmc", ATTRS{name}=="?*", ATTRS{serial}=="?*", \ - ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}" -KERNEL=="mmcblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/mmc-$env{ID_NAME}_$env{ID_SERIAL}-part%n" - -# Memstick -KERNEL=="msblk[0-9]|mspblk[0-9]", SUBSYSTEMS=="memstick", ATTRS{name}=="?*", ATTRS{serial}=="?*", \ - ENV{ID_NAME}="$attr{name}", ENV{ID_SERIAL}="$attr{serial}", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}" -KERNEL=="msblk[0-9]p[0-9]|mspblk[0-9]p[0-9]", ENV{ID_NAME}=="?*", ENV{ID_SERIAL}=="?*", SYMLINK+="disk/by-id/memstick-$env{ID_NAME}_$env{ID_SERIAL}-part%n" - -# by-path -ENV{DEVTYPE}=="disk", DEVPATH!="*/virtual/*", IMPORT{builtin}="path_id" -ENV{DEVTYPE}=="disk", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}" -ENV{DEVTYPE}=="partition", ENV{ID_PATH}=="?*", SYMLINK+="disk/by-path/$env{ID_PATH}-part%n" - -# legacy virtio-pci by-path links (deprecated) -KERNEL=="vd*[!0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}" -KERNEL=="vd*[0-9]", ENV{ID_PATH}=="pci-*", SYMLINK+="disk/by-path/virtio-$env{ID_PATH}-part%n" - -# probe filesystem metadata of optical drives which have a media inserted -KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="?*", \ - IMPORT{builtin}="blkid --offset=$env{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}" -# single-session CDs do not have ID_CDROM_MEDIA_SESSION_LAST_OFFSET -KERNEL=="sr*", ENV{DISK_EJECT_REQUEST}!="?*", ENV{ID_CDROM_MEDIA_TRACK_COUNT_DATA}=="?*", ENV{ID_CDROM_MEDIA_SESSION_LAST_OFFSET}=="", \ - IMPORT{builtin}="blkid --noraid" - -# probe filesystem metadata of disks -KERNEL!="sr*", IMPORT{builtin}="blkid" - -# by-label/by-uuid links (filesystem metadata) -ENV{ID_FS_USAGE}=="filesystem|other|crypto", ENV{ID_FS_UUID_ENC}=="?*", SYMLINK+="disk/by-uuid/$env{ID_FS_UUID_ENC}" -ENV{ID_FS_USAGE}=="filesystem|other", ENV{ID_FS_LABEL_ENC}=="?*", SYMLINK+="disk/by-label/$env{ID_FS_LABEL_ENC}" - -# by-id (World Wide Name) -ENV{DEVTYPE}=="disk", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}" -ENV{DEVTYPE}=="partition", ENV{ID_WWN_WITH_EXTENSION}=="?*", SYMLINK+="disk/by-id/wwn-$env{ID_WWN_WITH_EXTENSION}-part%n" - -# by-partlabel/by-partuuid links (partition metadata) -ENV{ID_PART_ENTRY_UUID}=="?*", SYMLINK+="disk/by-partuuid/$env{ID_PART_ENTRY_UUID}" -ENV{ID_PART_ENTRY_SCHEME}=="gpt", ENV{ID_PART_ENTRY_NAME}=="?*", SYMLINK+="disk/by-partlabel/$env{ID_PART_ENTRY_NAME}" - -LABEL="persistent_storage_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-v4l.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-v4l.rules deleted file mode 100644 index 93c5ee8c27..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-persistent-v4l.rules +++ /dev/null @@ -1,20 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="persistent_v4l_end" -SUBSYSTEM!="video4linux", GOTO="persistent_v4l_end" -ENV{MAJOR}=="", GOTO="persistent_v4l_end" - -IMPORT{program}="v4l_id $devnode" - -SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" -KERNEL=="video*", ENV{ID_SERIAL}=="?*", SYMLINK+="v4l/by-id/$env{ID_BUS}-$env{ID_SERIAL}-video-index$attr{index}" - -# check for valid "index" number -TEST!="index", GOTO="persistent_v4l_end" -ATTR{index}!="?*", GOTO="persistent_v4l_end" - -IMPORT{builtin}="path_id" -ENV{ID_PATH}=="?*", KERNEL=="video*|vbi*", SYMLINK+="v4l/by-path/$env{ID_PATH}-video-index$attr{index}" -ENV{ID_PATH}=="?*", KERNEL=="audio*", SYMLINK+="v4l/by-path/$env{ID_PATH}-audio-index$attr{index}" - -LABEL="persistent_v4l_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-sensor.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-sensor.rules deleted file mode 100644 index 7ad2c36be3..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-sensor.rules +++ /dev/null @@ -1,18 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="sensor_end" - -# device matching the sensor's name and the machine's DMI data for IIO devices -SUBSYSTEM=="iio", KERNEL=="iio*", SUBSYSTEMS=="usb|i2c", \ - IMPORT{builtin}="hwdb 'sensor:modalias:$attr{modalias}:$attr{[dmi/id]modalias}'", \ - GOTO="sensor_end" - -SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", SUBSYSTEMS=="acpi", \ - IMPORT{builtin}="hwdb 'sensor:modalias:acpi:$attr{hid}:$attr{[dmi/id]modalias}'", \ - GOTO="sensor_end" - -SUBSYSTEM=="input", ENV{ID_INPUT_ACCELEROMETER}=="1", SUBSYSTEMS=="platform", \ - IMPORT{builtin}="hwdb 'sensor:modalias:platform:$id:$attr{[dmi/id]modalias}'", \ - GOTO="sensor_end" - -LABEL="sensor_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-serial.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-serial.rules deleted file mode 100644 index f303e27fd5..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-serial.rules +++ /dev/null @@ -1,26 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="serial_end" -SUBSYSTEM!="tty", GOTO="serial_end" - -SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" -SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci" -SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" - -# /dev/serial/by-path/, /dev/serial/by-id/ for USB devices -KERNEL!="ttyUSB[0-9]*|ttyACM[0-9]*", GOTO="serial_end" - -SUBSYSTEMS=="usb-serial", ENV{.ID_PORT}="$attr{port_number}" - -IMPORT{builtin}="path_id" -ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="", SYMLINK+="serial/by-path/$env{ID_PATH}" -ENV{ID_PATH}=="?*", ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-path/$env{ID_PATH}-port$env{.ID_PORT}" - -IMPORT{builtin}="usb_id" -ENV{ID_SERIAL}=="", GOTO="serial_end" -SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACE_NUM}="$attr{bInterfaceNumber}" -ENV{ID_USB_INTERFACE_NUM}=="", GOTO="serial_end" -ENV{.ID_PORT}=="", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}" -ENV{.ID_PORT}=="?*", SYMLINK+="serial/by-id/$env{ID_BUS}-$env{ID_SERIAL}-if$env{ID_USB_INTERFACE_NUM}-port$env{.ID_PORT}" - -LABEL="serial_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-triggerhappy.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-triggerhappy.rules deleted file mode 100644 index 81d13cb1bd..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/60-triggerhappy.rules +++ /dev/null @@ -1,8 +0,0 @@ -## open new input devices and pass the file descriptor to the triggerhappy daemon -ACTION=="add", SUBSYSTEM=="input", \ - ATTRS{name}!="triggerhappy", \ - RUN+="/usr/sbin/th-cmd --socket /var/run/thd.socket --passfd --udev" -## add device exclusively -#ACTION=="add", SUBSYSTEM=="input", \ -# ATTRS{name}=="Nintendo Wiimote", \ -# RUN+="/usr/sbin/th-cmd --socket /var/run/thd.socket --passfd --udev --grab" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/64-btrfs.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/64-btrfs.rules deleted file mode 100644 index fe0100131e..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/64-btrfs.rules +++ /dev/null @@ -1,13 +0,0 @@ -# do not edit this file, it will be overwritten on update - -SUBSYSTEM!="block", GOTO="btrfs_end" -ACTION=="remove", GOTO="btrfs_end" -ENV{ID_FS_TYPE}!="btrfs", GOTO="btrfs_end" - -# let the kernel know about this btrfs filesystem, and check if it is complete -IMPORT{builtin}="btrfs ready $devnode" - -# mark the device as not ready to be used by the system -ENV{ID_BTRFS_READY}=="0", ENV{SYSTEMD_READY}="0" - -LABEL="btrfs_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/69-libmtp.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/69-libmtp.rules deleted file mode 100644 index d80eeadce6..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/69-libmtp.rules +++ /dev/null @@ -1,2285 +0,0 @@ -# UDEV-style hotplug map for libmtp -# Put this file in /etc/udev/rules.d - -ACTION!="add", GOTO="libmtp_rules_end" -ENV{MAJOR}!="?*", GOTO="libmtp_rules_end" -SUBSYSTEM=="usb", GOTO="libmtp_usb_rules" -GOTO="libmtp_rules_end" - -LABEL="libmtp_usb_rules" - -# Some sensitive devices we surely don't wanna probe -# Color instruments -ATTR{idVendor}=="0670", GOTO="libmtp_rules_end" -ATTR{idVendor}=="0765", GOTO="libmtp_rules_end" -ATTR{idVendor}=="085c", GOTO="libmtp_rules_end" -ATTR{idVendor}=="0971", GOTO="libmtp_rules_end" -# Canon scanners that look like MTP devices (PID 0x22nn) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="22*", GOTO="libmtp_rules_end" -# Canon digital camera (EOS 3D) that looks like MTP device (PID 0x3113) -ATTR{idVendor}=="04a9", ATTR{idProduct}=="3113", GOTO="libmtp_rules_end" -# Sensitive Atheros devices that look like MTP devices -ATTR{idVendor}=="0cf3", GOTO="libmtp_rules_end" -# Sensitive Atmel JTAG programmers -ATTR{idVendor}=="03eb", GOTO="libmtp_rules_end" -# Sensitive Philips device -ATTR{idVendor}=="0471", ATTR{idProduct}=="083f", GOTO="libmtp_rules_end" -# Creative ZEN Vision -ATTR{idVendor}=="041e", ATTR{idProduct}=="411f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative Portable Media Center -ATTR{idVendor}=="041e", ATTR{idProduct}=="4123", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Xtra (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4128", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell DJ (2nd generation) -ATTR{idVendor}=="041e", ATTR{idProduct}=="412f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Micro (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Touch (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4131", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Dell Pocket DJ (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN MicroPhoto (alternate version) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Sleek (MTP mode) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN MicroPhoto -ATTR{idVendor}=="041e", ATTR{idProduct}=="413c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Sleek Photo -ATTR{idVendor}=="041e", ATTR{idProduct}=="413d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision:M -ATTR{idVendor}=="041e", ATTR{idProduct}=="413e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V -ATTR{idVendor}=="041e", ATTR{idProduct}=="4150", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision:M (DVP-HD0004) -ATTR{idVendor}=="041e", ATTR{idProduct}=="4151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V Plus -ATTR{idVendor}=="041e", ATTR{idProduct}=="4152", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Vision W -ATTR{idVendor}=="041e", ATTR{idProduct}=="4153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN -ATTR{idVendor}=="041e", ATTR{idProduct}=="4157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN V 2GB -ATTR{idVendor}=="041e", ATTR{idProduct}=="4158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN Mozaic -ATTR{idVendor}=="041e", ATTR{idProduct}=="4161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN X-Fi -ATTR{idVendor}=="041e", ATTR{idProduct}=="4162", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Creative ZEN X-Fi 3 -ATTR{idVendor}=="041e", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZiiLABS Zii EGG -ATTR{idVendor}=="041e", ATTR{idProduct}=="6000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-900 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="0409", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung I550W Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="04a4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Jet S8000 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="4f1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-920 (501d) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="501d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-920 (5022) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-925GS -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5024", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-820 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="502e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-925(-GS) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="502f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-J70J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5033", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Z5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="503c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T7J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5047", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U2J (YP-U2JXB/XAA) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5054", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-F2J -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5057", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-K5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="505a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="507d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T9 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="507f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-K3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5081", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-P2 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5083", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-T10 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="508a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-S5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="508b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-S3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5091", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U4 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5093", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-R1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="510f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-M1 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-P3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="511a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q2 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="511d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-U5 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5121", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-R0 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5125", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-R2 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="512e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Q3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5130", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YP-Z3 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5137", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung YH-999 Portable Media Center/SGH-A707/SGH-L760V/SGH-U900/Verizon Intensity/Fascinate -ATTR{idVendor}=="04e8", ATTR{idProduct}=="5a0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung M7600 Beat/GT-S8300T/SGH-F490/S8300 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6642", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung X830 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung U600 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6709", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung F250 Mobile Phone -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6727", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Juke (SCH-U470) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6734", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-B2700 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6752", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung SAMSUNG Trance -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6763", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-S8500 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6819", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models (MTP+ADB) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models (MTP) -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Galaxy models Kies mode -ATTR{idVendor}=="04e8", ATTR{idProduct}=="6877", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung Vibrant SGH-T959/Captivate/Media player mode -ATTR{idVendor}=="04e8", ATTR{idProduct}=="68a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-B2710/Xcover 271 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="68af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Samsung GT-S5230 -ATTR{idVendor}=="04e8", ATTR{idProduct}=="e20c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft/Intel Bandon Portable Media Center -ATTR{idVendor}=="045e", ATTR{idProduct}=="00c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Windows Phone -ATTR{idVendor}=="045e", ATTR{idProduct}=="04ec", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Windows MTP Simulator -ATTR{idVendor}=="045e", ATTR{idProduct}=="0622", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Zune HD -ATTR{idVendor}=="045e", ATTR{idProduct}=="063e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Kin 1 -ATTR{idVendor}=="045e", ATTR{idProduct}=="0640", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft/Sharp/nVidia Kin TwoM -ATTR{idVendor}=="045e", ATTR{idProduct}=="0641", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Zune -ATTR{idVendor}=="045e", ATTR{idProduct}=="0710", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft Lumia 950 XL Dual SIM (RM-1116) -ATTR{idVendor}=="045e", ATTR{idProduct}=="0a00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Microsoft/HTC HTC 8S -ATTR{idVendor}=="045e", ATTR{idProduct}=="f0ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# JVC Alneo XA-HD500 -ATTR{idVendor}=="04f1", ATTR{idProduct}=="6105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intex Aqua Fish -ATTR{idVendor}=="05c6", ATTR{idProduct}=="0a07", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD6320/00 or HDD6330/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD14XX,HDD1620 or HDD1630/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD085/00 or HDD082/17 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA9200 -ATTR{idVendor}=="0471", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips SA1115/55 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0164", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Audio -ATTR{idVendor}=="0471", ATTR{idProduct}=="0165", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips Shoqbox -ATTR{idVendor}=="0471", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips PSA610 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips HDD6320 -ATTR{idVendor}=="0471", ATTR{idProduct}=="01eb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA6014/SA6015/SA6024/SA6025/SA6044/SA6045 -ATTR{idVendor}=="0471", ATTR{idProduct}=="084e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA5145 -ATTR{idVendor}=="0471", ATTR{idProduct}=="0857", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips i908 -ATTR{idVendor}=="0471", ATTR{idProduct}=="190b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA6125/SA6145/SA6185 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA3345 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips W6610 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips SA5285 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2022", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear ViBE SA1VBE04 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Muse -ATTR{idVendor}=="0471", ATTR{idProduct}=="2077", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear ViBE SA1VBE04/08 -ATTR{idVendor}=="0471", ATTR{idProduct}=="207b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Aria -ATTR{idVendor}=="0471", ATTR{idProduct}=="207c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear SA1VBE08KX/78 -ATTR{idVendor}=="0471", ATTR{idProduct}=="208e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear VIBE SA2VBE[08|16]K/02 -ATTR{idVendor}=="0471", ATTR{idProduct}=="20b7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Ariaz -ATTR{idVendor}=="0471", ATTR{idProduct}=="20b9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Vibe/02 -ATTR{idVendor}=="0471", ATTR{idProduct}=="20e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips GoGear Ariaz/97 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2138", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips PI3900B2/58 -ATTR{idVendor}=="0471", ATTR{idProduct}=="2190", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Philips PSA235 -ATTR{idVendor}=="0471", ATTR{idProduct}=="7e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A500 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A500 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A501 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3344", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A501 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3345", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A100 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3348", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A100 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3349", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A101 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="334a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A700 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3378", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A200 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="337c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A200 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="337d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A510 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3389", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A510 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="338a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer S500 CloudMobile -ATTR{idVendor}=="0502", ATTR{idProduct}=="33aa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer E350 Liquid Gallant Duo (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="33c3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer E350 Liquid Gallant Duo (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="33c4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A210 -ATTR{idVendor}=="0502", ATTR{idProduct}=="33cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia TAB A110 -ATTR{idVendor}=="0502", ATTR{idProduct}=="33d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z120 MT65xx Android Phone -ATTR{idVendor}=="0502", ATTR{idProduct}=="3473", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid E2 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3514", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia A1-810 -ATTR{idVendor}=="0502", ATTR{idProduct}=="353c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z130 MT65xx Android Phone -ATTR{idVendor}=="0502", ATTR{idProduct}=="355f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia A3-A11 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3586", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid E3 -ATTR{idVendor}=="0502", ATTR{idProduct}=="35a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Z150 -ATTR{idVendor}=="0502", ATTR{idProduct}=="35e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid X1 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3609", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Z160 -ATTR{idVendor}=="0502", ATTR{idProduct}=="361d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia A1-840FHD -ATTR{idVendor}=="0502", ATTR{idProduct}=="362d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer E39 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3643", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer liquid e700 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3644", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer One 7 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3657", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Z200 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3683", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer A1-841 -ATTR{idVendor}=="0502", ATTR{idProduct}=="365e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid S56 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3725", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z220 (ID1) -ATTR{idVendor}=="0502", ATTR{idProduct}=="374f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z220 (ID2) -ATTR{idVendor}=="0502", ATTR{idProduct}=="3750", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z330 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3750", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Z630 -ATTR{idVendor}=="0502", ATTR{idProduct}=="37ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Z530 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3822", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Z530 16GB -ATTR{idVendor}=="0502", ATTR{idProduct}=="3823", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Iconia One 10 -ATTR{idVendor}=="0502", ATTR{idProduct}=="3841", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acer Liquid Zest Plus -ATTR{idVendor}=="0502", ATTR{idProduct}=="38bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m230/m240 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7400", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m200-tcc (MTP mode) -ATTR{idVendor}=="0781", ATTR{idProduct}=="7401", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c150 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7410", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa e200/e250/e260/e270/e280 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7420", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa e260/e280 v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7422", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa m240/m250 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7430", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip -ATTR{idVendor}=="0781", ATTR{idProduct}=="7432", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7434", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c240/c250 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7450", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa c250 v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="7452", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Express -ATTR{idVendor}=="0781", ATTR{idProduct}=="7460", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Connect -ATTR{idVendor}=="0781", ATTR{idProduct}=="7480", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa View -ATTR{idVendor}=="0781", ATTR{idProduct}=="74b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze -ATTR{idVendor}=="0781", ATTR{idProduct}=="74c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze v2 -ATTR{idVendor}=="0781", ATTR{idProduct}=="74c2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip+ -ATTR{idVendor}=="0781", ATTR{idProduct}=="74d0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Fuze+ -ATTR{idVendor}=="0781", ATTR{idProduct}=="74e0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SanDisk Sansa Clip Zip -ATTR{idVendor}=="0781", ATTR{idProduct}=="74e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H300 Series MTP -ATTR{idVendor}=="1006", ATTR{idProduct}=="3004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Portable Media Center 1 -ATTR{idVendor}=="1006", ATTR{idProduct}=="4002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Portable Media Center 2 -ATTR{idVendor}=="1006", ATTR{idProduct}=="4003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T7 Volcano -ATTR{idVendor}=="1042", ATTR{idProduct}=="1143", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver iFP-880 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1113", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20 FM -ATTR{idVendor}=="4102", ATTR{idProduct}=="1114", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1115", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver U10 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1116", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10b -ATTR{idVendor}=="4102", ATTR{idProduct}=="1117", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T20b -ATTR{idVendor}=="4102", ATTR{idProduct}=="1118", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T30 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1119", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T10 2GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="1120", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver N12 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1122", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Clix2 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1126", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Clix -ATTR{idVendor}=="4102", ATTR{idProduct}=="112a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver X20 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T60 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1134", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E100 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1141", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E100 v2/Lplayer -ATTR{idVendor}=="4102", ATTR{idProduct}=="1142", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Spinn -ATTR{idVendor}=="4102", ATTR{idProduct}=="1147", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E50 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1151", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E150 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1152", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver T5 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1153", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver E30 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver AK70 -ATTR{idVendor}=="4102", ATTR{idProduct}=="1200", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 20GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2101", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 5GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver H10 5.6GB -ATTR{idVendor}=="4102", ATTR{idProduct}=="2105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Inc DJ Itty -ATTR{idVendor}=="413c", ATTR{idProduct}=="4500", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Inc Dell Streak 7 -ATTR{idVendor}=="413c", ATTR{idProduct}=="b10b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Inc Dell Venue 7 inch -ATTR{idVendor}=="413c", ATTR{idProduct}=="b11a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dell Inc Dell Venue 7 inch (2nd ID) -ATTR{idVendor}=="413c", ATTR{idProduct}=="b11b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEGF-40 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat -ATTR{idVendor}=="0930", ATTR{idProduct}=="000c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat P20 -ATTR{idVendor}=="0930", ATTR{idProduct}=="000f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat S -ATTR{idVendor}=="0930", ATTR{idProduct}=="0010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat P10 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat V30 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0014", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat U -ATTR{idVendor}=="0930", ATTR{idProduct}=="0016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEU202 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0018", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat T -ATTR{idVendor}=="0930", ATTR{idProduct}=="0019", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MEU201 -ATTR{idVendor}=="0930", ATTR{idProduct}=="001a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Gigabeat MET401 -ATTR{idVendor}=="0930", ATTR{idProduct}=="001d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Excite AT300 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0963", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Excite AT200 -ATTR{idVendor}=="0930", ATTR{idProduct}=="0960", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Toshiba Thrive AT100/AT105 -ATTR{idVendor}=="0930", ATTR{idProduct}=="7100", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Gmini XS100 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1207", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos XS202 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1208", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 104 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="120a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 204 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="120c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 404 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1301", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 404CAM (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 504 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 604 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 604WIFI (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 704 mobile dvr -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 704TV (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="130f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 405 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 605 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1313", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 605F (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1315", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 705 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1319", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos TV+ (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="131b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 105 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="131d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 405HDD (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1321", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5 (MTP mode 1) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1331", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5 (MTP mode 2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1333", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 7 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos SPOD (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1341", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5S IT (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1351", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 5H IT (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1357", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 48 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1421", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Arnova Childpad -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1458", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Arnova 8c G3 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="145e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Arnova 10bG3 Tablet -ATTR{idVendor}=="0e79", ATTR{idProduct}=="146b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 97 Xenon -ATTR{idVendor}=="0e79", ATTR{idProduct}=="149a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 97 Titanium -ATTR{idVendor}=="0e79", ATTR{idProduct}=="14ad", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 80 Titanium -ATTR{idVendor}=="0e79", ATTR{idProduct}=="14bf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 Titanium -ATTR{idVendor}=="0e79", ATTR{idProduct}=="14b9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70b Titanium -ATTR{idVendor}=="0e79", ATTR{idProduct}=="14ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 8o G9 (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1508", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 8o G9 Turbo (MTP mode) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1509", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 80G9 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1518", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 (ID1) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1528", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 (ID2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1529", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 Turbo 250 HD -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1538", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G9 Turbo -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1539", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 XS -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1548", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70it2 (ID 1) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1568", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70it2 (ID 2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="1569", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70 Cobalt -ATTR{idVendor}=="0e79", ATTR{idProduct}=="15ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 50c -ATTR{idVendor}=="0e79", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos C40 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="31ab", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Helium 45B -ATTR{idVendor}=="0e79", ATTR{idProduct}=="31d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Phone -ATTR{idVendor}=="0e79", ATTR{idProduct}=="31e1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 45 Neon -ATTR{idVendor}=="0e79", ATTR{idProduct}=="31f3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 50 Diamond -ATTR{idVendor}=="0e79", ATTR{idProduct}=="3229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 G4 -ATTR{idVendor}=="0e79", ATTR{idProduct}=="4002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos (for Tesco) Hudl (ID1) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos (for Tesco) Hudl (ID2) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos AC40DTI -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5217", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 xenon lite -ATTR{idVendor}=="0e79", ATTR{idProduct}=="528c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101 xenon lite (ADB) -ATTR{idVendor}=="0e79", ATTR{idProduct}=="528d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 40 Helium phone -ATTR{idVendor}=="0e79", ATTR{idProduct}=="52c2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos Diamond S -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5305", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 50d neon -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5371", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 70b neon -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5395", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 101b Oxygen -ATTR{idVendor}=="0e79", ATTR{idProduct}=="542f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Archos 55 diamond Selfie -ATTR{idVendor}=="0e79", ATTR{idProduct}=="5465", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Dunlop MP3 player 1GB / EGOMAN MD223AFD -ATTR{idVendor}=="10d6", ATTR{idProduct}=="2200", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Memorex or iRiver MMP 8585/8586 or iRiver E200 -ATTR{idVendor}=="10d6", ATTR{idProduct}=="2300", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sirius Stiletto -ATTR{idVendor}=="18f6", ATTR{idProduct}=="0102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sirius Stiletto 2 -ATTR{idVendor}=="18f6", ATTR{idProduct}=="0110", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N81 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="000a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6120c Classic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="002e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N96 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6500c Classic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="003c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3110c Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="005f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3109c Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0065", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5310 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="006c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N95 Mobile Phone 8GB -ATTR{idVendor}=="0421", ATTR{idProduct}=="006e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N82 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0074", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N78 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0079", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6220 Classic -ATTR{idVendor}=="0421", ATTR{idProduct}=="008d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N85 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0092", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6210 Navigator -ATTR{idVendor}=="0421", ATTR{idProduct}=="0098", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E71 -ATTR{idVendor}=="0421", ATTR{idProduct}=="00e4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E66 -ATTR{idVendor}=="0421", ATTR{idProduct}=="00e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5320 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="00ea", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="0154", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic v2 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0155", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5800 XpressMusic v3 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0159", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E63 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0179", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N79 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E71x -ATTR{idVendor}=="0421", ATTR{idProduct}=="01a1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E52 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3710 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01ee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97-1 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01f4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97 -ATTR{idVendor}=="0421", ATTR{idProduct}=="01f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5130 XpressMusic -ATTR{idVendor}=="0421", ATTR{idProduct}=="0209", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E72 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0221", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5530 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E6 -ATTR{idVendor}=="0421", ATTR{idProduct}=="032f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N97 mini -ATTR{idVendor}=="0421", ATTR{idProduct}=="026b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia X6 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0274", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 6600i -ATTR{idVendor}=="0421", ATTR{idProduct}=="0297", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 2710 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5230 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02e2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N8 -ATTR{idVendor}=="0421", ATTR{idProduct}=="02fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N8 (Ovi mode) -ATTR{idVendor}=="0421", ATTR{idProduct}=="0302", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E7 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0334", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia E7 (Ovi mode) -ATTR{idVendor}=="0421", ATTR{idProduct}=="0335", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C7 -ATTR{idVendor}=="0421", ATTR{idProduct}=="03c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C7 (ID2) -ATTR{idVendor}=="0421", ATTR{idProduct}=="03cd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N950 -ATTR{idVendor}=="0421", ATTR{idProduct}=="03d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 3250 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0462", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N93 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0478", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5500 Sport Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="047e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N91 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="0485", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5700 XpressMusic Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5300 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 5200 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N73 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04d1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N75 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04e1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N93i Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04e5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N95 Mobile Phone -ATTR{idVendor}=="0421", ATTR{idProduct}=="04ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N80 Internet Edition (Media Player) -ATTR{idVendor}=="0421", ATTR{idProduct}=="04f1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N9 -ATTR{idVendor}=="0421", ATTR{idProduct}=="051a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N300 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0524", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C5-00 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0592", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia C5-00 (ID2) -ATTR{idVendor}=="0421", ATTR{idProduct}=="0595", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia 808 PureView -ATTR{idVendor}=="0421", ATTR{idProduct}=="05d3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia Lumia WP8 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0661", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia Lumia 301 -ATTR{idVendor}=="0421", ATTR{idProduct}=="0666", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia XL -ATTR{idVendor}=="0421", ATTR{idProduct}=="06e8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia Lumia (RM-975) -ATTR{idVendor}=="0421", ATTR{idProduct}=="06fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia X2 Dual Sim -ATTR{idVendor}=="0421", ATTR{idProduct}=="0708", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Nokia) 5530 Xpressmusic -ATTR{idVendor}=="05c6", ATTR{idProduct}=="0229", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Nokia/Verizon) 6205 Balboa/Verizon Music Phone -ATTR{idVendor}=="05c6", ATTR{idProduct}=="3196", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Gigabyte) GSmart G1342 -ATTR{idVendor}=="05c6", ATTR{idProduct}=="8800", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Smartfren) Andromax U -ATTR{idVendor}=="05c6", ATTR{idProduct}=="9025", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for OnePlus) One (MTP) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="6764", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for OnePlus) One (MTP+ADB) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="6765", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Xolo) Xolo Black (MTP) -ATTR{idVendor}=="901b", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for PhiComm) C230w (MTP) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for OnePlus) One Plus 2 (A2003) (MTP) -ATTR{idVendor}=="05c6", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Qualcomm (for Highscreen) Omega Prime S -ATTR{idVendor}=="05c6", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Logik LOG DAX MP3 and DAB Player -ATTR{idVendor}=="13d1", ATTR{idProduct}=="7002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Technika MP-709 -ATTR{idVendor}=="13d1", ATTR{idProduct}=="7017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson EM28 Series -ATTR{idVendor}=="069b", ATTR{idProduct}=="0774", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson / RCA Opal / Lyra MC4002 -ATTR{idVendor}=="069b", ATTR{idProduct}=="0777", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson Lyra MC5104B (M51 Series) -ATTR{idVendor}=="069b", ATTR{idProduct}=="077c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson RCA H106 -ATTR{idVendor}=="069b", ATTR{idProduct}=="301a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson scenium E308 -ATTR{idVendor}=="069b", ATTR{idProduct}=="3028", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Thomson / RCA Lyra HC308A -ATTR{idVendor}=="069b", ATTR{idProduct}=="3035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fujitsu, Ltd F903iX HIGH-SPEED -ATTR{idVendor}=="04c5", ATTR{idProduct}=="1140", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fujitsu, Ltd STYLISTIC M532 -ATTR{idVendor}=="04c5", ATTR{idProduct}=="133b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fujitsu, Ltd F02-E -ATTR{idVendor}=="04c5", ATTR{idProduct}=="1378", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fujitsu, Ltd Arrows 202F -ATTR{idVendor}=="04c5", ATTR{idProduct}=="13dd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NormSoft, Inc. Pocket Tunes -ATTR{idVendor}=="1703", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NormSoft, Inc. Pocket Tunes 4 -ATTR{idVendor}=="1703", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor Vibez 8/12GB -ATTR{idVendor}=="066f", ATTR{idProduct}=="842a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD8333 (ID1) -ATTR{idVendor}=="066f", ATTR{idProduct}=="8550", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD8333 (ID2) -ATTR{idVendor}=="066f", ATTR{idProduct}=="8588", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Verizon Ellipsis 7 -ATTR{idVendor}=="0408", ATTR{idProduct}=="3899", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion MD99000 (P9514)/Olivetti Olipad 110 -ATTR{idVendor}=="0408", ATTR{idProduct}=="b009", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion Lifetab P9514 -ATTR{idVendor}=="0408", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Maxfield G-Flash NG 1GB -ATTR{idVendor}=="066f", ATTR{idProduct}=="846c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SigmaTel Inc. MTPMSCN Audio Player -ATTR{idVendor}=="066f", ATTR{idProduct}=="a010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor i.Beat Sweez FM -ATTR{idVendor}=="0402", ATTR{idProduct}=="0611", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TrekStor i.Beat Organix 2.0 -ATTR{idVendor}=="1e68", ATTR{idProduct}=="0002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRiver Tolino Tab 7 -ATTR{idVendor}=="1e68", ATTR{idProduct}=="1002", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Disney MixMax -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="6021", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Tevion MD 81488 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="3011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# MyMusix PD-6070 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9601", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio U3 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0701", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 6 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0711", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 7 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0751", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio U5 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0761", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0801", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ FW 2.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0861", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ DAB FW 4.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0871", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ FW 3.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0881", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio D2+ DMB FW 1.x (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0891", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio S9 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0901", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 9 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0911", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio J3 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0921", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio X7 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0931", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio C2 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0941", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cowon iAudio 10 (MTP mode) -ATTR{idVendor}=="0e21", ATTR{idProduct}=="0952", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia NS-DV45 -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0303", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia Sport Player -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Insignia Pilot 4GB -ATTR{idVendor}=="19ff", ATTR{idProduct}=="0309", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. T54 -ATTR{idVendor}=="043e", ATTR{idProduct}=="7040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. UP3 -ATTR{idVendor}=="043e", ATTR{idProduct}=="70b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. VX8550 V CAST Mobile Phone -ATTR{idVendor}=="1004", ATTR{idProduct}=="6010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. KC910 Renoir Mobile Phone -ATTR{idVendor}=="1004", ATTR{idProduct}=="608f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. GR-500 Music Player -ATTR{idVendor}=="1004", ATTR{idProduct}=="611b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. KM900 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6132", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG8575 -ATTR{idVendor}=="1004", ATTR{idProduct}=="619a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. Android phone (ID1) -ATTR{idVendor}=="1004", ATTR{idProduct}=="61f1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. Android phone (ID2) -ATTR{idVendor}=="1004", ATTR{idProduct}=="61f9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG VS980 -ATTR{idVendor}=="1004", ATTR{idProduct}=="621c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG2 Optimus -ATTR{idVendor}=="1004", ATTR{idProduct}=="6225", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG VS950 -ATTR{idVendor}=="1004", ATTR{idProduct}=="622a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG VS870 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6239", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG VS890 -ATTR{idVendor}=="1004", ATTR{idProduct}=="623d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG Optimus Zone 2 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6259", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. VK810 -ATTR{idVendor}=="1004", ATTR{idProduct}=="6265", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. G3 -ATTR{idVendor}=="1004", ATTR{idProduct}=="627f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. 810 tablet -ATTR{idVendor}=="1004", ATTR{idProduct}=="6263", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. G3 (VS985) -ATTR{idVendor}=="1004", ATTR{idProduct}=="626e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. Various E and P models -ATTR{idVendor}=="1004", ATTR{idProduct}=="631c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# LG Electronics Inc. LG G Flex 2 -ATTR{idVendor}=="1004", ATTR{idProduct}=="633e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-A815/NWZ-A818 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0325", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S516 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0326", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S615F/NWZ-S616F/NWZ-S618F -ATTR{idVendor}=="054c", ATTR{idProduct}=="0327", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S716F -ATTR{idVendor}=="054c", ATTR{idProduct}=="035a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-A826/NWZ-A828/NWZ-A829 -ATTR{idVendor}=="054c", ATTR{idProduct}=="035b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-A726/NWZ-A728/NWZ-A768 -ATTR{idVendor}=="054c", ATTR{idProduct}=="035c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B135 -ATTR{idVendor}=="054c", ATTR{idProduct}=="036e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E436F -ATTR{idVendor}=="054c", ATTR{idProduct}=="0385", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-W202 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0388", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S739F -ATTR{idVendor}=="054c", ATTR{idProduct}=="038c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S638F -ATTR{idVendor}=="054c", ATTR{idProduct}=="038e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-X1050B/NWZ-X1060B -ATTR{idVendor}=="054c", ATTR{idProduct}=="0397", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-X1051/NWZ-X1061 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0398", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B142F -ATTR{idVendor}=="054c", ATTR{idProduct}=="03d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E344/E345 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E445 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S545 -ATTR{idVendor}=="054c", ATTR{idProduct}=="03fe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-A845 -ATTR{idVendor}=="054c", ATTR{idProduct}=="0404", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-W252B -ATTR{idVendor}=="054c", ATTR{idProduct}=="04bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B153F -ATTR{idVendor}=="054c", ATTR{idProduct}=="04be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E354 -ATTR{idVendor}=="054c", ATTR{idProduct}=="04cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S754 -ATTR{idVendor}=="054c", ATTR{idProduct}=="04cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Sony Tablet P1 -ATTR{idVendor}=="054c", ATTR{idProduct}=="04d1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B163F -ATTR{idVendor}=="054c", ATTR{idProduct}=="059a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E464 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05a6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-S765 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Sony Tablet S -ATTR{idVendor}=="054c", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony Sony Tablet S1 -ATTR{idVendor}=="054c", ATTR{idProduct}=="05b4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-B173F -ATTR{idVendor}=="054c", ATTR{idProduct}=="0689", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony NWZ-E474 -ATTR{idVendor}=="054c", ATTR{idProduct}=="06a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Sony DCR-SR75 -ATTR{idVendor}=="054c", ATTR{idProduct}=="1294", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson K850i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0075", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W910 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0076", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W890i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W760i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00c6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C902 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C702 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W980 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson C905 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00ef", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W595 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W902 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00f5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson T700 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="00fb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W705/W715 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W995 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0112", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson U5 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0133", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson U8i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="013a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j10i2 (Elm) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j108i (Cedar) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="014e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson W302 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="10c8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson j10i (Elm) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="d144", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson K550i -ATTR{idVendor}=="0fce", ATTR{idProduct}=="e000", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson c1605 Xperia Dual E MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0146", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson LT15i Xperia arc S MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="014f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MT11i Xperia Neo MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson IS12S Xperia Acro MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MK16i Xperia MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="015a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson R800/R88i Xperia Play MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="015d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST18a Xperia Ray MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson SK17i Xperia Mini Pro MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST15i Xperia Mini MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY WT19i Live Walkman MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="016d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST15i Xperia U MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro HD IS12S MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0175", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro HD SO-03D MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT28at Xperia Ion MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0177", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT29i Xperia GX MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0178", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i/ST27a Xperia go MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="017e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST23i Xperia Miro MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0180", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-05D Xperia SX MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT30p Xperia T MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0182", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT25i Xperia V MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia J MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0188", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia ZL MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0189", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="018c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP 1 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="018d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia L MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0192", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0193", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP 2 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0194", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia SP MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0195", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP (ID2) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0196", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia ZR MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0197", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia A MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="0198", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="019b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP (ID3) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="019c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="019e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia C MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 Compact D5503 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01aa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Dual MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01ab", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3v MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 Tablet MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E1 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01b5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01b6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Aqua MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01b8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Compact MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E3 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01bc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Tablet MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M4 Aqua Dual MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01c4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY E2115 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01c5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z3+ MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria E4g MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY C4 Dual MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M5 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 Compact MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XA MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01de", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XZ MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01e7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria X Compact MTP -ATTR{idVendor}=="0fce", ATTR{idProduct}=="01e8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson IS12S Xperia Acro MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST25i Xperia U MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro HD IS12S MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4175", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26w Xperia Acro HD SO-03D MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT28at Xperia Ion MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4177", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT29i Xperia GX MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4178", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i/ST27a Xperia go MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="417e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST23i Xperia Miro MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4180", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-05D Xperia SX MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT30p Xperia T MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4182", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT25i Xperia V MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia J MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4188", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia ZL MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4189", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="418c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP+CDROM 1 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="418d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia L MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4192", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4193", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP+CDROM 2 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4194", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia SP MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="4195", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="419b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP+CDROM (ID3) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="419c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="419e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia C MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 Compact D5503 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41aa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Dual MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41ab", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3v MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 Tablet MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E1 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41b5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41b6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Aqua MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41b8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Compact MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E3 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41bc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Tablet MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M4 Aqua Dual MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41c4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY E2115 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41c5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z3+ MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria E4g MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY C4 Dual MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M5 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 Compact MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XA MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41de", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XZ MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41e7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria X Compact MTP+CDROM -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41e8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson c1605 Xperia Dual E MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5146", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson LT15i Xperia Arc MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="514f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MT11i Xperia Neo MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5156", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson IS12S Xperia Acro MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5157", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson MK16i Xperia MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="515a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson R800/R88i Xperia Play MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="515d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST18i Xperia Ray MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5161", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson SK17i Xperia Mini Pro MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5166", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST15i Xperia Mini MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson ST17i Xperia Active MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT26i Xperia S MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5169", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SonyEricsson WT19i Live Walkman MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="516d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST21i Xperia Tipo MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5170", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST25i Xperia U MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5171", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT22i Xperia P MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5172", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY IS12S Xperia Acro HD MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5175", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-03D Xperia Acro HD MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT28at Xperia Ion MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5177", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT29i Xperia GX MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5178", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i/ST27a Xperia go MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="517e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST23i Xperia Miro MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5180", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-05D Xperia SX MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5181", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT30p Xperia T MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5182", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT25i Xperia V MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5186", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia J MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5188", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia ZL MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5189", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="518c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP+ADB 1 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="518d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia L MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5192", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5193", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Tablet Z MTP+ADB 2 -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5194", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia SP MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5195", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP+ADB (ID2) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5196", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia ZR MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5197", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia A MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="5198", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="519b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP+ADB (ID3) -ATTR{idVendor}=="0fce", ATTR{idProduct}=="519c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="519e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia C MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z1 Compact MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51aa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Dual MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51ab", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51af", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3v MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z2 Tablet MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E1 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51b5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z Ultra MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51b6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia M2 Aqua MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51b8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Compact MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51bb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia E3 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51bc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY Xperia Z3 Tablet MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="41c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M4 Aqua Dual MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51c4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY E2115 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51c5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z3+ MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51c9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria E4g MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY C4 Dual MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria M5 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria Z5 Compact MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XA MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51de", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria XZ MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51e7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY XPeria X Compact MTP+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="51e8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola MTP+UMS -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY IS12S Xperia Acro HD MTP+UMS -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a175", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-03D Xperia Acro HD MTP+UMS -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT28at Xperia Ion MTP+UMS -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a177", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i/ST27a Xperia go MTP+UMS -ATTR{idVendor}=="0fce", ATTR{idProduct}=="a17e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY MT27i Xperia Sola MTP+UMS+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="b173", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY IS12S Xperia Acro MTP+UMS+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="b175", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY SO-03D Xperia Acro MTP+UMS+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="b176", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY LT28at Xperia Ion MTP+UMS+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="b177", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SONY ST27i/ST27a Xperia go MTP+UMS+ADB -ATTR{idVendor}=="0fce", ATTR{idProduct}=="b17e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola XT1524 (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="002e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola V3m/V750 verizon -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2a65", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Atrix/Razr HD (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e32", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Atrix/Razr HD (MTP+ADB) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e33", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola RAZR M XT907 (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e50", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola RAZR M XT907 (MTP+ADB) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e51", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid Turbo 2 (XT1585) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e61", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto X (XT1053) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e62", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto X (XT1058) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e63", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto X (XT1080) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e66", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid Maxx (XT1080) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e67", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid Ultra -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e68", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto G (ID1) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e76", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto G (ID2) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e82", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto G (XT1032) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2e84", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Moto Maxx (XT1225) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2ea4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola MB632 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2dff", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom 2 Media Edition (ID3) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid X/MB525 (Defy) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41d6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID2 (ID1) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41da", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Milestone / Verizon Droid -ATTR{idVendor}=="22b8", ATTR{idProduct}=="41dc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID2 (ID2) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="42a7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom 2 Media Edition (ID2) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4306", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom 2 Media Edition -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4311", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola XT912/XT928 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4362", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID4 (PTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4373", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola DROID4 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="437f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola IdeaPad K1 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="4811", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola A1200 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="60ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola MTP Test Command Interface -ATTR{idVendor}=="22b8", ATTR{idProduct}=="6413", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola RAZR2 V8/U9/Z6 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="6415", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Razr D1/D3/i (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="64b5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Razr D1/D3/i (MTP+?) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="64b6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Atrix XT687 (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="64cf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Atrix MB860 (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="7088", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (Factory test) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Xoom (MTP+ADB) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Milestone X2 -ATTR{idVendor}=="22b8", ATTR{idProduct}=="70ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola XT890/907/Razr (MTP) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="710d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola XT890/907/Razr (MTP+ADB) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="710e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid Turbo (XT1254) -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2ea5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Motorola Droid Turbo Verizon -ATTR{idVendor}=="22b8", ATTR{idProduct}=="2ea8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Allwinner) A31 SoC -ATTR{idVendor}=="18d1", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Ainol Novo) Fire/Flame -ATTR{idVendor}=="18d1", ATTR{idProduct}=="0007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Sony) S1 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="05b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Barnes & Noble) Nook Color -ATTR{idVendor}=="18d1", ATTR{idProduct}=="2d02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) TF201 Transformer -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4d00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) TF101 Transformer -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Samsung) Nexus S (MTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e25", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Samsung) Nexus S (MTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e26", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) Nexus 7 (MTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e41", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Asus) Nexus 7 (MTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4e42", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc Nexus/Pixel (MTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc Nexus/Pixel (MTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc Nexus/Pixel (PTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc Nexus/Pixel (PTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="4ee6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Pixel C (MTP) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="5202", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Pixel C (MTP+ADB) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="5203", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Motorola) Xoom (MZ604) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="70a8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Toshiba) Thrive 7/AT105 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="7102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Lenovo) Ideapad K1 -ATTR{idVendor}=="18d1", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for Medion) MD99000 (P9514) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="b00a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Meizu Pro 5 Ubuntu Phone -ATTR{idVendor}=="18d1", ATTR{idProduct}=="d001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for LG Electronics) P990/Optimus (Cyanogen) -ATTR{idVendor}=="18d1", ATTR{idProduct}=="d109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Google Inc (for LG Electronics) P990/Optimus -ATTR{idVendor}=="18d1", ATTR{idProduct}=="d10a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kenwood Media Keg HD10GB7 Sport Player -ATTR{idVendor}=="0b28", ATTR{idProduct}=="100c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Micro-Star International P610/Model MS-5557 -ATTR{idVendor}=="0db0", ATTR{idProduct}=="5572", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# FOMA D905i -ATTR{idVendor}=="06d3", ATTR{idProduct}=="21ba", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Haier Ibiza Rhapsody 1 -ATTR{idVendor}=="1302", ATTR{idProduct}=="1016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Haier Ibiza Rhapsody 2 -ATTR{idVendor}=="1302", ATTR{idProduct}=="1017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Panasonic P905i -ATTR{idVendor}=="04da", ATTR{idProduct}=="2145", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Panasonic P906i -ATTR{idVendor}=="04da", ATTR{idProduct}=="2158", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Polaroid Freescape/MPU-433158 -ATTR{idVendor}=="0546", ATTR{idProduct}=="2035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pioneer XMP3 -ATTR{idVendor}=="08e4", ATTR{idProduct}=="0148", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Slacker Inc. Slacker Portable Media Player -ATTR{idVendor}=="1bdc", ATTR{idProduct}=="fabf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Conceptronic CMTD2 -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# O2 Sistemas ZoltarTV -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Wyplay Wyplayer -ATTR{idVendor}=="1e53", ATTR{idProduct}=="0007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Perception Digital, Ltd Gigaware GX400 -ATTR{idVendor}=="0aa6", ATTR{idProduct}=="9702", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# RIM BlackBerry Storm/9650 -ATTR{idVendor}=="0fca", ATTR{idProduct}=="8007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# RIM BlackBerry Priv -ATTR{idVendor}=="0fca", ATTR{idProduct}=="8031", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# RIM BlackBerry Dtek 60 -ATTR{idVendor}=="0fca", ATTR{idProduct}=="8041", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nextar MA715A-8R -ATTR{idVendor}=="0402", ATTR{idProduct}=="5668", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Coby COBY MP705 -ATTR{idVendor}=="1e74", ATTR{idProduct}=="6512", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Curitel Communications, Inc. Verizon Wireless Device -ATTR{idVendor}=="106c", ATTR{idProduct}=="3215", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pantech Crux -ATTR{idVendor}=="106c", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Zenfone Go (ZC500TG) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF300 Transformer (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c80", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF300 Transformer (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c81", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF700 Transformer (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c90", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF700 Transformer (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4c91", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF701T Transformer Pad (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4ca0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF701T Transformer Pad (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4ca1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME302KL MeMo Pad FHD10 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4cc0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME302KL MeMo Pad FHD10 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4cc1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME301T MeMo Pad Smart 10 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4cd0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME301T MeMo Pad Smart 10 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4cd1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Asus Fonepad Note 6 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4ce0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Asus Fonepad Note 6 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4ce1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF201 Transformer Prime (keyboard dock) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF201 Transformer Prime (tablet only) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4d01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus SL101 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus SL101 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF101 Eeepad Transformer (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TF101 Eeepad Transformer (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="4e1f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Fonepad -ATTR{idVendor}=="0b05", ATTR{idProduct}=="514f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5200", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5201", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME302C MemoPad (MTP+?) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="520f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone 2 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5210", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone 2 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5211", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone 2 (PTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5214", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME302C MemoPad (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="521f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone Infinity (2nd ID) (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5220", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone Infinity (2nd ID) (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5221", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone Infinity (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5230", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus PadFone Infinity (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5231", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo ME172V (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5400", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Fonepad 7 LTE ME372CL (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="540f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo ME173X (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5410", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo ME173X (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5411", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Fonepad 7 LTE ME372CL (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="541f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo K00F (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5460", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo Pad 8 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5466", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Memo K00F (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5468", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 5 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5480", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 5 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5481", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 6 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5490", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 6 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5491", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus K010 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5500", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus MemoPad 7 (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5506", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus K00E (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="550f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus MemoPad 8 ME181 CX (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5561", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Zenfone 2 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5600", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Z00AD (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5601", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus TX201LA (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="561f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 4 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="580f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 4 A400CG (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="581f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ASUS FonePad 8 FE380CG (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="590f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus A450CG (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5a0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenPad 80 (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5e0f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Zenfone 2 ZE550ML (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5f02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Zenfone 2 ZE551ML (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="5f03", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ME581CL -ATTR{idVendor}=="0b05", ATTR{idProduct}=="7770", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus MemoPad 7 (ME572CL) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="7772", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus Fonepad 7 (FE375CXG) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="7773", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 5 A500KL (MTP) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="7780", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Asus ZenFone 5 A500KL (MTP+ADB) -ATTR{idVendor}=="0b05", ATTR{idProduct}=="7781", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P70-A -ATTR{idVendor}=="17ef", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P70 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K1 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="740a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo ThinkPad Tablet -ATTR{idVendor}=="17ef", ATTR{idProduct}=="741c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion Lifetab P9516 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7483", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P700 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7497", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A820 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7498", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P780 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="74a6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Lifetab S9512 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="74cc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo S660 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="74f8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo IdeaTab A2109A -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7542", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo IdeaTab S2210a -ATTR{idVendor}=="17ef", ATTR{idProduct}=="757d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K900 (ID2) -ATTR{idVendor}=="17ef", ATTR{idProduct}=="75b3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K900 (ID1) -ATTR{idVendor}=="17ef", ATTR{idProduct}=="75b5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo IdeaPad A3000 (ID1) -ATTR{idVendor}=="17ef", ATTR{idProduct}=="75bc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo IdeaPad A3000 (ID2) -ATTR{idVendor}=="17ef", ATTR{idProduct}=="75be", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A706 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7614", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo IdeaTab S5000 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="76e8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Toga Tablet B6000-F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="76f2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Yoga Tablet 10 B8000-H -ATTR{idVendor}=="17ef", ATTR{idProduct}=="76ff", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo S960 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="770a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K910SS -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7713", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo S930 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7718", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A5500-F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="772b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A7600-F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7731", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A3500-F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7737", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A3500-FL -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7738", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo LifeTab E733X -ATTR{idVendor}=="17ef", ATTR{idProduct}=="775a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K920 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="778f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Yoga Tablet 2 - 1050F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="77a4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Yoga Tablet 2 Pro -ATTR{idVendor}=="17ef", ATTR{idProduct}=="77b1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Tab S8-50F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="77d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe Z2 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="77ea", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K3 Note -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7883", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A10-70F -ATTR{idVendor}=="17ef", ATTR{idProduct}=="789a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A10-70L -ATTR{idVendor}=="17ef", ATTR{idProduct}=="789b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Medion P8312 Tablet -ATTR{idVendor}=="17ef", ATTR{idProduct}=="78ae", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Lifetab S1034X -ATTR{idVendor}=="17ef", ATTR{idProduct}=="78b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo PHAB Plus -ATTR{idVendor}=="17ef", ATTR{idProduct}=="78d1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe K4 Note -ATTR{idVendor}=="17ef", ATTR{idProduct}=="78f6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe P1 Pro -ATTR{idVendor}=="17ef", ATTR{idProduct}=="78fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe X -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7902", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo P1ma40 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7921", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A1000 Smartphone -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7928", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo A1000 Smartphone ADB -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7929", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo TAB 2 A10-30 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7949", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo K5 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7993", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe K5 Note -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7999", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo Vibe K4 -ATTR{idVendor}=="17ef", ATTR{idProduct}=="79b7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Lenovo B Smartphone -ATTR{idVendor}=="17ef", ATTR{idProduct}=="7a18", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei MTP device (ID1) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1051", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei MTP device (ID2) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1052", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Honor 7 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1074", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei H60-L11 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1079", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei H60-L12 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="107a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Nova -ATTR{idVendor}=="12d1", ATTR{idProduct}=="107d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei P9 Plus -ATTR{idVendor}=="12d1", ATTR{idProduct}=="107e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Ascend P8 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="1082", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Honor 3C -ATTR{idVendor}=="12d1", ATTR{idProduct}=="2012", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Y320-U10 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="2406", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Y360-U61 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="2567", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Y360-U03 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="256b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Y560-L01 -ATTR{idVendor}=="12d1", ATTR{idProduct}=="259c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Mediapad (mode 0) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="360f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Huawei Mediapad (mode 1) -ATTR{idVendor}=="12d1", ATTR{idProduct}=="361f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V55 ID 1 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0244", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V55 ID 2 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0245", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V790/Blade 3 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0306", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V880E -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0307", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE Grand X In -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0343", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V985 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="0383", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE V5 -ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffce", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# ZTE Z9 Max -ATTR{idVendor}=="19d2", ATTR{idProduct}=="ffcf", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One M9 (1st ID) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="040b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Spreadtrum SH57MYZ03342 (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="05e3", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Desire 510 (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="05fd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One M8 Google Play Edition (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="060b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One Mini 2 (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0629", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One M9 (2nd ID) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="065c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Desire 626s (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0668", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Desire 520 -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0670", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC6515LVW/One Remix -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07d8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC X920E -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07a1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (HTC6500LVW) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07ae", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (HTC6525LVW) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (Verizon) (HTC6525LVW) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One Remix (HTC6515LVW) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="07d9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Windows Phone 8X ID1 -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ba1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Windows Phone 8X ID2 -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ba2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Android Device ID1 (Zopo, HD2, Bird...) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC EVO 4G LTE/One V (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0c93", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC EVO 4G LTE/One V (ID2) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ca8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One S (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0cec", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One Mini (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dcd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One 802w (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dd2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Desire X -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dd5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dda", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Butterfly X290d -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0de4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP+UMS+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dea", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Evo 4G LTE (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0df5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One S (ID2) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0df8", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One S (ID3) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0df9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One X (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dfa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One X (ID2) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dfb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One X (ID3) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dfc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One X (ID4) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dfd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Butterfly (ID1) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dfe", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Droid DNA (MTP+UMS+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0dff", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Droid Incredible 4G LTE (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0e31", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC Droid Incredible 4G LTE (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0e32", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Droid DNA (MTP+UMS) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ebd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Desire 310 (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ec6", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Desire 310 (2nd id) (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0ec7", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Desire 816G (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0edb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Desire 626G Dual Sim (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0edd", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP+ADB+CDC) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f5f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP+CDC) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f60", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f63", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f64", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (MTP+ADB+?) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f87", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One (ID3) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f91", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0f25", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="061a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (MTP+UMS) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fb5", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC HTC One M8 (MTP+ADB+UMS) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="0fb4", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Android Device ID2 (Zopo, HD2...) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Motorola Razr D1 -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="2012", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Motorola P98 4G -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One M9 (3rd ID) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="4ee1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC One M9 (4th ID) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="4ee2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC (for Hewlett-Packard) HP Touchpad (MTP) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="685c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC (for Hewlett-Packard) HP Touchpad (MTP+ADB) -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="6860", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HTC Windows Phone 8s ID1 -ATTR{idVendor}=="0bb4", ATTR{idProduct}=="f0ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NEC FOMA N01A -ATTR{idVendor}=="0409", ATTR{idProduct}=="0242", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NEC Casio C811 -ATTR{idVendor}=="0409", ATTR{idProduct}=="0326", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# NEC Casio CA-201L -ATTR{idVendor}=="0409", ATTR{idProduct}=="0432", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia CM9-Adam -ATTR{idVendor}=="0955", ATTR{idProduct}=="70a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Various tablets (ID1) -ATTR{idVendor}=="0955", ATTR{idProduct}=="7100", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Various tablets (ID2) -ATTR{idVendor}=="0955", ATTR{idProduct}=="7102", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Jetson TX1 -ATTR{idVendor}=="0955", ATTR{idProduct}=="7721", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Shield (ID1) -ATTR{idVendor}=="0955", ATTR{idProduct}=="b400", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Shield (Tegra4) -ATTR{idVendor}=="0955", ATTR{idProduct}=="b401", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Tegra Note -ATTR{idVendor}=="0955", ATTR{idProduct}=="cf02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# nVidia Shield (ID2) -ATTR{idVendor}=="0955", ATTR{idProduct}=="cf07", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nokia N1 -ATTR{idVendor}=="0489", ATTR{idProduct}=="1ab0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# InFocus M808 -ATTR{idVendor}=="0489", ATTR{idProduct}=="c00b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# InFocus M810 -ATTR{idVendor}=="0489", ATTR{idProduct}=="c025", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Vizio Unknown 1 -ATTR{idVendor}=="0489", ATTR{idProduct}=="c026", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Vizio VTAB1008 -ATTR{idVendor}=="0489", ATTR{idProduct}=="e040", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Vizio (for Lenovo) LIFETAB S9714 -ATTR{idVendor}=="0489", ATTR{idProduct}=="e111", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire 2G (ID1) -ATTR{idVendor}=="1949", ATTR{idProduct}=="0005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID1) -ATTR{idVendor}=="1949", ATTR{idProduct}=="0007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID2) -ATTR{idVendor}=="1949", ATTR{idProduct}=="0008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID3) -ATTR{idVendor}=="1949", ATTR{idProduct}=="000a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID6) -ATTR{idVendor}=="1949", ATTR{idProduct}=="000b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID4) -ATTR{idVendor}=="1949", ATTR{idProduct}=="000c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID7) -ATTR{idVendor}=="1949", ATTR{idProduct}=="000d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire (ID5) -ATTR{idVendor}=="1949", ATTR{idProduct}=="0012", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire HD6 -ATTR{idVendor}=="1949", ATTR{idProduct}=="00f2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire 8 -ATTR{idVendor}=="1949", ATTR{idProduct}=="0211", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire 8 HD -ATTR{idVendor}=="1949", ATTR{idProduct}=="0212", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire 7 -ATTR{idVendor}=="1949", ATTR{idProduct}=="0221", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Kindle Fire 5 -ATTR{idVendor}=="1949", ATTR{idProduct}=="0222", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Amazon Fire Phone -ATTR{idVendor}=="1949", ATTR{idProduct}=="0800", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Barnes&Noble Nook HD+ -ATTR{idVendor}=="2080", ATTR{idProduct}=="0005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Barnes&Noble Nook HD -ATTR{idVendor}=="2080", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Barnes&Noble Nook Glowlight+ -ATTR{idVendor}=="2080", ATTR{idProduct}=="000a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Various Viewpia DR/bq Kepler -ATTR{idVendor}=="2207", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# YiFang BQ Tesla -ATTR{idVendor}=="2207", ATTR{idProduct}=="0006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Various Viewpia DR/bq Kepler Debugging -ATTR{idVendor}=="2207", ATTR{idProduct}=="0011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kobo Arc 7 HD -ATTR{idVendor}=="2237", ATTR{idProduct}=="b108", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kobo Arc (ID1) -ATTR{idVendor}=="2237", ATTR{idProduct}=="d108", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kobo Arc (ID2) -ATTR{idVendor}=="2237", ATTR{idProduct}=="d109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hisense E860 (ID1) -ATTR{idVendor}=="109b", ATTR{idProduct}=="9106", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hisense E860 (ID2) -ATTR{idVendor}=="109b", ATTR{idProduct}=="9109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Point of View TAB-I847 -ATTR{idVendor}=="8087", ATTR{idProduct}=="092a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Xolo 900/AZ210A -ATTR{idVendor}=="8087", ATTR{idProduct}=="09fb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Noblex T7A21 -ATTR{idVendor}=="8087", ATTR{idProduct}=="0a16", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Foxconn iView i700 -ATTR{idVendor}=="8087", ATTR{idProduct}=="0a15", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Telcast Air 3G -ATTR{idVendor}=="8087", ATTR{idProduct}=="0a5e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Intel Chuwi vi8 -ATTR{idVendor}=="8087", ATTR{idProduct}=="0a5f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-3w (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="0360", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-3 (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="0368", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi MiPad (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="0660", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi MiPad (MTP+ADB) -ATTR{idVendor}=="2717", ATTR{idProduct}=="0668", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Hongmi (MTP+ADB) -ATTR{idVendor}=="2717", ATTR{idProduct}=="1240", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Hongmi (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="1248", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Redmi 1S (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="1260", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Redmi HM 1S (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="1268", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi HM NOTE 1LTEW MIUI (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="1368", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-2 (MTP+ADB) -ATTR{idVendor}=="2717", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-2 (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-2s (id2) (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="ff40", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Mi-2s (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="ff48", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Redmi 2 (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="ff60", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Xiaomi Redmi 2 2014811 (MTP) -ATTR{idVendor}=="2717", ATTR{idProduct}=="ff68", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acromag Inc. XO Learning Tablet (MTP+ADB) -ATTR{idVendor}=="16d5", ATTR{idProduct}=="8005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Acromag Inc. XO Learning Tablet (MTP) -ATTR{idVendor}=="16d5", ATTR{idProduct}=="8006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SHARP Corporation SH930W -ATTR{idVendor}=="0489", ATTR{idProduct}=="c025", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SHARP Corporation SBM203SH -ATTR{idVendor}=="04dd", ATTR{idProduct}=="9661", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SHARP Corporation SH-06E -ATTR{idVendor}=="04dd", ATTR{idProduct}=="96ca", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# SHARP Corporation SHV35 AQUOS U -ATTR{idVendor}=="04dd", ATTR{idProduct}=="99d2", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel One Touch 997D (MTP+ADB) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel One Touch 997D (MTP) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel/TCT 6010D/TCL S950 -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="0167", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel 6030a -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="0168", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel/Bouygues BS472 -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="904d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel OneTouch 5042D (MTP) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="a00e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel OneTouch Idol 3 ID2 (MTP) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="af00", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel OneTouch Idol 3 small (MTP) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="af2a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel OneTouch Idol 3 (MTP) -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="af2b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Alcatel OneTouch 6034R -ATTR{idVendor}=="1bbb", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera Rise -ATTR{idVendor}=="0482", ATTR{idProduct}=="0571", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera Event -ATTR{idVendor}=="0482", ATTR{idProduct}=="0591", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera Torque Model E6715 -ATTR{idVendor}=="0482", ATTR{idProduct}=="059a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera Hydro Elite C6750 -ATTR{idVendor}=="0482", ATTR{idProduct}=="073c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera KYL22 -ATTR{idVendor}=="0482", ATTR{idProduct}=="0810", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera 302KC -ATTR{idVendor}=="0482", ATTR{idProduct}=="09fc", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera DuraForce -ATTR{idVendor}=="0482", ATTR{idProduct}=="0979", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera KC-S701 -ATTR{idVendor}=="0482", ATTR{idProduct}=="09cb", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kyocera C6740N -ATTR{idVendor}=="0482", ATTR{idProduct}=="0a73", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# HiSense Sero 7 Pro -ATTR{idVendor}=="109b", ATTR{idProduct}=="9105", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hewlett-Packard Slate 7 4600 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="5c1d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hewlett-Packard Slate 7 2800 -ATTR{idVendor}=="03f0", ATTR{idProduct}=="5d1d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Hewlett-Packard Slate 10 HD -ATTR{idVendor}=="03f0", ATTR{idProduct}=="7e1d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# MediaTek Inc MT5xx and MT6xx SoCs -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0050", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Bravis A401 Neo -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="0c03", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# MediaTek Inc MT65xx -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# elephone p6000 -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# MediaTek Inc Elephone P8000 -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Jolla Sailfish (ID1) -ATTR{idVendor}=="2931", ATTR{idProduct}=="0a01", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Jolla Sailfish (ID2) -ATTR{idVendor}=="2931", ATTR{idProduct}=="0a05", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Jolla Sailfish (ID3) -ATTR{idVendor}=="2931", ATTR{idProduct}=="0a07", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TCL Alcatel one touch 986+ -ATTR{idVendor}=="0451", ATTR{idProduct}=="d108", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Garmin Monterra -ATTR{idVendor}=="091e", ATTR{idProduct}=="2585", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Wacom Cintiq Companion Hybrid (MTP+ADB) -ATTR{idVendor}=="0531", ATTR{idProduct}=="2001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kurio 7S -ATTR{idVendor}=="1f3a", ATTR{idProduct}=="1006", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# iRulu X1s -ATTR{idVendor}=="1f3a", ATTR{idProduct}=="1007", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# DigiLand DL701Q -ATTR{idVendor}=="1f3a", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Krillin (MTP+ADB) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Krillin (MTP) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Aquaris M10 (MTP) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="200d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Avila Cooler (MTP) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Aquaris X5 (MTP) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="3003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Aquarius E5-4G -ATTR{idVendor}=="2a47", ATTR{idProduct}=="7f10", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Aquarius X5 (MTP) (ID2) -ATTR{idVendor}=="2a47", ATTR{idProduct}=="7f11", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# bq Aquarius M5.5 -ATTR{idVendor}=="2a47", ATTR{idProduct}=="901b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Prestigio 5505 DUO -ATTR{idVendor}=="29e4", ATTR{idProduct}=="1103", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Prestigio 5504 DUO -ATTR{idVendor}=="29e4", ATTR{idProduct}=="1203", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Prestigio 3405 DUO -ATTR{idVendor}=="29e4", ATTR{idProduct}=="3201", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Prestigio Multipad Color 7.0 -ATTR{idVendor}=="29e4", ATTR{idProduct}=="b003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Megafon MFLogin3T -ATTR{idVendor}=="201e", ATTR{idProduct}=="42ab", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Haier CT715 -ATTR{idVendor}=="201e", ATTR{idProduct}=="a0c1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Gensis GT-7305 -ATTR{idVendor}=="040d", ATTR{idProduct}=="885c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Oppo Find 5 -ATTR{idVendor}=="22d9", ATTR{idProduct}=="2764", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Oppo Find 7 (ID 1) -ATTR{idVendor}=="22d9", ATTR{idProduct}=="2765", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Oppo X9006 -ATTR{idVendor}=="22d9", ATTR{idProduct}=="2773", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Oppo Find 7 (ID 2) -ATTR{idVendor}=="22d9", ATTR{idProduct}=="2774", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Gigabyte RCT6773W22 (MTP+ADB) -ATTR{idVendor}=="0414", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Gigabyte RCT6773W22 (MTP) -ATTR{idVendor}=="0414", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Meizu MX Phone (MTP) -ATTR{idVendor}=="2a45", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Meizu MX Phone (MTP+ADB) -ATTR{idVendor}=="2a45", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Caterpillar Cat S50 -ATTR{idVendor}=="04b7", ATTR{idProduct}=="88a9", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Caterpillar Cat S50 (2nd ID) -ATTR{idVendor}=="04b7", ATTR{idProduct}=="88aa", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Caterpillar Cat S40 -ATTR{idVendor}=="04b7", ATTR{idProduct}=="88b0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Caterpillar Cat S60 -ATTR{idVendor}=="04b7", ATTR{idProduct}=="88c0", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pegatron Chagall (ADB) -ATTR{idVendor}=="1d4d", ATTR{idProduct}=="5035", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pegatron Chagall -ATTR{idVendor}=="1d4d", ATTR{idProduct}=="5036", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Pegatron Hudl 2 -ATTR{idVendor}=="1d4d", ATTR{idProduct}=="504a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Yota Phone C9660 -ATTR{idVendor}=="2916", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Yota Phone -ATTR{idVendor}=="2916", ATTR{idProduct}=="9139", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Yota Phone 2 -ATTR{idVendor}=="2916", ATTR{idProduct}=="914d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Yota Phone 2 (ID2) -ATTR{idVendor}=="2916", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fly Evo Tech 4 -ATTR{idVendor}=="2970", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Wileyfox Swift -ATTR{idVendor}=="2970", ATTR{idProduct}=="2281", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Wileyfox Swift 2 -ATTR{idVendor}=="2970", ATTR{idProduct}=="2282", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Kazam Trooper 650 4G -ATTR{idVendor}=="2970", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Megafon Login+ -ATTR{idVendor}=="1271", ATTR{idProduct}=="2012", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fly iq4415 era style 3 -ATTR{idVendor}=="2970", ATTR{idProduct}=="0c02", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fly iq449 -ATTR{idVendor}=="1782", ATTR{idProduct}=="4001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# YU Yureka Vodafone smart turbo 4 -ATTR{idVendor}=="1ebf", ATTR{idProduct}=="7f29", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# BenQ F5 -ATTR{idVendor}=="1d45", ATTR{idProduct}=="459d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TomTom Rider 40 -ATTR{idVendor}=="1390", ATTR{idProduct}=="5455", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# OUYA Videogame Console -ATTR{idVendor}=="2836", ATTR{idProduct}=="0010", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# BLU Studio HD -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="2008", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Cubot X17 -ATTR{idVendor}=="0e8d", ATTR{idProduct}=="201d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# OnePlus ONE A2001 -ATTR{idVendor}=="2a70", ATTR{idProduct}=="9011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# OnePlus OnePlus 2 A2005 -ATTR{idVendor}=="2a70", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Parrot Bebop Drone -ATTR{idVendor}=="19cf", ATTR{idProduct}=="5038", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO3+ Black -ATTR{idVendor}=="2672", ATTR{idProduct}=="0011", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO -ATTR{idVendor}=="2672", ATTR{idProduct}=="000c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO4 Silver -ATTR{idVendor}=="2672", ATTR{idProduct}=="000d", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Gopro HERO4 Black -ATTR{idVendor}=="2672", ATTR{idProduct}=="000e", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO4 Session -ATTR{idVendor}=="2672", ATTR{idProduct}=="000f", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO+ -ATTR{idVendor}=="2672", ATTR{idProduct}=="0021", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO5 Black -ATTR{idVendor}=="2672", ATTR{idProduct}=="0027", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# GoPro HERO5 Session -ATTR{idVendor}=="2672", ATTR{idProduct}=="0029", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Marshall London -ATTR{idVendor}=="2ad9", ATTR{idProduct}=="000b", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fairphone Fairphone 2 -ATTR{idVendor}=="2ae5", ATTR{idProduct}=="f003", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Fairphone Fairphone 2 OS -ATTR{idVendor}=="2ae5", ATTR{idProduct}=="9039", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Allview Energy P5 -ATTR{idVendor}=="271d", ATTR{idProduct}=="4016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# BLU Studio Energy X 2 Phone -ATTR{idVendor}=="271d", ATTR{idProduct}=="4016", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# BLU Studio Energy 2 -ATTR{idVendor}=="271d", ATTR{idProduct}=="4017", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Zuk Z1 -ATTR{idVendor}=="2b4c", ATTR{idProduct}=="1004", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Zuk Z1 (2nd ID) -ATTR{idVendor}=="2b4c", ATTR{idProduct}=="1005", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Letv X5001s -ATTR{idVendor}=="2b0e", ATTR{idProduct}=="1700", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Letv 1s -ATTR{idVendor}=="2b0e", ATTR{idProduct}=="1704", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Letv X800 (ID1) -ATTR{idVendor}=="2b0e", ATTR{idProduct}=="182c", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Letv X800 (ID2) -ATTR{idVendor}=="2b0e", ATTR{idProduct}=="1830", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TP-Link Neffos C5 (MTP) -ATTR{idVendor}=="2357", ATTR{idProduct}=="0314", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TP-Link Neffos C5 MAX (MTP) -ATTR{idVendor}=="2357", ATTR{idProduct}=="031a", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TP-Link Neffos Y5L (MTP) -ATTR{idVendor}=="2357", ATTR{idProduct}=="0320", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# TP-Link Neffos Y5 (MTP) -ATTR{idVendor}=="2357", ATTR{idProduct}=="0328", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Recon Instruments Jet -ATTR{idVendor}=="2523", ATTR{idProduct}=="d209", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Recon Instruments Snow2 HUD -ATTR{idVendor}=="2523", ATTR{idProduct}=="d109", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Nextbit Robin -ATTR{idVendor}=="2c3f", ATTR{idProduct}=="0001", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" -# Isabella Her Prototype -ATTR{idVendor}=="0b20", ATTR{idProduct}=="ddee", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" - -# Autoprobe vendor-specific, communication and PTP devices -ENV{ID_MTP_DEVICE}!="1", ENV{MTP_NO_PROBE}!="1", ENV{COLOR_MEASUREMENT_DEVICE}!="1", ENV{libsane_matched}!="yes", ATTR{bDeviceClass}=="00|02|06|ef|ff", PROGRAM="mtp-probe /sys$env{DEVPATH} $attr{busnum} $attr{devnum}", RESULT=="1", SYMLINK+="libmtp-%k", MODE="660", GROUP="audio", ENV{ID_MTP_DEVICE}="1", ENV{ID_MEDIA_PLAYER}="1" - -LABEL="libmtp_rules_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-debian-uaccess.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-debian-uaccess.rules deleted file mode 100644 index f94948c75a..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-debian-uaccess.rules +++ /dev/null @@ -1,22 +0,0 @@ -# this udev file should be used with udev 188 and newer -ACTION!="add|change", GOTO="u2f_end" - -# Yubico YubiKey -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1050", ATTRS{idProduct}=="0113|0114|0115|0116|0120|0402|0403|0406|0407|0410", TAG+="uaccess" - -# Happlink (formerly Plug-Up) Security KEY -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="2581", ATTRS{idProduct}=="f1d0", TAG+="uaccess" - -# Neowave Keydo and Keydo AES -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="1e0d", ATTRS{idProduct}=="f1d0|f1ae", TAG+="uaccess" - -# HyperSecu HyperFIDO -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e|2ccf", ATTRS{idProduct}=="0880", TAG+="uaccess" - -# Feitian ePass FIDO -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="096e", ATTRS{idProduct}=="0850", TAG+="uaccess" - -# JaCarta U2F -KERNEL=="hidraw*", SUBSYSTEM=="hidraw", ATTRS{idVendor}=="24dc", ATTRS{idProduct}=="0101", TAG+="uaccess" - -LABEL="u2f_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-mouse.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-mouse.rules deleted file mode 100644 index 3ea743aff9..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-mouse.rules +++ /dev/null @@ -1,18 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="mouse_end" -KERNEL!="event*", GOTO="mouse_end" -ENV{ID_INPUT_MOUSE}=="", GOTO="mouse_end" - -# mouse::vp:name::* -KERNELS=="input*", ENV{ID_BUS}=="usb", \ - IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ - GOTO="mouse_end" -KERNELS=="input*", ENV{ID_BUS}=="bluetooth", \ - IMPORT{builtin}="hwdb 'mouse:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ - GOTO="mouse_end" -DRIVERS=="psmouse", SUBSYSTEMS=="serio", \ - IMPORT{builtin}="hwdb 'mouse:ps2::name:$attr{device/name}:'", \ - GOTO="mouse_end" - -LABEL="mouse_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-power-switch.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-power-switch.rules deleted file mode 100644 index e2855b50f7..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-power-switch.rules +++ /dev/null @@ -1,18 +0,0 @@ -# This file is part of systemd. -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -ACTION=="remove", GOTO="power_switch_end" - -SUBSYSTEM=="input", KERNEL=="event*", SUBSYSTEMS=="acpi", TAG+="power-switch" -SUBSYSTEM=="input", KERNEL=="event*", KERNELS=="thinkpad_acpi", TAG+="power-switch" -SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="twl4030_pwrbutton", TAG+="power-switch" -SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="tps65217_pwr_but", TAG+="power-switch" -SUBSYSTEM=="input", KERNEL=="event*", ATTRS{name}=="* WMI hotkeys", TAG+="power-switch" -SUBSYSTEM=="input", KERNEL=="event*", \ - SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", ATTRS{keys}=="*,116|116,*|116|*,116,*", TAG+="power-switch" - -LABEL="power_switch_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-touchpad.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-touchpad.rules deleted file mode 100644 index 7bede02dec..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-touchpad.rules +++ /dev/null @@ -1,13 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="touchpad_end" -ENV{ID_INPUT}=="", GOTO="touchpad_end" -ENV{ID_INPUT_TOUCHPAD}=="", GOTO="touchpad_end" -KERNEL!="event*", GOTO="touchpad_end" - -# touchpad::vp:name::* -KERNELS=="input*", ENV{ID_BUS}!="", \ - IMPORT{builtin}="hwdb 'touchpad:$env{ID_BUS}:v$attr{id/vendor}p$attr{id/product}:name:$attr{name}:'", \ - GOTO="touchpad_end" - -LABEL="touchpad_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-uaccess.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-uaccess.rules deleted file mode 100644 index 50dcd2e275..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/70-uaccess.rules +++ /dev/null @@ -1,81 +0,0 @@ -# This file is part of systemd. -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -ACTION=="remove", GOTO="uaccess_end" -ENV{MAJOR}=="", GOTO="uaccess_end" - -# PTP/MTP protocol devices, cameras, portable media players -SUBSYSTEM=="usb", ENV{ID_USB_INTERFACES}=="*:060101:*", TAG+="uaccess" - -# Digicams with proprietary protocol -ENV{ID_GPHOTO2}=="?*", TAG+="uaccess" - -# SCSI and USB scanners -ENV{libsane_matched}=="yes", TAG+="uaccess" - -# HPLIP devices (necessary for ink level check and HP tool maintenance) -ENV{ID_HPLIP}=="1", TAG+="uaccess" - -# optical drives -SUBSYSTEM=="block", ENV{ID_CDROM}=="1", TAG+="uaccess" -SUBSYSTEM=="scsi_generic", SUBSYSTEMS=="scsi", ATTRS{type}=="4|5", TAG+="uaccess" - -# Sound devices -SUBSYSTEM=="sound", TAG+="uaccess" \ - OPTIONS+="static_node=snd/timer", OPTIONS+="static_node=snd/seq" - -# ffado is an userspace driver for firewire sound cards -SUBSYSTEM=="firewire", ENV{ID_FFADO}=="1", TAG+="uaccess" - -# Webcams, frame grabber, TV cards -SUBSYSTEM=="video4linux", TAG+="uaccess" -SUBSYSTEM=="dvb", TAG+="uaccess" - -# IIDC devices: industrial cameras and some webcams -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x00010*", TAG+="uaccess" -SUBSYSTEM=="firewire", ATTR{units}=="*0x00b09d:0x00010*", TAG+="uaccess" -# AV/C devices: camcorders, set-top boxes, TV sets, audio devices, and more -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x010001*", TAG+="uaccess" -SUBSYSTEM=="firewire", ATTR{units}=="*0x00a02d:0x014001*", TAG+="uaccess" - -# DRI video devices -SUBSYSTEM=="drm", KERNEL=="card*|renderD*", TAG+="uaccess" - -# KVM -SUBSYSTEM=="misc", KERNEL=="kvm", TAG+="uaccess" - -# smart-card readers -ENV{ID_SMARTCARD_READER}=="?*", TAG+="uaccess" - -# (USB) authentication devices -ENV{ID_SECURITY_TOKEN}=="?*", TAG+="uaccess" - -# PDA devices -ENV{ID_PDA}=="?*", TAG+="uaccess" - -# Programmable remote control -ENV{ID_REMOTE_CONTROL}=="1", TAG+="uaccess" - -# joysticks -SUBSYSTEM=="input", ENV{ID_INPUT_JOYSTICK}=="?*", TAG+="uaccess" - -# color measurement devices -ENV{COLOR_MEASUREMENT_DEVICE}=="?*", TAG+="uaccess" - -# DDC/CI device, usually high-end monitors such as the DreamColor -ENV{DDC_DEVICE}=="?*", TAG+="uaccess" - -# media player raw devices (for user-mode drivers, Android SDK, etc.) -SUBSYSTEM=="usb", ENV{ID_MEDIA_PLAYER}=="?*", TAG+="uaccess" - -# software-defined radio communication devices -ENV{ID_SOFTWARE_RADIO}=="?*", TAG+="uaccess" - -# 3D printers, CNC machines, laser cutters, 3D scanners, etc. -ENV{ID_MAKER_TOOL}=="?*", TAG+="uaccess" - -LABEL="uaccess_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/71-seat.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/71-seat.rules deleted file mode 100644 index c5f922997d..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/71-seat.rules +++ /dev/null @@ -1,54 +0,0 @@ -# This file is part of systemd. -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -ACTION=="remove", GOTO="seat_end" - -TAG=="uaccess", SUBSYSTEM!="sound", TAG+="seat" -SUBSYSTEM=="sound", KERNEL=="card*", TAG+="seat" -SUBSYSTEM=="input", KERNEL=="input*", TAG+="seat" -SUBSYSTEM=="graphics", KERNEL=="fb[0-9]*", TAG+="seat", TAG+="master-of-seat" -SUBSYSTEM=="drm", KERNEL=="card[0-9]*", TAG+="seat", TAG+="master-of-seat" -SUBSYSTEM=="usb", ATTR{bDeviceClass}=="09", TAG+="seat" - -# 'Plugable' USB hub, sound, network, graphics adapter -SUBSYSTEM=="usb", ATTR{idVendor}=="2230", ATTR{idProduct}=="000[13]", ENV{ID_AUTOSEAT}="1" - -# qemu (version 2.4+) has a PCI-PCI bridge (-device pci-bridge-seat) to group -# devices belonging to one seat. See: -# http://git.qemu.org/?p=qemu.git;a=blob;f=docs/multiseat.txt -SUBSYSTEM=="pci", ATTR{vendor}=="0x1b36", ATTR{device}=="0x000a", TAG+="seat", ENV{ID_AUTOSEAT}="1" - -# Mimo 720, with integrated USB hub, displaylink graphics, and e2i -# touchscreen. This device carries no proper VID/PID in the USB hub, -# but it does carry good ID data in the graphics component, hence we -# check it from the parent. There's a bit of a race here however, -# given that the child devices might not exist yet at the time this -# rule is executed. To work around this we'll trigger the parent from -# the child if we notice that the parent wasn't recognized yet. - -# Match parent -SUBSYSTEM=="usb", ATTR{idVendor}=="058f", ATTR{idProduct}=="6254", \ - ATTR{%k.2/idVendor}=="17e9", ATTR{%k.2/idProduct}=="401a", ATTR{%k.2/product}=="mimo inc", \ - ENV{ID_AUTOSEAT}="1", ENV{ID_AVOID_LOOP}="1" - -# Match child, look for parent's ID_AVOID_LOOP -SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \ - ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \ - IMPORT{parent}="ID_AVOID_LOOP" - -# Match child, retrigger parent -SUBSYSTEM=="usb", ATTR{idVendor}=="17e9", ATTR{idProduct}=="401a", ATTR{product}=="mimo inc", \ - ATTR{../idVendor}=="058f", ATTR{../idProduct}=="6254", \ - ENV{ID_AVOID_LOOP}=="", \ - RUN+="/bin/udevadm trigger --parent-match=%p/.." - -TAG=="seat", ENV{ID_PATH}=="", IMPORT{builtin}="path_id" -TAG=="seat", ENV{ID_FOR_SEAT}=="", ENV{ID_PATH_TAG}!="", ENV{ID_FOR_SEAT}="$env{SUBSYSTEM}-$env{ID_PATH_TAG}" - -SUBSYSTEM=="input", ATTR{name}=="Wiebetech LLC Wiebetech", RUN+="/bin/loginctl lock-sessions" - -LABEL="seat_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-special-net-names.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-special-net-names.rules deleted file mode 100644 index 5e470a3409..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-special-net-names.rules +++ /dev/null @@ -1,14 +0,0 @@ -# On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC -# which terminates in the iDRAC. Help identify this with 'idrac' -ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="idrac" - -# On IBM systems the Integrated Management Module is reachable using a -# # USB Virtual NIC. -ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", \ - ATTRS{idVendor}=="04b3", ATTRS{idProduct}=="0325", NAME="ibmimm" - -# ibmveth devices' $DEVPATH number is tied to (virtual) hardware (slot id -# selected in the HMC), thus this provides a reliable naming (e. g. -# "/devices/vio/30000002/net/eth1"); we ignore the bus number, as -# there should only ever be one bus, and then remove leading zeros -ACTION=="add", SUBSYSTEM=="net", NAME=="", DRIVERS=="ibmveth", PROGRAM="/bin/sh -ec 'D=${DEVPATH#*/vio/}; D=${D%%%%/*}; D=${D#????}; D=${D#0}; D=${D#0}; D=${D#0}; D=${D#0}; echo ${D:-0}'", NAME="ibmveth$result" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-usb-net-by-mac.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-usb-net-by-mac.rules deleted file mode 100644 index 8969f59176..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/73-usb-net-by-mac.rules +++ /dev/null @@ -1,15 +0,0 @@ -# Use MAC based names for network interfaces which are directly or indirectly -# on USB and have an universally administered (stable) MAC address (second bit -# is 0). Don't do this when ifnames is disabled via kernel command line or -# customizing/disabling 99-default.link (or previously 80-net-setup-link.rules). - -IMPORT{cmdline}="net.ifnames" -ENV{net.ifnames}=="0", GOTO="usb_net_by_mac_end" - -ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", NAME=="", \ - ATTR{address}=="?[014589cd]:*", \ - TEST!="/etc/udev/rules.d/80-net-setup-link.rules", \ - TEST!="/etc/systemd/network/99-default.link", \ - IMPORT{builtin}="net_id", NAME="$env{ID_NET_NAME_MAC}" - -LABEL="usb_net_by_mac_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-net-description.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-net-description.rules deleted file mode 100644 index 7e62f8b26b..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-net-description.rules +++ /dev/null @@ -1,14 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="net_end" -SUBSYSTEM!="net", GOTO="net_end" - -IMPORT{builtin}="net_id" - -SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id", IMPORT{builtin}="hwdb --subsystem=usb" -SUBSYSTEMS=="usb", GOTO="net_end" - -SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" -SUBSYSTEMS=="pci", IMPORT{builtin}="hwdb --subsystem=pci" - -LABEL="net_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-probe_mtd.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-probe_mtd.rules deleted file mode 100644 index 8848aeeaed..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/75-probe_mtd.rules +++ /dev/null @@ -1,7 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION!="add", GOTO="mtd_probe_end" - -KERNEL=="mtd*ro", IMPORT{program}="mtd_probe $devnode" - -LABEL="mtd_probe_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/78-sound-card.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/78-sound-card.rules deleted file mode 100644 index 04740e8b97..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/78-sound-card.rules +++ /dev/null @@ -1,89 +0,0 @@ -# do not edit this file, it will be overwritten on update - -SUBSYSTEM!="sound", GOTO="sound_end" - -ACTION=="add|change", KERNEL=="controlC*", ATTR{../uevent}="change" -ACTION!="change", GOTO="sound_end" - -# Ok, we probably need a little explanation here for what the two lines above -# are good for. -# -# The story goes like this: when ALSA registers a new sound card it emits a -# series of 'add' events to userspace, for the main card device and for all the -# child device nodes that belong to it. udev relays those to applications, -# however only maintains the order between father and child, but not between -# the siblings. The control device node creation can be used as synchronization -# point. All other devices that belong to a card are created in the kernel -# before it. However unfortunately due to the fact that siblings are forwarded -# out of order by udev this fact is lost to applications. -# -# OTOH before an application can open a device it needs to make sure that all -# its device nodes are completely created and set up. -# -# As a workaround for this issue we have added the udev rule above which will -# generate a 'change' event on the main card device from the 'add' event of the -# card's control device. Due to the ordering semantics of udev this event will -# only be relayed after all child devices have finished processing properly. -# When an application needs to listen for appearing devices it can hence look -# for 'change' events only, and ignore the actual 'add' events. -# -# When the application is initialized at the same time as a device is plugged -# in it may need to figure out if the 'change' event has already been triggered -# or not for a card. To find that out we store the flag environment variable -# SOUND_INITIALIZED on the device which simply tells us if the card 'change' -# event has already been processed. - -KERNEL!="card*", GOTO="sound_end" - -ENV{SOUND_INITIALIZED}="1" - -IMPORT{builtin}="hwdb" -SUBSYSTEMS=="usb", IMPORT{builtin}="usb_id" -SUBSYSTEMS=="usb", GOTO="skip_pci" - -SUBSYSTEMS=="firewire", ATTRS{guid}=="?*", \ - ENV{ID_BUS}="firewire", ENV{ID_SERIAL}="$attr{guid}", ENV{ID_SERIAL_SHORT}="$attr{guid}", \ - ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{model}", \ - ENV{ID_VENDOR}="$attr{vendor_name}", ENV{ID_MODEL}="$attr{model_name}" -SUBSYSTEMS=="firewire", GOTO="skip_pci" - -SUBSYSTEMS=="pci", ENV{ID_BUS}="pci", ENV{ID_VENDOR_ID}="$attr{vendor}", ENV{ID_MODEL_ID}="$attr{device}" -LABEL="skip_pci" - -# Define ID_ID if ID_BUS and ID_SERIAL are set. This will work for both -# USB and firewire. -ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="?*", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}-$env{ID_USB_INTERFACE_NUM}" -ENV{ID_SERIAL}=="?*", ENV{ID_USB_INTERFACE_NUM}=="", ENV{ID_ID}="$env{ID_BUS}-$env{ID_SERIAL}" - -IMPORT{builtin}="path_id" - -# The values used here for $SOUND_FORM_FACTOR and $SOUND_CLASS should be kept -# in sync with those defined for PulseAudio's src/pulse/proplist.h -# PA_PROP_DEVICE_FORM_FACTOR, PA_PROP_DEVICE_CLASS properties. - -# If the first PCM device of this card has the pcm class 'modem', then the card is a modem -ATTR{pcmC%nD0p/pcm_class}=="modem", ENV{SOUND_CLASS}="modem", GOTO="sound_end" - -# Identify cards on the internal PCI bus as internal -SUBSYSTEMS=="pci", DEVPATH=="*/0000:00:??.?/sound/*", ENV{SOUND_FORM_FACTOR}="internal", GOTO="sound_end" - -# Devices that also support Image/Video interfaces are most likely webcams -SUBSYSTEMS=="usb", ENV{ID_USB_INTERFACES}=="*:0e????:*", ENV{SOUND_FORM_FACTOR}="webcam", GOTO="sound_end" - -# Matching on the model strings is a bit ugly, I admit -ENV{ID_MODEL}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" -ENV{ID_MODEL_FROM_DATABASE}=="*[Ss]peaker*", ENV{SOUND_FORM_FACTOR}="speaker", GOTO="sound_end" - -ENV{ID_MODEL}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" -ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadphone*", ENV{SOUND_FORM_FACTOR}="headphone", GOTO="sound_end" - -ENV{ID_MODEL}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" -ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]eadset*", ENV{SOUND_FORM_FACTOR}="headset", GOTO="sound_end" - -ENV{ID_MODEL}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" -ENV{ID_MODEL_FROM_DATABASE}=="*[Hh]andset*", ENV{SOUND_FORM_FACTOR}="handset", GOTO="sound_end" - -ENV{ID_MODEL}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" -ENV{ID_MODEL_FROM_DATABASE}=="*[Mm]icrophone*", ENV{SOUND_FORM_FACTOR}="microphone", GOTO="sound_end" - -LABEL="sound_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-debian-compat.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-debian-compat.rules deleted file mode 100644 index fb8477ff70..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-debian-compat.rules +++ /dev/null @@ -1,30 +0,0 @@ -# Debian specific udev rules for backwards compatibility - -# needed for old tape drivers, http://bugs.debian.org/657948 -SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN{builtin}+="kmod load sg" - -# device permissions -KERNEL=="mISDNtimer", GROUP="dialout" -KERNEL=="mwave", GROUP="dialout" -KERNEL=="nvram", GROUP="kmem", MODE="0640" -KERNEL=="pktcdvd", GROUP="cdrom", MODE="0644" -KERNEL=="lirc[0-9]*", GROUP="video" -KERNEL=="legousbtower*", MODE="0666" -KERNEL=="sonypi", MODE="0666" -KERNEL=="mmtimer", MODE="0644" -KERNEL=="sgi_*", MODE="0666" -KERNEL=="z90crypt", MODE="0666" - -# These rules will create symlinks for CD/DVD drives, to help old -# programs which are unable to automatically discover the devices. -# The first detected device gets the symlink, but this is not stable across -# reboots. -ENV{ID_CDROM_CD_RW}=="?*", \ - PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.cdrw 2>/dev/null; [ `readlink /run/udev/link.cdrw` = %k ]", \ - SYMLINK+="cdrw", OPTIONS+="link_priority=-100" -ENV{ID_CDROM_DVD}=="?*", \ - PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.dvd 2>/dev/null; [ `readlink /run/udev/link.dvd` = %k ]", \ - SYMLINK+="dvd", OPTIONS+="link_priority=-100" -ENV{ID_CDROM_DVD_RW}=="?*", \ - PROGRAM="/bin/sh -c 'ln -s %k /run/udev/link.dvdrw 2>/dev/null; [ `readlink /run/udev/link.dvdrw` = %k ]", \ - SYMLINK+="dvdrw", OPTIONS+="link_priority=-100" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-drivers.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-drivers.rules deleted file mode 100644 index 8551f47a4b..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-drivers.rules +++ /dev/null @@ -1,13 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="drivers_end" - -ENV{MODALIAS}=="?*", RUN{builtin}+="kmod load $env{MODALIAS}" -SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="SD", RUN{builtin}+="kmod load tifm_sd" -SUBSYSTEM=="tifm", ENV{TIFM_CARD_TYPE}=="MS", RUN{builtin}+="kmod load tifm_ms" -SUBSYSTEM=="memstick", RUN{builtin}+="kmod load ms_block mspro_block" -SUBSYSTEM=="i2o", RUN{builtin}+="kmod load i2o_block" -SUBSYSTEM=="module", KERNEL=="parport_pc", RUN{builtin}+="kmod load ppdev" -KERNEL=="mtd*ro", ENV{MTD_FTL}=="smartmedia", RUN{builtin}+="kmod load sm_ftl" - -LABEL="drivers_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-ifupdown.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-ifupdown.rules deleted file mode 100644 index 053b235cc9..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/80-ifupdown.rules +++ /dev/null @@ -1,5 +0,0 @@ -# Allow rfkill for users in the netdev group -KERNEL=="rfkill", MODE="0664", GROUP="netdev" - -# Handle allow-hotplug interfaces -SUBSYSTEM=="net", ACTION=="add|remove", RUN+="ifupdown-hotplug" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-hwclock.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-hwclock.rules deleted file mode 100644 index 972e4aab3b..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-hwclock.rules +++ /dev/null @@ -1,4 +0,0 @@ -# Set the System Time from the Hardware Clock and set the kernel's timezone -# value to the local timezone when the kernel clock module is loaded. - -KERNEL=="rtc0", RUN+="/lib/udev/hwclock-set $root/$name" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-regulatory.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-regulatory.rules deleted file mode 100644 index e81d802e3a..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/85-regulatory.rules +++ /dev/null @@ -1,5 +0,0 @@ -# Runs CRDA for kernel wireless regulatory events. -# For more information see: -# http://wireless.kernel.org/en/developers/Regulatory/CRDA - -KERNEL=="regulatory*", ACTION=="change", SUBSYSTEM=="platform", RUN+="/sbin/crda" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/90-alsa-restore.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/90-alsa-restore.rules deleted file mode 100644 index 0280ae4aa5..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/90-alsa-restore.rules +++ /dev/null @@ -1,8 +0,0 @@ -ACTION=="add", SUBSYSTEM=="sound", KERNEL=="controlC*", KERNELS!="card*", TEST=="/usr/sbin", TEST=="/usr/share/alsa", GOTO="alsa_restore_go" -GOTO="alsa_restore_end" - -LABEL="alsa_restore_go" -TEST!="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa restore $attr{device/number}" -TEST=="/etc/alsa/state-daemon.conf", TEST=="/usr/sbin/alsactl", RUN+="/usr/sbin/alsactl -E HOME=/run/alsa nrestore $attr{device/number}" - -LABEL="alsa_restore_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/97-hid2hci.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/97-hid2hci.rules deleted file mode 100644 index 817a8698a7..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/97-hid2hci.rules +++ /dev/null @@ -1,31 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION=="remove", GOTO="hid2hci_end" -SUBSYSTEM!="usb*", GOTO="hid2hci_end" - -# Variety of Dell Bluetooth devices - match on a mouse device that is -# self powered and where a HID report needs to be sent to switch modes -# Known supported devices: 413c:8154, 413c:8158, 413c:8162 -ATTR{bInterfaceClass}=="03", ATTR{bInterfaceSubClass}=="01", ATTR{bInterfaceProtocol}=="02", \ - ATTRS{bDeviceClass}=="00", ATTRS{idVendor}=="413c", ATTRS{bmAttributes}=="e0", \ - RUN+="hid2hci --method=dell --devpath=%p", ENV{HID2HCI_SWITCH}="1" - -# Logitech devices -KERNEL=="hiddev*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c70[345abce]|c71[3bc]", \ - RUN+="hid2hci --method=logitech-hid --devpath=%p" -# Logitech, Inc. diNovo Edge Keyboard -KERNEL=="hidraw*", ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c714", \ - RUN+="hid2hci --method=logitech-hid --devpath=%p" - -ENV{DEVTYPE}!="usb_device", GOTO="hid2hci_end" - -# When a Dell device recovers from S3, the mouse child needs to be repoked -# Unfortunately the only event seen is the BT device disappearing, so the mouse -# device needs to be chased down on the USB bus. -ATTR{bDeviceClass}=="e0", ATTR{bDeviceSubClass}=="01", ATTR{bDeviceProtocol}=="01", ATTR{idVendor}=="413c", \ - ENV{REMOVE_CMD}="/bin/udevadm trigger --action=change --subsystem-match=usb --property-match=HID2HCI_SWITCH=1" - -# CSR devices -ATTR{idVendor}=="0a12|0458|05ac", ATTR{idProduct}=="1000", RUN+="hid2hci --method=csr --devpath=%p" - -LABEL="hid2hci_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/15-i2c-modprobe.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/15-i2c-modprobe.rules deleted file mode 100644 index fe245e26b6..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/15-i2c-modprobe.rules +++ /dev/null @@ -1 +0,0 @@ -SUBSYSTEM=="i2c|spi", ENV{MODALIAS}=="?*", ENV{OF_NAME}=="?*", ENV{OF_COMPATIBLE_0}=="?*", RUN+="/usr/lib/raspberrypi-sys-mods/i2cprobe" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/73-seat-late.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/73-seat-late.rules deleted file mode 100644 index 901df750fd..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/73-seat-late.rules +++ /dev/null @@ -1,17 +0,0 @@ -# This file is part of systemd. -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -ACTION=="remove", GOTO="seat_late_end" - -ENV{ID_SEAT}=="", ENV{ID_AUTOSEAT}=="1", ENV{ID_FOR_SEAT}!="", ENV{ID_SEAT}="seat-$env{ID_FOR_SEAT}" -ENV{ID_SEAT}=="", IMPORT{parent}="ID_SEAT" - -ENV{ID_SEAT}!="", TAG+="$env{ID_SEAT}" - -TAG=="uaccess", ENV{MAJOR}!="", RUN{builtin}+="uaccess" - -LABEL="seat_late_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-name-slot.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-name-slot.rules deleted file mode 100644 index c5f1b3885b..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-name-slot.rules +++ /dev/null @@ -1,14 +0,0 @@ -# do not edit this file, it will be overwritten on update - -ACTION!="add", GOTO="net_name_slot_end" -SUBSYSTEM!="net", GOTO="net_name_slot_end" -NAME!="", GOTO="net_name_slot_end" - -IMPORT{cmdline}="net.ifnames" -ENV{net.ifnames}=="0", GOTO="net_name_slot_end" - -NAME=="", ENV{ID_NET_NAME_ONBOARD}!="", NAME="$env{ID_NET_NAME_ONBOARD}" -NAME=="", ENV{ID_NET_NAME_SLOT}!="", NAME="$env{ID_NET_NAME_SLOT}" -NAME=="", ENV{ID_NET_NAME_PATH}!="", NAME="$env{ID_NET_NAME_PATH}" - -LABEL="net_name_slot_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-setup-link.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-setup-link.rules deleted file mode 100644 index 6e411a91f0..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/80-net-setup-link.rules +++ /dev/null @@ -1,13 +0,0 @@ -# do not edit this file, it will be overwritten on update - -SUBSYSTEM!="net", GOTO="net_setup_link_end" - -IMPORT{builtin}="path_id" - -ACTION!="add", GOTO="net_setup_link_end" - -IMPORT{builtin}="net_setup_link" - -NAME=="", ENV{ID_NET_NAME}!="", NAME="$env{ID_NET_NAME}" - -LABEL="net_setup_link_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/90-console-setup.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/90-console-setup.rules deleted file mode 100644 index 8cd746ddda..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/90-console-setup.rules +++ /dev/null @@ -1,3 +0,0 @@ -ACTION=="add", SUBSYSTEM=="vtconsole", KERNEL=="vtcon*", RUN+="/etc/console-setup/cached_setup_font.sh" - -ACTION=="add", SUBSYSTEM=="vc", KERNEL=="vcs[1-9]|vcs[1-9][0-9]", TEST=="/run/console-setup/font-loaded", RUN+="/etc/console-setup/cached_setup_terminal.sh %k" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/99-systemd.rules b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/99-systemd.rules deleted file mode 100644 index f985bc22cd..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/rules.d/disabled/99-systemd.rules +++ /dev/null @@ -1,71 +0,0 @@ -# This file is part of systemd. -# -# systemd is free software; you can redistribute it and/or modify it -# under the terms of the GNU Lesser General Public License as published by -# the Free Software Foundation; either version 2.1 of the License, or -# (at your option) any later version. - -ACTION=="remove", GOTO="systemd_end" - -SUBSYSTEM=="tty", KERNEL=="tty[a-zA-Z]*|hvc*|xvc*|hvsi*|ttysclp*|sclp_line*|3270/tty[0-9]*", TAG+="systemd" -KERNEL=="vport*", TAG+="systemd" - -SUBSYSTEM=="block", TAG+="systemd" -SUBSYSTEM=="block", ACTION=="add", ENV{DM_UDEV_DISABLE_OTHER_RULES_FLAG}=="1", ENV{SYSTEMD_READY}="0" - -# Ignore encrypted devices with no identified superblock on it, since -# we are probably still calling mke2fs or mkswap on it. -SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{ID_PART_TABLE_TYPE}=="", ENV{ID_FS_USAGE}=="", ENV{SYSTEMD_READY}="0" - -# add symlink to GPT root disk -SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}!="crypto_LUKS", SYMLINK+="gpt-auto-root" -SUBSYSTEM=="block", ENV{ID_PART_GPT_AUTO_ROOT}=="1", ENV{ID_FS_TYPE}=="crypto_LUKS", SYMLINK+="gpt-auto-root-luks" -SUBSYSTEM=="block", ENV{DM_UUID}=="CRYPT-*", ENV{DM_NAME}=="root", SYMLINK+="gpt-auto-root" - -# Ignore raid devices that are not yet assembled and started -SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", TEST!="md/array_state", ENV{SYSTEMD_READY}="0" -SUBSYSTEM=="block", ENV{DEVTYPE}=="disk", KERNEL=="md*", ATTR{md/array_state}=="|clear|inactive", ENV{SYSTEMD_READY}="0" - -# Ignore loop devices that don't have any file attached -SUBSYSTEM=="block", KERNEL=="loop[0-9]*", ENV{DEVTYPE}=="disk", TEST!="loop/backing_file", ENV{SYSTEMD_READY}="0" - -# Ignore nbd devices until the PID file exists (which signals a connected device) -SUBSYSTEM=="block", KERNEL=="nbd*", ENV{DEVTYPE}=="disk", TEST!="pid", ENV{SYSTEMD_READY}="0" - -# We need a hardware independent way to identify network devices. We -# use the /sys/subsystem/ path for this. Kernel "bus" and "class" names -# should be treated as one namespace, like udev handles it. This is mostly -# just an identification string for systemd, so whether the path actually is -# accessible or not does not matter as long as it is unique and in the -# filesystem namespace. -# -# http://cgit.freedesktop.org/systemd/systemd/tree/src/libudev/libudev-enumerate.c#n955 - -SUBSYSTEM=="net", KERNEL!="lo", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/net/devices/$name" -SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_ALIAS}+="/sys/subsystem/bluetooth/devices/%k" - -SUBSYSTEM=="bluetooth", TAG+="systemd", ENV{SYSTEMD_WANTS}+="bluetooth.target" -ENV{ID_SMARTCARD_READER}=="?*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="smartcard.target" -SUBSYSTEM=="sound", KERNEL=="card*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sound.target" - -SUBSYSTEM=="printer", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target" -SUBSYSTEM=="usb", KERNEL=="lp*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target" -SUBSYSTEM=="usb", ENV{DEVTYPE}=="usb_device", ENV{ID_USB_INTERFACES}=="*:0701??:*", TAG+="systemd", ENV{SYSTEMD_WANTS}+="printer.target" - -# Apply sysctl variables to network devices (and only to those) as they appear. -ACTION=="add", SUBSYSTEM=="net", KERNEL!="lo", RUN+="/lib/systemd/systemd-sysctl --prefix=/net/ipv4/conf/$name --prefix=/net/ipv4/neigh/$name --prefix=/net/ipv6/conf/$name --prefix=/net/ipv6/neigh/$name" - -# Pull in backlight save/restore for all backlight devices and -# keyboard backlights -SUBSYSTEM=="backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@backlight:$name.service" -SUBSYSTEM=="leds", KERNEL=="*kbd_backlight", TAG+="systemd", IMPORT{builtin}="path_id", ENV{SYSTEMD_WANTS}+="systemd-backlight@leds:$name.service" - -# Pull in rfkill save/restore for all rfkill devices -SUBSYSTEM=="rfkill", ENV{SYSTEMD_RFKILL}="1", IMPORT{builtin}="path_id" -SUBSYSTEM=="misc", KERNEL=="rfkill", TAG+="systemd", ENV{SYSTEMD_WANTS}+="systemd-rfkill.socket" - -# Asynchronously mount file systems implemented by these modules as soon as they are loaded. -SUBSYSTEM=="module", KERNEL=="fuse", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-fs-fuse-connections.mount" -SUBSYSTEM=="module", KERNEL=="configfs", TAG+="systemd", ENV{SYSTEMD_WANTS}+="sys-kernel-config.mount" - -LABEL="systemd_end" diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/scsi_id b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/scsi_id deleted file mode 100755 index 9c77396e5c..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/scsi_id and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/usb_modeswitch b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/usb_modeswitch deleted file mode 100755 index f10a805b4f..0000000000 --- a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/usb_modeswitch +++ /dev/null @@ -1,76 +0,0 @@ -#!/bin/sh -# part of usb_modeswitch 2.5.0 -device_in() -{ - if [ ! -e /var/lib/usb_modeswitch/$1 ]; then - return 0 - fi - while read line - do - if [ $(expr "$line" : "$2:$3") != 0 ]; then - return 1 - fi - done >/dev/null - fi - fi - exit 0 - ;; -esac - -IFS='/' read -r p1 p2 </dev/null | /bin/grep -q upstart; then # Test if upstart is running - initctl emit --no-wait usb-modeswitch-upstart UMS_PARAM=$p2 -else - # only old distros, new udev will kill all subprocesses - exec 1<&- 2<&- 5<&- 7<&- - exec usb_modeswitch_dispatcher --switch-mode $p2 & -fi -exit 0 diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/v4l_id b/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/v4l_id deleted file mode 100755 index a7d208ec89..0000000000 Binary files a/linux/rootfs/board/rpi4_64/rootfs_overlay/lib/udev/v4l_id and /dev/null differ diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/root/cert.pem b/linux/rootfs/board/rpi4_64/rootfs_overlay/root/cert.pem new file mode 100644 index 0000000000..2c766dff08 --- /dev/null +++ b/linux/rootfs/board/rpi4_64/rootfs_overlay/root/cert.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0 +MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC +AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X +fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud +3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/ +GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv +rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh +siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O +BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2 +RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN +8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/ +0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe +JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3 +OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV +RhZvQx74NQnS6g== +-----END CERTIFICATE----- diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/root/key.pem b/linux/rootfs/board/rpi4_64/rootfs_overlay/root/key.pem new file mode 100644 index 0000000000..a5848eed9b --- /dev/null +++ b/linux/rootfs/board/rpi4_64/rootfs_overlay/root/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf +qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I +niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+ +faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx +7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ +vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj +lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R +EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l +/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx +u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/ +dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo +32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc ++JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd +RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6 +OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob +XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF +hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae +SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b +AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH +6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3 +QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG +7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj +P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9 +/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC +eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx +-----END RSA PRIVATE KEY----- diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service b/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service new file mode 100644 index 0000000000..b3c9e80924 --- /dev/null +++ b/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Serial Getty on %I +Documentation=man:agetty(8) man:systemd-getty-generator(8) +Documentation=http://0pointer.de/blog/projects/serial-console.html +BindsTo=dev-%i.device +After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target + +# If additional gettys are spawned during boot then we should make +# sure that this is synchronized before getty.target, even though +# getty.target didn't actually pull it in. +Before=getty.target +IgnoreOnIsolate=yes + +# IgnoreOnIsolate causes issues with sulogin, if someone isolates +# rescue.target or starts rescue.service from multi-user.target or +# graphical.target. +Conflicts=rescue.service +Before=rescue.service + +[Service] +# The '-o' option value tells agetty to replace 'login' arguments with an +# option to preserve environment (-p), followed by '--' for safety, and then +# the entered username. +ExecStart=-/sbin/getty -L -l /usr/bin/auto-root-login -n ttyS0 0 vt100 +Type=idle +Restart=always +UtmpIdentifier=%I +StandardInput=tty +StandardOutput=tty +TTYPath=/dev/%I +TTYReset=yes +TTYVHangup=yes +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes + +[Install] +WantedBy=getty.target + diff --git a/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service b/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service new file mode 100644 index 0000000000..5926154b3f --- /dev/null +++ b/linux/rootfs/board/rpi4_64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service @@ -0,0 +1,13 @@ +[Unit] +Description=System Logging Service + +[Service] +ExecStart=/usr/sbin/syslog-ng -F +StandardOutput=journal +StandardError=journal +Restart=on-failure + +[Install] +Alias=syslog.service +WantedBy=multi-user.target +Enabled=true diff --git a/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service b/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service new file mode 100644 index 0000000000..57437c53df --- /dev/null +++ b/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Serial Getty on %I +Documentation=man:agetty(8) man:systemd-getty-generator(8) +Documentation=http://0pointer.de/blog/projects/serial-console.html +BindsTo=dev-%i.device +After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target + +# If additional gettys are spawned during boot then we should make +# sure that this is synchronized before getty.target, even though +# getty.target didn't actually pull it in. +Before=getty.target +IgnoreOnIsolate=yes + +# IgnoreOnIsolate causes issues with sulogin, if someone isolates +# rescue.target or starts rescue.service from multi-user.target or +# graphical.target. +Conflicts=rescue.service +Before=rescue.service + +[Service] +# The '-o' option value tells agetty to replace 'login' arguments with an +# option to preserve environment (-p), followed by '--' for safety, and then +# the entered username. +ExecStart=-/sbin/getty -L -l /usr/bin/auto-root-login -n ttyAMA0 0 vt100 +Type=idle +Restart=always +UtmpIdentifier=%I +StandardInput=tty +StandardOutput=tty +TTYPath=/dev/%I +TTYReset=yes +TTYVHangup=yes +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes + +[Install] +WantedBy=getty.target + diff --git a/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service b/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service new file mode 100644 index 0000000000..78022b590f --- /dev/null +++ b/linux/rootfs/board/virt32/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service @@ -0,0 +1,12 @@ +[Unit] +Description=System Logging Service +Requires=syslog.socket + +[Service] +ExecStart=/usr/sbin/syslog-ng -n +StandardOutput=null + +[Install] +Alias=syslog.service +WantedBy=multi-user.target + diff --git a/linux/rootfs/board/virt64/rootfs_overlay/root/cert.pem b/linux/rootfs/board/virt64/rootfs_overlay/root/cert.pem new file mode 100644 index 0000000000..2c766dff08 --- /dev/null +++ b/linux/rootfs/board/virt64/rootfs_overlay/root/cert.pem @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE----- +MIICpjCCAZCgAwIBAgIESEPtjjALBgkqhkiG9w0BAQUwADAeFw0wODA2MDIxMjU0 +MzhaFw0wOTA2MDIxMjU0NDZaMAAwggEfMAsGCSqGSIb3DQEBAQOCAQ4AMIIBCQKC +AQC03TyUvK5HmUAirRp067taIEO4bibh5nqolUoUdo/LeblMQV+qnrv/RNAMTx5X +fNLZ45/kbM9geF8qY0vsPyQvP4jumzK0LOJYuIwmHaUm9vbXnYieILiwCuTgjaud +3VkZDoQ9fteIo+6we9UTpVqZpxpbLulBMh/VsvX0cPJ1VFC7rT59o9hAUlFf9jX/ +GmKdYI79MtgVx0OPBjmmSD6kicBBfmfgkO7bIGwlRtsIyMznxbHu6VuoX/eVxrTv +rmCwgEXLWRZ6ru8MQl5YfqeGXXRVwMeXU961KefbuvmEPccgCxm8FZ1C1cnDHFXh +siSgAzMBjC/b6KVhNQ4KnUdZAgMBAAGjLzAtMAwGA1UdEwEB/wQCMAAwHQYDVR0O +BBYEFJcUvpjvE5fF/yzUshkWDpdYiQh/MAsGCSqGSIb3DQEBBQOCAQEARP7eKSB2 +RNd6XjEjK0SrxtoTnxS3nw9sfcS7/qD1+XHdObtDFqGNSjGYFB3Gpx8fpQhCXdoN +8QUs3/5ZVa5yjZMQewWBgz8kNbnbH40F2y81MHITxxCe1Y+qqHWwVaYLsiOTqj2/ +0S3QjEJ9tvklmg7JX09HC4m5QRYfWBeQLD1u8ZjA1Sf1xJriomFVyRLI2VPO2bNe +JDMXWuP+8kMC7gEvUnJ7A92Y2yrhu3QI3bjPk8uSpHea19Q77tul1UVBJ5g+zpH3 +OsF5p0MyaVf09GTzcLds5nE/osTdXGUyHJapWReVmPm3Zn6gqYlnzD99z+DPIgIV +RhZvQx74NQnS6g== +-----END CERTIFICATE----- diff --git a/linux/rootfs/board/virt64/rootfs_overlay/root/key.pem b/linux/rootfs/board/virt64/rootfs_overlay/root/key.pem new file mode 100644 index 0000000000..a5848eed9b --- /dev/null +++ b/linux/rootfs/board/virt64/rootfs_overlay/root/key.pem @@ -0,0 +1,27 @@ +-----BEGIN RSA PRIVATE KEY----- +MIIEowIBAAKCAQEAtN08lLyuR5lAIq0adOu7WiBDuG4m4eZ6qJVKFHaPy3m5TEFf +qp67/0TQDE8eV3zS2eOf5GzPYHhfKmNL7D8kLz+I7psytCziWLiMJh2lJvb2152I +niC4sArk4I2rnd1ZGQ6EPX7XiKPusHvVE6VamacaWy7pQTIf1bL19HDydVRQu60+ +faPYQFJRX/Y1/xpinWCO/TLYFcdDjwY5pkg+pInAQX5n4JDu2yBsJUbbCMjM58Wx +7ulbqF/3lca0765gsIBFy1kWeq7vDEJeWH6nhl10VcDHl1PetSnn27r5hD3HIAsZ +vBWdQtXJwxxV4bIkoAMzAYwv2+ilYTUOCp1HWQIDAQABAoIBAArOQv3R7gmqDspj +lDaTFOz0C4e70QfjGMX0sWnakYnDGn6DU19iv3GnX1S072ejtgc9kcJ4e8VUO79R +EmqpdRR7k8dJr3RTUCyjzf/C+qiCzcmhCFYGN3KRHA6MeEnkvRuBogX4i5EG1k5l +/5t+YBTZBnqXKWlzQLKoUAiMLPg0eRWh+6q7H4N7kdWWBmTpako7TEqpIwuEnPGx +u3EPuTR+LN6lF55WBePbCHccUHUQaXuav18NuDkcJmCiMArK9SKb+h0RqLD6oMI/ +dKD6n8cZXeMBkK+C8U/K0sN2hFHACsu30b9XfdnljgP9v+BP8GhnB0nCB6tNBCPo +32srOwECgYEAxWh3iBT4lWqL6bZavVbnhmvtif4nHv2t2/hOs/CAq8iLAw0oWGZc ++JEZTUDMvFRlulr0kcaWra+4fN3OmJnjeuFXZq52lfMgXBIKBmoSaZpIh2aDY1Rd +RbEse7nQl9hTEPmYspiXLGtnAXW7HuWqVfFFP3ya8rUS3t4d07Hig8ECgYEA6ou6 +OHiBRTbtDqLIv8NghARc/AqwNWgEc9PelCPe5bdCOLBEyFjqKiT2MttnSSUc2Zob +XhYkHC6zN1Mlq30N0e3Q61YK9LxMdU1vsluXxNq2rfK1Scb1oOlOOtlbV3zA3VRF +hV3t1nOA9tFmUrwZi0CUMWJE/zbPAyhwWotKyZkCgYEAh0kFicPdbABdrCglXVae +SnfSjVwYkVuGd5Ze0WADvjYsVkYBHTvhgRNnRJMg+/vWz3Sf4Ps4rgUbqK8Vc20b +AU5G6H6tlCvPRGm0ZxrwTWDHTcuKRVs+pJE8C/qWoklE/AAhjluWVoGwUMbPGuiH +6Gf1bgHF6oj/Sq7rv/VLZ8ECgYBeq7ml05YyLuJutuwa4yzQ/MXfghzv4aVyb0F3 +QCdXR6o2IYgR6jnSewrZKlA9aPqFJrwHNR6sNXlnSmt5Fcf/RWO/qgJQGLUv3+rG +7kuLTNDR05azSdiZc7J89ID3Bkb+z2YkV+6JUiPq/Ei1+nDBEXb/m+/HqALU/nyj +P3gXeQKBgBusb8Rbd+KgxSA0hwY6aoRTPRt8LNvXdsB9vRcKKHUFQvxUWiUSS+L9 +/Qu1sJbrUquKOHqksV5wCnWnAKyJNJlhHuBToqQTgKXjuNmVdYSe631saiI7PHyC +eRJ6DxULPxABytJrYCRrNqmXi5TCiqR2mtfalEMOPxz8rUU8dYyx +-----END RSA PRIVATE KEY----- diff --git a/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service b/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service new file mode 100644 index 0000000000..57437c53df --- /dev/null +++ b/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/serial-getty@.service @@ -0,0 +1,48 @@ +# SPDX-License-Identifier: LGPL-2.1-or-later +# +# This file is part of systemd. +# +# systemd is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as published by +# the Free Software Foundation; either version 2.1 of the License, or +# (at your option) any later version. + +[Unit] +Description=Serial Getty on %I +Documentation=man:agetty(8) man:systemd-getty-generator(8) +Documentation=http://0pointer.de/blog/projects/serial-console.html +BindsTo=dev-%i.device +After=dev-%i.device systemd-user-sessions.service plymouth-quit-wait.service getty-pre.target + +# If additional gettys are spawned during boot then we should make +# sure that this is synchronized before getty.target, even though +# getty.target didn't actually pull it in. +Before=getty.target +IgnoreOnIsolate=yes + +# IgnoreOnIsolate causes issues with sulogin, if someone isolates +# rescue.target or starts rescue.service from multi-user.target or +# graphical.target. +Conflicts=rescue.service +Before=rescue.service + +[Service] +# The '-o' option value tells agetty to replace 'login' arguments with an +# option to preserve environment (-p), followed by '--' for safety, and then +# the entered username. +ExecStart=-/sbin/getty -L -l /usr/bin/auto-root-login -n ttyAMA0 0 vt100 +Type=idle +Restart=always +UtmpIdentifier=%I +StandardInput=tty +StandardOutput=tty +TTYPath=/dev/%I +TTYReset=yes +TTYVHangup=yes +KillMode=process +IgnoreSIGPIPE=no +SendSIGHUP=yes + +[Install] +WantedBy=getty.target + diff --git a/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service b/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service new file mode 100644 index 0000000000..e69d303058 --- /dev/null +++ b/linux/rootfs/board/virt64/rootfs_overlay/usr/lib/systemd/system/syslog-ng@.service @@ -0,0 +1,13 @@ +[Unit] +Description=System Logging Service + +[Service] +ExecStart=/usr/sbin/syslog-ng -F +StandardOutput=journal +StandardError=journal +Restart=on-failure + +[Install] +Alias=syslog.service +WantedBy=multi-user.target +Enabled=true \ No newline at end of file diff --git a/linux/rootfs/configs/rpi4_64_defconfig b/linux/rootfs/configs/rpi4_64_defconfig index 538aa0e77c..2d6254ff52 100644 --- a/linux/rootfs/configs/rpi4_64_defconfig +++ b/linux/rootfs/configs/rpi4_64_defconfig @@ -1,6 +1,6 @@ # # Automatically generated file; DO NOT EDIT. -# Buildroot -g23aa70acc9 Configuration +# Buildroot -g62c90c8898-dirty Configuration # BR2_HAVE_DOT_CONFIG=y BR2_HOST_GCC_AT_LEAST_4_9=y @@ -9,6 +9,7 @@ BR2_HOST_GCC_AT_LEAST_6=y BR2_HOST_GCC_AT_LEAST_7=y BR2_HOST_GCC_AT_LEAST_8=y BR2_HOST_GCC_AT_LEAST_9=y +BR2_NEEDS_HOST_UTF8_LOCALE=y # # Target options @@ -412,18 +413,18 @@ BR2_TARGET_GENERIC_ISSUE="SOO Agency" BR2_TARGET_GENERIC_PASSWD_SHA256=y # BR2_TARGET_GENERIC_PASSWD_SHA512 is not set BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256" -BR2_INIT_BUSYBOX=y +# BR2_INIT_BUSYBOX is not set # BR2_INIT_SYSV is not set # BR2_INIT_OPENRC is not set -# BR2_INIT_SYSTEMD is not set +BR2_INIT_SYSTEMD=y # BR2_INIT_NONE is not set -# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set -BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# +# /dev management using udev (from systemd) +# BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" # BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set -# BR2_ROOTFS_MERGED_USR is not set +BR2_ROOTFS_MERGED_USR=y # BR2_TARGET_ENABLE_ROOT_LOGIN is not set # BR2_SYSTEM_BIN_SH_BUSYBOX is not set BR2_SYSTEM_BIN_SH_BASH=y @@ -440,7 +441,9 @@ BR2_ENABLE_LOCALE_PURGE=y BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" BR2_GENERATE_LOCALE="" # BR2_SYSTEM_ENABLE_NLS is not set -# BR2_TARGET_TZ_INFO is not set +BR2_TARGET_TZ_INFO=y +BR2_TARGET_TZ_ZONELIST="default" +BR2_TARGET_LOCALTIME="Etc/UTC" BR2_ROOTFS_USERS_TABLES="" BR2_ROOTFS_OVERLAY="$(BASE_DIR)/board/common/rootfs_overlay/ $(BASE_DIR)/board/rpi4_64/rootfs_overlay/" BR2_ROOTFS_PRE_BUILD_SCRIPT="" @@ -466,9 +469,9 @@ BR2_PACKAGE_BUSYBOX_WATCHDOG=y BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD="5" BR2_PACKAGE_SKELETON=y BR2_PACKAGE_HAS_SKELETON=y -BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-systemd" BR2_PACKAGE_SKELETON_INIT_COMMON=y -BR2_PACKAGE_SKELETON_INIT_SYSV=y +BR2_PACKAGE_SKELETON_INIT_SYSTEMD=y # # Audio and video applications @@ -505,10 +508,7 @@ BR2_PACKAGE_KODI_ARCH_SUPPORTS=y # BR2_PACKAGE_MADPLAY is not set # BR2_PACKAGE_MIMIC is not set # BR2_PACKAGE_MINIMODEM is not set - -# -# miraclecast needs systemd and a glibc toolchain w/ threads and wchar -# +# BR2_PACKAGE_MIRACLECAST is not set # BR2_PACKAGE_MJPEGTOOLS is not set # BR2_PACKAGE_MODPLUGTOOLS is not set # BR2_PACKAGE_MOTION is not set @@ -974,10 +974,11 @@ BR2_PACKAGE_DBUS_PYTHON=y # # edid-decode needs a toolchain w/ C++, gcc >= 4.7 # -BR2_PACKAGE_EUDEV=y -BR2_PACKAGE_PROVIDES_UDEV="eudev" -# BR2_PACKAGE_EUDEV_RULES_GEN is not set -BR2_PACKAGE_EUDEV_ENABLE_HWDB=y +BR2_PACKAGE_PROVIDES_UDEV="systemd" + +# +# eudev needs eudev /dev management +# # BR2_PACKAGE_EVEMU is not set # BR2_PACKAGE_EVTEST is not set # BR2_PACKAGE_FAN_CTRL is not set @@ -1652,10 +1653,7 @@ BR2_PACKAGE_PYTHON_SETUPTOOLS=y # BR2_PACKAGE_PYTHON_SQLALCHEMY is not set # BR2_PACKAGE_PYTHON_SQLITESCHEMA is not set # BR2_PACKAGE_PYTHON_SQLPARSE is not set - -# -# python-systemd needs systemd -# +# BR2_PACKAGE_PYTHON_SYSTEMD is not set # BR2_PACKAGE_PYTHON_TABLEDATA is not set # BR2_PACKAGE_PYTHON_TEMPORA is not set # BR2_PACKAGE_PYTHON_TERMCOLOR is not set @@ -2309,7 +2307,7 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBGSASL is not set # BR2_PACKAGE_LIBHTP is not set # BR2_PACKAGE_LIBHTTPPARSER is not set -# BR2_PACKAGE_LIBHTTPSERVER is not set +BR2_PACKAGE_LIBHTTPSERVER=y # BR2_PACKAGE_LIBIDN is not set # BR2_PACKAGE_LIBIDN2 is not set # BR2_PACKAGE_LIBISCSI is not set @@ -2318,7 +2316,8 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBMAXMINDDB is not set # BR2_PACKAGE_LIBMBUS is not set # BR2_PACKAGE_LIBMEMCACHED is not set -# BR2_PACKAGE_LIBMICROHTTPD is not set +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMICROHTTPD_SSL=y # BR2_PACKAGE_LIBMINIUPNPC is not set # BR2_PACKAGE_LIBMNL is not set # BR2_PACKAGE_LIBMODBUS is not set @@ -2382,7 +2381,6 @@ BR2_PACKAGE_LIBNL=y # BR2_PACKAGE_NETOPEER2 is not set # BR2_PACKAGE_NGHTTP2 is not set # BR2_PACKAGE_NORM is not set -# BR2_PACKAGE_NSS_MYHOSTNAME is not set # BR2_PACKAGE_NSS_PAM_LDAPD is not set # BR2_PACKAGE_OMNIORB is not set # BR2_PACKAGE_OPEN62541 is not set @@ -2472,7 +2470,8 @@ BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBBSD is not set # BR2_PACKAGE_LIBBYTESIZE is not set -# BR2_PACKAGE_LIBCAP is not set +BR2_PACKAGE_LIBCAP=y +# BR2_PACKAGE_LIBCAP_TOOLS is not set # BR2_PACKAGE_LIBCAP_NG is not set # BR2_PACKAGE_LIBCGROUP is not set # BR2_PACKAGE_LIBCLC is not set @@ -2564,6 +2563,7 @@ BR2_PACKAGE_PROTOBUF_ARCH_SUPPORTS=y # BR2_PACKAGE_SKALIBS is not set # BR2_PACKAGE_SPHINXBASE is not set # BR2_PACKAGE_TINYCBOR is not set +BR2_PACKAGE_TZDATA=y # BR2_PACKAGE_UVW is not set # BR2_PACKAGE_XAPIAN is not set @@ -2859,6 +2859,7 @@ BR2_PACKAGE_NETWORK_MANAGER=y # BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER is not set # BR2_PACKAGE_NETWORK_MANAGER_PPPD is not set # BR2_PACKAGE_NETWORK_MANAGER_OVS is not set +# BR2_PACKAGE_NETWORKD_DISPATCHER is not set # BR2_PACKAGE_NFACCT is not set # BR2_PACKAGE_NFTABLES is not set # BR2_PACKAGE_NGINX is not set @@ -3087,7 +3088,6 @@ BR2_PACKAGE_OPTEE_CLIENT_SUPP_PLUGINS=y # BR2_PACKAGE_SELINUX_PYTHON is not set # BR2_PACKAGE_SEMODULE_UTILS is not set # BR2_PACKAGE_SETOOLS is not set -BR2_PACKAGE_URANDOM_SCRIPTS=y # # Shell and utilities @@ -3152,7 +3152,6 @@ BR2_PACKAGE_AUDIT_ARCH_SUPPORTS=y # BR2_PACKAGE_AUDIT is not set # BR2_PACKAGE_BALENA_ENGINE is not set # BR2_PACKAGE_BUBBLEWRAP is not set -# BR2_PACKAGE_CGROUPFS_MOUNT is not set # BR2_PACKAGE_CIRCUS is not set # BR2_PACKAGE_CONTAINERD is not set BR2_PACKAGE_COREUTILS=y @@ -3181,7 +3180,6 @@ BR2_PACKAGE_EFIVAR_ARCH_SUPPORTS=y # BR2_PACKAGE_GKRELLM is not set # BR2_PACKAGE_HTOP is not set # BR2_PACKAGE_IBM_SW_TPM2 is not set -BR2_PACKAGE_INITSCRIPTS=y # BR2_PACKAGE_IOTOP is not set # BR2_PACKAGE_IPRUTILS is not set # BR2_PACKAGE_IRQBALANCE is not set @@ -3191,7 +3189,7 @@ BR2_PACKAGE_INITSCRIPTS=y # # BR2_PACKAGE_KEYUTILS is not set BR2_PACKAGE_KMOD=y -# BR2_PACKAGE_KMOD_TOOLS is not set +BR2_PACKAGE_KMOD_TOOLS=y # BR2_PACKAGE_KVMTOOL is not set # BR2_PACKAGE_LIBOSTREE is not set BR2_PACKAGE_LIBVIRT_ARCH_SUPPORTS=y @@ -3232,14 +3230,8 @@ BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y # BR2_PACKAGE_S6_RC is not set # BR2_PACKAGE_SCRUB is not set # BR2_PACKAGE_SCRYPT is not set - -# -# sdbus-c++ needs systemd and a toolchain w/ C++, gcc >= 7 -# - -# -# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 -# +# BR2_PACKAGE_SDBUS_CPP is not set +# BR2_PACKAGE_SDBUSPLUS is not set # BR2_PACKAGE_SEATD is not set # BR2_PACKAGE_SMACK is not set # BR2_PACKAGE_START_STOP_DAEMON is not set @@ -3248,7 +3240,44 @@ BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y # BR2_PACKAGE_SYSKLOGD is not set BR2_PACKAGE_SYSLOG_NG=y BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD=y +# BR2_PACKAGE_SYSTEMD_INITRD is not set +# BR2_PACKAGE_SYSTEMD_KERNELINSTALL is not set +# BR2_PACKAGE_SYSTEMD_ANALYZE is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE is not set +# BR2_PACKAGE_SYSTEMD_BACKLIGHT is not set +# BR2_PACKAGE_SYSTEMD_BINFMT is not set +# BR2_PACKAGE_SYSTEMD_COREDUMP is not set +BR2_PACKAGE_SYSTEMD_PSTORE=y +# BR2_PACKAGE_SYSTEMD_FIRSTBOOT is not set +# BR2_PACKAGE_SYSTEMD_HIBERNATE is not set +# BR2_PACKAGE_SYSTEMD_HOMED is not set +BR2_PACKAGE_SYSTEMD_HOSTNAMED=y +BR2_PACKAGE_SYSTEMD_HWDB=y +# BR2_PACKAGE_SYSTEMD_IMPORTD is not set +# BR2_PACKAGE_SYSTEMD_CATALOGDB is not set +# BR2_PACKAGE_SYSTEMD_LOCALED is not set +# BR2_PACKAGE_SYSTEMD_LOGIND is not set +# BR2_PACKAGE_SYSTEMD_MACHINED is not set +BR2_PACKAGE_SYSTEMD_MYHOSTNAME=y +# BR2_PACKAGE_SYSTEMD_NETWORKD is not set +# BR2_PACKAGE_SYSTEMD_OOMD is not set +# BR2_PACKAGE_SYSTEMD_POLKIT is not set +# BR2_PACKAGE_SYSTEMD_PORTABLED is not set +# BR2_PACKAGE_SYSTEMD_QUOTACHECK is not set +# BR2_PACKAGE_SYSTEMD_RANDOMSEED is not set +# BR2_PACKAGE_SYSTEMD_REPART is not set +BR2_PACKAGE_SYSTEMD_RESOLVED=y +# BR2_PACKAGE_SYSTEMD_RFKILL is not set +# BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT is not set +# BR2_PACKAGE_SYSTEMD_SYSEXT is not set +# BR2_PACKAGE_SYSTEMD_SYSUSERS is not set +BR2_PACKAGE_SYSTEMD_TIMEDATED=y +BR2_PACKAGE_SYSTEMD_TIMESYNCD=y +# BR2_PACKAGE_SYSTEMD_USERDB is not set +BR2_PACKAGE_SYSTEMD_VCONSOLE=y BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_SYSTEMD_BOOTCHART is not set # BR2_PACKAGE_TAR is not set # BR2_PACKAGE_TPM_TOOLS is not set # BR2_PACKAGE_TPM2_ABRMD is not set @@ -3263,7 +3292,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y # BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS is not set BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_BINARIES is not set -# BR2_PACKAGE_UTIL_LINUX_AGETTY is not set +BR2_PACKAGE_UTIL_LINUX_AGETTY=y # BR2_PACKAGE_UTIL_LINUX_BFS is not set # BR2_PACKAGE_UTIL_LINUX_CAL is not set # BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH is not set @@ -3272,7 +3301,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_EJECT is not set # BR2_PACKAGE_UTIL_LINUX_FALLOCATE is not set # BR2_PACKAGE_UTIL_LINUX_FDFORMAT is not set -# BR2_PACKAGE_UTIL_LINUX_FSCK is not set +BR2_PACKAGE_UTIL_LINUX_FSCK=y # BR2_PACKAGE_UTIL_LINUX_HARDLINK is not set # BR2_PACKAGE_UTIL_LINUX_HWCLOCK is not set # BR2_PACKAGE_UTIL_LINUX_IPCRM is not set @@ -3288,7 +3317,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_MESG is not set # BR2_PACKAGE_UTIL_LINUX_MINIX is not set # BR2_PACKAGE_UTIL_LINUX_MORE is not set -# BR2_PACKAGE_UTIL_LINUX_MOUNT is not set +BR2_PACKAGE_UTIL_LINUX_MOUNT=y # BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT is not set # BR2_PACKAGE_UTIL_LINUX_NEWGRP is not set # BR2_PACKAGE_UTIL_LINUX_NOLOGIN is not set @@ -3334,7 +3363,8 @@ BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=y # BR2_PACKAGE_MC is not set # BR2_PACKAGE_MG is not set # BR2_PACKAGE_MOST is not set -# BR2_PACKAGE_NANO is not set +BR2_PACKAGE_NANO=y +BR2_PACKAGE_NANO_TINY=y # BR2_PACKAGE_UEMACS is not set # BR2_PACKAGE_VIM is not set @@ -3417,7 +3447,6 @@ BR2_PACKAGE_SHIM_ARCH_SUPPORTS=y # BR2_PACKAGE_HOST_E2TOOLS is not set # BR2_PACKAGE_HOST_ENVIRONMENT_SETUP is not set # BR2_PACKAGE_HOST_EROFS_UTILS is not set -BR2_PACKAGE_HOST_EUDEV=y # BR2_PACKAGE_HOST_EXFATPROGS is not set # BR2_PACKAGE_HOST_F2FS_TOOLS is not set # BR2_PACKAGE_HOST_FAKETIME is not set @@ -3487,6 +3516,7 @@ BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" # BR2_PACKAGE_HOST_SLOCI_IMAGE is not set # BR2_PACKAGE_HOST_SQUASHFS is not set # BR2_PACKAGE_HOST_SWIG is not set +BR2_PACKAGE_HOST_SYSTEMD=y # BR2_PACKAGE_HOST_UBOOT_TOOLS is not set # BR2_PACKAGE_HOST_UTIL_LINUX is not set # BR2_PACKAGE_HOST_UTP_COM is not set diff --git a/linux/rootfs/configs/virt32_defconfig b/linux/rootfs/configs/virt32_defconfig index 007f1d2719..44bb07c2e2 100644 --- a/linux/rootfs/configs/virt32_defconfig +++ b/linux/rootfs/configs/virt32_defconfig @@ -467,18 +467,18 @@ BR2_TARGET_GENERIC_ISSUE="SOO Agency" BR2_TARGET_GENERIC_PASSWD_SHA256=y # BR2_TARGET_GENERIC_PASSWD_SHA512 is not set BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256" -BR2_INIT_BUSYBOX=y +# BR2_INIT_BUSYBOX is not set # BR2_INIT_SYSV is not set # BR2_INIT_OPENRC is not set -# BR2_INIT_SYSTEMD is not set +BR2_INIT_SYSTEMD=y # BR2_INIT_NONE is not set -# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set -BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# +# /dev management using udev (from systemd) +# BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" # BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set -# BR2_ROOTFS_MERGED_USR is not set +BR2_ROOTFS_MERGED_USR=y # BR2_TARGET_ENABLE_ROOT_LOGIN is not set # BR2_SYSTEM_BIN_SH_BUSYBOX is not set BR2_SYSTEM_BIN_SH_BASH=y @@ -495,7 +495,9 @@ BR2_ENABLE_LOCALE_PURGE=y BR2_ENABLE_LOCALE_WHITELIST="C en_US de fr" BR2_GENERATE_LOCALE="" # BR2_SYSTEM_ENABLE_NLS is not set -# BR2_TARGET_TZ_INFO is not set +BR2_TARGET_TZ_INFO=y +BR2_TARGET_TZ_ZONELIST="default" +BR2_TARGET_LOCALTIME="Etc/UTC" BR2_ROOTFS_USERS_TABLES="" BR2_ROOTFS_OVERLAY="$(BASE_DIR)/board/common/rootfs_overlay/ $(BASE_DIR)/board/virt32/rootfs_overlay/" BR2_ROOTFS_PRE_BUILD_SCRIPT="" @@ -521,9 +523,9 @@ BR2_PACKAGE_BUSYBOX_WATCHDOG=y BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD="5" BR2_PACKAGE_SKELETON=y BR2_PACKAGE_HAS_SKELETON=y -BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-systemd" BR2_PACKAGE_SKELETON_INIT_COMMON=y -BR2_PACKAGE_SKELETON_INIT_SYSV=y +BR2_PACKAGE_SKELETON_INIT_SYSTEMD=y # # Audio and video applications @@ -560,10 +562,7 @@ BR2_PACKAGE_KODI_ARCH_SUPPORTS=y # BR2_PACKAGE_MADPLAY is not set # BR2_PACKAGE_MIMIC is not set # BR2_PACKAGE_MINIMODEM is not set - -# -# miraclecast needs systemd and a glibc toolchain w/ threads and wchar -# +# BR2_PACKAGE_MIRACLECAST is not set # BR2_PACKAGE_MJPEGTOOLS is not set # BR2_PACKAGE_MODPLUGTOOLS is not set # BR2_PACKAGE_MOTION is not set @@ -1036,10 +1035,11 @@ BR2_PACKAGE_DBUS_PYTHON=y # # edid-decode needs a toolchain w/ C++, gcc >= 4.7 # -BR2_PACKAGE_EUDEV=y -BR2_PACKAGE_PROVIDES_UDEV="eudev" -# BR2_PACKAGE_EUDEV_RULES_GEN is not set -BR2_PACKAGE_EUDEV_ENABLE_HWDB=y +BR2_PACKAGE_PROVIDES_UDEV="systemd" + +# +# eudev needs eudev /dev management +# # BR2_PACKAGE_EVEMU is not set # BR2_PACKAGE_EVTEST is not set # BR2_PACKAGE_FAN_CTRL is not set @@ -1626,10 +1626,7 @@ BR2_PACKAGE_PYTHON_SETUPTOOLS=y # BR2_PACKAGE_PYTHON_SQLALCHEMY is not set # BR2_PACKAGE_PYTHON_SQLITESCHEMA is not set # BR2_PACKAGE_PYTHON_SQLPARSE is not set - -# -# python-systemd needs systemd -# +# BR2_PACKAGE_PYTHON_SYSTEMD is not set # BR2_PACKAGE_PYTHON_TABLEDATA is not set # BR2_PACKAGE_PYTHON_TEMPORA is not set # BR2_PACKAGE_PYTHON_TERMCOLOR is not set @@ -2284,7 +2281,7 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBGSASL is not set # BR2_PACKAGE_LIBHTP is not set # BR2_PACKAGE_LIBHTTPPARSER is not set -# BR2_PACKAGE_LIBHTTPSERVER is not set +BR2_PACKAGE_LIBHTTPSERVER=y # BR2_PACKAGE_LIBIDN is not set # BR2_PACKAGE_LIBIDN2 is not set # BR2_PACKAGE_LIBISCSI is not set @@ -2293,7 +2290,8 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBMAXMINDDB is not set # BR2_PACKAGE_LIBMBUS is not set # BR2_PACKAGE_LIBMEMCACHED is not set -# BR2_PACKAGE_LIBMICROHTTPD is not set +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMICROHTTPD_SSL=y # BR2_PACKAGE_LIBMINIUPNPC is not set # BR2_PACKAGE_LIBMNL is not set # BR2_PACKAGE_LIBMODBUS is not set @@ -2447,7 +2445,8 @@ BR2_PACKAGE_LIBATOMIC_OPS_ARCH_SUPPORTS=y BR2_PACKAGE_LIBBSD_ARCH_SUPPORTS=y # BR2_PACKAGE_LIBBSD is not set # BR2_PACKAGE_LIBBYTESIZE is not set -# BR2_PACKAGE_LIBCAP is not set +BR2_PACKAGE_LIBCAP=y +# BR2_PACKAGE_LIBCAP_TOOLS is not set # BR2_PACKAGE_LIBCAP_NG is not set # BR2_PACKAGE_LIBCGROUP is not set # BR2_PACKAGE_LIBCLC is not set @@ -2747,8 +2746,7 @@ BR2_PACKAGE_HAPROXY_ARCH_SUPPORTS=y # BR2_PACKAGE_IFMETRIC is not set # BR2_PACKAGE_IFPLUGD is not set # BR2_PACKAGE_IFTOP is not set -# BR2_PACKAGE_IFUPDOWN is not set -BR2_PACKAGE_IFUPDOWN_SCRIPTS=y +BR2_PACKAGE_IFUPDOWN=y # BR2_PACKAGE_IGD2_FOR_LINUX is not set # @@ -2824,6 +2822,7 @@ BR2_PACKAGE_NETWORK_MANAGER=y # BR2_PACKAGE_NETWORK_MANAGER_MODEM_MANAGER is not set # BR2_PACKAGE_NETWORK_MANAGER_PPPD is not set # BR2_PACKAGE_NETWORK_MANAGER_OVS is not set +# BR2_PACKAGE_NETWORKD_DISPATCHER is not set # BR2_PACKAGE_NFACCT is not set # BR2_PACKAGE_NFTABLES is not set # BR2_PACKAGE_NGINX is not set @@ -3152,7 +3151,7 @@ BR2_PACKAGE_INITSCRIPTS=y # BR2_PACKAGE_IRQBALANCE is not set # BR2_PACKAGE_KEYUTILS is not set BR2_PACKAGE_KMOD=y -# BR2_PACKAGE_KMOD_TOOLS is not set +BR2_PACKAGE_KMOD_TOOLS=y # BR2_PACKAGE_KVMTOOL is not set # BR2_PACKAGE_LIBOSTREE is not set # BR2_PACKAGE_LXC is not set @@ -3191,14 +3190,8 @@ BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y # BR2_PACKAGE_S6_RC is not set # BR2_PACKAGE_SCRUB is not set # BR2_PACKAGE_SCRYPT is not set - -# -# sdbus-c++ needs systemd and a toolchain w/ C++, gcc >= 7 -# - -# -# sdbusplus needs systemd and a toolchain w/ C++, gcc >= 7 -# +# BR2_PACKAGE_SDBUS_CPP is not set +# BR2_PACKAGE_SDBUSPLUS is not set # BR2_PACKAGE_SEATD is not set # BR2_PACKAGE_SMACK is not set # BR2_PACKAGE_START_STOP_DAEMON is not set @@ -3207,7 +3200,44 @@ BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y # BR2_PACKAGE_SYSKLOGD is not set BR2_PACKAGE_SYSLOG_NG=y BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD=y +# BR2_PACKAGE_SYSTEMD_INITRD is not set +# BR2_PACKAGE_SYSTEMD_KERNELINSTALL is not set +# BR2_PACKAGE_SYSTEMD_ANALYZE is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE is not set +# BR2_PACKAGE_SYSTEMD_BACKLIGHT is not set +# BR2_PACKAGE_SYSTEMD_BINFMT is not set +# BR2_PACKAGE_SYSTEMD_COREDUMP is not set +BR2_PACKAGE_SYSTEMD_PSTORE=y +# BR2_PACKAGE_SYSTEMD_FIRSTBOOT is not set +# BR2_PACKAGE_SYSTEMD_HIBERNATE is not set +# BR2_PACKAGE_SYSTEMD_HOMED is not set +BR2_PACKAGE_SYSTEMD_HOSTNAMED=y +BR2_PACKAGE_SYSTEMD_HWDB=y +# BR2_PACKAGE_SYSTEMD_IMPORTD is not set +# BR2_PACKAGE_SYSTEMD_CATALOGDB is not set +# BR2_PACKAGE_SYSTEMD_LOCALED is not set +# BR2_PACKAGE_SYSTEMD_LOGIND is not set +# BR2_PACKAGE_SYSTEMD_MACHINED is not set +BR2_PACKAGE_SYSTEMD_MYHOSTNAME=y +BR2_PACKAGE_SYSTEMD_NETWORKD=y +# BR2_PACKAGE_SYSTEMD_OOMD is not set +# BR2_PACKAGE_SYSTEMD_POLKIT is not set +# BR2_PACKAGE_SYSTEMD_PORTABLED is not set +# BR2_PACKAGE_SYSTEMD_QUOTACHECK is not set +# BR2_PACKAGE_SYSTEMD_RANDOMSEED is not set +# BR2_PACKAGE_SYSTEMD_REPART is not set +BR2_PACKAGE_SYSTEMD_RESOLVED=y +# BR2_PACKAGE_SYSTEMD_RFKILL is not set +# BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT is not set +# BR2_PACKAGE_SYSTEMD_SYSEXT is not set +# BR2_PACKAGE_SYSTEMD_SYSUSERS is not set +BR2_PACKAGE_SYSTEMD_TIMEDATED=y +BR2_PACKAGE_SYSTEMD_TIMESYNCD=y +# BR2_PACKAGE_SYSTEMD_USERDB is not set +BR2_PACKAGE_SYSTEMD_VCONSOLE=y BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y +# BR2_PACKAGE_SYSTEMD_BOOTCHART is not set # BR2_PACKAGE_TAR is not set # BR2_PACKAGE_TPM_TOOLS is not set # BR2_PACKAGE_TPM2_ABRMD is not set @@ -3222,7 +3252,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBMOUNT=y # BR2_PACKAGE_UTIL_LINUX_LIBSMARTCOLS is not set BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_BINARIES is not set -# BR2_PACKAGE_UTIL_LINUX_AGETTY is not set +BR2_PACKAGE_UTIL_LINUX_AGETTY=y # BR2_PACKAGE_UTIL_LINUX_BFS is not set # BR2_PACKAGE_UTIL_LINUX_CAL is not set # BR2_PACKAGE_UTIL_LINUX_CHFN_CHSH is not set @@ -3231,7 +3261,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_EJECT is not set # BR2_PACKAGE_UTIL_LINUX_FALLOCATE is not set # BR2_PACKAGE_UTIL_LINUX_FDFORMAT is not set -# BR2_PACKAGE_UTIL_LINUX_FSCK is not set +BR2_PACKAGE_UTIL_LINUX_FSCK=y # BR2_PACKAGE_UTIL_LINUX_HARDLINK is not set # BR2_PACKAGE_UTIL_LINUX_HWCLOCK is not set # BR2_PACKAGE_UTIL_LINUX_IPCRM is not set @@ -3247,7 +3277,7 @@ BR2_PACKAGE_UTIL_LINUX_LIBUUID=y # BR2_PACKAGE_UTIL_LINUX_MESG is not set # BR2_PACKAGE_UTIL_LINUX_MINIX is not set # BR2_PACKAGE_UTIL_LINUX_MORE is not set -# BR2_PACKAGE_UTIL_LINUX_MOUNT is not set +BR2_PACKAGE_UTIL_LINUX_MOUNT=y # BR2_PACKAGE_UTIL_LINUX_MOUNTPOINT is not set # BR2_PACKAGE_UTIL_LINUX_NEWGRP is not set # BR2_PACKAGE_UTIL_LINUX_NOLOGIN is not set @@ -3296,7 +3326,8 @@ BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=y # BR2_PACKAGE_MC is not set # BR2_PACKAGE_MG is not set # BR2_PACKAGE_MOST is not set -# BR2_PACKAGE_NANO is not set +BR2_PACKAGE_NANO=y +BR2_PACKAGE_NANO_TINY=y # BR2_PACKAGE_UEMACS is not set # BR2_PACKAGE_VIM is not set @@ -3451,6 +3482,7 @@ BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" # BR2_PACKAGE_HOST_SQUASHFS is not set # BR2_PACKAGE_HOST_SUNXI_TOOLS is not set # BR2_PACKAGE_HOST_SWIG is not set +BR2_PACKAGE_HOST_SYSTEMD=y # BR2_PACKAGE_HOST_TEGRARCM is not set BR2_PACKAGE_HOST_TI_CGT_PRU_ARCH_SUPPORTS=y # BR2_PACKAGE_HOST_TI_CGT_PRU is not set diff --git a/linux/rootfs/configs/virt64_defconfig b/linux/rootfs/configs/virt64_defconfig index 11d097ad50..ac2a19d129 100644 --- a/linux/rootfs/configs/virt64_defconfig +++ b/linux/rootfs/configs/virt64_defconfig @@ -412,15 +412,15 @@ BR2_TARGET_GENERIC_ISSUE="SOO Agency" BR2_TARGET_GENERIC_PASSWD_SHA256=y # BR2_TARGET_GENERIC_PASSWD_SHA512 is not set BR2_TARGET_GENERIC_PASSWD_METHOD="sha-256" -BR2_INIT_BUSYBOX=y +# BR2_INIT_BUSYBOX is not set # BR2_INIT_SYSV is not set # BR2_INIT_OPENRC is not set -# BR2_INIT_SYSTEMD is not set +BR2_INIT_SYSTEMD=y # BR2_INIT_NONE is not set -# BR2_ROOTFS_DEVICE_CREATION_STATIC is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_DEVTMPFS is not set -# BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_MDEV is not set -BR2_ROOTFS_DEVICE_CREATION_DYNAMIC_EUDEV=y + +# +# /dev management using udev (from systemd) +# BR2_ROOTFS_DEVICE_TABLE="system/device_table.txt" # BR2_ROOTFS_DEVICE_TABLE_SUPPORTS_EXTENDED_ATTRIBUTES is not set # BR2_ROOTFS_MERGED_USR is not set @@ -466,9 +466,9 @@ BR2_PACKAGE_BUSYBOX_WATCHDOG=y BR2_PACKAGE_BUSYBOX_WATCHDOG_PERIOD="5" BR2_PACKAGE_SKELETON=y BR2_PACKAGE_HAS_SKELETON=y -BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-sysv" +BR2_PACKAGE_PROVIDES_SKELETON="skeleton-init-systemd" BR2_PACKAGE_SKELETON_INIT_COMMON=y -BR2_PACKAGE_SKELETON_INIT_SYSV=y +BR2_PACKAGE_SKELETON_INIT_SYSTEMD=y # # Audio and video applications @@ -974,10 +974,11 @@ BR2_PACKAGE_DBUS_PYTHON=y # # edid-decode needs a toolchain w/ C++, gcc >= 4.7 # -BR2_PACKAGE_EUDEV=y -BR2_PACKAGE_PROVIDES_UDEV="eudev" -# BR2_PACKAGE_EUDEV_RULES_GEN is not set -BR2_PACKAGE_EUDEV_ENABLE_HWDB=y +BR2_PACKAGE_PROVIDES_UDEV="systemd" + +# +# eudev needs eudev /dev management +# # BR2_PACKAGE_EVEMU is not set # BR2_PACKAGE_EVTEST is not set # BR2_PACKAGE_FAN_CTRL is not set @@ -1529,10 +1530,7 @@ BR2_PACKAGE_PYTHON_SETUPTOOLS=y # BR2_PACKAGE_PYTHON_SQLALCHEMY is not set # BR2_PACKAGE_PYTHON_SQLITESCHEMA is not set # BR2_PACKAGE_PYTHON_SQLPARSE is not set - -# -# python-systemd needs systemd -# +# BR2_PACKAGE_PYTHON_SYSTEMD is not set # BR2_PACKAGE_PYTHON_TABLEDATA is not set # BR2_PACKAGE_PYTHON_TEMPORA is not set # BR2_PACKAGE_PYTHON_TERMCOLOR is not set @@ -2184,7 +2182,7 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBGSASL is not set # BR2_PACKAGE_LIBHTP is not set # BR2_PACKAGE_LIBHTTPPARSER is not set -# BR2_PACKAGE_LIBHTTPSERVER is not set +BR2_PACKAGE_LIBHTTPSERVER=y # BR2_PACKAGE_LIBIDN is not set # BR2_PACKAGE_LIBIDN2 is not set # BR2_PACKAGE_LIBISCSI is not set @@ -2193,7 +2191,8 @@ BR2_PACKAGE_LIBCURL_TLS_NONE=y # BR2_PACKAGE_LIBMAXMINDDB is not set # BR2_PACKAGE_LIBMBUS is not set # BR2_PACKAGE_LIBMEMCACHED is not set -# BR2_PACKAGE_LIBMICROHTTPD is not set +BR2_PACKAGE_LIBMICROHTTPD=y +BR2_PACKAGE_LIBMICROHTTPD_SSL=y # BR2_PACKAGE_LIBMINIUPNPC is not set # BR2_PACKAGE_LIBMNL is not set # BR2_PACKAGE_LIBMODBUS is not set @@ -3122,6 +3121,42 @@ BR2_PACKAGE_MAKEDUMPFILE_ARCH_SUPPORTS=y # BR2_PACKAGE_SYSKLOGD is not set BR2_PACKAGE_SYSLOG_NG=y BR2_PACKAGE_SYSTEMD_ARCH_SUPPORTS=y +BR2_PACKAGE_SYSTEMD=y +# BR2_PACKAGE_SYSTEMD_INITRD is not set +# BR2_PACKAGE_SYSTEMD_KERNELINSTALL is not set +# BR2_PACKAGE_SYSTEMD_ANALYZE is not set +# BR2_PACKAGE_SYSTEMD_JOURNAL_REMOTE is not set +# BR2_PACKAGE_SYSTEMD_BACKLIGHT is not set +# BR2_PACKAGE_SYSTEMD_BINFMT is not set +# BR2_PACKAGE_SYSTEMD_COREDUMP is not set +BR2_PACKAGE_SYSTEMD_PSTORE=y +# BR2_PACKAGE_SYSTEMD_FIRSTBOOT is not set +# BR2_PACKAGE_SYSTEMD_HIBERNATE is not set +# BR2_PACKAGE_SYSTEMD_HOMED is not set +BR2_PACKAGE_SYSTEMD_HOSTNAMED=y +BR2_PACKAGE_SYSTEMD_HWDB=y +# BR2_PACKAGE_SYSTEMD_IMPORTD is not set +# BR2_PACKAGE_SYSTEMD_CATALOGDB is not set +# BR2_PACKAGE_SYSTEMD_LOCALED is not set +# BR2_PACKAGE_SYSTEMD_LOGIND is not set +# BR2_PACKAGE_SYSTEMD_MACHINED is not set +BR2_PACKAGE_SYSTEMD_MYHOSTNAME=y +# BR2_PACKAGE_SYSTEMD_NETWORKD is not set +# BR2_PACKAGE_SYSTEMD_OOMD is not set +# BR2_PACKAGE_SYSTEMD_POLKIT is not set +# BR2_PACKAGE_SYSTEMD_PORTABLED is not set +# BR2_PACKAGE_SYSTEMD_QUOTACHECK is not set +# BR2_PACKAGE_SYSTEMD_RANDOMSEED is not set +# BR2_PACKAGE_SYSTEMD_REPART is not set +BR2_PACKAGE_SYSTEMD_RESOLVED=y +# BR2_PACKAGE_SYSTEMD_RFKILL is not set +# BR2_PACKAGE_SYSTEMD_SMACK_SUPPORT is not set +# BR2_PACKAGE_SYSTEMD_SYSEXT is not set +# BR2_PACKAGE_SYSTEMD_SYSUSERS is not set +BR2_PACKAGE_SYSTEMD_TIMEDATED=y +BR2_PACKAGE_SYSTEMD_TIMESYNCD=y +# BR2_PACKAGE_SYSTEMD_USERDB is not set +BR2_PACKAGE_SYSTEMD_VCONSOLE=y BR2_PACKAGE_SYSTEMD_BOOTCHART_ARCH_SUPPORTS=y # BR2_PACKAGE_TAR is not set # BR2_PACKAGE_TPM_TOOLS is not set @@ -3208,7 +3243,8 @@ BR2_PACKAGE_XVISOR_ARCH_SUPPORTS=y # BR2_PACKAGE_MC is not set # BR2_PACKAGE_MG is not set # BR2_PACKAGE_MOST is not set -# BR2_PACKAGE_NANO is not set +BR2_PACKAGE_NANO=y +# BR2_PACKAGE_NANO_TINY is not set # BR2_PACKAGE_UEMACS is not set # BR2_PACKAGE_VIM is not set @@ -3361,6 +3397,7 @@ BR2_PACKAGE_PROVIDES_HOST_RUSTC="host-rust-bin" # BR2_PACKAGE_HOST_SLOCI_IMAGE is not set # BR2_PACKAGE_HOST_SQUASHFS is not set # BR2_PACKAGE_HOST_SWIG is not set +BR2_PACKAGE_HOST_SYSTEMD=y # BR2_PACKAGE_HOST_UBOOT_TOOLS is not set # BR2_PACKAGE_HOST_UTIL_LINUX is not set # BR2_PACKAGE_HOST_UTP_COM is not set diff --git a/linux/usr/CMakeLists.txt b/linux/usr/CMakeLists.txt index 4531f7b72a..d522a9f0e0 100644 --- a/linux/usr/CMakeLists.txt +++ b/linux/usr/CMakeLists.txt @@ -4,7 +4,7 @@ cmake_minimum_required(VERSION 3.10) -project(agency-usr LANGUAGES C) +project(agency-usr LANGUAGES C CXX) option(WITH_LED_ACTIVITIES "LED activities during migration" OFF) @@ -23,9 +23,12 @@ set(CMAKE_C_FLAGS_RELEASE "-Wall -Wstrict-prototypes -O2 -fomit-frame-pointer -s add_subdirectory(core) add_subdirectory(dcm) add_subdirectory(frozen) -add_subdirectory(mqtt_iuoc) +# EMISO - no MKTT +#add_subdirectory(mqtt_iuoc) add_subdirectory(apps) add_subdirectory(lib) add_subdirectory(wago_client) +# EMISO +add_subdirectory(emiso_engine) diff --git a/linux/usr/build.sh b/linux/usr/build.sh index 1fb946367a..02fc0af36f 100755 --- a/linux/usr/build.sh +++ b/linux/usr/build.sh @@ -65,9 +65,9 @@ else NRPROC=$((`cat /proc/cpuinfo | awk '/^processor/{print $3}' | wc -l` + 1)) fi if [ $verbose == y ]; then - make VERBOSE=1 -j1 + make install VERBOSE=1 -j1 else - make -j$NRPROC + make install -j$NRPROC fi cd - diff --git a/linux/usr/deploy.sh b/linux/usr/deploy.sh index a6276f0d54..1dc495b5a1 100755 --- a/linux/usr/deploy.sh +++ b/linux/usr/deploy.sh @@ -1,11 +1,29 @@ #!/bin/bash +SCRIPT_PATH="$( cd "$(dirname "$0")" >/dev/null 2>&1 ; pwd -P )" +BUILD_DIR=$SCRIPT_PATH/build + +# Create and initialize the associative array +declare -A install_paths=( + ["bin"]="fs/usr/local/bin/" + ["root"]="fs/root/" +) + # Deploy usr apps into the agency partition (second partition) echo Deploying usr apps into the agency partition... cd ../../filesystem ./mount.sh 2 sudo cp -r ../linux/usr/build/deploy/* fs/root/ + +# Loop over installation paths +for folder in "${!install_paths[@]}"; do + target_path=${install_paths[$folder]} + + sudo mkdir -p $target_path + sudo cp -r $BUILD_DIR/$folder/* $target_path >/dev/null 2>&1 +done + sleep 1 ./umount.sh diff --git a/linux/usr/emiso_engine/CMakeLists.txt b/linux/usr/emiso_engine/CMakeLists.txt new file mode 100644 index 0000000000..c056d4cc76 --- /dev/null +++ b/linux/usr/emiso_engine/CMakeLists.txt @@ -0,0 +1,24 @@ +project(emiso_engine LANGUAGES C CXX) + +set(CMAKE_CXX_STANDARD 17) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +add_executable(${PROJECT_NAME} emiso_engine.cpp + utils.cpp + webserver/webserver.cpp + webserver/system/system.cpp + webserver/container/container.cpp + webserver/image/image.cpp + webserver/network/network.cpp + webserver/volume/volume.cpp + daemon/image.cpp + daemon/container.cpp + daemon/daemon.cpp + #cli/cli.cpp +) + +target_include_directories(${PROJECT_NAME} PRIVATE include) + +target_link_libraries(${PROJECT_NAME} httpserver jsoncpp readline) + +install(TARGETS ${PROJECT_NAME} DESTINATION ${CMAKE_BINARY_DIR}/bin) diff --git a/linux/usr/emiso_engine/cli/cli.cpp b/linux/usr/emiso_engine/cli/cli.cpp new file mode 100644 index 0000000000..7eb513f4ce --- /dev/null +++ b/linux/usr/emiso_engine/cli/cli.cpp @@ -0,0 +1,123 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include + +#include "cli.hpp" + +#define EMISO_CLI_PROMPT "(emiso)>> " + +namespace emiso { + +Cli::Cli() {} + +Cli::~Cli() {} + +void Cli::splitCmd(std::string const &str, const char delim, std::vector &out) +{ + // create a stream from the string + std::stringstream s(str); + + std::string s2; + while (std::getline (s, s2, delim)) { + out.push_back(s2); // store the string in s2 + } +} + + +// Function to handle the "hello" command +void Cli::handleHelloCommand() { + std::cout << "Hello, World!" << std::endl; +} + +// Function to handle the "help" command +void Cli::handleHelpCommand() { + std::cout << "Available commands:" << std::endl; + std::cout << " hello - Print a greeting" << std::endl; + std::cout << " help - Show available commands" << std::endl; + std::cout << " exit - Exit the program" << std::endl; +} + + +void Cli::handleImagesCommand(std::vector &tokens) +{ + std::map info; + + // TODO - Add checks on 'tokens' + if (tokens[1] == "info") { + _image.info(info); + + for (auto it = info.begin(); it != info.end(); ++it) { + std::string name = it->second.name; + size_t size = it->second.size; + std::string id = it->second.id; + auto date = it->second.date; + + std::cout << name << std::endl; + std::cout << " Size: " << size << std::endl; + std::cout << " ID: " << id << std::endl; + std::cout << " date: " << date << std::endl; + } + } else if (tokens[1] == "rm") { + // TODO - Add checks on 'tokens[2]' + _image.remove(tokens[2]); + } else { + std::cout << "[ERROR] image cmd '" << tokens[1] << "' is not supported" << std::endl; + } +} + +void Cli::start() +{ + std::cout << "Starting interactive mode" << std::endl; + while (true) { + char* input = readline(EMISO_CLI_PROMPT); + if (!input) { + break; // User pressed Ctrl+D (EOF) + } + + std::string command(input); + free(input); + + // Add the command to readline's history + if (!command.empty()) { + add_history(command.c_str()); + } + + std::vector tokens; + Cli::splitCmd(command, ' ', tokens); + + + if (tokens[0] == "hello") { + Cli::handleHelloCommand(); + } else if (tokens[0] == "help") { + Cli::handleHelpCommand(); + } else if (tokens[0] == "image") { + Cli::handleImagesCommand(tokens); + } else if (tokens[0] == "exit") { + break; // Exit the program + } else { + std::cout << "Unknown command. Type 'help' for a list of available commands." << std::endl; + } + } + + std::cout << "Stopping interactive mode" << std::endl; + +} + +} // emiso \ No newline at end of file diff --git a/linux/usr/emiso_engine/cli/cli.hpp b/linux/usr/emiso_engine/cli/cli.hpp new file mode 100644 index 0000000000..2eee2a81fa --- /dev/null +++ b/linux/usr/emiso_engine/cli/cli.hpp @@ -0,0 +1,50 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_CLI_H +#define EMISO_CLI_H + +#include +#include +#include + +#include "../daemon/image.hpp" + +namespace emiso { + + class Cli { + public: + Cli(); + + // Destructor + ~Cli(); + + void start(); + + private: + daemon::Image _image; + + void splitCmd(std::string const &str, const char delim, std::vector &out); + + void handleHelloCommand(); + void handleHelpCommand(); + void handleImagesCommand(std::vector &tockens); + }; +} + +#endif // EMISO_CLI_H diff --git a/linux/usr/emiso_engine/daemon/container.cpp b/linux/usr/emiso_engine/daemon/container.cpp new file mode 100644 index 0000000000..3d9e6feeb2 --- /dev/null +++ b/linux/usr/emiso_engine/daemon/container.cpp @@ -0,0 +1,347 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "container.hpp" + +#define EMISO_IMAGE_PATH "/mnt/ME/" +#define SOO_CORE_DRV_PATH ("/dev/soo/core") + +namespace emiso { + +std::map Container::_containersId; + +Container::Container() {}; + +Container::~Container() {}; + +// Convert a ME state into the Docker Container state +// valid container states are: running, paused, exited, restarting, dead +std::string Container::meToDockerState(int meState) +{ + switch (meState) { + case ME_state_booting: + return "created"; // WARNING - not a valid Docker state + case ME_state_preparing: + return "created"; // WARNING - not a valid Docker state + case ME_state_living: + return "running"; + case ME_state_suspended: + return "paused"; + case ME_state_migrating: + return "error "; + case ME_state_dormant: + return "paused"; + case ME_state_killed: + return "dead"; + case ME_state_terminated: + return "exited"; + case ME_state_dead: + return "dead"; + } + + return "(n/a)"; +} + +uint64_t Container::createdTime() +{ + const auto now = std::chrono::system_clock::now(); + const auto epoch = std::chrono::duration_cast(now.time_since_epoch()).count(); + + return epoch; +} + +void Container::info(std::map &containerList) +{ + int i, fd; + ME_id_t id_array[MAX_ME_DOMAINS]; + agency_ioctl_args_t args; + int ME_size; + unsigned char *ME_buffer; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + // assert(fd_core > 0); + + args.buffer = &id_array; + ioctl(fd, AGENCY_IOCTL_GET_ME_ID_ARRAY, (unsigned long) &args); + + close(fd); + + for (i = 0; i < MAX_ME_DOMAINS; i++) { + if (id_array[i].state != ME_state_dead) { + ContainerInfo info; + int slotID = i + 2; + + info.id = slotID; + info.name = _containersId[slotID].name; + info.image = _containersId[slotID].image; + info.created = _containersId[slotID].created; + info.state = this->meToDockerState(id_array[i].state); + + containerList[i] = info; + } + } +} + +void Container::info(int id, ContainerInfo &info) +{ + int i, fd; + ME_id_t id_array[MAX_ME_DOMAINS]; + agency_ioctl_args_t args; + int ME_size; + unsigned char *ME_buffer; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + // assert(fd_core > 0); + + args.buffer = &id_array; + ioctl(fd, AGENCY_IOCTL_GET_ME_ID_ARRAY, (unsigned long) &args); + + close(fd); + + if (id_array[i].state != ME_state_dead) { + int slotID = i + 2; + + info.id = slotID; + info.name = _containersId[slotID].name; + info.image = _containersId[slotID].image; + info.created = _containersId[slotID].created; + info.state = this->meToDockerState(id_array[i].state); + } +} + +int Container::create(std::string imageName, std::string containerName, int slotID) +{ + int fd; + int ret; + struct agency_ioctl_args args; + struct stat filestat; + char *containerBuf; + int nread; + std::streampos containerSize; + + std::cout << "[EMISO] Creating container from '" << imageName << "'" << std::endl; + + std::ifstream image(imageName.c_str(), std::ios::in | std::ios::binary | std::ios::ate) ; + + containerSize = image.tellg(); + containerBuf = new char [containerSize]; + image.seekg (0, std::ios::beg); + image.read (containerBuf, containerSize); + image.close(); + + args.buffer = containerBuf; + args.value = containerSize; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + + if (slotID != -1) { + args.slotID = slotID; + ret = ioctl(fd, AGENCY_IOCTL_INJECT_ME_WITH_SLOTID, &args); + + } else { + ret = ioctl(fd, AGENCY_IOCTL_INJECT_ME, &args); + } + + if (ret < 0) { + printf("Failed to inject ME (%d)\n", ret); + } + + ContainerId id; + id.name = containerName; + id.image = imageName; + id.created = this->createdTime(); + + _containersId[args.slotID] = id; + + delete[] containerBuf; + + return args.slotID; +} + +int Container::start(unsigned contenerId) +{ + int fd; + int ret; + struct agency_ioctl_args args; + + args.slotID = contenerId; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + ret = ioctl(fd, AGENCY_IOCTL_FINAL_MIGRATION, &args); + + if (ret < 0) { + printf("Failed to initialize migration (%d)\n", ret); + } + + // close(fd); + + return ret; +} + +int Container::stop(unsigned contenerId) +{ + int ret; + int fd; + struct agency_ioctl_args args; + + + // == Force ME termination == + args.slotID = contenerId; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + ret = ioctl(fd, AGENCY_IOCTL_FORCE_TERMINATE, &args); + + if (ret < 0) { + printf("Failed to force termination (%d)\n", ret); + } + + // close(fd); + + // == inject ME == + std::string imageName; + std::string containerName; + + // 1. Retrieve the image file + auto it = _containersId.find(contenerId); + + if (it != _containersId.end()) { + imageName = it->second.image; + containerName = it->second.name; + + } else { + // BUG - the ME has to be in _containersId MAP + } + + // experiment - let time to free the slot memory ! + sleep(0.5); + + // int slotId = this->create(imageName, containerName, contenerId); + int slotId = this->create(imageName, containerName); + + return ret; +} + + +int Container::restart(unsigned contenerId) +{ + std::cout << "[DAEMON] Restart cmd - stop" << std::endl; + this->stop(contenerId); + std::cout << "[DAEMON] Restart cmd - start" << std::endl; + this->start(contenerId); + std::cout << "[DAEMON] Restart cmd - completed" << std::endl; + + return 0; + +} + +int Container::pause(unsigned contenerId) +{ + int fd; + int ret; + struct agency_ioctl_args args; + + args.slotID = contenerId; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + + ret = ioctl(fd, AGENCY_IOCTL_INIT_MIGRATION, &args); + + if (ret < 0) { + printf("Failed to initialize migration (%d)\n", ret); + } + + return ret; +} + +int Container::unpause(unsigned contenerId) +{ + int fd; + int ret; + struct agency_ioctl_args args; + + args.slotID = contenerId; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + + ret = ioctl(fd, AGENCY_IOCTL_FINAL_MIGRATION, &args); + + if (ret < 0) { + printf("Failed to initialize migration (%d)\n", ret); + } + + close(fd); + + return ret; +} + +int Container::remove(unsigned contenerId) +{ + int ret; + int fd; + struct agency_ioctl_args args; + + + // == Force ME termination == + args.slotID = contenerId; + + fd = open(SOO_CORE_DRV_PATH, O_RDWR); + ret = ioctl(fd, AGENCY_IOCTL_FORCE_TERMINATE, &args); + if (ret < 0) { + printf("Failed to force termination (%d)\n", ret); + } + + return ret; +} + +std::vector Container::retrieveLogs(unsigned contenerId, unsigned lineNr) +{ + std::vector lines; + + // Create the file path + std::string fileName = "/var/log/soo/me_" + std::to_string(contenerId) + ".log"; + + std::cout << "[DEBUG] Logfile name: " << fileName << std::endl; + + // Read the file + std::ifstream file(fileName); + + if (!file.is_open()) { + std::cerr << "Error opening file: " << fileName << std::endl; + return lines; // return empty vector if file couldn't be opened + } + + std::string line; + while (std::getline(file, line) && lineNr-- > 0) { + lines.push_back(line); + } + + file.close(); + return lines; +} + +} // emiso diff --git a/linux/usr/emiso_engine/daemon/container.hpp b/linux/usr/emiso_engine/daemon/container.hpp new file mode 100644 index 0000000000..94bbc65c11 --- /dev/null +++ b/linux/usr/emiso_engine/daemon/container.hpp @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_DAEMON_CONTAINER_H +#define EMISO_DAEMON_CONTAINER_H + +#include +#include +#include + +namespace emiso { + + struct ContainerInfo { + int id; + std::string name; + std::string state; + std::string image; + uint64_t created; + }; + + struct ContainerId { + std::string name; + std::string image; + uint64_t created; + }; + + class Container { + + public: + Container(); + ~Container(); + + void info(std::map &containerList); + void info(int id, ContainerInfo &info); + + int create(std::string imageName, std::string containerName, int slotId=-1); + int start(unsigned contenerId); + int stop(unsigned contenerId); + int restart(unsigned contenerId); + int pause(unsigned contenerId); + int unpause(unsigned contenerId); + int remove(unsigned contenerId); + + std::vector retrieveLogs(unsigned contenerId, unsigned lineNr); + + private: + std::string meToDockerState(int meState); + uint64_t createdTime(); + + static std::map _containersId; + + }; +} + +#endif // EMISO_DAEMON_CONTAINER_H diff --git a/linux/usr/emiso_engine/daemon/daemon.cpp b/linux/usr/emiso_engine/daemon/daemon.cpp new file mode 100644 index 0000000000..7477e10005 --- /dev/null +++ b/linux/usr/emiso_engine/daemon/daemon.cpp @@ -0,0 +1,40 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "daemon.hpp" + +namespace emiso { + +Daemon* Daemon::_daemon = nullptr; + +Daemon::Daemon() {}; + +Daemon::~Daemon() {}; + + +Daemon* Daemon::getInstance() +{ + + if (_daemon == nullptr) { + _daemon = new Daemon(); + } + + return _daemon; +} + +} // namespace emiso diff --git a/linux/usr/emiso_engine/daemon/daemon.hpp b/linux/usr/emiso_engine/daemon/daemon.hpp new file mode 100644 index 0000000000..8e1a0801de --- /dev/null +++ b/linux/usr/emiso_engine/daemon/daemon.hpp @@ -0,0 +1,46 @@ +/* + * Copyright (C) 2024 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + + +#ifndef EMISO_DAEMON_H +#define EMISO_DAEMON_H + +#include "image.hpp" +#include "container.hpp" + + +namespace emiso { + + class Daemon { + + public: + Image image; + Container container; + + static Daemon* getInstance(); + + private: + Daemon(); + ~Daemon(); + + static Daemon* _daemon; + }; +} + +#endif // EMISO_DAEMON_H + diff --git a/linux/usr/emiso_engine/daemon/image.cpp b/linux/usr/emiso_engine/daemon/image.cpp new file mode 100644 index 0000000000..e0cd621ef6 --- /dev/null +++ b/linux/usr/emiso_engine/daemon/image.cpp @@ -0,0 +1,134 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include + +#include "image.hpp" + +#define EMISO_IMAGE_PATH "/mnt/ME/" +#define EMISO_IMAGE_ID_MODE "md5" + +namespace emiso { + +Image::Image() {}; + +Image::~Image() {}; + +namespace fs = std::filesystem; + +std::string Image::calculateId(const std::string& filePath) +{ + std::ifstream file(filePath, std::ios::binary); + if (!file) { + std::cerr << "Failed to open file '" << filePath << "'" << std::endl; + return ""; + } + + // Create an MD5 hash function + std::hash md5Hash; + + // Read the file content and calculate the MD5 checksum + std::stringstream buffer; + buffer << file.rdbuf(); + std::string fileContent = buffer.str(); + std::string id = std::to_string(md5Hash(fileContent)); + + return id; +} + + +int Image::createdTime(const std::string& filePath) +{ + try { + // Check if the file exists and retrieve its status + if (fs::exists(filePath)) { + fs::file_time_type fileTime = fs::last_write_time(filePath); + + // Convert file time to Unix timestamp (seconds since epoch) + auto fileTimestamp = std::chrono::duration_cast(fileTime.time_since_epoch()).count(); + + return fileTimestamp; + } else { + std::cout << "[WARNING] File '" << filePath << "' does not exist." << std::endl; + return -1; + } + + } catch (const std::filesystem::filesystem_error& e) { + std::cerr << "[ERROR]: " << e.what() << std::endl; + return -1; + } +} + + +void Image::info(std::map &imagesList) +{ + // Check if the folder exists + if (std::filesystem::exists(EMISO_IMAGE_PATH) && std::filesystem::is_directory(EMISO_IMAGE_PATH)) { + // Iterate through the files in the folder + for (const auto& entry : std::filesystem::directory_iterator(EMISO_IMAGE_PATH)) { + if (std::filesystem::is_regular_file(entry)) { + ImageInfo info; + + info.name = entry.path().filename(); + info.size = std::filesystem::file_size(entry); + info.date = this->createdTime(EMISO_IMAGE_PATH + info.name); + + auto id = this->calculateId(EMISO_IMAGE_PATH + info.name); + std::string mode = EMISO_IMAGE_ID_MODE; + info.id = mode + ":" + id; + + imagesList[info.name] = info; + } + } + } else { + std::cerr << "Folder '" << EMISO_IMAGE_PATH << "' does not exist or is not a directory." << std::endl; + } +} + +void Image::info(std::string name, ImageInfo &info) +{ + info.name = name; + info.size = std::filesystem::file_size(name); + info.date = this->createdTime(name); + + auto id = this->calculateId(info.name); + std::string mode = EMISO_IMAGE_ID_MODE; + info.id = mode + ":" + id; +} + +void Image::remove(std::string name) +{ + std::filesystem::path filePath = EMISO_IMAGE_PATH + name; + + if (std::filesystem::exists(filePath)) { + try { + // Remove the file + std::filesystem::remove(filePath); + + std::cout << "File removed successfully." << std::endl; + } catch (const std::filesystem::filesystem_error& e) { + std::cerr << "Error removing file: " << e.what() << std::endl; + + } + } else { + std::cout << "[WARNING] File '" << filePath << "' does not exists" << std::endl; + } +} + +} // emiso diff --git a/linux/usr/emiso_engine/daemon/image.hpp b/linux/usr/emiso_engine/daemon/image.hpp new file mode 100644 index 0000000000..06bd459c36 --- /dev/null +++ b/linux/usr/emiso_engine/daemon/image.hpp @@ -0,0 +1,61 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_DAEMON_IMAGE_H +#define EMISO_DAEMON_IMAGE_H + +#include +#include +#include +#include + +namespace emiso { +// namespace daemon { + + struct ImageInfo { + std::string id; + std::string name; + size_t size; + uint64_t date; + }; + + class Image { + + public: + Image(); + ~Image(); + + // Return the info on all the images + void info(std::map &imagesList); + + void info(std::string name, ImageInfo &info); + + // Remove image 'name' from the disk + void remove(std::string name); + private: + // The ID corresponds to the MD5 checksum + std::string calculateId(const std::string& filePath); + + // Get the date at which the image was created (Unix timestamp) + int createdTime(const std::string& filePath); + + }; +// } +} + +#endif // EMISO_DAEMON_IMAGE_H diff --git a/linux/usr/emiso_engine/emiso_engine.cpp b/linux/usr/emiso_engine/emiso_engine.cpp new file mode 100644 index 0000000000..d87e15415a --- /dev/null +++ b/linux/usr/emiso_engine/emiso_engine.cpp @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +// EMISO Engine - Start the engine on port '2375'. It can be started in secure +// mode (HTTPS/TLS) with '-s' option +// The interactive mode ('-i' option) starts a cli interface instead of the web +// server + +#include +#include + +#include "webserver/webserver.hpp" +// #include "cli/cli.hpp" +#include "daemon/daemon.hpp" + +#define SERVER_PORT 2375 + +int main(int argc, char **argv) +{ + int c; + bool secure = false; + bool interactive = false; + + // TODO - Use C++ parameter handler lib ! + while ((c = getopt(argc, argv, "is")) != EOF) { + switch (c) { + case 'i': + interactive = true; + break; + case 's': + secure = true; + break; + default: + // usage(); + exit(1); + break; + } + } + + emiso::Daemon *daemon = emiso::Daemon::getInstance(); + +// if (interactive) { +// emiso::Cli cli; +// cli.start(); +// +// } else { + // TODO - in interactive mode, also start the webserver ! + emiso::WebServer server(SERVER_PORT, secure, daemon); + server.start(true); +// } + + return 0; +} diff --git a/linux/usr/emiso_engine/include/emiso/config.hpp b/linux/usr/emiso_engine/include/emiso/config.hpp new file mode 100644 index 0000000000..a1e4ac5a9f --- /dev/null +++ b/linux/usr/emiso_engine/include/emiso/config.hpp @@ -0,0 +1,34 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* Basic - Constant configuration for EMISO engine */ + +#ifndef EMISO_CONFIG_H +#define EMISO_CONFIG_H + +#define EMISO_VERSION "1.0" +#define EMISO_PLATFORM_NAME "emiso" + +// Webserver configuration +#define EMISO_WEB_COMP_NAME "engine" +#define EMISO_WEB_API_VERSION "1.43" +#define EMISO_WEB_EXPERIMENTAL false +#define EMISO_WEB_SWARM "inactive" + +#endif // EMISO_CONFIG_H + diff --git a/linux/usr/emiso_engine/include/emiso/utils.hpp b/linux/usr/emiso_engine/include/emiso/utils.hpp new file mode 100644 index 0000000000..1f1759f369 --- /dev/null +++ b/linux/usr/emiso_engine/include/emiso/utils.hpp @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/* Provide basic functions for the EMISO engine */ + +#ifndef EMISO_UTILS_H +#define EMISO_UTILS_H + +#include + +namespace emiso { + + struct SystemInfo { + std::string kernel_version; + std::string os; + std::string os_version; + std::string os_type; + std::string arch; + }; + + class Utils { + + public: + static Utils& getInstance() { + // Create the instance if it doesn't exist + static Utils instance; + return instance; + } + + /* Return info in the platform */ + SystemInfo getInfo(); + + // Return the current system time, in RFC 3339 format with nano-seconds + std::string getSystemTime(); + + // Return the Agency UUID of the Smart Object + std::string getAgencyUID(); + + private: + SystemInfo _info; + + Utils(); + ~Utils(); + + // Make copy constructor and assignment operator private to prevent copying + Utils(const Utils&) = delete; + Utils& operator=(const Utils&) = delete; + }; + +} // emiso + +#endif // EMISO_UTILS_H + + + + diff --git a/linux/usr/emiso_engine/utils.cpp b/linux/usr/emiso_engine/utils.cpp new file mode 100644 index 0000000000..3383e2af69 --- /dev/null +++ b/linux/usr/emiso_engine/utils.cpp @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include +#include +#include +#include +#include + +#include + +#define EMISO_OS_RELEASE_PATH "/etc/os-release" +#define EMISO_AGENCY_UID_PATH "/sys/soo/agencyUID" + +namespace emiso { + +Utils::Utils () +{ + // Retrieve platform info + struct utsname unameData; + if (uname(&unameData) != -1) { + _info.kernel_version = unameData.release; + _info.os_type = unameData.sysname; + _info.arch = unameData.machine; + } + + // Retrieve OS information + std::ifstream osReleaseFile(EMISO_OS_RELEASE_PATH); + if (osReleaseFile.is_open()) { + std::string line; + while (std::getline(osReleaseFile, line)) { + if (line.find("PRETTY_NAME=") != std::string::npos) { + _info.os = line.substr(13); + } + if (line.find("VERSION=") != std::string::npos) { + _info.os_version = line.substr(8); + } + } + osReleaseFile.close(); + } else { + std::cerr << "Failed to open /etc/os-release" << std::endl; + } +} + +Utils::~Utils() {} + +SystemInfo Utils::getInfo() +{ + return _info; +} + + +std::string Utils::getSystemTime() +{ + // Get the current time with nanoseconds + auto currentTime = std::chrono::system_clock::now(); + + // Convert to RFC 3339 format with nanoseconds + auto timeT = std::chrono::system_clock::to_time_t(currentTime); + auto fractionalSeconds = std::chrono::duration_cast(currentTime.time_since_epoch()).count() % 1000000000; + struct tm timeinfo; + gmtime_r(&timeT, &timeinfo); + + // Format the date and time + char buffer[64]; // Sufficient size for RFC 3339 format + strftime(buffer, sizeof(buffer), "%Y-%m-%dT%H:%M:%S", &timeinfo); + + // Create an output string stream to capture the formatted time + std::ostringstream formattedTime; + formattedTime << buffer << "." << std::setw(9) << std::setfill('0') << fractionalSeconds << "Z"; + + // Get the formatted time as a string + return formattedTime.str(); +} + + +std::string Utils::getAgencyUID() +{ + std::ifstream sysfsFile(EMISO_AGENCY_UID_PATH); + if (!sysfsFile.is_open()) { + std::cerr << "Failed to open sysfs file: " << EMISO_AGENCY_UID_PATH << std::endl; + // TODO - handle error + } + + std::string fileContent; + std::getline(sysfsFile, fileContent); // Read the content of the file + + sysfsFile.close(); // Close the file + + if (sysfsFile.fail()) { + std::cerr << "Error occurred while reading the sysfs file." << std::endl; + // TODO - handle error + } + + return fileContent; +} + + +} // emiso diff --git a/linux/usr/emiso_engine/webserver/container/container.cpp b/linux/usr/emiso_engine/webserver/container/container.cpp new file mode 100644 index 0000000000..5fd78f8177 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/container/container.cpp @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "container.hpp" + +namespace emiso { + + namespace container { + + ContainerApi::ContainerApi(httpserver::webserver *server, Daemon *daemon) + : _server(server) { + std::string path = "/containers"; + + // Create routes and handlers + _listHandler = new ListHandler(daemon); + _createHandler = new CreateHandler(daemon); + _startHandler = new StartHandler(daemon); + _stopHandler = new StopHandler(daemon); + _restartHandler = new RestartHandler(daemon); + _pauseHandler = new PauseHandler(daemon); + _unpauseHandler = new UnpauseHandler(daemon); + _removeHandler = new RemoveHandler(daemon); + _inspectHandler = new InspectHandler(daemon); + _logsHandler = new LogsHandler(daemon); + + _server->register_resource(path + "/json", _listHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/json", _listHandler); + _server->register_resource(path + "/create", _createHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/create", _createHandler); + + _server->register_resource(path + "/{id|[0-9]+}/start", _startHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/start", _startHandler); + + _server->register_resource(path + "/{id|[0-9]+}/stop", _stopHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/stop", _stopHandler); + + _server->register_resource(path + "/{id|[0-9]+}/restart", _restartHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/restart", _restartHandler); + + _server->register_resource(path + "/{id|[0-9]+}/pause", _pauseHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/pause", _pauseHandler); + + _server->register_resource(path + "/{id|[0-9]+}/unpause", _unpauseHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/unpause", _unpauseHandler); + + _server->register_resource(path + "/{id|[0-9]+}", _removeHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}", _removeHandler); + + _server->register_resource(path + "/{id|[0-9]+}/json", _inspectHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/json", _inspectHandler); + + _server->register_resource(path + "/{id|[0-9]+}/logs", _logsHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/{id|[0-9]+}/logs", _logsHandler); + } + + ContainerApi::~ContainerApi() {} + + } +} diff --git a/linux/usr/emiso_engine/webserver/container/container.hpp b/linux/usr/emiso_engine/webserver/container/container.hpp new file mode 100644 index 0000000000..2b1c4cfd87 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/container/container.hpp @@ -0,0 +1,396 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_CONTAINER_H +#define EMISO_CONTAINER_H + +#include +#include +#include +#include +#include + +#include "../../daemon/daemon.hpp" + +#include "container_inspect.hpp" +#include "container_logs.hpp" + +namespace emiso { +namespace container { + + class ListHandler : public httpserver::http_resource { + public: + ListHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // Retrieve the command args - + // only "all" and "filters/name" args are handled + bool allArg = false; + bool sizeArg = false; + std::string filtersArg = ""; + for (const auto& arg : req.get_args()) { + if (arg.first == "all") { + allArg = (arg.second == "true"); + } + if (arg.first == "filters") { + filtersArg = arg.second; + } + } + + std::vector namesFilter; + if (!filtersArg.empty()) { + Json::CharReaderBuilder readerBuilder; + Json::Value filtersJsonValue; + std::istringstream filtersJsonStream(filtersArg); + + if (!Json::parseFromStream(readerBuilder, filtersJsonStream, &filtersJsonValue, nullptr)) { + // Parsing failed, handle the error as needed + std::cerr << "Error parsing JSON!" << std::endl; + } + + if (filtersJsonValue.isMember("name")) { + for (int i = 0; i < filtersJsonValue["name"].size(); ++i) { + namesFilter.push_back(filtersJsonValue["name"][i].asString()); + } + } + } + + // Retrieve container info + std::map info; + _daemon->container.info(info); + + if (info.empty()) { + payload_json = Json::arrayValue; + } else { + + unsigned idx = 0; + for (auto it = info.begin(); it != info.end(); ++it) { + + // == Checks the args passed to the command == + + // 'all' - if true, return all containers. else only running + // containers are returned. + if ((!allArg) && (it->second.state != "running")) { + // Only return running containers + continue; + } + + // 'filters' (only name filter is supported) + bool nameFound = false; + if (!namesFilter.empty()) { + for (const auto &pattern : namesFilter) { + std::regex regexPattern(pattern); + if (std::regex_match("/" + it->second.name, regexPattern)) { + nameFound = true; + break; + } + } + } else { + nameFound = true; + } + + if (!nameFound) { + continue; + } + + // == Return info on the container == + + ImageInfo imageInfo; + _daemon->image.info(it->second.image, imageInfo); + + payload_json[idx]["Id"] = std::to_string(it->second.id); + payload_json[idx]["Names"][0] = "/" + it->second.name; + payload_json[idx]["Image"] = it->second.image + ":latest"; + payload_json[idx]["ImageID"] = imageInfo.id; + payload_json[idx]["Command"] = "/inject"; + + payload_json[idx]["Created"] = it->second.created; + payload_json[idx]["Ports"] = Json::arrayValue; + payload_json[idx]["Labels"] = Json::objectValue; + payload_json[idx]["State"] = it->second.state; + payload_json[idx]["Status"] = it->second.state; + + // Network setting as the values obtained on the test PC + payload_json[idx]["HostConfig"]["NetworkMode"] = "bridge"; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["IPAMConfig"] = Json::objectValue; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["Links"] = Json::Value::null; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["Aliases"] = Json::Value::null; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["NetworkID"] = "59125e01bc5d820b2cf1a2e19760b11f25678e098bb08df6d3337ef18403ca56", + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["EndpointID"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["Gateway"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["IPAddress"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["IPPrefixLen"] = 0; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["IPv6Gateway"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["GlobalIPv6Address"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["GlobalIPv6PrefixLen"] = 0; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["MacAddress"] = ""; + payload_json[idx]["NetworkSettings"]["Networks"]["bridge"]["DriverOpts"] = Json::Value::null; + payload_json[idx]["Mounts"] = Json::arrayValue; + + idx++; + } + } + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payload_json); + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + + private: + // daemon::Container _container; + Daemon *_daemon; + }; + + + class CreateHandler : public httpserver::http_resource { + public: + CreateHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + int containerId; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + + // Extract info from body + const std::string requestBody = req.get_content(); + + Json::Value jsonData; + Json::Reader jsonReader; + + if (!jsonReader.parse(requestBody, jsonData)) { + // JSON parsing error + // Return error message + } + + std::string imageName = jsonData["Image"].asString(); + std::string containerName = jsonData["name"].asString(); + + // Remove the image version of the name + size_t colonPosition = imageName.find(':'); + imageName = imageName.substr(0, colonPosition); + + std::cout << "[Webserver] Create container based on '" << imageName << "' name" << std::endl; + + containerId = _daemon->container.create(imageName, containerName); + + // build the response + payload_json["Id"] = std::to_string(containerId); + payload_json["Warnings"] = Json::arrayValue; + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payload_json); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_created, "application/json"); + return response; + } + + private: + // daemon::Container _container; + Daemon *_daemon; + }; + + class StartHandler : public httpserver::http_resource { + public: + StartHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.start(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + Daemon *_daemon; + }; + + + + class StopHandler : public httpserver::http_resource { + public: + StopHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.stop(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + // daemon::Container _container; + Daemon *_daemon; + }; + + + class RestartHandler : public httpserver::http_resource { + public: + RestartHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.restart(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + // daemon::Container _container; + Daemon *_daemon; + }; + + class PauseHandler : public httpserver::http_resource { + public: + PauseHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.pause(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + Daemon *_daemon; + + }; + + class UnpauseHandler : public httpserver::http_resource { + public: + UnpauseHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_POST(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.unpause(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + Daemon *_daemon; + }; + + + class RemoveHandler : public httpserver::http_resource { + public: + RemoveHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_DELETE(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + _daemon->container.remove(containerId); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_no_content, "application/json"); + return response; + } + + private: + Daemon *_daemon; + }; + + class ContainerApi { + public: + // Constructor + ContainerApi(httpserver::webserver *server, Daemon *daemon); + + // Destructor + ~ContainerApi(); + + private: + httpserver::webserver *_server; + + // Handler for the different 'container' routes + ListHandler *_listHandler; + CreateHandler *_createHandler; + StartHandler *_startHandler; + StopHandler *_stopHandler; + PauseHandler *_pauseHandler; + UnpauseHandler *_unpauseHandler; + RestartHandler *_restartHandler; + RemoveHandler *_removeHandler; + InspectHandler *_inspectHandler; + LogsHandler *_logsHandler; + }; + +} // container +} // emiso + +#endif /* EMISO_CONTAINER_H */ diff --git a/linux/usr/emiso_engine/webserver/container/container_inspect.hpp b/linux/usr/emiso_engine/webserver/container/container_inspect.hpp new file mode 100644 index 0000000000..bc46428451 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/container/container_inspect.hpp @@ -0,0 +1,237 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_CONTAINER_INSPECT_H +#define EMISO_CONTAINER_INSPECT_H + + +namespace emiso { +namespace container { + + class InspectHandler : public httpserver::http_resource { + public: + InspectHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payloadJson; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + + ContainerInfo info; + ImageInfo imageInfo; + + _daemon->container.info(containerId, info); + _daemon->image.info(info.image, imageInfo); + + std::tm * ptm; + char createdDate[32]; + char startedDate[32]; + // char endDate[32]; + + ptm = std::localtime((const long int*)&info.created); + std::strftime(createdDate, 32, "%Y-%m-%dT%H:%M:%SZ", ptm); + + // TODO = add start time in container info + ptm = std::localtime((const long int*)&info.created + 10); + std::strftime(startedDate, 32, "%Y-%m-%dT%H:%M:%SZ", ptm); + + // ptm = std::localtime((const long int*)&info.created + 500); + // std::strftime(endDate, 32, "%Y-%M-%dT%H.%M.%S", ptm); + + // == Build the response message == + payloadJson["Id"] = std::to_string(containerId); + payloadJson["Created"] = createdDate; + payloadJson["Path"] = "/inject"; + payloadJson["Args"] = Json::arrayValue; + payloadJson["State"]["Status"] = info.state; + payloadJson["State"]["Running"] = (info.state == "running") ? true : false; + payloadJson["State"]["Paused"] = (info.state == "paused") ? true : false; + payloadJson["State"]["Restarting"] = (info.state == "restarting") ? true : false; + payloadJson["State"]["OOMKilled"] = false; + payloadJson["State"]["Dead"] = (info.state == "dead") ? true : false; + payloadJson["State"]["Pid"] = 0; + payloadJson["State"]["ExitCode"] = 0; + payloadJson["State"]["Error"] = ""; + payloadJson["State"]["StartedAt"] = createdDate; // to update + payloadJson["State"]["FinishedAt"] = ""; + payloadJson["Image"] = imageInfo.id; + payloadJson["ResolvConfPath"] = "/var/lib/docker/containers/ed856fa2c435daac513a0eff537018034fd0ce2843d84eae4dbfd22203bd10de/resolv.conf"; + payloadJson["HostnamePath"] = "/var/lib/docker/containers/ed856fa2c435daac513a0eff537018034fd0ce2843d84eae4dbfd22203bd10de/hostname"; + payloadJson["HostsPath"] = "/var/lib/docker/containers/ed856fa2c435daac513a0eff537018034fd0ce2843d84eae4dbfd22203bd10de/hosts"; + payloadJson["LogPath"] = "/var/lib/docker/containers/ed856fa2c435daac513a0eff537018034fd0ce2843d84eae4dbfd22203bd10de/ed856fa2c435daac513a0eff537018034fd0ce2843d84eae4dbfd22203bd10de-json.log"; + payloadJson["Name"] = "/" + info.name; + payloadJson["RestartCount"] = 0; + payloadJson["Driver"] = "overlay2"; + payloadJson["Platform"] = "linux"; + payloadJson["MountLabel"] = ""; + payloadJson["ProcessLabel"] = ""; + payloadJson["AppArmorProfile"] = ""; + payloadJson["ExecIDs"] = Json::nullValue; + payloadJson["HostConfig"]["Binds"] = Json::nullValue; + payloadJson["HostConfig"]["ContainerIDFile"] = ""; + payloadJson["HostConfig"]["LogConfig"]["Type"] = "json-file"; + payloadJson["HostConfig"]["LogConfig"]["Config"] = Json::objectValue; + payloadJson["HostConfig"]["LogConfig"]["NetworkMode"] = "default"; + payloadJson["HostConfig"]["LogConfig"]["PortBindings"] = Json::objectValue; + payloadJson["HostConfig"]["RestartPolicy"]["Name"] = "no"; + payloadJson["HostConfig"]["RestartPolicy"]["MaximumRetryCount"] = 0; + payloadJson["HostConfig"]["AutoRemove"] = false; + payloadJson["HostConfig"]["VolumeDriver"] = ""; + payloadJson["HostConfig"]["VolumesFrom"] = Json::nullValue; + payloadJson["HostConfig"]["ConsoleSize"][0] = 24; + payloadJson["HostConfig"]["ConsoleSize"][0] = 80; + payloadJson["HostConfig"]["CapAdd"] = Json::nullValue; + payloadJson["HostConfig"]["CapDrop"] = Json::nullValue; + payloadJson["HostConfig"]["CgroupnsMode"] = "host"; + payloadJson["HostConfig"]["Dns"] = Json::arrayValue; + payloadJson["HostConfig"]["DnsOptions"] = Json::arrayValue; + payloadJson["HostConfig"]["DnsSearch"] = Json::arrayValue; + payloadJson["HostConfig"]["ExtraHosts"] = Json::nullValue; + payloadJson["HostConfig"]["GroupAdd"] = Json::nullValue; + payloadJson["HostConfig"]["IpcMode"] = "private"; + payloadJson["HostConfig"]["Cgroup"] = ""; + payloadJson["HostConfig"]["Links"] = Json::nullValue; + payloadJson["HostConfig"]["OomScoreAdj"] = 0; + payloadJson["HostConfig"]["PidMode"] = ""; + payloadJson["HostConfig"]["Privileged"] = false; + payloadJson["HostConfig"]["PublishAllPorts"] = false; + payloadJson["HostConfig"]["ReadonlyRootfs"] = false; + payloadJson["HostConfig"]["SecurityOpt"] = Json::nullValue; + payloadJson["HostConfig"]["UTSMode"] = ""; + payloadJson["HostConfig"]["UsernsMode"] = ""; + payloadJson["HostConfig"]["ShmSize"] = 67108864; + payloadJson["HostConfig"]["Runtime"] = "runc"; + payloadJson["HostConfig"]["Isolation"] = ""; + payloadJson["HostConfig"]["CpuShares"] = 0; + payloadJson["HostConfig"]["Memory"] = 0; + payloadJson["HostConfig"]["NanoCpus"] = 0; + payloadJson["HostConfig"]["CgroupParent"] = ""; + payloadJson["HostConfig"]["BlkioWeight"] = 0; + payloadJson["HostConfig"]["BlkioWeightDevice"] = Json::arrayValue; + payloadJson["HostConfig"]["BlkioDeviceReadBps"] = Json::arrayValue; + payloadJson["HostConfig"]["BlkioDeviceWriteBps"] = Json::arrayValue; + payloadJson["HostConfig"]["BlkioDeviceReadIOps"] = Json::arrayValue; + payloadJson["HostConfig"]["BlkioDeviceWriteIOps"] = Json::arrayValue; + payloadJson["HostConfig"]["CpuPeriod"] = 0; + payloadJson["HostConfig"]["CpuQuota"] = 0; + payloadJson["HostConfig"]["CpuRealtimePeriod"] = 0; + payloadJson["HostConfig"]["CpuRealtimeRuntime"] = 0; + payloadJson["HostConfig"]["CpusetCpus"] = ""; + payloadJson["HostConfig"]["CpusetMems"] = ""; + payloadJson["HostConfig"]["Devices"] = Json::arrayValue; + payloadJson["HostConfig"]["DeviceCgroupRules"] = Json::nullValue; + payloadJson["HostConfig"]["DeviceRequests"] = Json::nullValue; + payloadJson["HostConfig"]["MemoryReservation"] = 0; + payloadJson["HostConfig"]["MemorySwap"] = 0; + payloadJson["HostConfig"]["MemorySwappiness"] = Json::nullValue; + payloadJson["HostConfig"]["OomKillDisable"] = Json::nullValue; + payloadJson["HostConfig"]["PidsLimit"] = Json::nullValue; + payloadJson["HostConfig"]["Ulimits"] = Json::nullValue; + payloadJson["HostConfig"]["CpuCount"] = 0; + payloadJson["HostConfig"]["CpuPercent"] = 0; + payloadJson["HostConfig"]["IOMaximumIOps"] = 0; + payloadJson["HostConfig"]["IOMaximumBandwidth"] = 0; + payloadJson["HostConfig"]["MaskedPaths"][0] = "/proc/asound"; + payloadJson["HostConfig"]["MaskedPaths"][1] = "/proc/acpi"; + payloadJson["HostConfig"]["MaskedPaths"][2] = "/proc/kcore"; + payloadJson["HostConfig"]["MaskedPaths"][3] = "/proc/keys"; + payloadJson["HostConfig"]["MaskedPaths"][4] = "/proc/latency_stats"; + payloadJson["HostConfig"]["MaskedPaths"][5] = "/proc/timer_list"; + payloadJson["HostConfig"]["MaskedPaths"][6] = "/proc/timer_stats"; + payloadJson["HostConfig"]["MaskedPaths"][7] = "/proc/sched_debug"; + payloadJson["HostConfig"]["MaskedPaths"][8] = "/proc/scsi"; + payloadJson["HostConfig"]["MaskedPaths"][9] = "/sys/firmware"; + payloadJson["HostConfig"]["ReadonlyPaths"][0] = "/proc/bus"; + payloadJson["HostConfig"]["ReadonlyPaths"][1] = "/proc/fs"; + payloadJson["HostConfig"]["ReadonlyPaths"][2] = "/proc/irq"; + payloadJson["HostConfig"]["ReadonlyPaths"][3] = "/proc/sys"; + payloadJson["HostConfig"]["ReadonlyPaths"][4] = "/proc/sysrq-trigger"; + payloadJson["GraphDriver"]["Data"]["LowerDir"] = "/var/lib/docker/overlay2/5132a5d000dc493f64e1076a4fbefcfd6d04705bb52590b639668d9d82c6652f-init/diff:/var/lib/docker/overlay2/0ffcf17c5b7310dcbced19f13a63e8b7566325eaabf34ded9bc67b7c56057fa2/diff"; + payloadJson["GraphDriver"]["Data"]["MergedDir"] = "/etc/emiso/merged"; + payloadJson["GraphDriver"]["Data"]["UpperDir"] = "/etc/emiso/diff"; + payloadJson["GraphDriver"]["Data"]["WorkDir"] = "/etc/emiso/work"; + payloadJson["GraphDriver"]["Name"] = "overlay2"; + payloadJson["Mounts"] = Json::arrayValue; + payloadJson["Config"]["Hostname"] = "ed856fa2c435"; + payloadJson["Config"]["Domainname"] = ""; + payloadJson["Config"]["User"] = ""; + payloadJson["Config"]["AttachStdin"] = false; + payloadJson["Config"]["AttachStdout"] = true; + payloadJson["Config"]["AttachStderr"] = true; + payloadJson["Config"]["Tty"] = false; + payloadJson["Config"]["OpenStdin"] = false; + payloadJson["Config"]["StdinOnce"] = false; + payloadJson["Config"]["Env"][0] = "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"; + payloadJson["Config"]["Cmd"][0] = ""; + payloadJson["Config"]["Image"] = info.image; + payloadJson["Config"]["Volumes"] = Json::nullValue; + payloadJson["Config"]["WorkingDir"] = ""; + payloadJson["Config"]["Entrypoint"] = Json::nullValue; + payloadJson["Config"]["OnBuild"] = Json::nullValue; + payloadJson["Config"]["Labels"] = Json::objectValue; + payloadJson["NetworkSettings"]["Bridge"] = ""; + payloadJson["NetworkSettings"]["SandboxID"] = "a7c9c2fe37e94ade66a9969d7070fe5d3e894753bb20fe14953692074af9ef00"; + payloadJson["NetworkSettings"]["HairpinMode"] = false; + payloadJson["NetworkSettings"]["LinkLocalIPv6Address"] = ""; + payloadJson["NetworkSettings"]["LinkLocalIPv6PrefixLen"] = 0; + payloadJson["NetworkSettings"]["Ports"] = Json::objectValue; + payloadJson["NetworkSettings"]["SandboxKey"] = "/var/run/docker/netns/a7c9c2fe37e9"; + payloadJson["NetworkSettings"]["SecondaryIPAddresses"] = Json::nullValue; + payloadJson["NetworkSettings"]["SecondaryIPv6Addresses"] = Json::nullValue; + payloadJson["NetworkSettings"]["EndpointID"] = ""; + payloadJson["NetworkSettings"]["Gateway"] = ""; + payloadJson["NetworkSettings"]["GlobalIPv6Address"] = ""; + payloadJson["NetworkSettings"]["GlobalIPv6PrefixLen"] = 0; + payloadJson["NetworkSettings"]["IPAddress"] = ""; + payloadJson["NetworkSettings"]["IPPrefixLen"] = 0; + payloadJson["NetworkSettings"]["IPv6Gateway"] = ""; + payloadJson["NetworkSettings"]["MacAddress"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["IPAMConfig"] = Json::nullValue; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["Links"] = Json::nullValue; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["Aliases"] = Json::nullValue; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["NetworkID"] = "1cacb396f2c32029fe35d73d8d061575bc69baadc15c1cc8fa596aa2ac3c1eaa"; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["EndpointID"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["Gateway"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["IPAddress"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["IPPrefixLen"] = 0; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["IPv6Gateway"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["GlobalIPv6Address"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["GlobalIPv6PrefixLen"] = 0; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["MacAddress"] = ""; + payloadJson["NetworkSettings"] ["Networks"]["bridge"]["DriverOpts"] = Json::nullValue; + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payloadJson); + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + + private: + // daemon::Container _container; + Daemon *_daemon; + }; + +} // container +} // emiso + +#endif /* EMISO_CONTAINER_INSPECT_H */ \ No newline at end of file diff --git a/linux/usr/emiso_engine/webserver/container/container_logs.hpp b/linux/usr/emiso_engine/webserver/container/container_logs.hpp new file mode 100644 index 0000000000..b1ffedc611 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/container/container_logs.hpp @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2024 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_CONTAINER_LOGS_H +#define EMISO_CONTAINER_LOGS_H + +namespace emiso { +namespace container { + +class LogsHandler : public httpserver::http_resource { + public: + LogsHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + // std::string payload_str = ""; + // Json::Value payloadJson; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // == Retrieve container ID from the request path == + int containerId = stoi(req.get_arg("id")); + int lineNr = stoi(req.get_arg("tail")); + + std::cout << "container ID: " << containerId << std::endl; + + // == Retrieve QUERY params == + for (const auto& arg : req.get_args()) { + std::cout << "param: " << arg.first << ", value: " << arg.second << std::endl; + } + + std::vector lines; + lines = _daemon->container.retrieveLogs(containerId, lineNr); + + std::string message; + for (int i = 0; i < lines.size(); i++) { + message += lines[i] + "\n"; + } + + auto response = std::make_shared(message, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + + private: + Daemon *_daemon; + }; + + +} // container +} // emiso + +#endif // EMISO_CONTAINER_LOGS_H \ No newline at end of file diff --git a/linux/usr/emiso_engine/webserver/image/image.cpp b/linux/usr/emiso_engine/webserver/image/image.cpp new file mode 100644 index 0000000000..c0f384ae4f --- /dev/null +++ b/linux/usr/emiso_engine/webserver/image/image.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "image.hpp" + +namespace emiso { + + namespace image { + + ImageApi::ImageApi(httpserver::webserver *server, Daemon *daemon) + : _server(server) { + std::string path = "/images"; + + // Create routes and handlers + _listHandler = new ListHandler(daemon); + + _server->register_resource(path + "/json", _listHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path + "/json", _listHandler); + } + + ImageApi::~ImageApi() {} + } +} diff --git a/linux/usr/emiso_engine/webserver/image/image.hpp b/linux/usr/emiso_engine/webserver/image/image.hpp new file mode 100644 index 0000000000..160c6a504d --- /dev/null +++ b/linux/usr/emiso_engine/webserver/image/image.hpp @@ -0,0 +1,93 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_IMAGE_H +#define EMISO_IMAGE_H + +#include +#include +#include + +#include "../../daemon/image.hpp" +#include "../../daemon/daemon.hpp" + +namespace emiso { +namespace image { + + class ListHandler : public httpserver::http_resource { + public: + ListHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::string payload_str = ""; + Json::Value payload_json; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // Retrieve image info + std::map info; + _daemon->image.info(info); + + unsigned idx = 0; + for (auto it = info.begin(); it != info.end(); ++it) { + + payload_json[idx]["Id"] = it->second.id; + payload_json[idx]["ParentId"] = ""; + payload_json[idx]["RepoTags"][0] = it->second.name + ":latest"; + payload_json[idx]["Created"] = it->second.date; + payload_json[idx]["Size"] = it->second.size; + payload_json[idx]["SharedSize"] = -1; // Value not set or calculated + payload_json[idx]["Containers"] = -1; // Value not set or calculated + payload_json[idx]["Labels"] = Json::Value::null; + + idx++; + } + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payload_json); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + + private: + // daemon::Image _image; + Daemon *_daemon; + + }; + + class ImageApi { + public: + // Constructor + ImageApi(httpserver::webserver *server, Daemon *daemon); + + // Destructor + ~ImageApi(); + + private: + httpserver::webserver *_server; + + // Handler for the different 'list' routes + ListHandler *_listHandler; + + }; +} +} + +#endif /* EMISO_IMAGE_H */ diff --git a/linux/usr/emiso_engine/webserver/network/network.cpp b/linux/usr/emiso_engine/webserver/network/network.cpp new file mode 100644 index 0000000000..52d72eea62 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/network/network.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "network.hpp" + +namespace emiso { + + namespace network { + + NetworkApi::NetworkApi(httpserver::webserver *server) + : _server(server) { + std::string path = "/networks"; + + // Create routes and handlers + _listHandler = new ListHandler(); + + _server->register_resource(path, _listHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path, _listHandler); + } + + NetworkApi::~NetworkApi() {} + } +} diff --git a/linux/usr/emiso_engine/webserver/network/network.hpp b/linux/usr/emiso_engine/webserver/network/network.hpp new file mode 100644 index 0000000000..6b9ee25e7b --- /dev/null +++ b/linux/usr/emiso_engine/webserver/network/network.hpp @@ -0,0 +1,63 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_NETWORK_H +#define EMISO_NETWORK_H + +#include +#include +#include + +namespace emiso { + + namespace network { + + class ListHandler : public httpserver::http_resource { + public: + + // In emiso, network is not supported --> return an empty list ! + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::string payload_str = "[]"; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + }; + + class NetworkApi { + public: + // Constructor + NetworkApi(httpserver::webserver *server); + + // Destructor + ~NetworkApi(); + + private: + httpserver::webserver *_server; + + // Handler for the different 'list' routes + ListHandler *_listHandler; + + }; + } +} + +#endif /* EMISO_NETWORK_H */ diff --git a/linux/usr/emiso_engine/webserver/system/system.cpp b/linux/usr/emiso_engine/webserver/system/system.cpp new file mode 100644 index 0000000000..211ed8c025 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/system/system.cpp @@ -0,0 +1,42 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "system.hpp" + +namespace emiso { + namespace system { + + SytemApi::SytemApi(httpserver::webserver *server, Daemon *daemon) + : _server(server) { + + // Create routes and handlers + _pinghandler = new PingHandler(); + _sysInfoHandler = new SysInfoHandler(daemon); + _getVersionHandler = new GetVersionHandler(); + + _server->register_resource("/_ping", _pinghandler); + _server->register_resource("/v[1-9]+.[0-9]+/_ping", _pinghandler); + _server->register_resource("/v[1-9]+.[0-9]+/info", _sysInfoHandler); + _server->register_resource("/info", _sysInfoHandler); + _server->register_resource("/version", _getVersionHandler); + _server->register_resource("/v[1-9]+.[0-9]+/version", _getVersionHandler); + } + + SytemApi::~SytemApi() {} + } +} diff --git a/linux/usr/emiso_engine/webserver/system/system.hpp b/linux/usr/emiso_engine/webserver/system/system.hpp new file mode 100644 index 0000000000..8a6b625a21 --- /dev/null +++ b/linux/usr/emiso_engine/webserver/system/system.hpp @@ -0,0 +1,238 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_SYSTEM_H +#define EMISO_SYSTEM_H + +#include +#include +#include + +#include +#include + +#include "../../daemon/image.hpp" +#include "../../daemon/container.hpp" +#include "../../daemon/daemon.hpp" + +namespace emiso { + namespace system { + + class PingHandler : public httpserver::http_resource { + public: + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + // Respond is a simple 'OK' + auto response = std::make_shared("OK"); + return response; + } + + const std::shared_ptr render_HEAD(const httpserver::http_request &req) { + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + auto response = std::shared_ptr(new httpserver::string_response("")); + + response->with_header("Api-Version", EMISO_WEB_API_VERSION); + response->with_header("Builder-Version", EMISO_VERSION); + if (EMISO_WEB_EXPERIMENTAL) + response->with_header("Docker-Experimental", "true"); + else + response->with_header("Docker-Experimental", "false"); + response->with_header("Swarm", EMISO_WEB_SWARM); + response->with_header("Cache-Control", "no-cache, no-store, must-revalidate"); + response->with_header("Pragma", "no-cache"); + + return response; + } + }; + + class SysInfoHandler : public httpserver::http_resource { + public: + SysInfoHandler(Daemon *daemon) : _daemon(daemon) {}; + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + std::string payload_str = ""; + Json::Value payload_json; + Utils& utils = Utils::getInstance(); + auto config = utils.getInfo(); + // daemon::Image image; + std::map info; + // daemon::Container container; + std::map containerInfo; + + // Retrieve images info + _daemon->image.info(info); + auto image_nr = info.size(); + + // Retrieve container info + _daemon->container.info(containerInfo); + auto containerNr = containerInfo.size(); + + payload_json["ID"] = utils.getAgencyUID(); + payload_json["Containers"] = containerNr; // To update next + payload_json["ContainersRunning"] = containerNr; // To update next + payload_json["ContainersPaused"] = 0; // To update next + payload_json["ContainersStopped"] = 0; // To update next + payload_json["Images"] = image_nr; // To update next + + // WARNING - hardcoded values got from Docker answer of JMI PC + payload_json["Driver"] = "overlay2"; + payload_json["DriverStatus"][0].append("Backing Filesystem"); + payload_json["DriverStatus"][0].append("extfs"); + payload_json["DriverStatus"][1].append("Supports d_type"); + payload_json["DriverStatus"][1].append("true"); + payload_json["DriverStatus"][2].append("Using metacopy"); + payload_json["DriverStatus"][2].append("false"); + payload_json["DriverStatus"][3].append("Native Overlay Diff"); + payload_json["DriverStatus"][3].append("true"); + payload_json["DriverStatus"][4].append("userxattr"); + payload_json["DriverStatus"][4].append("false"); + + payload_json["DockerRootDir"] = "/var/lib/docker"; // default value on Linux + payload_json["Plugins"] = Json::objectValue; + + // Set these values to false as not supported/handled by emiso + payload_json["MemoryLimit"] = "false"; + payload_json["SwapLimit"] = "false"; + payload_json["CpuCfsPeriod"] = "false"; + payload_json["CpuCfsQuota"] = "false"; + payload_json["CPUShares"] = "false"; + payload_json["CPUSet"] = "false"; + payload_json["PidsLimit"] = "false"; + payload_json["OomKillDisable"] = "false"; + payload_json["IPv4Forwarding"] = "false"; + payload_json["BridgeNfIptables"] = "false"; + payload_json["BridgeNfIp6tables"] = "false"; + payload_json["Debug"] = "false"; + + payload_json["SystemTime"] = utils.getSystemTime(); + payload_json["LoggingDriver"] = "json-file"; // WARNING - hardcoded values got from Docker answer of JMI PC + payload_json["CgroupDriver"] = "none"; + payload_json["CgroupVersion"] = 1; // Default docker value + payload_json["NEventsListener"] = 0; + + payload_json["KernelVersion"] = config.kernel_version; + payload_json["OperatingSystem"] = config.os; + payload_json["OSVersion"] = config.os_version; + payload_json["OSType"] = config.os_type; + payload_json["Architecture"] = config.arch; + + payload_json["NCPU"] = 1; // Get info from Agency ? + payload_json["MemTotal"] = 536870912; // Get info from Agency ? + payload_json["IndexServerAddress"] = "https://index.docker.io/v1/"; + payload_json["RegistryConfig"] = Json::objectValue; + payload_json["GenericResources"] = Json::arrayValue; + + payload_json["HttpProxy"] = ""; // use 'HTTP_PROXY' env variable + payload_json["HttpsProxy"] = ""; // use 'HTTPS_PROXY' env variable + payload_json["NoProxy"] = ""; // use 'NO_PROXY' env variable + payload_json["Name"] = "agency"; // Host name + payload_json["Labels"] = Json::arrayValue; + payload_json["ExperimentalBuild"] = EMISO_WEB_EXPERIMENTAL; + payload_json["ServerVersion"] = "24.0.5"; + payload_json["ServerVersion"] = Json::objectValue; + payload_json["DefaultRuntime"] = ""; + + payload_json["Swarm"]["NodeID"] = ""; + payload_json["Swarm"]["NodeAddr"] = ""; + payload_json["Swarm"]["LocalNodeState"] = "inactive"; + payload_json["Swarm"]["ControlAvailable"] = "false"; + payload_json["Swarm"]["Error"] = ""; + payload_json["Swarm"]["RemoteManagers"] = Json::objectValue; + + payload_json["LiveRestoreEnabled"] = false; + payload_json["Isolation"] = "VT"; // TODO - platform specific + payload_json["SecurityOptions"] = Json::arrayValue; + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payload_json); + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + private: + Daemon *_daemon; + }; + + class GetVersionHandler : public httpserver::http_resource { + public: + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + std::string payload_str = ""; + Json::Value payload_json; + Utils& utils = Utils::getInstance(); + int response_code = httpserver::http::http_utils::http_ok; + + auto config = utils.getInfo(); + + payload_json["Platform"]["name"] = EMISO_PLATFORM_NAME; + payload_json["Components"][0]["name"] = EMISO_WEB_COMP_NAME; + payload_json["Components"][0]["version"] = EMISO_VERSION; + payload_json["Version"] = EMISO_VERSION; + payload_json["ApiVersion"] = EMISO_WEB_API_VERSION; + payload_json["MinAPIVersion"] = EMISO_WEB_API_VERSION; + + // Get info directly from the system + payload_json["Os"] = config.os_type; + payload_json["Arch"] = config.arch; + payload_json["KernelVersion"] = config.kernel_version; + + payload_json["Experimental"] = EMISO_WEB_EXPERIMENTAL; + + // not implemented yet ! + // payload_json["GitCommit"] + // payload_json["GoVersion"] + // payload_json["BuildTime"] + + Json::StreamWriterBuilder builder; + payload_str = Json::writeString(builder, payload_json); + + auto response = std::make_shared(payload_str, + response_code, "application/json"); + return response; + } + }; + + + class SytemApi { + public: + // Constructor + SytemApi(httpserver::webserver *server, Daemon *daemon); + + // Destructor + ~SytemApi(); + + private: + httpserver::webserver *_server; + + // Handler for the different routes + PingHandler *_pinghandler; + SysInfoHandler *_sysInfoHandler; + GetVersionHandler *_getVersionHandler; + }; + } +} + +#endif /* EMISO_SYSTEM_H */ diff --git a/linux/usr/emiso_engine/webserver/volume/volume.cpp b/linux/usr/emiso_engine/webserver/volume/volume.cpp new file mode 100644 index 0000000000..8b8f11a19e --- /dev/null +++ b/linux/usr/emiso_engine/webserver/volume/volume.cpp @@ -0,0 +1,38 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include "volume.hpp" + +namespace emiso { + + namespace volume { + + VolumeApi::VolumeApi(httpserver::webserver *server) + : _server(server) { + std::string path = "/volumes"; + + // Create routes and handlers + _listHandler = new ListHandler(); + + _server->register_resource(path, _listHandler); + _server->register_resource("/v[1-9]+.[0-9]+" + path, _listHandler); + } + + VolumeApi::~VolumeApi() {} + } +} diff --git a/linux/usr/emiso_engine/webserver/volume/volume.hpp b/linux/usr/emiso_engine/webserver/volume/volume.hpp new file mode 100644 index 0000000000..79b2050eab --- /dev/null +++ b/linux/usr/emiso_engine/webserver/volume/volume.hpp @@ -0,0 +1,62 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_VOLUME_H +#define EMISO_VOLUME_H + +#include +#include +#include + +namespace emiso { + + namespace volume { + + class ListHandler : public httpserver::http_resource { + public: + + const std::shared_ptr render_GET(const httpserver::http_request &req) { + std::string payload_str = "[]"; + + std::cout << "[WEBERVER] '" << req.get_path() << "' (" << req.get_method() << ") called" << std::endl; + + auto response = std::make_shared(payload_str, + httpserver::http::http_utils::http_ok, "application/json"); + return response; + } + }; + + class VolumeApi { + public: + // Constructor + VolumeApi(httpserver::webserver *server); + + // Destructor + ~VolumeApi(); + + private: + httpserver::webserver *_server; + + // Handler for the different 'list' routes + ListHandler *_listHandler; + + }; + } +} + +#endif /* EMISO_VOLUME_H */ diff --git a/linux/usr/emiso_engine/webserver/webserver.cpp b/linux/usr/emiso_engine/webserver/webserver.cpp new file mode 100644 index 0000000000..d4e7f808eb --- /dev/null +++ b/linux/usr/emiso_engine/webserver/webserver.cpp @@ -0,0 +1,60 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#include + +#include "webserver.hpp" + +namespace emiso { + + WebServer::WebServer(int port, bool secure, Daemon *daemon) + : _port(port), _secure(secure) { + + // Use builder to define webserver configuration options + httpserver::create_webserver cw = httpserver::create_webserver(_port); + if (secure) + cw.use_ssl().https_mem_key("key.pem").https_mem_cert("cert.pem"); + + // Create webserver using the configured options + _server = new httpserver::webserver(cw); + + // Registration of the different APIs + _system = new system::SytemApi(_server, daemon); + _container = new container::ContainerApi(_server, daemon); + _image = new image::ImageApi(_server, daemon); + _network = new network::NetworkApi(_server); + _volume = new volume::VolumeApi(_server); + + // Create the default path - it responds to all paths + _defaultHandler = new DefaultHandler(); + _server->register_resource("^/.*$", _defaultHandler); + } + + WebServer:: ~WebServer() {} + + void WebServer::start(bool blocking) + { + // Start the server + std::cout << "Server started on port " << _port; + if (_secure) + std::cout << " (HTTPS/TLS mode ON)"; + std::cout << std::endl; + + _server->start(blocking); + } +} diff --git a/linux/usr/emiso_engine/webserver/webserver.hpp b/linux/usr/emiso_engine/webserver/webserver.hpp new file mode 100644 index 0000000000..b226c63a6a --- /dev/null +++ b/linux/usr/emiso_engine/webserver/webserver.hpp @@ -0,0 +1,87 @@ +/* + * Copyright (C) 2023 Jean-Pierre Miceli + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifndef EMISO_WEBSERVER_H +#define EMISO_WEBSERVER_H + +#include + +#include "system/system.hpp" +#include "container/container.hpp" +#include "image/image.hpp" +#include "network/network.hpp" +#include "volume/volume.hpp" +#include "../daemon/daemon.hpp" + +// DefaultHandler - used to print info for all paths not already registered to the +// server +class DefaultHandler : public httpserver::http_resource { +public: + const std::shared_ptr render(const httpserver::http_request& req) { + std::cout << "Received message on port " << 2375 << ":" << std::endl; + std::cout << "Method: " << req.get_method() << std::endl; + std::cout << "Path: " << req.get_path() << std::endl; + std::cout << "Headers:" << std::endl; + for (const auto& header : req.get_headers()) { + std::cout << " " << header.first << ": " << header.second << std::endl; + } + std::cout << "Body: " << req.get_content() << std::endl; + + // Respond with a simple message + std::string message = "Path '" + req.get_path() + "' not implemented\n"; + + auto response = std::make_shared(message); + return response; + } +}; + +namespace emiso { + + class WebServer { + public: + // Constructor + WebServer(int port, bool secure, Daemon *daemon); + + // Destructor + ~WebServer(); + + // Start the server + void start(bool blocking = false); + + // Stop the server + // void stop(); + + private: + int _port; + bool _secure; + httpserver::webserver *_server; + + // Different services + system::SytemApi *_system; + container::ContainerApi *_container; + image::ImageApi *_image; + network::NetworkApi *_network; + volume::VolumeApi *_volume; + + // Default handler - not registered routes + DefaultHandler *_defaultHandler; + + }; +} + +#endif /* EMISO_WEBSERVER_H */ diff --git a/linux/usr/include/core/core.h b/linux/usr/include/core/core.h index 47a9c230ce..6a3bc0b5f9 100644 --- a/linux/usr/include/core/core.h +++ b/linux/usr/include/core/core.h @@ -50,7 +50,6 @@ bool get_ME_id(uint32_t slotID, ME_id_t *ME_id); void read_ME_snapshot(unsigned int slotID, void **buffer, uint32_t *buffer_size); void write_ME_snapshot(unsigned int slotID, unsigned char *ME_buffer); -void *prepare_ME_slot(unsigned int slotID); int finalize_migration(unsigned int slotID); void main_loop(int cycle_period); diff --git a/target/bbb.its b/target/bbb.its new file mode 100644 index 0000000000..835a735e4f --- /dev/null +++ b/target/bbb.its @@ -0,0 +1,74 @@ +/* + * Copyright (C) 2020 Daniel Rossier + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +/dts-v1/; + +/ { + description = "Kernel and rootfs components for BeagleBoneBlack environment"; + + images { + + linux { + description = "Linux kernel"; + data = /incbin/("../linux/linux/arch/arm/boot/zImage"); + type = "kernel"; + arch = "arm"; + os = "linux"; + compression = "none"; +<<<<<<< HEAD:target/bbb.its + load = <0x80008000>; + entry = <0x80008000>; + }; + + fdt_linux { + description = "Linux device tree blob"; + data = /incbin/("../linux/linux/arch/arm/boot/dts/am335x-boneblack.dtb"); +======= + load = <0x01008000>; + entry = <0x01008000>; + }; + + fdt { + description = "SO3 device tree blob"; + data = /incbin/("../so3/dts/rpi4.dtb"); +>>>>>>> d0f96911b1 (align with main SO3):so3/target/rpi4_so3_standalone.its + type = "flat_dt"; + arch = "arm"; + compression = "none"; + load = <0x88000000>; + }; + }; + + configurations { + default = "conf_linux"; + +<<<<<<< HEAD:target/bbb.its + conf_linux { + description = "Linux on BeagleBoneBlack"; + kernel = "linux"; + fdt = "fdt_linux"; +======= + conf_so3 { + description = "SO3 on Raspberry Pi 4"; + kernel = "so3"; + fdt = "fdt"; + ramdisk = "ramfs"; +>>>>>>> d0f96911b1 (align with main SO3):so3/target/rpi4_so3_standalone.its + }; + }; +}; diff --git a/target/virt64.its b/target/virt64.its index cd7c1b8948..34b3d70450 100644 --- a/target/virt64.its +++ b/target/virt64.its @@ -41,8 +41,8 @@ arch = "arm64"; os = "linux"; compression = "none"; - load = <0x41000000>; - entry = <0x41000000>; + load = <0x4b000000>; + entry = <0x4b000000>; }; avz_pv_dt { @@ -51,7 +51,7 @@ type = "avz_dt"; arch = "arm64"; compression = "none"; - load = <0x40f00000>; + load = <0x4a000000>; }; avz_vt_dt { @@ -60,7 +60,7 @@ type = "avz_dt"; arch = "arm64"; compression = "none"; - load = <0x40f00000>; + load = <0x4a000000>; }; fdt { @@ -69,7 +69,7 @@ type = "flat_dt"; arch = "arm64"; compression = "none"; - load = <0x50000000>; + load = <0x5a000000>; }; initrd { @@ -79,7 +79,7 @@ arch = "arm64"; os = "linux"; compression = "none"; - load = <0x50c00000>; + load = <0x5b000000>; }; }; diff --git a/trusted-firmware-a/build.sh b/trusted-firmware-a/build.sh index ed149ae062..e09aff260f 100755 --- a/trusted-firmware-a/build.sh +++ b/trusted-firmware-a/build.sh @@ -7,11 +7,11 @@ while read var; do if [ "$var" != "" ]; then export $(echo $var | sed -e 's/ //g' -e /^$/d -e 's/://g' -e /^#/d) fi -done < ../agency/build.conf +done < ../build.conf -if [ "$PLATFORM" == "merida" ]; then - echo "Building ATF for running on MERIDA" - make CROSS_COMPILE=aarch64-linux-gnu- PLAT=sun50i_a64 DEBUG=1 SPD=opteed bl31 -j8 +if [ "$PLATFORM" == "virt64" ]; then + echo "Building ATF for running on QEMU/virt64" + make CROSS_COMPILE=aarch64-none-linux-gnu- PLAT=qemu DEBUG=1 SPD=opteed bl31 -j8 fi if [ "$PLATFORM" == "vexpress" ]; then