Русский / Russian English / Английский

Сейчас на форуме: FORER (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Крэки, обсуждения —› [Android] Нужно прочитать DBG сообщения bootloader'а
Посл.ответ Сообщение

Ранг: 19.1 (новичок)
Статус: Участник

Создано: 9 ноября 2014 11:16 New!
Цитата · Личное сообщение · #1

Занялся созданием собственной прошивки для android-устройства (чистый китай, SoC Qualcomm MSM8226).
Но столкнулся с мега проблемой: после заливки в устройство нового образа boot.img получаю вечный режим fastboot (хоть power нажимай, хоть батарею передёргивай). Хорошо хоть TWRP recovery стартует и есть backup всей системы.
Так вот, я так полагаю, что вечный фастбут вызван какойто ошибкой. Все ошибки логируются.
Примерный исходный код бутлоадера: https://www.codeaurora.org/cgit/quic/la/kernel/lk/snapshot/AU_LINUX_ANDROID_LNX.LA.3.7.04.04.04.030.313.tar.gz

Вот функция, которая логирует каждый символ DBG сообщений:
Code:
  1. #if WITH_DEBUG_LOG_BUF
  2.  
  3. #define LK_LOG_BUF_SIZE    (4096) /* align on 4k */
  4. #define LK_LOG_COOKIE    0x474f4c52 /* "RLOG" in ASCII */
  5.  
  6. struct lk_log {
  7.          struct lk_log_header {
  8.                  unsigned cookie;
  9.                  unsigned max_size;
  10.                  unsigned size_written;
  11.                  unsigned idx;
  12.          } header;
  13.          char data[LK_LOG_BUF_SIZE];
  14. };
  15.  
  16. static struct lk_log log = {
  17.          .header = {
  18.                  .cookie = LK_LOG_COOKIE,
  19.                  .max_size = sizeof(log.data),
  20.                  .size_written = 0,
  21.                  .idx = 0,
  22.          },
  23.          .data = {0}
  24. };
  25.  
  26. static void log_putc(char c)
  27. {
  28.          log.data[log.header.idx++] = c;
  29.          log.header.size_written++;
  30.          if (unlikely(log.header.idx >= log.header.max_size))
  31.                  log.header.idx = 0;
  32. }
  33. #endif /* WITH_DEBUG_LOG_BUF */
  34.  
  35. void _dputc(char c)
  36. {
  37. #if WITH_DEBUG_LOG_BUF
  38.          log_putc(c);
  39. #endif
  40. #if WITH_DEBUG_UART
  41.          uart_putc(0, c);
  42. #endif
  43. #if WITH_DEBUG_JTAG
  44.          jtag_dputc(c);
  45. #endif
  46. }

Из кодеса видно, что в памяти зарезервирован буфер в 4096 байт для DBG сообщений.
Вот незнаю как бы прочитать этот буфер. Коданды fastboot не позволяют этого делать.
Есть идея патчинга bootloader'а : заменить вызов функции partition_dump на mmc_write(addr, blocksize, log_buf_ptr). Но я с ELF и ARM никогда дело не имел.

Есть какое то решение?

Во вложении образ моего бутлоадера.

ЗЫ. Некоторые бутлоадеры имеют команду "fastboot oem log", которая видимо и выводит этот буфер.

{ Атач доступен только для участников форума } - aboot.zip


Ранг: 1031.4 (!!!!)
Статус: Участник

Создано: 9 ноября 2014 16:29 New!
Цитата · Личное сообщение · #2

OSA пишет:
Вот не знаю как бы прочитать этот буфер.

зачем патчить размер буфера?

переформулируйте свои мысли, а то написано много, но понять смысл невозможно

Ранг: 19.1 (новичок)
Статус: Участник

Создано: 9 ноября 2014 18:08 New!
Цитата · Личное сообщение · #3

reversecode пишет:
зачем патчить размер буфера?


Я не писал об этом. Я писал о теоретической возможности вставки своего кодеса, который бы читал буфер, задающийся этой строчкой в коде:
Code:
  1. static struct lk_log log


Если бы это был бы x86 бинарь, то я бы даже не задавал тут вопросов.
А так, мне бы хотелось услышать точку зрения тех, кто с никсами и АРМ разговаривает на ТЫ.

Ранг: 19.1 (новичок)
Статус: Участник

Создано: 10 ноября 2014 16:00 New!
Цитата · Личное сообщение · #4

Разобрался в инструкциях ARM.
Пропатчил бинарь и залил в девайс.
Теперь по команде "fastboot oem device-info" по мимо инфы выводит и логи. Но логи не полные, т.к. разрабы бутлоадера указали при компиляции малый уровень логирования.
Пока так и не узнал причину вечного режима fastboot.
 eXeL@B —› Крэки, обсуждения —› [Android] Нужно прочитать DBG сообщения bootloader'а

Видеокурс ВЗЛОМ