Bring multirom to M86
This commit is contained in:
@@ -58,7 +58,6 @@ endif
|
||||
include $(BUILD_EXECUTABLE)
|
||||
|
||||
|
||||
|
||||
# Trampoline
|
||||
include $(multirom_local_path)/trampoline/Android.mk
|
||||
|
||||
|
||||
2
adbd
2
adbd
Submodule adbd updated: 012280c7a4...47afc72854
@@ -25,6 +25,8 @@ endif
|
||||
|
||||
ifeq ($(MR_PIXEL_FORMAT),"RGBX_8888")
|
||||
LOCAL_CFLAGS += -DRECOVERY_RGBX
|
||||
else ifeq ($(MR_PIXEL_FORMAT),"RGBA_8888")
|
||||
LOCAL_CFLAGS += -DRECOVERY_RGBA
|
||||
else ifeq ($(MR_PIXEL_FORMAT),"BGRA_8888")
|
||||
LOCAL_CFLAGS += -DRECOVERY_BGRA
|
||||
else ifeq ($(MR_PIXEL_FORMAT),"RGB_565")
|
||||
|
||||
Submodule kexec-tools deleted from 1945c661d8
Submodule kexec-tools-arm64 updated: 98d3c38372...116d9ac04e
@@ -384,6 +384,11 @@ px_type fb_convert_color(uint32_t c)
|
||||
#elif defined(RECOVERY_RGBX)
|
||||
// A B G R
|
||||
return (c & 0xFF000000) | ((c & 0xFF) << 16) | (c & 0xFF00) | ((c & 0xFF0000) >> 16);
|
||||
#elif defined(RECOVERY_RGBA)
|
||||
return (c & 0xFF000000) | ((c & 0xFF) << 16) | (c & 0xFF00) | ((c & 0xFF0000) >> 16);
|
||||
#elif defined(RECOVERY_ABGR)
|
||||
// A B G R
|
||||
return (c & 0xFF000000) | ((c & 0xFF) << 16) | (c & 0xFF00) | ((c & 0xFF0000) >> 16);
|
||||
#elif defined(RECOVERY_RGB_565)
|
||||
const uint8_t alpha_pct = (((c >> 24) & 0xFF)*100) / 0xFF;
|
||||
// R G B
|
||||
@@ -601,7 +606,7 @@ void fb_draw_rect(fb_rect *r)
|
||||
if(alpha == 0)
|
||||
return;
|
||||
|
||||
#ifdef RECOVERY_RGBX
|
||||
#if defined(RECOVERY_RGBX) || (RECOVERY_RGBA) || defined(RECOVERY_ABGR)
|
||||
const uint32_t premult_color_rb = ((color & 0xFF00FF) * (alpha)) >> 8;
|
||||
const uint32_t premult_color_g = ((color & 0x00FF00) * (alpha)) >> 8;
|
||||
#elif defined(RECOVERY_BGRA)
|
||||
@@ -646,7 +651,7 @@ void fb_draw_rect(fb_rect *r)
|
||||
#else
|
||||
for(x = 0; x < rendered_w; ++x)
|
||||
{
|
||||
#ifdef RECOVERY_RGBX
|
||||
#if defined(RECOVERY_RGBX) || defined(RECOVERY_RGBA) || defined(RECOVERY_ABGR)
|
||||
const uint32_t rb = (premult_color_rb & 0xFF00FF) + ((inv_alpha * (*bits & 0xFF00FF)) >> 8);
|
||||
const uint32_t g = (premult_color_g & 0x00FF00) + ((inv_alpha * (*bits & 0x00FF00)) >> 8);
|
||||
*bits = 0xFF000000 | (rb & 0xFF00FF) | (g & 0x00FF00);
|
||||
@@ -1089,7 +1094,7 @@ void *fb_draw_thread_work(UNUSED void *cookie)
|
||||
clock_gettime(CLOCK_MONOTONIC, &curr);
|
||||
diff = timespec_diff(&last, &curr);
|
||||
|
||||
expected.__val = 1; // might be reseted by atomic_compare_exchange_strong
|
||||
// expected.__val = 1; // might be reseted by atomic_compare_exchange_strong
|
||||
pthread_mutex_lock(&fb_draw_mutex);
|
||||
if(atomic_compare_exchange_strong(&fb_draw_requested, &expected, 0))
|
||||
{
|
||||
|
||||
@@ -23,7 +23,7 @@
|
||||
#include <pthread.h>
|
||||
#include <string.h>
|
||||
|
||||
#if defined(RECOVERY_BGRA) || defined(RECOVERY_RGBX)
|
||||
#if defined(RECOVERY_BGRA) || defined(RECOVERY_RGBX) || defined(RECOVERY_RGBA) || defined(RECOVERY_ABGR)
|
||||
#define PIXEL_SIZE 4
|
||||
typedef uint32_t px_type;
|
||||
#else
|
||||
@@ -52,11 +52,29 @@ typedef uint16_t px_type;
|
||||
#define PX_GET_G(px) ((px & 0xFF00) >> 8)
|
||||
#define PX_GET_B(px) ((px & 0xFF0000) >> 16)
|
||||
#define PX_GET_A(px) ((px & 0xFF000000) >> 24)
|
||||
#elif defined(RECOVERY_RGBA)
|
||||
#define PX_IDX_A 3
|
||||
#define PX_IDX_R 0
|
||||
#define PX_IDX_G 1
|
||||
#define PX_IDX_B 2
|
||||
#define PX_GET_R(px) (px & 0xFF)
|
||||
#define PX_GET_G(px) ((px & 0xFF00) >> 8)
|
||||
#define PX_GET_B(px) ((px & 0xFF0000) >> 16)
|
||||
#define PX_GET_A(px) ((px & 0xFF000000) >> 24)
|
||||
#elif defined(RECOVERY_RGB_565)
|
||||
#define PX_GET_R(px) (((((px & 0x1F)*100)/31)*0xFF)/100)
|
||||
#define PX_GET_G(px) ((((((px & 0x7E0) >> 5)*100)/63)*0xFF)/100)
|
||||
#define PX_GET_B(px) ((((((px & 0xF800) >> 11)*100)/31)*0xFF)/100)
|
||||
#define PX_GET_A(px) (0xFF)
|
||||
#elif defined(RECOVERY_ABGR)
|
||||
#define PX_IDX_A 3
|
||||
#define PX_IDX_R 0
|
||||
#define PX_IDX_G 1
|
||||
#define PX_IDX_B 2
|
||||
#define PX_GET_R(px) ((px & 0xFF))
|
||||
#define PX_GET_G(px) ((px & 0xFF00) >> 8)
|
||||
#define PX_GET_B(px) ((px & 0xFF0000) >> 16)
|
||||
#define PX_GET_A(px) ((px & 0xFF000000) >> 24)
|
||||
#endif
|
||||
|
||||
struct framebuffer {
|
||||
@@ -323,7 +341,7 @@ void fb_png_release(px_type *data);
|
||||
void fb_png_drop_unused(void);
|
||||
int fb_png_save_img(const char *path, int w, int h, int stride, px_type *data);
|
||||
|
||||
inline void center_text(fb_img *text, int targetX, int targetY, int targetW, int targetH);
|
||||
void center_text(fb_img *text, int targetX, int targetY, int targetW, int targetH);
|
||||
|
||||
int vt_set_mode(int graphics);
|
||||
|
||||
|
||||
@@ -34,6 +34,8 @@
|
||||
// for the code to know how many buffers we use
|
||||
#define NUM_BUFFERS 2
|
||||
|
||||
unsigned int smem_len;
|
||||
|
||||
struct fb_generic_data {
|
||||
px_type *mapped[NUM_BUFFERS];
|
||||
int active_buff;
|
||||
@@ -41,57 +43,39 @@ struct fb_generic_data {
|
||||
|
||||
static int impl_open(struct framebuffer *fb)
|
||||
{
|
||||
fb->vi.bits_per_pixel = PIXEL_SIZE * 8;
|
||||
fb->vi.bits_per_pixel = 32;
|
||||
INFO("Pixel format: %dx%d @ %dbpp\n", fb->vi.xres, fb->vi.yres, fb->vi.bits_per_pixel);
|
||||
|
||||
#ifdef RECOVERY_BGRA
|
||||
INFO("Pixel format: BGRA_8888\n");
|
||||
fb->vi.red.offset = 8;
|
||||
fb->vi.red.length = 8;
|
||||
fb->vi.green.offset = 16;
|
||||
fb->vi.green.length = 8;
|
||||
fb->vi.blue.offset = 24;
|
||||
fb->vi.blue.length = 8;
|
||||
fb->vi.transp.offset = 0;
|
||||
fb->vi.transp.length = 8;
|
||||
#elif defined(RECOVERY_RGBX)
|
||||
INFO("Pixel format: RGBX_8888\n");
|
||||
fb->vi.red.offset = 24;
|
||||
fb->vi.red.length = 8;
|
||||
fb->vi.green.offset = 16;
|
||||
fb->vi.green.length = 8;
|
||||
fb->vi.blue.offset = 8;
|
||||
fb->vi.blue.length = 8;
|
||||
fb->vi.transp.offset = 0;
|
||||
fb->vi.transp.length = 8;
|
||||
#elif defined(RECOVERY_RGB_565)
|
||||
INFO("Pixel format: RGB_565\n");
|
||||
fb->vi.blue.offset = 0;
|
||||
fb->vi.green.offset = 5;
|
||||
fb->vi.red.offset = 11;
|
||||
fb->vi.blue.length = 5;
|
||||
fb->vi.green.length = 6;
|
||||
fb->vi.red.length = 5;
|
||||
fb->vi.blue.msb_right = 0;
|
||||
fb->vi.green.msb_right = 0;
|
||||
fb->vi.red.msb_right = 0;
|
||||
fb->vi.transp.offset = 0;
|
||||
fb->vi.transp.length = 0;
|
||||
#else
|
||||
#error "Unknown pixel format"
|
||||
#endif
|
||||
|
||||
fb->vi.vmode = FB_VMODE_NONINTERLACED;
|
||||
fb->vi.activate = FB_ACTIVATE_NOW | FB_ACTIVATE_FORCE;
|
||||
ioctl(fb->fd, FBIOPUT_VSCREENINFO, &fb->vi);
|
||||
|
||||
ioctl(fb->fd, FBIOGET_FSCREENINFO, &fb->fi);
|
||||
ioctl(fb->fd, FBIOGET_VSCREENINFO, &fb->vi);
|
||||
|
||||
INFO("fb0 reports (possibly inaccurate):\n"
|
||||
" vi.bits_per_pixel = %d\n"
|
||||
" vi.red.offset = %3d .length = %3d\n"
|
||||
" vi.green.offset = %3d .length = %3d\n"
|
||||
" vi.blue.offset = %3d .length = %3d\n"
|
||||
" vi.xres = %3d vi.yres = %3d fi.line_length = %3d\n",
|
||||
|
||||
fb->vi.bits_per_pixel,
|
||||
fb->vi.red.offset, fb->vi.red.length,
|
||||
fb->vi.green.offset, fb->vi.green.length,
|
||||
fb->vi.blue.offset, fb->vi.blue.length, fb->vi.xres, fb->vi.yres, fb->fi.line_length);
|
||||
|
||||
smem_len = fb->vi.yres * fb->fi.line_length;
|
||||
INFO("smem_len: %d\n",smem_len);
|
||||
|
||||
// mmap and memset to 0 before setting the vi to prevent screen flickering during init
|
||||
px_type *mapped = mmap(0, fb->fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);
|
||||
px_type *mapped = mmap(0, smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);
|
||||
|
||||
if (mapped == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
memset(mapped, 0, fb->fi.smem_len);
|
||||
munmap(mapped, fb->fi.smem_len);
|
||||
memset(mapped, 0, smem_len);
|
||||
munmap(mapped, smem_len);
|
||||
|
||||
if (ioctl(fb->fd, FBIOPUT_VSCREENINFO, &fb->vi) < 0)
|
||||
{
|
||||
@@ -102,14 +86,14 @@ static int impl_open(struct framebuffer *fb)
|
||||
if (ioctl(fb->fd, FBIOGET_FSCREENINFO, &fb->fi) < 0)
|
||||
return -1;
|
||||
|
||||
mapped = mmap(0, fb->fi.smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);
|
||||
mapped = mmap(0, smem_len, PROT_READ | PROT_WRITE, MAP_SHARED, fb->fd, 0);
|
||||
|
||||
if (mapped == MAP_FAILED)
|
||||
return -1;
|
||||
|
||||
struct fb_generic_data *data = mzalloc(sizeof(struct fb_generic_data));
|
||||
data->mapped[0] = mapped;
|
||||
data->mapped[1] = (px_type*) (((uint8_t*)mapped) + (fb->vi.yres * fb->fi.line_length));
|
||||
data->mapped[1] = (px_type*) calloc(fb->vi.yres * fb->fi.line_length, 1);
|
||||
|
||||
fb->impl_data = data;
|
||||
|
||||
@@ -124,9 +108,15 @@ static int impl_open(struct framebuffer *fb)
|
||||
static void impl_close(struct framebuffer *fb)
|
||||
{
|
||||
struct fb_generic_data *data = fb->impl_data;
|
||||
__u32 dummy = 0;
|
||||
|
||||
if(data)
|
||||
{
|
||||
munmap(data->mapped[0], fb->fi.smem_len);
|
||||
memset(data->mapped[0], 0, smem_len);
|
||||
ioctl(fb->fd, FBIOPAN_DISPLAY, &fb->vi);
|
||||
|
||||
munmap(data->mapped[0], smem_len);
|
||||
munmap(data->mapped[1], smem_len);
|
||||
free(data);
|
||||
fb->impl_data = NULL;
|
||||
}
|
||||
@@ -135,15 +125,11 @@ static void impl_close(struct framebuffer *fb)
|
||||
static int impl_update(struct framebuffer *fb)
|
||||
{
|
||||
struct fb_generic_data *data = fb->impl_data;
|
||||
__u32 dummy = 0;
|
||||
|
||||
fb->vi.yres_virtual = fb->vi.yres * NUM_BUFFERS;
|
||||
fb->vi.yoffset = data->active_buff * fb->vi.yres;
|
||||
|
||||
if (ioctl(fb->fd, FBIOPUT_VSCREENINFO, &fb->vi) < 0)
|
||||
{
|
||||
ERROR("active fb swap failed");
|
||||
return -1;
|
||||
}
|
||||
ioctl(fb->fd, FBIO_WAITFORVSYNC, &dummy);
|
||||
memcpy(data->mapped[0], data->mapped[1], fb->vi.yres * fb->fi.line_length);
|
||||
ioctl(fb->fd, FBIOPAN_DISPLAY, &fb->vi);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -151,8 +137,7 @@ static int impl_update(struct framebuffer *fb)
|
||||
static void *impl_get_frame_dest(struct framebuffer *fb)
|
||||
{
|
||||
struct fb_generic_data *data = fb->impl_data;
|
||||
data->active_buff = !data->active_buff;
|
||||
return data->mapped[data->active_buff];
|
||||
return data->mapped[1];
|
||||
}
|
||||
|
||||
const struct fb_impl fb_impl_generic = {
|
||||
|
||||
@@ -296,21 +296,9 @@ void fb_png_drop_unused(void)
|
||||
|
||||
static inline void convert_fb_px_to_rgb888(px_type src, uint8_t *dest)
|
||||
{
|
||||
#ifdef RECOVERY_BGRA
|
||||
dest[0] = ((src & 0xFF0000) >> 16); // R
|
||||
dest[1] = ((src & 0xFF00) >> 8); // G
|
||||
dest[2] = (src & 0xFF); // B
|
||||
#elif defined(RECOVERY_RGBX)
|
||||
dest[0] = (src & 0xFF); // R
|
||||
dest[1] = ((src & 0xFF00) >> 8); // G
|
||||
dest[2] = ((src & 0xFF0000) >> 16); // B
|
||||
#elif defined(RECOVERY_RGB_565)
|
||||
dest[0] = ((src & 0xF800) >> 8); // R
|
||||
dest[1] = ((src & 0x7E0) >> 3); // G
|
||||
dest[2] = ((src & 0x1F) << 3); // B
|
||||
#else
|
||||
#error "Unknown pixel format"
|
||||
#endif
|
||||
dest[0] = PX_GET_R(src);
|
||||
dest[1] = PX_GET_G(src);
|
||||
dest[2] = PX_GET_B(src);
|
||||
}
|
||||
|
||||
int fb_png_save_img(const char *path, int w, int h, int stride, px_type *data)
|
||||
|
||||
@@ -711,7 +711,7 @@ char *fb_text_get_content(fb_img *img)
|
||||
return ex->text;
|
||||
}
|
||||
|
||||
inline void center_text(fb_img *text, int targetX, int targetY, int targetW, int targetH)
|
||||
void center_text(fb_img *text, int targetX, int targetY, int targetW, int targetH)
|
||||
{
|
||||
text_extra *ex = text->extra;
|
||||
|
||||
|
||||
@@ -624,7 +624,7 @@ int imax(int a, int b)
|
||||
return (a > b) ? a : b;
|
||||
}
|
||||
|
||||
inline int iabs(int a)
|
||||
int iabs(int a)
|
||||
{
|
||||
return a >= 0 ? a : -a;
|
||||
}
|
||||
|
||||
@@ -62,7 +62,7 @@ int mr_system(const char *shell_fmt, ...);
|
||||
|
||||
inline int imin(int a, int b);
|
||||
inline int imax(int a, int b);
|
||||
inline int iabs(int a);
|
||||
int iabs(int a);
|
||||
inline int in_rect(int x, int y, int rx, int ry, int rw, int rh);
|
||||
|
||||
inline void *mzalloc(size_t size); // alloc and fill with 0s
|
||||
|
||||
13
multirom.c
13
multirom.c
@@ -1659,7 +1659,10 @@ int multirom_fill_kexec_android(struct multirom_status *s, struct multirom_rom *
|
||||
{
|
||||
int res = -1;
|
||||
char img_path[256];
|
||||
char dtb_path[256];
|
||||
|
||||
snprintf(img_path, sizeof(img_path), "%s/boot.img", rom->base_path);
|
||||
snprintf(dtb_path, sizeof(dtb_path), "%s/dtb.img", rom->base_path);
|
||||
|
||||
// Trampolines in ROM boot images may get out of sync, so we need to check it and
|
||||
// update if needed. I can't do that during ZIP installation because of USB drives.
|
||||
@@ -1686,16 +1689,8 @@ int multirom_fill_kexec_android(struct multirom_status *s, struct multirom_rom *
|
||||
kexec_add_arg(kexec, "--initrd=/initrd.img");
|
||||
|
||||
#ifdef MR_KEXEC_DTB
|
||||
if(libbootimg_dump_dtb(&img, "/dtb.img") >= 0) {
|
||||
printf("DTB: dtb image found!");
|
||||
kexec_add_arg(kexec, "--dtb=/dtb.img");
|
||||
}
|
||||
else {
|
||||
printf("DTB: no dtb image found!");
|
||||
#ifdef MR_NOT_64BIT
|
||||
kexec_add_arg(kexec, "--dtb");
|
||||
#endif
|
||||
}
|
||||
kexec_add_arg_prefix(kexec, "--dtb=", dtb_path);
|
||||
#endif
|
||||
|
||||
char cmdline[1536];
|
||||
|
||||
@@ -265,8 +265,8 @@ int multirom_ui(struct multirom_status *s, struct multirom_rom **to_boot)
|
||||
|
||||
ncard_show(b, 1);
|
||||
anim_stop(1);
|
||||
fb_freeze(1);
|
||||
fb_force_draw();
|
||||
// fb_freeze(1);
|
||||
// fb_force_draw();
|
||||
|
||||
multirom_ui_destroy_theme();
|
||||
multirom_ui_free_themes(themes_info);
|
||||
|
||||
@@ -18,7 +18,8 @@ LOCAL_FORCE_STATIC_EXECUTABLE := true
|
||||
ifeq ($(MR_INIT_DEVICES),)
|
||||
$(info MR_INIT_DEVICES was not defined in device files!)
|
||||
endif
|
||||
LOCAL_SRC_FILES += ../../../../$(MR_INIT_DEVICES)
|
||||
#LOCAL_SRC_FILES += ../../../../$(MR_INIT_DEVICES)
|
||||
LOCAL_SRC_FILES += mr_init_devices.c
|
||||
|
||||
# for adb
|
||||
LOCAL_CFLAGS += -DPRODUCT_MODEL="\"$(PRODUCT_MODEL)\"" -DPRODUCT_MANUFACTURER="\"$(PRODUCT_MANUFACTURER)\""
|
||||
|
||||
62
trampoline/mr_init_devices.c
Normal file
62
trampoline/mr_init_devices.c
Normal file
@@ -0,0 +1,62 @@
|
||||
#include <stdlib.h>
|
||||
|
||||
// These are paths to folders in /sys which contain "uevent" file
|
||||
// need to init this device.
|
||||
// MultiROM needs to init framebuffer, mmc blocks, input devices,
|
||||
// some ADB-related stuff and USB drives, if OTG is supported
|
||||
// You can use * at the end to init this folder and all its subfolders
|
||||
const char *mr_init_devices[] =
|
||||
{
|
||||
"/sys/class/graphics/fb0",
|
||||
|
||||
"/sys/block/mmcblk0",
|
||||
"/sys/devices/15560000.dwmmc2",
|
||||
"/sys/devices/15560000.dwmmc2/mmc_host/mmc0",
|
||||
"/sys/devices/15560000.dwmmc2/mmc_host/mmc0/mmc0:59b4",
|
||||
"/sys/devices/15560000.dwmmc2/mmc_host/mmc0/mmc0:59b4/block/mmcblk0",
|
||||
"/sys/devices/15560000.dwmmc2/mmc_host/mmc0/mmc0:59b4/block/mmcblk0/*",
|
||||
"/dev/block/platform/15570000.ufs/by-name/*",
|
||||
"/sys/devices/15570000.ufs",
|
||||
"/sys/devices/15570000.ufs/host0",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/*",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda26",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda43",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda41",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda44",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda22",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda30",
|
||||
"/sys/devices/15570000.ufs/host0/target0:0:0/0:0:0:0/block/sda/sda21",
|
||||
|
||||
"/sys/bus/mmc",
|
||||
"/sys/bus/mmc/drivers/mmcblk",
|
||||
"/sys/module/mmc_core",
|
||||
"/sys/module/mmcblk",
|
||||
"/sys/module/block",
|
||||
"/sys/module/ufshcd",
|
||||
"/sys/module/ufshcd_pltfrm",
|
||||
"/sys/module/decon",
|
||||
|
||||
"/sys/devices/gpio_keys.42/input*",
|
||||
"/sys/devices/virtual/input*",
|
||||
"/sys/devices/virtual/misc/uinput",
|
||||
"/sys/devices/13690000.hsi2c/i2c-10/10-0044/input*",
|
||||
"/sys/devices/13690000.hsi2c/i2c-10/10-001e/input*",
|
||||
"/sys/devices/13660000.hsi2c/i2c-4/4-0049/input*",
|
||||
"/sys/devices/13660000.hsi2c/i2c-4/4-0049/input/input7",
|
||||
|
||||
// for adb
|
||||
"/sys/devices/virtual/tty/ptmx",
|
||||
"/sys/devices/virtual/misc/android_adb",
|
||||
"/sys/devices/virtual/android_usb/android0/f_adb",
|
||||
|
||||
"/sys/devices/platform/nop_usb_xceiv*",
|
||||
|
||||
// Encryption
|
||||
"/sys/devices/virtual/misc/device-mapper",
|
||||
"/sys/devices/virtual/misc/ion",
|
||||
"/sys/devices/virtual/mobicore/mobicore",
|
||||
|
||||
NULL
|
||||
};
|
||||
@@ -99,7 +99,7 @@ static void run_multirom(void)
|
||||
char *cmd[] = { path, NULL };
|
||||
do
|
||||
{
|
||||
ERROR("Running multirom\n");
|
||||
ERROR("Running multirom: %s\n",path);
|
||||
int res = run_cmd(cmd);
|
||||
if(res == 0)
|
||||
break;
|
||||
|
||||
Reference in New Issue
Block a user