[ROM][7.1]Official - LineageOS 14.1

  • 36 Antworten
  • Letztes Antwortdatum
Es geht weiter. Gerade wurde das erste offizielle Build nach der "Zwangspause" im Downloadbereich veröffentlicht, habe es selbst auch gerade erfolgreich installiert. LineageOS Downloads
 
  • Danke
Reaktionen: mercurydog, boomst und NeuerS5
Ein Hurra von mir :thumbsup:. Hatte mir vor ein paar Wochen ein Nexus 4 als Zweithandy gekauft nachdem ich extra geprüft hatte ob es noch aktuelle LineageOS-Builds gibt und dann der Schreck. :eek:
Aber jetzt ist ja alles wieder gut. :flapper:
 
  • Danke
Reaktionen: mädschie
Kann mal bitte in den Titel des Threaders ändern und nexus 4 mit aufnehmen
Danke
 
Ich kann den ersten Post leider nicht mehr bearbeiten, vermutlich muß das ein Mod machen.

Ansonsten: Das letzte Build für das Nexus4 ist deutlich kleiner geworden (wahrscheinlich weil der LOS-eigene Browser rausgeflogen ist), damit sollte jetzt auch eine Installation mit den Nano-GApps statt den Pico-GApps problemlos möglich sein. (Im März hatte ich mit Nano-GApps die System-Partition zu 95% voll, war mir zu riskant daß es mit späteren Updates dann nicht mehr reicht. Neuinstallation mit Pico-GApps war dann bei 85%. Jetzt mit dem ersten Mai-Build ist das auf 77% gesunken).
 
  • Danke
Reaktionen: NeuerS5
Vll. kanns sonst noch jemand brauchen:

"multirom"/kexec Kernel (patch von "tasssaddar") von Juli für LOS-14.1 (stand ashmem: remove cache maintenance support · LineageOS/lge-kernel-mako@6b16998 · GitHub)

Änderung:
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index fa96c25e1fc..4f5563c37bd 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -2281,6 +2281,32 @@ config ATAGS_PROC
Should the atags used to boot the kernel be exported in an "atags"
file in procfs. Useful with kexec.

+config KEXEC_HARDBOOT
+ bool "Support hard booting to a kexec kernel"
+ depends on KEXEC
+ help
+ Allows hard booting (i.e., with a full hardware reboot) to a kernel
+ previously loaded in memory by kexec. This works around the problem of
+ soft-booted kernel hangs due to improper device shutdown and/or
+ reinitialization. Support is comprised of two components:
+
+ First, a "hardboot" flag is added to the kexec syscall to force a hard
+ reboot in relocate_new_kernel() (which requires machine-specific assembly
+ code). This also requires the kexec userspace tool to load the kexec'd
+ kernel in memory region left untouched by the bootloader (i.e., not
+ explicitly cleared and not overwritten by the boot kernel). Just prior
+ to reboot, the kexec kernel arguments are stashed in a machine-specific
+ memory page that must also be preserved. Note that this hardboot page
+ need not be reserved during regular kernel execution.
+
+ Second, the zImage decompresor of the boot (bootloader-loaded) kernel is
+ modified to check the hardboot page for fresh kexec arguments, and if
+ present, attempts to jump to the kexec'd kernel preserved in memory.
+
+ Note that hardboot support is only required in the boot kernel and any
+ kernel capable of performing a hardboot kexec. It is _not_ required by a
+ kexec'd kernel.
+
config CRASH_DUMP
bool "Build kdump crash kernel (EXPERIMENTAL)"
depends on EXPERIMENTAL
diff --git a/arch/arm/boot/compressed/head.S b/arch/arm/boot/compressed/head.S
index aa6f96ed2ab..2b910b36f26 100644
--- a/arch/arm/boot/compressed/head.S
+++ b/arch/arm/boot/compressed/head.S
@@ -10,6 +10,11 @@
*/
#include <linux/linkage.h>

+#ifdef CONFIG_KEXEC_HARDBOOT
+ #include <asm/kexec.h>
+ #include <asm/memory.h>
+#endif
+
.arch armv7-a
/*
* Debugging stuff
@@ -136,6 +141,97 @@ start:
1: mov r7, r1 @ save architecture ID
mov r8, r2 @ save atags pointer

+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Check hardboot page for a kexec kernel. */
+ ldr r3, =KEXEC_HB_PAGE_ADDR
+ ldr r0, [r3]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ teq r0, r1
+ bne not_booting_other
+
+ /* Clear hardboot page magic to avoid boot loop. */
+ mov r0, #0
+ str r0, [r3]
+
+/* Copy the kernel tagged list (atags):
+ *
+ * The kernel requires atags to be located in a direct-mapped region,
+ * usually below the kernel in the first 16 kB of RAM. If they're above
+ * (the start of) the kernel, they need to be copied to a suitable
+ * location, e.g., the machine-defined params_phys.
+ *
+ * The assumption is that the tags will only be "out of place" if the
+ * decompressor code is also, so copying is implemented only in the "won't
+ * overwrite" case (which should be fixed). Still need to make sure that
+ * the copied tags don't overwrite either the kernel or decompressor code
+ * (or rather, the remainder of it since everything up to here has already
+ * been executed).
+ *
+ * Vojtech Bocek <vbocek@gmail.com>: I've moved atags copying from guest
+ * kernel to the host and rewrote it from C to assembler in order to remove
+ * the need for guest kernel to be patched. I don't know assembler very well,
+ * so it doesn't look very good and I have no idea if I didn't accidentally
+ * break something, causing problems down the road. It's worked every time
+ * and I didn't notice any problems so far though.
+ *
+ * r4: zreladdr (kernel start)
+ * r8: kexec_boot_atags
+ * r2: boot_atags */
+ ldr r8, [r3, #12] @ kexec_boot_atags (r2: boot_atags)
+ ldr r4, =zreladdr @ zreladdr
+
+ /* No need to copy atags if they're already below kernel */
+ cmp r8, r4
+ blo no_atags_cpy
+
+ /* r0: min(zreladdr, pc) */
+ mov r0, pc
+ cmp r4, r0
+ movlo r0, r4
+
+ /* Compute max space for atags, if max <= 0 don't copy. */
+ subs r5, r0, r2 @ max = min(zreladdr, pc) - dest
+ bls no_atags_cpy
+
+ /* Copy atags to params_phys. */
+ /* r8 src, r2 dest, r5 max */
+
+ ldr r0, [r8] @ first tag size
+ cmp r0, #0
+ moveq r4, #8
+ beq catags_empty
+ mov r4, r8
+
+catags_foreach:
+ lsl r0, r0, #2 @ Multiply by 4
+ ldr r0, [r4, r0]! @ Load next tag size to r0 and address to r4
+ cmp r0, #0
+ bne catags_foreach
+
+ rsb r4, r8, r4 @ r4 -= r8 (get only size)
+ add r4, r4, #8 @ add size of the last tag
+catags_empty:
+ cmp r5, r4 @ if(max <= size)
+ bcc no_atags_cpy
+
+ mov r5, #0 @ iterator
+catags_cpy:
+ ldr r0, [r8, r5]
+ str r0, [r2, r5]
+ add r5, r5, #4
+ cmp r5, r4
+ blo catags_cpy
+
+no_atags_cpy:
+ /* Load boot arguments and jump to kexec kernel. */
+ ldr r1, [r3, #8] @ kexec_mach_type
+ ldr pc, [r3, #4] @ kexec_start_address
+
+ .ltorg
+
+not_booting_other:
+#endif
+
#ifndef __ARM_ARCH_2__
/*
* Booting from Angel - need to enter SVC mode and disable
diff --git a/arch/arm/configs/flo_defconfig b/arch/arm/configs/flo_defconfig
index a1794f6c87a..f2d2d23094b 100644
--- a/arch/arm/configs/flo_defconfig
+++ b/arch/arm/configs/flo_defconfig
@@ -539,3 +539,6 @@ CONFIG_LSM_MMAP_MIN_ADDR=4096
CONFIG_SECURITY_SELINUX=y
CONFIG_CRYPTO_AES_ARM=y
CONFIG_CRYPTO_TWOFISH=y
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=y
diff --git a/arch/arm/configs/lineageos_mako_defconfig b/arch/arm/configs/lineageos_mako_defconfig
index 75d20f2f126..f6920cc0cca 100644
--- a/arch/arm/configs/lineageos_mako_defconfig
+++ b/arch/arm/configs/lineageos_mako_defconfig
@@ -682,7 +682,9 @@ CONFIG_ZBOOT_ROM_TEXT=0
CONFIG_ZBOOT_ROM_BSS=0
CONFIG_CMDLINE=""
# CONFIG_XIP_KERNEL is not set
-# CONFIG_KEXEC is not set
+CONFIG_KEXEC=y
+CONFIG_KEXEC_HARDBOOT=y
+CONFIG_ATAGS_PROC=y
# CONFIG_CRASH_DUMP is not set
# CONFIG_AUTO_ZRELADDR is not set

diff --git a/arch/arm/include/asm/kexec.h b/arch/arm/include/asm/kexec.h
index c2b9b4bdec0..564c55b394e 100644
--- a/arch/arm/include/asm/kexec.h
+++ b/arch/arm/include/asm/kexec.h
@@ -17,6 +17,10 @@
#define KEXEC_ARM_ATAGS_OFFSET 0x1000
#define KEXEC_ARM_ZIMAGE_OFFSET 0x8000

+#ifdef CONFIG_KEXEC_HARDBOOT
+ #define KEXEC_HB_PAGE_MAGIC 0x4a5db007
+#endif
+
#ifndef __ASSEMBLY__

/**
@@ -53,6 +57,10 @@ static inline void crash_setup_regs(struct pt_regs *newregs,
/* Function pointer to optional machine-specific reinitialization */
extern void (*kexec_reinit)(void);

+#ifdef CONFIG_KEXEC_HARDBOOT
+extern void (*kexec_hardboot_hook)(void);
+#endif
+
#endif /* __ASSEMBLY__ */

#endif /* CONFIG_KEXEC */
diff --git a/arch/arm/kernel/atags.c b/arch/arm/kernel/atags.c
index 42a1a1415fa..0cfd7e48038 100644
--- a/arch/arm/kernel/atags.c
+++ b/arch/arm/kernel/atags.c
@@ -4,29 +4,45 @@
#include <asm/types.h>
#include <asm/page.h>

+/*
+ * [PATCH] Backport arch/arm/kernel/atags.c from 3.10
+ *
+ * There is a bug in older kernels, causing kexec-tools binary to
+ * only read first 1024 bytes from /proc/atags. I guess the bug is
+ * somewhere in /fs/proc/, since I don't think the callback in atags.c
+ * does something wrong. It might affect all procfs files using that
+ * old read callback instead of fops. Doesn't matter though, since it
+ * was accidentally fixed when 3.10 removed it.
+ *
+ * This might have no particular effect on real devices, because the
+ * atags _might_ be organized "just right", but it might be very hard
+ * to track down on a device where it causes problems.
+ *
+ */
+
struct buffer {
size_t size;
char data[];
};

-static int
-read_buffer(char* page, char** start, off_t off, int count,
- int* eof, void* data)
-{
- struct buffer *buffer = (struct buffer *)data;
-
- if (off >= buffer->size) {
- *eof = 1;
- return 0;
- }
-
- count = min((int) (buffer->size - off), count);
+static struct buffer* atags_buffer = NULL;

- memcpy(page, &buffer->data[off], count);
-
- return count;
+static ssize_t atags_read(struct file *file, char __user *buf,
+ size_t count, loff_t *ppos)
+{
+ // These are introduced in kernel 3.10. I don't want to backport
+ // the whole chunk, and other things (ram_console) use static
+ // variable to keep data too, so I guess it's okay.
+ //struct buffer *b = PDE_DATA(file_inode(file));
+ struct buffer *b = atags_buffer;
+ return simple_read_from_buffer(buf, count, ppos, b->data, b->size);
}

+static const struct file_operations atags_fops = {
+ .read = atags_read,
+ .llseek = default_llseek,
+};
+
#define BOOT_PARAMS_SIZE 1536
static char __initdata atags_copy[BOOT_PARAMS_SIZE];

@@ -66,12 +82,13 @@ static int __init init_atags_procfs(void)
b->size = size;
memcpy(b->data, atags_copy, size);

- tags_entry = create_proc_read_entry("atags", 0400,
- NULL, read_buffer, b);
+ tags_entry = proc_create_data("atags", 0400, NULL, &atags_fops, b);

if (!tags_entry)
goto nomem;

+ atags_buffer = b;
+
return 0;

nomem:
diff --git a/arch/arm/kernel/machine_kexec.c b/arch/arm/kernel/machine_kexec.c
index fa270580875..0fe677a9959 100644
--- a/arch/arm/kernel/machine_kexec.c
+++ b/arch/arm/kernel/machine_kexec.c
@@ -14,6 +14,7 @@
#include <asm/cacheflush.h>
#include <asm/mach-types.h>
#include <asm/system_misc.h>
+#include <asm/mmu_writeable.h>

extern const unsigned char relocate_new_kernel[];
extern const unsigned int relocate_new_kernel_size;
@@ -22,6 +23,10 @@ extern unsigned long kexec_start_address;
extern unsigned long kexec_indirection_page;
extern unsigned long kexec_mach_type;
extern unsigned long kexec_boot_atags;
+#ifdef CONFIG_KEXEC_HARDBOOT
+extern unsigned long kexec_hardboot;
+void (*kexec_hardboot_hook)(void);
+#endif

static atomic_t waiting_for_crash_ipi;

@@ -123,10 +128,13 @@ void machine_kexec(struct kimage *image)
reboot_code_buffer = page_address(image->control_code_page);

/* Prepare parameters for reboot_code_buffer*/
- kexec_start_address = image->start;
- kexec_indirection_page = page_list;
- kexec_mach_type = machine_arch_type;
- kexec_boot_atags = image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET;
+ mem_text_write_kernel_word(&kexec_start_address, image->start);
+ mem_text_write_kernel_word(&kexec_indirection_page, page_list);
+ mem_text_write_kernel_word(&kexec_mach_type, machine_arch_type);
+ mem_text_write_kernel_word(&kexec_boot_atags, image->start - KEXEC_ARM_ZIMAGE_OFFSET + KEXEC_ARM_ATAGS_OFFSET);
+#ifdef CONFIG_KEXEC_HARDBOOT
+ mem_text_write_kernel_word(&kexec_hardboot, image->hardboot);
+#endif

/* copy our kernel relocation code to the control code page */
memcpy(reboot_code_buffer,
@@ -140,5 +148,11 @@ void machine_kexec(struct kimage *image)
if (kexec_reinit)
kexec_reinit();

+#ifdef CONFIG_KEXEC_HARDBOOT
+ /* Run any final machine-specific shutdown code. */
+ if (image->hardboot && kexec_hardboot_hook)
+ kexec_hardboot_hook();
+#endif
+
soft_restart(reboot_code_buffer_phys);
}
diff --git a/arch/arm/kernel/relocate_kernel.S b/arch/arm/kernel/relocate_kernel.S
index d0cdedf4864..f5342939d95 100644
--- a/arch/arm/kernel/relocate_kernel.S
+++ b/arch/arm/kernel/relocate_kernel.S
@@ -4,6 +4,15 @@

#include <asm/kexec.h>

+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/memory.h>
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ #include <mach/iomap.h>
+#elif defined(CONFIG_ARCH_APQ8064)
+ #include <mach/msm_iomap.h>
+#endif
+#endif
+
.globl relocate_new_kernel
relocate_new_kernel:

@@ -52,6 +61,12 @@ relocate_new_kernel:
b 0b

2:
+#ifdef CONFIG_KEXEC_HARDBOOT
+ ldr r0, kexec_hardboot
+ teq r0, #0
+ bne hardboot
+#endif
+
/* Jump to relocated kernel */
mov lr,r1
mov r0,#0
@@ -60,6 +75,40 @@ relocate_new_kernel:
ARM( mov pc, lr )
THUMB( bx lr )

+#ifdef CONFIG_KEXEC_HARDBOOT
+hardboot:
+ /* Stash boot arguments in hardboot page:
+ * 0: KEXEC_HB_PAGE_MAGIC
+ * 4: kexec_start_address
+ * 8: kexec_mach_type
+ * 12: kexec_boot_atags */
+ ldr r0, =KEXEC_HB_PAGE_ADDR
+ str r1, [r0, #4]
+ ldr r1, kexec_mach_type
+ str r1, [r0, #8]
+ ldr r1, kexec_boot_atags
+ str r1, [r0, #12]
+ ldr r1, =KEXEC_HB_PAGE_MAGIC
+ str r1, [r0]
+
+#if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC)
+ ldr r0, =TEGRA_PMC_BASE
+ ldr r1, [r0]
+ orr r1, r1, #0x10
+ str r1, [r0]
+loop: b loop
+#elif defined(CONFIG_ARCH_APQ8064)
+ /* Restart using the PMIC chip, see mach-msm/restart.c */
+ ldr r0, =APQ8064_TLMM_PHYS
+ mov r1, #0
+ str r1, [r0, #0x820] @ PSHOLD_CTL_SU
+loop: b loop
+#else
+#error "No reboot method defined for hardboot."
+#endif
+
+ .ltorg
+#endif
.align

.globl kexec_start_address
@@ -79,6 +128,12 @@ kexec_mach_type:
kexec_boot_atags:
.long 0x0

+#ifdef CONFIG_KEXEC_HARDBOOT
+ .globl kexec_hardboot
+kexec_hardboot:
+ .long 0x0
+#endif
+
relocate_new_kernel_end:

.globl relocate_new_kernel_size
diff --git a/arch/arm/mach-msm/include/mach/memory.h b/arch/arm/mach-msm/include/mach/memory.h
index 33fe6736f9f..daee9e67f70 100644
--- a/arch/arm/mach-msm/include/mach/memory.h
+++ b/arch/arm/mach-msm/include/mach/memory.h
@@ -20,6 +20,16 @@
/* physical offset of RAM */
#define PLAT_PHYS_OFFSET UL(CONFIG_PHYS_OFFSET)

+#if defined(CONFIG_KEXEC_HARDBOOT)
+#if defined(CONFIG_MACH_APQ8064_FLO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88C00000)
+#elif defined(CONFIG_MACH_APQ8064_MAKO)
+#define KEXEC_HB_PAGE_ADDR UL(0x88600000)
+#else
+#error "Adress for kexec hardboot page not defined"
+#endif
+#endif
+
#define MAX_PHYSMEM_BITS 32
#define SECTION_SIZE_BITS 28

diff --git a/arch/arm/mach-msm/lge/devices_lge.c b/arch/arm/mach-msm/lge/devices_lge.c
index 504cc1ebe4a..f74e4e793c2 100644
--- a/arch/arm/mach-msm/lge/devices_lge.c
+++ b/arch/arm/mach-msm/lge/devices_lge.c
@@ -26,6 +26,10 @@

#include <ram_console.h>

+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <linux/memblock.h>
+#endif
+
/* setting whether uart console is enalbed or disabled */
static int uart_console_mode = 0;

@@ -187,6 +191,17 @@ void __init lge_add_persistent_ram(void)

void __init lge_reserve(void)
{
+#ifdef CONFIG_KEXEC_HARDBOOT
+ // Reserve space for hardboot page, just before the ram_console
+ struct membank* bank = &meminfo.bank[0];
+ phys_addr_t start = bank->start + bank->size - SZ_1M - LGE_PERSISTENT_RAM_SIZE;
+ int ret = memblock_remove(start, SZ_1M);
+ if(!ret)
+ pr_info("Hardboot page reserved at 0x%X\n", start);
+ else
+ pr_err("Failed to reserve space for hardboot page at 0x%X!\n", start);
+#endif
+
lge_add_persistent_ram();
}

diff --git a/arch/arm/mach-msm/perf_trace_counters.h b/arch/arm/mach-msm/perf_trace_counters.h
index c90593f97bd..8cecd3295eb 100644
--- a/arch/arm/mach-msm/perf_trace_counters.h
+++ b/arch/arm/mach-msm/perf_trace_counters.h
@@ -158,7 +158,7 @@ TRACE_EVENT(sched_switch_with_ctrs,

#endif
#undef TRACE_INCLUDE_PATH
-#define TRACE_INCLUDE_PATH .
+#define TRACE_INCLUDE_PATH ../../arch/arm/mach-msm
#define TRACE_INCLUDE_FILE perf_trace_counters
#include <trace/define_trace.h>

diff --git a/arch/arm/mach-msm/restart.c b/arch/arm/mach-msm/restart.c
index 4b09f2b6f06..e25fdaf8908 100644
--- a/arch/arm/mach-msm/restart.c
+++ b/arch/arm/mach-msm/restart.c
@@ -35,6 +35,10 @@
#include "msm_watchdog.h"
#include "timer.h"

+#ifdef CONFIG_KEXEC_HARDBOOT
+#include <asm/kexec.h>
+#endif
+
extern unsigned get_cable_status(void);

#define WDT0_RST 0x38
@@ -339,6 +343,14 @@ static int __init msm_pmic_restart_init(void)

late_initcall(msm_pmic_restart_init);

+#ifdef CONFIG_KEXEC_HARDBOOT
+static void msm_kexec_hardboot_hook(void)
+{
+ // Set PMIC to restart-on-poweroff
+ pm8xxx_reset_pwr_off(1);
+}
+#endif
+
static int __init msm_restart_init(void)
{
#ifdef CONFIG_MSM_DLOAD_MODE
@@ -354,6 +366,10 @@ static int __init msm_restart_init(void)
restart_reason = MSM_IMEM_BASE + RESTART_REASON_ADDR;
pm_power_off = msm_power_off;

+#ifdef CONFIG_KEXEC_HARDBOOT
+ kexec_hardboot_hook = msm_kexec_hardboot_hook;
+#endif
+
return 0;
}
early_initcall(msm_restart_init);
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index af84a25ef6b..a4509adc86a 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -111,6 +111,10 @@ struct kimage {
#define KEXEC_TYPE_CRASH 1
unsigned int preserve_context : 1;

+#ifdef CONFIG_KEXEC_HARDBOOT
+ unsigned int hardboot : 1;
+#endif
+
#ifdef ARCH_HAS_KIMAGE_ARCH
struct kimage_arch arch;
#endif
@@ -178,6 +182,11 @@ extern struct kimage *kexec_crash_image;

#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_PRESERVE_CONTEXT 0x00000002
+
+#ifdef CONFIG_KEXEC_HARDBOOT
+#define KEXEC_HARDBOOT 0x00000004
+#endif
+
#define KEXEC_ARCH_MASK 0xffff0000

/* These values match the ELF architecture values.
@@ -196,10 +205,14 @@ extern struct kimage *kexec_crash_image;
#define KEXEC_ARCH_MIPS ( 8 << 16)

/* List of defined/legal kexec flags */
-#ifndef CONFIG_KEXEC_JUMP
-#define KEXEC_FLAGS KEXEC_ON_CRASH
-#else
+#if defined(CONFIG_KEXEC_JUMP) && defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT | KEXEC_HARDBOOT)
+#elif defined(CONFIG_KEXEC_JUMP)
#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_PRESERVE_CONTEXT)
+#elif defined(CONFIG_KEXEC_HARDBOOT)
+#define KEXEC_FLAGS (KEXEC_ON_CRASH | KEXEC_HARDBOOT)
+#else
+#define KEXEC_FLAGS (KEXEC_ON_CRASH)
#endif

#define VMCOREINFO_BYTES (4096)
diff --git a/kernel/kexec.c b/kernel/kexec.c
index 4e2e472f6ae..aef789344c2 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1004,6 +1004,10 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,

if (flags & KEXEC_PRESERVE_CONTEXT)
image->preserve_context = 1;
+#ifdef CONFIG_KEXEC_HARDBOOT
+ if (flags & KEXEC_HARDBOOT)
+ image->hardboot = 1;
+#endif
result = machine_kexec_prepare(image);
if (result)
goto out;

(los als zweitrom, leider nur mit umweg möglich: als primäre installieren und danach kopieren)

Edit:
sollte die rom als secondary nicht mehr starten, über die adb shell restorecon in data ausführen, ohne /data/media (schlägt fehl)
d.h. im bootloop der "secondary rom" z.B. in etwa so:
Code:
adb root (muss vorher erlaubt worden sein!, entwickleroptionen root zugriff adb)
adb shell
cd /data
for i in *; do [[ $i != "media" ]] && restorecon -vFR $i; done
cd /data/data
for i in *; do restorecon -vFRD $i; done
exit
exit
adb reboot
jetzt sollte hoffentlich die zweitrom wieder booten
 

Anhänge

  • kernel-mako-n-1407-LOS.zip
    6,5 MB · Aufrufe: 144
Zuletzt bearbeitet:
Ich hab jetzt mal ne ganz banale Frage....
Wie kann ich den Auslöseton der Kamera ausschalten?

Ich finde, der Build vom 24.08. läuft ganz gut. Allerdings sagt mir der Updater, dass es eine neue Version gibt, die vom 24.08., die aber schon installiert ist... :lol:
Naja, ich hab gelesen, dass es ein bekannter Bug sein soll. So schlimm ist es ja auch nicht...
 
wolder schrieb:
Wie kann ich den Auslöseton der Kamera ausschalten?
Das kommt auf die Kamera-App an die du verwendest. Bei LineageOS 14.1 ist nämlich gar keine mehr dabei. Anfangs war das "Snap" aber weil damit zwar Fotos klappten aber Videos immer komplett schwarz aufgenommen wurden hat man Snap beim Nexus4 entfernt. Eventuell hast du durch die Google Apps eine Kamera-App installiert (ich selber nutze die kostenpflichtige ABC A Better Camera).
 
  • Danke
Reaktionen: wolder
Heute wurde das Nexus 4 im Buildsystem von 14.1 zu 15.1 umgestellt. Dadurch sollte kein neuer 14.1 Build mehr kommen sondern vermutlich nächsten Montag der erste 15.1 Build (außer es wird außerplanmäßig vorher schon einer gestartet, bei den heutigen 15.1er Builds war es noch nicht dabei, die wurden vorher schon gestartet).

Zur Umstellung von 14.1 auf 15.1 kann man bei installierten GApps nicht einfach den neuen Build drüber bügeln. Sondern muß, wenn man nicht komplett neu installieren möchte für 8.1 passende GApps herunterladen, die System-Partition formatieren und den 15.1 Build und direkt danach die 8.1er GApps installieren. Angeblich soll man so ohne Datenverlust umstellen können. Ob das tatsächlich klappt wird sich zeigen ...
 
  • Danke
Reaktionen: mädschie und NeuerS5
Das allererste Build soll laut XDA-Thread grundsätzlich OK laufen. Es gibt teils Speicherplatzprobleme beim Installieren mit den GApps, man muß per Konfig-Datei wohl das GoogleTTS ausschließen sonst reicht der Platz in der recht kleinen System-Partition nicht und es kommt bei der Installation ein Fehler.

Da mein Nexus4 immer noch mein tägliches Haupt-Privat-Telefon ist warte ich noch 1-2 Builds ab (ab jetzt immer Montags) bevor ich einen Umstell-Versuch wage. Vorher ist mir das noch zu riskant.
 
  • Danke
Reaktionen: NeuerS5
Hatte vorher schon die inoffizielle build installiert und seit Dienstag nun die offizielle. Bei mir läuft's prima. Mit den Pico-GApps ließ es sich installieren, allerdings ist die Partition wirklich sehr klein. Zur Not muss man ein bisschen mit den gapps-config herumspielen.

Steht in diesem Beitrag übrigens ganz anschaulich beschrieben:

[ROM][UNOFFICIAL] LineageOS-15.1 for Google Nexus 4 - Post #63
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: NeuerS5
Also bei mir läuft es auch gut. Habe allerdings nur die Pico-GApps installiert und den Rest danach über Google Play. Bin gerade dabei den 2. Build vom 14.05.2018 zu installieren. Leider geht es bei mir nicht ohne weiteres über TWRP. Es kommt immer Error 7. Hier im Forum gibt es ja zum Glück eine Anleitung für Error 7. Aber jedesmal die Datei "update-binary" zu editieren nervt. Hat da vielleicht jemand eine bessere Lösung?

Noch zur Info: ich nutze das N4 als Zweitgerät nur zu Hause im WLAN, kann also nichts über die Stabilität Telefon, mobiles Internet usw. sagen.
 
  • Danke
Reaktionen: NeuerS5
Habe auf 15.1. umgestellt, bis auf zwei sachen läuft es super.

1. Nach Flugmodus geht WLAN nicht mehr, Neustart geht nicht mehr, es hilft nur ein hart Reste (20s Ausschalter drücken)
2. Das Telefon startet immer mal wieder neu
 
Hallo,

habe das Aktuelste twrp-3.2.3-0-mako.img auf mein Nexus 4 8GB aufgespielt. Danach lineage-15.1-20180814-nightly-mako-signed.zip laufen würde das Lineage auch wunderbar aber ich bekomme einfach keine gapps installiert egal welches paket ich probiere im fehler 70.
ARM 8.1 mini, micro nana und pico alle ausprobiert immer der gleiche fehler 70.

Habe momentan leider nur meine Handy tarif zum Downloaden daher fallen alle MB ins gewicht und es ist ärgerlich knapp 1GB raus zu hauen für gapps die dann alle den gleichen fehler bringen.

Den Standart Rom wo ich gesichert hatte via Backup im twrp lässt sich natürlich auch nicht mehr richtig installieren, abgesehen davon das zuvor schon ständig 120 apps optimiert wurden bei jedem neu start, hängt sich das Nexus jetzt nachdem alles optimiert wurde komplet auf und zeigt nur noch die zurück taste und den akku lade stand an, dann nach 10 minuten kommt eine fehler meldung das man ok drücken kann oder warten kann, das wars dann.

Wäre cool wenn mir jemand einen tip geben könnte was ich falsch gemacht habe.

Merci

Viper
 
"Fehler 70" bedeutet das man zu wenig Speicher hat
bzw die Gapps zu groß sind.
Beim N4 funktionierten nur die Pico.
Evtl. nochmal einen wipe machen,
aber es so wählen,
das die zu flashende Rom nicht mit gelöscht wird.
Dann die Custom Rom nochmal flashen.
 
das fehler 70 zu groß bedeutet das habe ich schon raus gefunden.
egal wie ich es mache der fehler 70 bleibt.

ALLES wipt
Lineage und gapps drauf
lineage installiert
wipt davlik + data + cache
gapps pico fehler 70

lächerlich!!!

Was hab ich daraus mal wieder gelernt
never touch a runing system!!!
[doublepost=1534855352,1534848856][/doublepost]Konnte es jetzt nicht lassen und musste weiter daran rumbasteln weil sonst hät ich das handy weg hauen können.
Habe im Twrp datei manager diverses gelöscht was ich der meinung war das Lineage nicht benötigt, themen und auch 2-3 programme. Irgendwann war genug platz und ich konnte die pico apps installieren, und nun läuft es, mal schauen wie lange und wie gut.

Viper
[doublepost=1534856274][/doublepost]nun hätte ich aber noch eine andere frage

USB OTG für das aktuelste Lineage

was muss ich da noch runterladen

Nexus 4: USB On-The-Go (USB OTG) nachrüsten - so geht's

mit der anleitung kann ich nicht viel anfangen, habe es mir durch gelesen aber für mich ist nicht ersichtlich welchen ziddy patch ich jetzt benötigen würde?!

Danke
 
Du mußt das kleinste Paket nehmen, "pico". Ein Tipp im XDA-Forum war, unter "Older Versions" die Pico-Variante vom 06.07.2018 zu verwenden, die war besonders klein und wird danach vom Playstore sowieso aktualisiert wobei die Updates dann nicht in der knappen System-Partition landen sondern in der größeren Data. So hat man den kleinsten Footprint in der System-Partition.

Des weiteren sollte man unbedingt vor der Installation im gleichen Ordner auf dem Telefon wo die Gapps-Zip liegt eine Textdatei "gapps-config.txt" anlegen mit folgendem Inhalt (da sind auch Einträge für's Nano-Paket mit drin die schaden aber nicht):
Code:
Exclude

GoogleTTS
FaceDetect
FaceUnlock
Speech
Search
Also so daß die beiden Dateien nebeneindander liegen. Dann wird beim Flashen der GApps mit TWRP diese gapps-config.txt automatisch gelesen und die darin mit "Exclude" definierten Bestandteile weggelassen. Die .txt muß also nur da sein im Ordner. Dann sollte es klappen. Und TTS (TextToSpeech), Search/Speech über die Google-App bzw. GBoard usw. kann man dann über den Store nachinstallieren, wiederum in die Data-Partition.

Siehe vor allem die ersten beiden Beiträge im XDA-Forum vom offiziellen Maintainer von LOS15.1 für das Nexus4.
 

Ähnliche Themen

A
Antworten
20
Aufrufe
8.844
AraldoL
A
Volle
Antworten
0
Aufrufe
2.400
Volle
Volle
The_King
Antworten
10
Aufrufe
3.623
The_King
The_King
Zurück
Oben Unten