GalaxyNexusI9250SerialConsole » History » Version 19
Denis 'GNUtoo' Carikli, 01/29/2020 11:19 PM
| 1 | 16 | Paul Kocialkowski | h1. Galaxy Nexus (I9250) Serial Console |
|---|---|---|---|
| 2 | 1 | Denis 'GNUtoo' Carikli | |
| 3 | 19 | Denis 'GNUtoo' Carikli | See [[SamsungSerial]] for the hardware setup. |
| 4 | 1 | Denis 'GNUtoo' Carikli | |
| 5 | 19 | Denis 'GNUtoo' Carikli | h2. Without patching the kernel on Replicant 6 |
| 6 | |||
| 7 | Adding @loglevel=8 fiq_debugger.console_enable=1 fiq_debugger.no_sleep=1@ to the kernel command line enables to see some of the boot of the kernel without having to recompile the kernel. |
||
| 8 | |||
| 9 | Though it requires to repack a boot.img to add the commandline arguments. |
||
| 10 | <pre> |
||
| 11 | IMAGE ?= boot.img |
||
| 12 | EXTRA_CMDLINE ?= loglevel=8 fiq_debugger.console_enable=1 fiq_debugger.no_sleep=1 |
||
| 13 | |||
| 14 | .PHONY: $(IMAGE) flash |
||
| 15 | $(IMAGE): |
||
| 16 | unbootimg --kernel kernel \ |
||
| 17 | --ramdisk ramdisk \ |
||
| 18 | -i ../$(IMAGE) |
||
| 19 | mkbootimg \ |
||
| 20 | --kernel kernel \ |
||
| 21 | --ramdisk ramdisk \ |
||
| 22 | --base 0x80000000 \ |
||
| 23 | --cmdline "androidboot.hardware=tuna ${EXTRA_CMDLINE}" \ |
||
| 24 | -o $(IMAGE) |
||
| 25 | flash: |
||
| 26 | fastboot flash boot $(IMAGE) |
||
| 27 | fastboot flash recovery $(IMAGE) |
||
| 28 | fastboot boot $(IMAGE) |
||
| 29 | </pre> |
||
| 30 | |||
| 31 | h2. Serial console t |
||
| 32 | |||
| 33 | |||
| 34 | 1 | Denis 'GNUtoo' Carikli | |
| 35 | When you connect the cable you get the FIQ debugger, but what if you want kgdb instead: |
||
| 36 | * apply that patch: |
||
| 37 | <pre> |
||
| 38 | diff --git a/arch/arm/mach-omap2/board-tuna.c b/arch/arm/mach-omap2/board-tuna.c |
||
| 39 | index a022a43..7098227 100644 |
||
| 40 | --- a/arch/arm/mach-omap2/board-tuna.c |
||
| 41 | +++ b/arch/arm/mach-omap2/board-tuna.c |
||
| 42 | @@ -1001,6 +1001,8 @@ static inline void __init board_serial_init(void) |
||
| 43 | omap_serial_init_port_pads(0, uart1_pads, uart1_pads_sz, NULL); |
||
| 44 | omap_serial_init_port_pads(1, tuna_uart2_pads, |
||
| 45 | ARRAY_SIZE(tuna_uart2_pads), &tuna_uart2_info); |
||
| 46 | + omap_serial_init_port_pads(2,tuna_uart3_pads, |
||
| 47 | + ARRAY_SIZE(tuna_uart3_pads), NULL); |
||
| 48 | omap_serial_init_port_pads(3, tuna_uart4_pads, |
||
| 49 | ARRAY_SIZE(tuna_uart4_pads), NULL); |
||
| 50 | } |
||
| 51 | </pre> |
||
| 52 | * remove the FIQ debugger in the kernel configuration. |
||
| 53 | |||
| 54 | * change the CMDLINE trough the kernel configuration: |
||
| 55 | Use: |
||
| 56 | <pre>CONFIG_CMDLINE="console=ttyO2 androidboot.console=ttyO2 [...]"</pre> |
||
| 57 | Instead of: |
||
| 58 | <pre>CONFIG_CMDLINE="console=ttyFIQ0 androidboot.console=ttyFIQ0 [...]"</pre> |
||
| 59 | 2 | Denis 'GNUtoo' Carikli | |
| 60 | 3 | Denis 'GNUtoo' Carikli | * Verify that you get the kernel messages. |
| 61 | 2 | Denis 'GNUtoo' Carikli | |
| 62 | 12 | Denis 'GNUtoo' Carikli | h2. KGDB |
| 63 | |||
| 64 | 3 | Denis 'GNUtoo' Carikli | * Then change the cmdline for kgdb |
| 65 | 4 | Denis 'GNUtoo' Carikli | <pre> |
| 66 | CONFIG_CMDLINE="kgdboc=ttyO2,115200 console=ttyO2 androidboot.console=ttyO2 [...]" |
||
| 67 | </pre> |
||
| 68 | |||
| 69 | Don't add kgdbwait tough because it result in that: |
||
| 70 | <pre> |
||
| 71 | (gdb) set remotebaud 115200 |
||
| 72 | (gdb) target remote /dev/ttyUSB0 |
||
| 73 | /dev/ttyUSB0: Device or resource busy. |
||
| 74 | (gdb) target remote /dev/ttyUSB0 |
||
| 75 | Remote debugging using /dev/ttyUSB0 |
||
| 76 | kgdb_breakpoint () |
||
| 77 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/debug/debug_core.c:954 |
||
| 78 | 954 arch_kgdb_breakpoint(); |
||
| 79 | (gdb) c |
||
| 80 | Continuing. |
||
| 81 | |||
| 82 | Program received signal SIGSEGV, Segmentation fault. |
||
| 83 | __raw_spin_lock_irqsave (lock=0x288) |
||
| 84 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/spinlock.c:112 |
||
| 85 | 112 BUILD_LOCK_OPS(spin, raw_spinlock); |
||
| 86 | (gdb) bt |
||
| 87 | #0 __raw_spin_lock_irqsave (lock=0x288) |
||
| 88 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/spinlock.c:112 |
||
| 89 | #1 0xc061aecc in _raw_spin_lock_irqsave (lock=0x288) |
||
| 90 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/spinlock.c:145 |
||
| 91 | #2 0xc0098620 in try_to_wake_up (p=0x0, state=1611595795, wake_flags=1) |
||
| 92 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/sched.c:2681 |
||
| 93 | #3 0xc009897c in wake_up_process (p=0x288) |
||
| 94 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/sched.c:2785 |
||
| 95 | #4 0xc00e2090 in proc_dohung_task_timeout_secs (table=<value optimized out>, write=<value optimized out>, |
||
| 96 | buffer=<value optimized out>, lenp=<value optimized out>, ppos=0xc782bf70) |
||
| 97 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/hung_task.c:190 |
||
| 98 | #5 0xc0174178 in proc_sys_call_handler (filp=<value optimized out>, buf=0x24808, count=1, ppos=0xc782bf70, |
||
| 99 | write=1) at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/proc/proc_sysctl.c:158 |
||
| 100 | #6 0xc01741b0 in proc_sys_write (filp=0x288, buf=0x600f0013 <Address 0x600f0013 out of bounds>, count=1, |
||
| 101 | ppos=0xc782a000) |
||
| 102 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/proc/proc_sysctl.c:176 |
||
| 103 | #7 0xc0126420 in vfs_write (file=0xc73be500, buf=0x24808 "0", count=<value optimized out>, pos=0xc782bf70) |
||
| 104 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/read_write.c:377 |
||
| 105 | #8 0xc0126590 in sys_write (fd=<value optimized out>, buf=0x24808 "0", count=1) |
||
| 106 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/read_write.c:429 |
||
| 107 | #9 0xc0055a00 in ?? () |
||
| 108 | Cannot access memory at address 0x0 |
||
| 109 | #10 0xc0055a00 in ?? () |
||
| 110 | Cannot access memory at address 0x0 |
||
| 111 | Backtrace stopped: previous frame identical to this frame (corrupt stack?) |
||
| 112 | </pre> |
||
| 113 | 5 | Denis 'GNUtoo' Carikli | |
| 114 | 10 | Denis 'GNUtoo' Carikli | * disable the watchdog timer in the kernel, and recompile it and reflash the boot.img. |
| 115 | 6 | Denis 'GNUtoo' Carikli | |
| 116 | then open a root console and do: |
||
| 117 | <pre> |
||
| 118 | echo g > /proc/sysrq-trigger |
||
| 119 | </pre> |
||
| 120 | 7 | Denis 'GNUtoo' Carikli | |
| 121 | <pre> |
||
| 122 | gnutoo@gnutoo-laptop:~/embedded/android/replicant-4.0$ . build/envsetup.sh |
||
| 123 | including device/ti/panda/vendorsetup.sh |
||
| 124 | including vendor/replicant/vendorsetup.sh |
||
| 125 | including sdk/bash_completion/adb.bash |
||
| 126 | gnutoo@gnutoo-laptop:~/embedded/android/replicant-4.0$ lunch replicant_maguro-eng |
||
| 127 | |||
| 128 | ============================================ |
||
| 129 | PLATFORM_VERSION_CODENAME=REL |
||
| 130 | PLATFORM_VERSION=4.0.4 |
||
| 131 | TARGET_PRODUCT=replicant_maguro |
||
| 132 | TARGET_BUILD_VARIANT=eng |
||
| 133 | TARGET_BUILD_TYPE=release |
||
| 134 | TARGET_BUILD_APPS= |
||
| 135 | TARGET_ARCH=arm |
||
| 136 | TARGET_ARCH_VARIANT=armv7-a-neon |
||
| 137 | HOST_ARCH=x86 |
||
| 138 | HOST_OS=linux |
||
| 139 | HOST_BUILD_TYPE=release |
||
| 140 | BUILD_ID=IMM76L |
||
| 141 | ============================================ |
||
| 142 | |||
| 143 | |||
| 144 | gnutoo@gnutoo-laptop:~/embedded/android/replicant-4.0$ arm-linux-androideabi-gdb |
||
| 145 | GNU gdb (GDB) 7.1-android-gg2 |
||
| 146 | Copyright (C) 2010 Free Software Foundation, Inc. |
||
| 147 | License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html> |
||
| 148 | This is free software: you are free to change and redistribute it. |
||
| 149 | There is NO WARRANTY, to the extent permitted by law. Type "show copying" |
||
| 150 | and "show warranty" for details. |
||
| 151 | This GDB was configured as "--host=i686-linux-gnu --target=arm-elf-linux". |
||
| 152 | For bug reporting instructions, please see: |
||
| 153 | <http://www.gnu.org/software/gdb/bugs/>. |
||
| 154 | (gdb) file /home/gnutoo/embedded/android/replicant-4.0/out/target/product/maguro/obj/KERNEL_OBJ/vmlinux |
||
| 155 | Reading symbols from /home/gnutoo/embedded/android/replicant-4.0/out/target/product/maguro/obj/KERNEL_OBJ/vmlinux...done. |
||
| 156 | (gdb) set remotebaud 115200 |
||
| 157 | 8 | Denis 'GNUtoo' Carikli | (gdb) target remote /dev/ttyUSB0 |
| 158 | Remote debugging using /dev/ttyUSB0 |
||
| 159 | kgdb_breakpoint () |
||
| 160 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/debug/debug_core.c:954 |
||
| 161 | 954 arch_kgdb_breakpoint(); |
||
| 162 | (gdb) bt |
||
| 163 | #0 kgdb_breakpoint () |
||
| 164 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/debug/debug_core.c:954 |
||
| 165 | #1 0xc00df764 in sysrq_handle_dbg (key=-29306880) |
||
| 166 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/kernel/debug/debug_core.c:745 |
||
| 167 | #2 0xc02f2e18 in __handle_sysrq (key=103, check_mask=false) |
||
| 168 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/drivers/tty/sysrq.c:522 |
||
| 169 | #3 0xc02f2ec4 in write_sysrq_trigger (file=<value optimized out>, buf=<value optimized out>, count=2, |
||
| 170 | ppos=0xc4a01f70) |
||
| 171 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/drivers/tty/sysrq.c:870 |
||
| 172 | #4 0xc016ba88 in proc_reg_write (file=0xc49ea3c0, buf=0x137fc84 "g\n\f@", count=2, ppos=0xc4a01f70) |
||
| 173 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/proc/inode.c:200 |
||
| 174 | #5 0xc0126420 in vfs_write (file=0xc49ea3c0, buf=0x137fc84 "g\n\f@", count=<value optimized out>, |
||
| 175 | pos=0xc4a01f70) at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/read_write.c:377 |
||
| 176 | #6 0xc0126590 in sys_write (fd=<value optimized out>, buf=0x137fc84 "g\n\f@", count=2) |
||
| 177 | at /home/gnutoo/embedded/android/replicant-4.0/kernel/samsung/tuna/fs/read_write.c:429 |
||
| 178 | #7 0xc0055a00 in ?? () |
||
| 179 | Cannot access memory at address 0x0 |
||
| 180 | #8 0xc0055a00 in ?? () |
||
| 181 | Cannot access memory at address 0x0 |
||
| 182 | Backtrace stopped: previous frame identical to this frame (corrupt stack?) |
||
| 183 | (gdb) |
||
| 184 | 7 | Denis 'GNUtoo' Carikli | |
| 185 | </pre> |
||
| 186 | 11 | Denis 'GNUtoo' Carikli | |
| 187 | 12 | Denis 'GNUtoo' Carikli | h2. Multiplexing the serial port |
| 188 | |||
| 189 | 11 | Denis 'GNUtoo' Carikli | since we have only 1 serial port, you can also use agent proxy to get kgdb and the console at the same time.... |
| 190 | <pre> |
||
| 191 | git clone git://git.kernel.org/pub/scm/utils/kernel/kgdb/agent-proxy.git |
||
| 192 | cd agent-proxy ; make |
||
| 193 | </pre> |
||
| 194 | 12 | Denis 'GNUtoo' Carikli | |
| 195 | h2. Root on serial port |
||
| 196 | 13 | Denis 'GNUtoo' Carikli | |
| 197 | * Modify system/su/su.c: |
||
| 198 | <pre> |
||
| 199 | diff --git a/su.c b/su.c |
||
| 200 | index d36eaed..51137d4 100644 |
||
| 201 | --- a/su.c |
||
| 202 | +++ b/su.c |
||
| 203 | @@ -494,11 +494,13 @@ int main(int argc, char *argv[]) |
||
| 204 | deny(&ctx); |
||
| 205 | } |
||
| 206 | |||
| 207 | +#if 0 |
||
| 208 | // disallow su in a shell if appropriate |
||
| 209 | if (ctx.from.uid == AID_SHELL && (atoi(enabled) == 1)) { |
||
| 210 | LOGE("Root access is disabled by a system setting - enable it under settings -> developer options"); |
||
| 211 | deny(&ctx); |
||
| 212 | } |
||
| 213 | +#endif |
||
| 214 | } |
||
| 215 | |||
| 216 | if (ctx.from.uid == AID_ROOT || ctx.from.uid == AID_SHELL) |
||
| 217 | </pre> |
||
| 218 | * adb push it to /system/xbin/su |
||
| 219 | * remove /system/bin/su |
||
| 220 | * chmod +s it: <pre>busybox chmod +s /system/xbin/su</pre> |
||
| 221 | 14 | Denis 'GNUtoo' Carikli | |
| 222 | h2. TODO |
||
| 223 | 15 | Denis 'GNUtoo' Carikli | |
| 224 | 14 | Denis 'GNUtoo' Carikli | * reliable rebugging (right now it breaks on the wrong line) |
| 225 | * phone that doesn't power off screen while debugging... |