diff --git a/Android.mk b/Android.mk index 87bf6d6..76533b7 100644 --- a/Android.mk +++ b/Android.mk @@ -13,11 +13,8 @@ # See the License for the specific language governing permissions and # limitations under the License. -ifeq ($(RECOVERY_VARIANT), twrp) -ifeq ($(TARGET_DEVICE), m7univ) - LOCAL_PATH := $(call my-dir) -include $(call first-makefiles-under, $(LOCAL_PATH)) -endif +ifneq ($(filter m7univ,$(TARGET_DEVICE)),) +include $(call all-makefiles-under,$(LOCAL_PATH)) endif diff --git a/AndroidBoard.mk b/AndroidBoard.mk deleted file mode 100644 index 6a1a048..0000000 --- a/AndroidBoard.mk +++ /dev/null @@ -1,8 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -ALL_PREBUILT += $(INSTALLED_KERNEL_TARGET) - -# include the non-open-source counterpart to this file --include vendor/htc/m7univ/AndroidBoardVendor.mk diff --git a/AndroidProducts.mk b/AndroidProducts.mk index ceb8eff..1ccd644 100644 --- a/AndroidProducts.mk +++ b/AndroidProducts.mk @@ -1,2 +1,2 @@ PRODUCT_MAKEFILES := \ - $(LOCAL_DIR)/device.mk + $(LOCAL_DIR)/omni_m7univ.mk diff --git a/BoardConfig.mk b/BoardConfig.mk index 13e06a3..4acc89b 100644 --- a/BoardConfig.mk +++ b/BoardConfig.mk @@ -14,7 +14,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -USE_CAMERA_STUB := true +BOARD_VENDOR := htc # inherit from the proprietary version -include vendor/htc/m7univ/BoardConfigVendor.mk @@ -41,8 +41,7 @@ BOARD_KERNEL_BASE := 0x80600000 BOARD_KERNEL_CMDLINE := console=ttyHSL0,115200,n8 androidboot.hardware=qcom user_debug=31 androidboot.selinux=permissive BOARD_KERNEL_PAGESIZE := 2048 BOARD_MKBOOTIMG_ARGS := --ramdisk_offset 0x01800000 -TARGET_KERNEL_CONFIG := m7_defconfig -TARGET_KERNEL_SOURCE := kernel/htc/msm8960 +TARGET_PREBUILT_KERNEL := device/$(BOARD_VENDOR)/$(TARGET_DEVICE)/prebuilt/zImage # QCOM hardware BOARD_USES_QCOM_HARDWARE := true @@ -64,14 +63,22 @@ TARGET_POWERHAL_VARIANT := qcom # Filesystem TARGET_USERIMAGES_USE_EXT4 := true +TARGET_USERIMAGES_USE_F2FS := true BOARD_BOOTIMAGE_PARTITION_SIZE := 16777216 BOARD_RECOVERYIMAGE_PARTITION_SIZE := 16776704 BOARD_SYSTEMIMAGE_PARTITION_SIZE := 1946156032 BOARD_USERDATAIMAGE_PARTITION_SIZE := 27917287424 BOARD_FLASH_BLOCK_SIZE := 131072 +# Android version & Security Patch Level +# Default TWRP Values +PLATFORM_VERSION := 20.1.0 +PLATFORM_SECURITY_PATCH := 2099-12-31 + # Recovery BOARD_HAS_NO_SELECT_BUTTON := true +BOARD_NEEDS_LZMA_MINIGZIP := true +LZMA_RAMDISK_TARGETS := recovery # Vold BOARD_VOLD_MAX_PARTITIONS := 38 @@ -79,19 +86,8 @@ BOARD_VOLD_MAX_PARTITIONS := 38 # Charge mode BOARD_CHARGING_MODE_BOOTING_LPM := /sys/htc_lpm/lpm_mode -# SELinux --include device/qcom/sepolicy/sepolicy.mk - -BOARD_SEPOLICY_DIRS += device/htc/m7univ/sepolicy - -BOARD_SEPOLICY_UNION += \ - akmd.te \ - cir_fw_update.te - # Vendor Init -TARGET_UNIFIED_DEVICE := true -TARGET_INIT_VENDOR_LIB := libinit_m7univ -TARGET_LIBINIT_DEFINES_FILE := device/htc/m7univ/init/init_m7univ.c +TARGET_INIT_VENDOR_LIB := libinit_$(TARGET_DEVICE) # TWRP TW_THEME := portrait_hdpi @@ -99,11 +95,13 @@ TARGET_RECOVERY_PIXEL_FORMAT := "RGBX_8888" RECOVERY_GRAPHICS_USE_LINELENGTH := true TW_BRIGHTNESS_PATH := "/sys/class/leds/lcd-backlight/brightness" TW_INCLUDE_CRYPTO := true +TW_OVERRIDE_SYSTEM_PROPS := "ro.build.fingerprint" BOARD_RECOVERY_BLDRMSG_OFFSET := 2048 RECOVERY_VARIANT := twrp -TARGET_RECOVERY_DEVICE_MODULES := chargeled libinit_m7univ +TARGET_RECOVERY_DEVICE_MODULES := chargeled liblog_htc_sbin RECOVERY_SDCARD_ON_DATA := true BOARD_HAS_NO_REAL_SDCARD := true +#TW_USE_TOOLBOX := true TW_NO_USB_STORAGE := true TW_EXTERNAL_STORAGE_PATH := "/usb-otg" TW_EXTERNAL_STORAGE_MOUNT_POINT := "usb-otg" diff --git a/README.md b/README.md new file mode 100644 index 0000000..02ca056 --- /dev/null +++ b/README.md @@ -0,0 +1,5 @@ +TeamWin Recovery Project + +Device files for HTC One (M7) + +Builds with OmniROM android-8.1 tree \ No newline at end of file diff --git a/Readme.md b/Readme.md deleted file mode 100644 index 33de829..0000000 --- a/Readme.md +++ /dev/null @@ -1,9 +0,0 @@ -**TWRP - HTC One (Universal)** - -This is a recovery-only device tree for the HTC One (m7att / m7tmo / m7ul / m7wls / m7wlv). - -**Quick build instructions:** - - . build/envsetup.sh - lunch cm_m7univ-eng - mka recoveryimage diff --git a/cm.dependencies b/cm.dependencies deleted file mode 100644 index 3e3c5ba..0000000 --- a/cm.dependencies +++ /dev/null @@ -1,6 +0,0 @@ -[ - { - "repository": "android_kernel_htc_msm8960", - "target_path": "kernel/htc/msm8960" - } -] diff --git a/cm.mk b/cm.mk deleted file mode 100644 index b0d09f1..0000000 --- a/cm.mk +++ /dev/null @@ -1,15 +0,0 @@ -# Release name -PRODUCT_RELEASE_NAME := m7univ - -# Inherit some common CM stuff. -$(call inherit-product, vendor/cm/config/common_full_phone.mk) - -# Inherit device configuration -$(call inherit-product, device/htc/m7univ/device.mk) - -# Device identifier - this must come after all inclusions -PRODUCT_DEVICE := m7univ -PRODUCT_NAME := cm_m7univ -PRODUCT_BRAND := htc -PRODUCT_MODEL := One -PRODUCT_MANUFACTURER := HTC diff --git a/device.mk b/device.mk deleted file mode 100644 index 81d1067..0000000 --- a/device.mk +++ /dev/null @@ -1,21 +0,0 @@ -$(call inherit-product, $(SRC_TARGET_DIR)/product/languages_full.mk) - -# The gps config appropriate for this device -$(call inherit-product, device/common/gps/gps_us_supl.mk) - -$(call inherit-product-if-exists, vendor/htc/m7univ/m7univ-vendor.mk) - -DEVICE_PACKAGE_OVERLAYS += device/htc/m7univ/overlay - -LOCAL_PATH := device/htc/m7univ -ifeq ($(TARGET_PREBUILT_KERNEL),) - LOCAL_KERNEL := $(LOCAL_PATH)/kernel -else - LOCAL_KERNEL := $(TARGET_PREBUILT_KERNEL) -endif - -$(call inherit-product, build/target/product/full.mk) - -PRODUCT_BUILD_PROP_OVERRIDES += BUILD_UTC_DATE=0 -PRODUCT_NAME := full_m7univ -PRODUCT_DEVICE := m7univ diff --git a/recovery/chargeled/Android.mk b/init/Android.mk similarity index 56% rename from recovery/chargeled/Android.mk rename to init/Android.mk index e032ffb..2ccab58 100644 --- a/recovery/chargeled/Android.mk +++ b/init/Android.mk @@ -1,31 +1,31 @@ # -# Copyright (C) 2014 The CyanogenMod Project +# Copyright (C) 2016 The CyanogenMod Project # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # -# http://www.apache.org/licenses/LICENSE-2.0 +# http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -# LOCAL_PATH := $(call my-dir) + include $(CLEAR_VARS) -LOCAL_SRC_FILES := chargeled.c +LOCAL_MODULE_TAGS := optional +LOCAL_C_INCLUDES := system/core/init +LOCAL_CFLAGS := -Wall -DANDROID_TARGET=\"$(TARGET_BOARD_PLATFORM)\" + +LOCAL_SRC_FILES := init_$(TARGET_DEVICE).cpp -LOCAL_CFLAGS += -Wall +LOCAL_MODULE := libinit_$(TARGET_DEVICE) -LOCAL_STATIC_LIBRARIES := libc liblog libcutils -LOCAL_FORCE_STATIC_EXECUTABLE := true +LOCAL_STATIC_LIBRARIES := \ + libbase -LOCAL_MODULE := chargeled -LOCAL_MODULE_TAGS := optional eng -LOCAL_MODULE_CLASS := RECOVERY_EXECUTABLES -LOCAL_MODULE_PATH := $(TARGET_RECOVERY_ROOT_OUT)/sbin -include $(BUILD_EXECUTABLE) +include $(BUILD_STATIC_LIBRARY) \ No newline at end of file diff --git a/init/init_m7univ.cpp b/init/init_m7univ.cpp new file mode 100644 index 0000000..a45a4df --- /dev/null +++ b/init/init_m7univ.cpp @@ -0,0 +1,83 @@ +/* + Copyright (c) 2013, The Linux Foundation. All rights reserved. + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions are + met: + * Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above + copyright notice, this list of conditions and the following + disclaimer in the documentation and/or other materials provided + with the distribution. + * Neither the name of The Linux Foundation nor the names of its + contributors may be used to endorse or promote products derived + from this software without specific prior written permission. + + THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED + WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT + ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS + BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR + BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, + WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE + OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include +#define _REALLY_INCLUDE_SYS__SYSTEM_PROPERTIES_H_ +#include + +#include +#include + +#include "property_service.h" + +namespace android { +namespace init { + +void property_override(char const prop[], char const value[]) { + prop_info *pi; + + pi = (prop_info*) __system_property_find(prop); + if (pi) + __system_property_update(pi, value, strlen(value)); + else + __system_property_add(prop, strlen(prop), value, strlen(value)); +} + +void property_override_dual(char const system_prop[], char const vendor_prop[], + char const value[]) +{ + property_override(system_prop, value); + property_override(vendor_prop, value); +} + +void vendor_load_properties() { + std::string platform = android::base::GetProperty("ro.board.platform", ""); + std::string bootmid; + std::string device; + + bootmid = android::base::GetProperty("ro.boot.mid", ""); + if (bootmid == "PN0720000") { + /* m7wls */ + property_override_dual("ro.product.device", "ro.vendor.product.device", "m7wls"); + property_override("ro.build.product", "m7wls"); + } else if (bootmid == "PN0731000") { + /* m7wlv */ + property_override_dual("ro.product.device", "ro.vendor.product.device", "m7wlv"); + property_override("ro.build.product", "m7wlv"); + } else { + /* m7 */ + property_override_dual("ro.product.device", "ro.vendor.product.device", "m7"); + property_override("ro.build.product", "m7"); + } + device = android::base::GetProperty("ro.product.device", ""); + LOG(INFO) << "Found bootmid '" << bootmid.c_str() << + "' setting build properties for '" << device.c_str() << "' device\n"; +} +} // namespace init +} // namespace android diff --git a/omni.dependencies b/omni.dependencies new file mode 100644 index 0000000..f248aac --- /dev/null +++ b/omni.dependencies @@ -0,0 +1,14 @@ +[ + { + "remote": "github", + "repository": "TeamWin/android_device_qcom_htc-common", + "target_path": "device/qcom/htc-common", + "revision": "android-8.1" + }, + { + "remote": "github", + "repository": "TeamWin/android_device_qcom_common", + "target_path": "device/qcom/common", + "revision": "android-8.1" + } +] diff --git a/omni_m7univ.mk b/omni_m7univ.mk new file mode 100644 index 0000000..70a5957 --- /dev/null +++ b/omni_m7univ.mk @@ -0,0 +1,38 @@ +# Copyright (C) 2011 The Android Open Source Project +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# +# This file is the build configuration for a full Android +# build for maguro hardware. This cleanly combines a set of +# device-specific aspects (drivers) with a device-agnostic +# product configuration (apps). Except for a few implementation +# details, it only fundamentally contains two inherit-product +# lines, full and maguro, hence its name. +# + +# Release name +PRODUCT_RELEASE_NAME := m7univ + +# Inherit from the common Open Source product configuration +$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base_telephony.mk) + +# Inherit some common Omni stuff. +$(call inherit-product, vendor/omni/config/common.mk) + +## Device identifier. This must come after all inclusions +PRODUCT_DEVICE := m7univ +PRODUCT_NAME := omni_m7univ +PRODUCT_BRAND := htc +PRODUCT_MODEL := One +PRODUCT_MANUFACTURER := HTC diff --git a/prebuilt/zImage b/prebuilt/zImage new file mode 100644 index 0000000..460f549 Binary files /dev/null and b/prebuilt/zImage differ diff --git a/recovery/Android.mk b/recovery/Android.mk deleted file mode 100644 index 869e8ad..0000000 --- a/recovery/Android.mk +++ /dev/null @@ -1,2 +0,0 @@ -LOCAL_PATH := $(call my-dir) -include $(call first-makefiles-under, $(LOCAL_PATH)) diff --git a/recovery/chargeled/chargeled.c b/recovery/chargeled/chargeled.c deleted file mode 100644 index 055bbe4..0000000 --- a/recovery/chargeled/chargeled.c +++ /dev/null @@ -1,265 +0,0 @@ -/* - * Copyright (C) 2014 The CyanogenMod Project - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#define LOG_TAG "[CHRG_LED]" -#define KLOG_LEVEL 6 - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#define POWER_SUPPLY_SUBSYSTEM "SUBSYSTEM=power_supply" - -#define BATTERY_STATUS_FILE "/sys/class/power_supply/battery/status" -#define AMBER_LED "/sys/class/leds/amber/brightness" -#define GREEN_LED "/sys/class/leds/green/brightness" - -#define LED_OFF "0" -#define LED_ON "1" - -#define STR_BUF_SIZE 128 -#define UEVENT_BUF_SIZE 64*1024 -#define UEVENT_MSG_LEN 1024 -static int uevent_fd; - -/* Matches frameworks/native/include/batteryservice/BatteryService.h */ -enum { - BATTERY_STATUS_UNKNOWN = 1, - BATTERY_STATUS_CHARGING = 2, - BATTERY_STATUS_DISCHARGING = 3, - BATTERY_STATUS_NOT_CHARGING = 4, - BATTERY_STATUS_FULL = 5, -}; - -struct sysfs_string_enum_map { - char* str; - int val; -} battery_status_map[] = { - { "Unknown", BATTERY_STATUS_UNKNOWN }, - { "Charging", BATTERY_STATUS_CHARGING }, - { "Discharging", BATTERY_STATUS_DISCHARGING }, - { "Not charging", BATTERY_STATUS_NOT_CHARGING }, - { "Full", BATTERY_STATUS_FULL }, - { NULL, 0 }, -}; - -static int map_sysfs_string(const char* str) { - int i; - int ret = -1; - - for (i = 0; battery_status_map[i].str; i++) { - if (!strcmp(str, battery_status_map[i].str)) - ret = battery_status_map[i].val; - } - - if (ret == -1) - KLOG_ERROR(LOG_TAG, "%s: unknown charging status '%s'\n", - __func__, str); - - return ret; -} - -static int get_charging_status() { - char batt_stat_str[STR_BUF_SIZE]; - int ret = -1; - size_t ln; - - FILE *bstat; - bstat = fopen(BATTERY_STATUS_FILE, "r"); - if (bstat) { - if (fgets(batt_stat_str, STR_BUF_SIZE, bstat) == NULL) { - KLOG_ERROR(LOG_TAG, "%s: failed to read %s; errno=%s\n", - __func__, BATTERY_STATUS_FILE, strerror(errno)); - return -(errno); - } - - if (!strcmp(batt_stat_str, "")) { - KLOG_ERROR(LOG_TAG, "%s: empty battery status file %s\n", - __func__, BATTERY_STATUS_FILE); - return 0; - } - - ln = strlen(batt_stat_str) - 1; - if (batt_stat_str[ln] == '\n') - batt_stat_str[ln] = '\0'; - - fclose(bstat); - ret = map_sysfs_string(batt_stat_str); - } else { - KLOG_ERROR(LOG_TAG, "%s: could not open %s; errno=%s\n", - __func__, BATTERY_STATUS_FILE, strerror(errno)); - return -(errno); - } - - return ret; -} - -static void update_led(int charge_status) { - FILE *aled, *gled; - aled = fopen(AMBER_LED, "w"); - if (!aled) { - KLOG_ERROR(LOG_TAG, "%s: could not open amber LED: %s\n", - __func__, AMBER_LED); - return; - } else { - gled = fopen(GREEN_LED, "w"); - if (!gled) { - fclose(aled); - KLOG_ERROR(LOG_TAG, "%s: could not open green LED: %s\n", - __func__, GREEN_LED); - return; - } - } - - KLOG_INFO(LOG_TAG, "%s: setting charging status '%d'\n", - __func__, charge_status); - - switch (charge_status) { - case BATTERY_STATUS_CHARGING: - fputs(LED_ON, aled); - fputs(LED_OFF, gled); - break; - case BATTERY_STATUS_FULL: - fputs(LED_OFF, aled); - fputs(LED_ON, gled); - break; - default: - fputs(LED_OFF, aled); - fputs(LED_OFF, gled); - break; - } - - fclose(aled); - fclose(gled); -} - -static void chargeled_update() { - static int last_charge_status = BATTERY_STATUS_UNKNOWN; - int charge_status; - - charge_status = get_charging_status(); - if (charge_status <= 0 || charge_status == last_charge_status) - return; - - last_charge_status = charge_status; - update_led(charge_status); -} - -static int uevent_init() { - uevent_fd = uevent_open_socket(UEVENT_BUF_SIZE, true); - - if (uevent_fd >= 0) { - fcntl(uevent_fd, F_SETFL, O_NONBLOCK); - } else { - KLOG_ERROR(LOG_TAG, "%s: uevent_open_socket failed; errno=%s\n", - __func__, strerror(errno)); - return errno; - } - - return 0; -} - -static void uevent_event() { - char msg[UEVENT_MSG_LEN+2]; - char *cp; - int n; - - n = uevent_kernel_multicast_recv(uevent_fd, msg, UEVENT_MSG_LEN); - if (n <= 0) - return; - if (n >= UEVENT_MSG_LEN) /* overflow -- discard */ - return; - - msg[n] = '\0'; - msg[n+1] = '\0'; - cp = msg; - - while (*cp) { - if (!strcmp(cp, POWER_SUPPLY_SUBSYSTEM)) { - chargeled_update(); - break; - } - - /* advance to after the next \0 */ - while (*cp++) - ; - } -} - -static int chargeled_mainloop() { - struct epoll_event ev; - int epollfd; - int maxevents = 1; - struct epoll_event events[maxevents]; - int nevents; - int n; - - epollfd = epoll_create(1); - if (epollfd == -1) { - KLOG_ERROR(LOG_TAG, "%s: epoll_create failed; errno=%s\n", - __func__, strerror(errno)); - return errno; - } - - ev.events = EPOLLIN | EPOLLWAKEUP; - ev.data.ptr = (void *)uevent_event; - if (epoll_ctl(epollfd, EPOLL_CTL_ADD, uevent_fd, &ev) == -1) { - KLOG_ERROR(LOG_TAG, - "%s: epoll_ctl for uevent_fd failed; errno=%s\n", - __func__, strerror(errno)); - return errno; - } - - /* If we've gotten this far, perform an LED update before the loop */ - chargeled_update(); - - while (1) { - nevents = epoll_wait(epollfd, events, maxevents, -1); - - if (nevents == -1) { - if (errno == EINTR) - continue; - KLOG_ERROR(LOG_TAG, "%s: epoll_wait failed\n", __func__); - break; - } - - for (n = 0; n < nevents; ++n) { - if (events[n].data.ptr) - (*(void (*)())events[n].data.ptr)(); - } - } - - return errno; -} - -int main() { - int ret; - - klog_set_level(KLOG_LEVEL); - - ret = uevent_init(); - if (ret == 0) - ret = chargeled_mainloop(); - - return ret; -} diff --git a/recovery/init/Android.mk b/recovery/init/Android.mk deleted file mode 100644 index 34596b8..0000000 --- a/recovery/init/Android.mk +++ /dev/null @@ -1,15 +0,0 @@ -LOCAL_PATH := $(call my-dir) - -include $(CLEAR_VARS) - -LOCAL_C_INCLUDES := system/core/init - -LOCAL_CFLAGS := \ - -Wall \ - -DANDROID_TARGET=\"$(TARGET_BOARD_PLATFORM)\" - -LOCAL_SRC_FILES := init_m7univ.c - -LOCAL_MODULE_TAGS := optional -LOCAL_MODULE := libinit_m7univ -include $(BUILD_STATIC_LIBRARY) diff --git a/recovery/init/init_m7univ.c b/recovery/init/init_m7univ.c deleted file mode 100644 index 14985a1..0000000 --- a/recovery/init/init_m7univ.c +++ /dev/null @@ -1,58 +0,0 @@ -/* - Copyright (c) 2013, The Linux Foundation. All rights reserved. - - Redistribution and use in source and binary forms, with or without - modification, are permitted provided that the following conditions are - met: - * Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. - * Redistributions in binary form must reproduce the above - copyright notice, this list of conditions and the following - disclaimer in the documentation and/or other materials provided - with the distribution. - * Neither the name of The Linux Foundation nor the names of its - contributors may be used to endorse or promote products derived - from this software without specific prior written permission. - - THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED - WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF - MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT - ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS - BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR - BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE - OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN - IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include - -#include "vendor_init.h" -#include "property_service.h" -#include "log.h" -#include "util.h" - -void vendor_load_properties() { - char platform[PROP_VALUE_MAX]; - char bootmid[PROP_VALUE_MAX]; - int rc; - - rc = property_get("ro.board.platform", platform); - if (!rc || strncmp(platform, ANDROID_TARGET, PROP_VALUE_MAX)) - return; - - property_get("ro.boot.mid", bootmid); - - if (strstr(bootmid, "PN0720000")) { - property_set("ro.product.device", "m7wls"); - property_set("ro.build.product", "m7wls"); - } else if (strstr(bootmid, "PN0731000")) { - property_set("ro.product.device", "m7wlv"); - property_set("ro.build.product", "m7wlv"); - } else { - property_set("ro.product.device", "m7"); - property_set("ro.build.product", "m7"); - } -} diff --git a/recovery/root/init.recovery.qcom.rc b/recovery/root/init.recovery.qcom.rc index 26ccd3a..99b86b4 100644 --- a/recovery/root/init.recovery.qcom.rc +++ b/recovery/root/init.recovery.qcom.rc @@ -1,3 +1,12 @@ +import /init.recovery.qcom_decrypt.rc + +on init + wait /dev/block/platform/${ro.boot.bootdevice} + symlink /dev/block/platform/${ro.boot.bootdevice} /dev/block/bootdevice + +on fs + export LD_PRELOAD /sbin/liblog_htc_sbin.so + on boot write /sys/module/rpm_resources/enable_low_power/L2_cache 1 write /sys/module/rpm_resources/enable_low_power/pxo 1 @@ -19,10 +28,11 @@ on boot setprop usb.product.adb 0c02 setprop usb.product.mtpadb 0f87 setprop recovery.perf.mode 0 + start choice_fn start chargeled -on charger - start choice_fn +on property:ro.bootmode=offmode_charging + stop recovery start detect_key start offmode_charging diff --git a/recovery/root/init.recovery.qcom_decrypt.rc b/recovery/root/init.recovery.qcom_decrypt.rc new file mode 100644 index 0000000..23a4622 --- /dev/null +++ b/recovery/root/init.recovery.qcom_decrypt.rc @@ -0,0 +1,75 @@ +import /init.recovery.qcom_decrypt.fbe.rc + +on fs + # needed to make qseecomd work in recovery + chmod 0660 /dev/qseecom + chown system drmrpc /dev/qseecom + chmod 0664 /dev/ion + chown system system /dev/ion + +on property:ro.crypto.state=encrypted + start prepdecrypt + +on property:crypto.ready=1 + start sbinqseecomd + +on property:init.svc.sbinqseecomd=running && property:sys.listeners.registered=true + start sbinhwservicemanager + +on property:init.svc.sbinqseecomd=running && property:vendor.sys.listeners.registered=true + start sbinhwservicemanager + +on property:init.svc.sbinhwservicemanager=running && property:hwservicemanager.ready=true + start sbinkeymaster-3-0 + start sbinkeymaster-3-0-qti + start sbinkeymaster-4-0-qti + +on property:ro.crypto.fs_crypto_blkdev=* + setprop crypto.ready 0 + stop sbinqseecomd + stop sbinhwservicemanager + stop sbinkeymaster-3-0 + stop sbinkeymaster-3-0-qti + stop sbinkeymaster-4-0-qti + +service prepdecrypt /sbin/prepdecrypt.sh + user root + group root + disabled + oneshot + seclabel u:r:recovery:s0 + +service sbinqseecomd /sbin/qseecomd + user root + group root + setenv LD_LIBRARY_PATH /vendor/lib64:/vendor/lib:/sbin + disabled + oneshot + seclabel u:r:recovery:s0 + +service sbinhwservicemanager /sbin/hwservicemanager + user root + group root + disabled + seclabel u:r:recovery:s0 + +service sbinkeymaster-3-0 /sbin/android.hardware.keymaster@3.0-service + user root + group root + setenv LD_LIBRARY_PATH /vendor/lib64:/vendor/lib:/sbin + disabled + seclabel u:r:recovery:s0 + +service sbinkeymaster-3-0-qti /sbin/android.hardware.keymaster@3.0-service-qti + user root + group root + setenv LD_LIBRARY_PATH /vendor/lib64:/vendor/lib:/sbin + disabled + seclabel u:r:recovery:s0 + +service sbinkeymaster-4-0-qti /sbin/android.hardware.keymaster@4.0-service-qti + user root + group root + setenv LD_LIBRARY_PATH /vendor/lib64:/vendor/lib:/sbin + disabled + seclabel u:r:recovery:s0 diff --git a/recovery/root/sbin/prepdecrypt.sh b/recovery/root/sbin/prepdecrypt.sh new file mode 100644 index 0000000..ea516c0 --- /dev/null +++ b/recovery/root/sbin/prepdecrypt.sh @@ -0,0 +1,91 @@ +#!/sbin/sh + +SCRIPTNAME="PrepDecrypt" +LOGFILE=/tmp/recovery.log +venbin="/vendor/bin" +venlib="/vendor/lib" + +log_info() +{ + echo "I:$SCRIPTNAME:$1" >> "$LOGFILE" +} + +log_error() +{ + echo "E:$SCRIPTNAME:$1" >> "$LOGFILE" +} + +relink() +{ + if [ -f "$1" ]; then + fname=$(basename "$1") + target="/sbin/$fname" + sed 's|/system/bin/linker|///////sbin/linker|' "$1" > "$target" + chmod 755 "$target" + fi +} + +finish() +{ + setprop crypto.ready 1 + log_info "Script complete. Device ready for decryption." + exit 0 +} + +abi=$(getprop ro.product.cpu.abi) + +case "$abi" in + *64*) + venlib="/vendor/lib64" + ;; +esac + +log_info "Running prepdecrypt script for TWRP..." +relink "$venbin/qseecomd" +relink "$venbin/hw/android.hardware.keymaster@3.0-service" +relink "$venbin/hw/android.hardware.keymaster@3.0-service-qti" +relink "$venbin/hw/android.hardware.keymaster@4.0-service-qti" +relink "$venlib/libQSEEComAPI.so" + +if [ -f /init.recovery.qcom_decrypt.fbe.rc ]; then + relink "$venbin/hw/android.hardware.gatekeeper@1.0-service-qti" +fi + +osver=$(getprop ro.build.version.release) +osver_orig=$(getprop ro.build.version.release_orig) +sdkver=$(getprop ro.build.version.sdk) +patchlevel=$(getprop ro.build.version.security_patch) +patchlevel_orig=$(getprop ro.build.version.security_patch_orig) + +if [ "$sdkver" -lt 26 ]; then + DEFAULTPROP=default.prop +else + DEFAULTPROP=prop.default +fi + +# Be sure to increase the PLATFORM_VERSION in build/core/version_defaults.mk to override Google's anti-rollback features to something rather insane +if [ -z "$osver" ]; then + if [ -n "$osver_orig" ]; then + setprop ro.build.version.release "$osver_orig" + echo "ro.build.version.release=$osver_orig" >> "/$DEFAULTPROP"; + else + osver="20.1.0" + setprop ro.build.version.release "$osver" + echo "ro.build.version.release=$osver" >> "/$DEFAULTPROP"; + fi +fi +if [ -z "$patchlevel" ]; then + if [ -n "$patchlevel_orig" ]; then + setprop ro.build.version.security_patch "$patchlevel_orig" + echo "ro.build.version.security_patch=$patchlevel_orig" >> "/$DEFAULTPROP"; + finish + else + patchlevel="2099-12-31" + setprop ro.build.version.security_patch "$patchlevel" + echo "ro.build.version.security_patch=$patchlevel" >> "/$DEFAULTPROP"; + finish + fi +else + finish +fi + diff --git a/recovery/root/vendor/bin/qseecomd b/recovery/root/vendor/bin/qseecomd new file mode 100644 index 0000000..c80553d Binary files /dev/null and b/recovery/root/vendor/bin/qseecomd differ diff --git a/recovery/root/vendor/lib/hw/android.hardware.keymaster@3.0-impl.so b/recovery/root/vendor/lib/hw/android.hardware.keymaster@3.0-impl.so new file mode 100644 index 0000000..5986486 Binary files /dev/null and b/recovery/root/vendor/lib/hw/android.hardware.keymaster@3.0-impl.so differ diff --git a/recovery/root/vendor/lib/hw/keystore.msm8960.so b/recovery/root/vendor/lib/hw/keystore.msm8960.so index 5205a52..855df74 100644 Binary files a/recovery/root/vendor/lib/hw/keystore.msm8960.so and b/recovery/root/vendor/lib/hw/keystore.msm8960.so differ diff --git a/recovery/root/vendor/lib/libQSEEComAPI.so b/recovery/root/vendor/lib/libQSEEComAPI.so index c9680fc..7677589 100644 Binary files a/recovery/root/vendor/lib/libQSEEComAPI.so and b/recovery/root/vendor/lib/libQSEEComAPI.so differ diff --git a/recovery/root/vendor/lib/libdrmfs.so b/recovery/root/vendor/lib/libdrmfs.so new file mode 100644 index 0000000..aaa7777 Binary files /dev/null and b/recovery/root/vendor/lib/libdrmfs.so differ diff --git a/recovery/root/vendor/lib/libdrmtime.so b/recovery/root/vendor/lib/libdrmtime.so new file mode 100644 index 0000000..e07b145 Binary files /dev/null and b/recovery/root/vendor/lib/libdrmtime.so differ diff --git a/recovery/root/vendor/lib/libtime_genoff.so b/recovery/root/vendor/lib/libtime_genoff.so new file mode 100644 index 0000000..162f5ec Binary files /dev/null and b/recovery/root/vendor/lib/libtime_genoff.so differ diff --git a/recovery/root/vendor/manifest.xml b/recovery/root/vendor/manifest.xml new file mode 100644 index 0000000..bf55cc8 --- /dev/null +++ b/recovery/root/vendor/manifest.xml @@ -0,0 +1,240 @@ + + + android.hardware.audio + passthrough + 2.0 + + IDevicesFactory + default + + + + android.hardware.audio.effect + passthrough + 2.0 + + IEffectsFactory + default + + + + android.hardware.bluetooth + passthrough + 1.0 + + IBluetoothHci + default + + + + android.hardware.camera.provider + passthrough + 2.4 + + ICameraProvider + legacy/0 + + + + android.hardware.cas + hwbinder + 1.0 + + IMediaCasService + default + + + + android.hardware.configstore + hwbinder + 1.0 + + ISurfaceFlingerConfigs + default + + + + android.hardware.drm + hwbinder + 1.0 + + ICryptoFactory + default + widevine + + + IDrmFactory + default + widevine + + + + android.hardware.gnss + passthrough + 1.0 + + IGnss + default + + + + android.hardware.graphics.allocator + hwbinder + 2.0 + + IAllocator + default + + + + android.hardware.graphics.mapper + passthrough + 2.0 + + IMapper + default + + + + android.hardware.ir + hwbinder + 1.0 + + IConsumerIr + default + + + + android.hardware.keymaster + passthrough + 3.0 + + IKeymasterDevice + default + + + + android.hardware.light + hwbinder + 2.0 + + ILight + default + + + + android.hardware.memtrack + passthrough + 1.0 + + IMemtrack + default + + + + android.hardware.nfc + passthrough + 1.0 + + INfc + default + + + + android.hardware.power + hwbinder + 1.0 + + IPower + default + + + + android.hardware.radio + hwbinder + 1.1 + + IRadio + slot1 + + + ISap + slot1 + + + + android.hardware.radio.deprecated + hwbinder + 1.0 + + IOemHook + slot1 + + + + android.hardware.renderscript + passthrough + 1.0 + + IDevice + default + + + + android.hardware.sensors + passthrough + 1.0 + + ISensors + default + + + + android.hardware.usb + hwbinder + 1.0 + + IUsb + default + + + + android.hardware.vibrator + passthrough + 1.0 + + IVibrator + default + + + + android.hardware.wifi + hwbinder + 1.1 + + IWifi + default + + + + android.hardware.wifi.supplicant + hwbinder + 1.0 + + ISupplicant + default + + + + vendor.lineage.power + hwbinder + 1.0 + + ILineagePower + default + + + + 27.0 + + diff --git a/sepolicy/akmd.te b/sepolicy/akmd.te deleted file mode 100644 index 48c6742..0000000 --- a/sepolicy/akmd.te +++ /dev/null @@ -1,8 +0,0 @@ -type akmd, domain; -type akmd_exec, exec_type, file_type; -init_daemon_domain(akmd) - -allow akmd sensors_data_file:file { getattr setattr open read write create }; -allow akmd sensors_device:chr_file { open read write ioctl }; -allow akmd system_data_file:dir { add_name write }; -type_transition akmd system_data_file:file sensors_data_file; diff --git a/sepolicy/bluetooth.te b/sepolicy/bluetooth.te deleted file mode 100644 index 239264c..0000000 --- a/sepolicy/bluetooth.te +++ /dev/null @@ -1 +0,0 @@ -allow bluetooth bluetooth_device:chr_file { write open }; diff --git a/sepolicy/cir_fw_update.te b/sepolicy/cir_fw_update.te deleted file mode 100644 index 66caa31..0000000 --- a/sepolicy/cir_fw_update.te +++ /dev/null @@ -1,6 +0,0 @@ -type cir_fw_update, domain; -type cir_fw_update_exec, exec_type, file_type; -init_daemon_domain(cir_fw_update) - -allow cir_fw_update cir_device:chr_file { getattr open read write ioctl }; -allow cir_fw_update self:capability dac_override; diff --git a/sepolicy/device.te b/sepolicy/device.te deleted file mode 100644 index 20c82b0..0000000 --- a/sepolicy/device.te +++ /dev/null @@ -1,3 +0,0 @@ -type bluetooth_device, dev_type; -type cir_device, dev_type; -type timerirq_device, dev_type; diff --git a/sepolicy/file.te b/sepolicy/file.te deleted file mode 100644 index f8eae16..0000000 --- a/sepolicy/file.te +++ /dev/null @@ -1,2 +0,0 @@ -type camera_sysfs, fs_type, sysfs_type; -type vibeamp_sysfs, fs_type, sysfs_type; diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts deleted file mode 100644 index 5d47719..0000000 --- a/sepolicy/file_contexts +++ /dev/null @@ -1,45 +0,0 @@ - -# Audio -/dev/htc-acoustic u:object_r:audio_device:s0 -/dev/rt5501 u:object_r:audio_device:s0 -/dev/tfa9887 u:object_r:audio_device:s0 -/dev/tfa9887l u:object_r:audio_device:s0 - -# Bluetooth -/dev/btlock u:object_r:bluetooth_device:s0 -/dev/rfkill u:object_r:bluetooth_device:s0 - -# Camera -/data/cam_socket.* u:object_r:camera_socket:s0 -/dev/gemini.* u:object_r:camera_device:s0 -/dev/rawchip.* u:object_r:camera_device:s0 -/sys/camera_htccallback/htccallback u:object_r:camera_sysfs:s0 - -# CIR -/dev/ttyHSL2 u:object_r:cir_device:s0 -/system/bin/cir_fw_update u:object_r:cir_fw_update_exec:s0 - -# CMHW -/sys/devices/virtual/timed_output/vibrator/voltage_level u:object_r:vibeamp_sysfs:s0 - -# Modem -/dev/block/mmcblk0p17 u:object_r:modem_efs_partition_device:s0 -/dev/block/mmcblk0p20 u:object_r:modem_efs_partition_device:s0 -/dev/block/mmcblk0p21 u:object_r:modem_efs_partition_device:s0 -/dev/block/mmcblk0p28 u:object_r:modem_efs_partition_device:s0 -/dev/ttyUSB0 u:object_r:radio_device:s0 - -# Mpdecision -/data/system/default_values u:object_r:mpctl_data_file:s0 -/dev/socket/mpctl u:object_r:mpctl_socket:s0 - -# Sensors -/data/misc/akmd_set.txt u:object_r:sensors_data_file:s0 -/dev/akm8963 u:object_r:sensors_device:s0 -/dev/akm8963_dev u:object_r:sensors_device:s0 -/dev/cm3602 u:object_r:sensors_device:s0 -/dev/lightsensor u:object_r:sensors_device:s0 -/system/bin/akmd u:object_r:akmd_exec:s0 - -# Timer -/dev/timerirq u:object_r:timerirq_device:s0 diff --git a/sepolicy/healthd.te b/sepolicy/healthd.te deleted file mode 100644 index 5baabe3..0000000 --- a/sepolicy/healthd.te +++ /dev/null @@ -1,7 +0,0 @@ -# For detect_key -recovery_only(` - allow healthd input_device:chr_file write; - allow healthd misc_partition:blk_file { read write open }; - allow healthd block_device:dir search; - allow healthd powerctl_prop:property_service set; -') diff --git a/sepolicy/hostapd.te b/sepolicy/hostapd.te deleted file mode 100644 index f9388f6..0000000 --- a/sepolicy/hostapd.te +++ /dev/null @@ -1 +0,0 @@ -allow hostapd bluetooth_device:chr_file { open read }; diff --git a/sepolicy/mdm_helper.te b/sepolicy/mdm_helper.te deleted file mode 100644 index 690e7e3..0000000 --- a/sepolicy/mdm_helper.te +++ /dev/null @@ -1,12 +0,0 @@ -allow mdm_helper cgroup:dir { create add_name }; -allow mdm_helper default_prop:property_service set; -allow mdm_helper efs_data_file:lnk_file read; -allow mdm_helper firmware_file:file read; -allow mdm_helper init:unix_stream_socket { connectto read write }; -allow mdm_helper mdm_helper_tmpfs:file { getattr setattr open read write create unlink }; -allow mdm_helper modem_efs_partition_device:blk_file { getattr open read write }; -allow mdm_helper property_socket:sock_file write; -allow mdm_helper radio_device:chr_file { getattr open read write ioctl }; -allow mdm_helper shell_exec:file { execute entrypoint }; -allow mdm_helper sysfs_wake_lock:file { read write }; -allow mdm_helper tmpfs:dir { write add_name remove_name }; diff --git a/sepolicy/mediaserver.te b/sepolicy/mediaserver.te deleted file mode 100644 index 33c5d53..0000000 --- a/sepolicy/mediaserver.te +++ /dev/null @@ -1,10 +0,0 @@ -allow mediaserver camera_prop:property_service set; - -# Unsure what mediaserver is reaching out to here -allow mediaserver self:netlink_kobject_uevent_socket create_socket_perms; - -# Unsure what mediaserver is reaching out to here -allow mediaserver system_server:binder { call transfer }; -allow mediaserver system_server:unix_stream_socket { read write }; -allow system_server mediaserver:binder { call transfer }; -binder_use(mediaserver); diff --git a/sepolicy/mm-qcamerad.te b/sepolicy/mm-qcamerad.te deleted file mode 100644 index 6450364..0000000 --- a/sepolicy/mm-qcamerad.te +++ /dev/null @@ -1,5 +0,0 @@ -allow mm-qcamerad camera_socket:sock_file setattr; -allow mm-qcamerad camera_sysfs:file { write open getattr }; -allow mm-qcamerad graphics_device:chr_file { open ioctl read write }; -allow mm-qcamerad graphics_device:dir search; -type_transition mm-qcamerad system_data_file:sock_file camera_socket "cam_socket0"; diff --git a/sepolicy/mpdecision.te b/sepolicy/mpdecision.te deleted file mode 100644 index 3d32227..0000000 --- a/sepolicy/mpdecision.te +++ /dev/null @@ -1,3 +0,0 @@ -allow mpdecision system_data_file:dir { write add_name }; -type_transition mpdecision socket_device:sock_file mpctl_socket; -type_transition mpdecision system_data_file:file mpctl_data_file; diff --git a/sepolicy/netmgrd.te b/sepolicy/netmgrd.te deleted file mode 100644 index 641f50f..0000000 --- a/sepolicy/netmgrd.te +++ /dev/null @@ -1 +0,0 @@ -allow netmgrd self:packet_socket { create bind read write }; diff --git a/sepolicy/property.te b/sepolicy/property.te deleted file mode 100644 index 2026491..0000000 --- a/sepolicy/property.te +++ /dev/null @@ -1 +0,0 @@ -type camera_prop, property_type; diff --git a/sepolicy/property_contexts b/sepolicy/property_contexts deleted file mode 100644 index 2bf2366..0000000 --- a/sepolicy/property_contexts +++ /dev/null @@ -1,2 +0,0 @@ -oc.cpu_ctrl u:object_r:powerctl_prop:s0 -persist.camera. u:object_r:camera_prop:s0 diff --git a/sepolicy/qseecomd.te b/sepolicy/qseecomd.te deleted file mode 100644 index c4bb836..0000000 --- a/sepolicy/qseecomd.te +++ /dev/null @@ -1 +0,0 @@ -allow tee self:process execmem; diff --git a/sepolicy/recovery.te b/sepolicy/recovery.te deleted file mode 100644 index b792068..0000000 --- a/sepolicy/recovery.te +++ /dev/null @@ -1,2 +0,0 @@ -allow recovery input_device:chr_file write; -allow recovery self:capability sys_boot; diff --git a/sepolicy/system_server.te b/sepolicy/system_server.te deleted file mode 100644 index ce52e64..0000000 --- a/sepolicy/system_server.te +++ /dev/null @@ -1,3 +0,0 @@ -allow system_server cir_device:chr_file { open read write ioctl }; -allow system_server vibeamp_sysfs:dir search; -allow system_server vibeamp_sysfs:file { getattr open read write }; diff --git a/sepolicy/thermal-engine.te b/sepolicy/thermal-engine.te deleted file mode 100644 index ff8a5ae..0000000 --- a/sepolicy/thermal-engine.te +++ /dev/null @@ -1,12 +0,0 @@ -allow thermal-engine self:capability { chown net_admin }; -allow thermal-engine self:netlink_kobject_uevent_socket { create setopt bind read }; -allow thermal-engine sysfs_devices_system_cpu:file { read write }; - -# Some files in /sys/devices/system/cpu may pop in and out of existance, -# defeating our attempt to label them. As a result, they could have the -# sysfs label, not the sysfs_devices_system_cpu label. -# Allow write access for now until we figure out a better solution. -# For example, the following files pop in and out of existance: -# /sys/devices/system/cpu/cpu1/cpufreq/cpuinfo_min_freq -# /sys/devices/system/cpu/cpu1/cpufreq/scaling_min_freq -allow thermal-engine sysfs:file write; diff --git a/sepolicy/ueventd.te b/sepolicy/ueventd.te deleted file mode 100644 index e69de29..0000000 diff --git a/sepolicy/wpa.te b/sepolicy/wpa.te deleted file mode 100644 index c864f90..0000000 --- a/sepolicy/wpa.te +++ /dev/null @@ -1 +0,0 @@ -allow wpa bluetooth_device:chr_file { open read }; diff --git a/vendorsetup.sh b/vendorsetup.sh new file mode 100644 index 0000000..dee3c3a --- /dev/null +++ b/vendorsetup.sh @@ -0,0 +1,4 @@ +export LC_ALL=C +export ALLOW_MISSING_DEPENDENCIES=true +export TARGET_COMPILE_WITH_MSM_KERNEL=false +