сборка gdbserver для android aarch64 - PullRequest
2 голосов
/ 01 апреля 2020

Я работаю на 64-битной linux, необходимо собрать gdbserver для моего телефона aarch64 Android. В NDK есть предварительно встроенный gdbserver , но он использует python в пакете NDK, не используя мою систему python, я не могу установить другие python плагины.

Как найти, какой параметр --target и --host необходим для ./configure? Я пробовал --help и google, например "build gdbserver aarch64" или "gdbserver configure android", но не нашел ответа для aarch64 Android.

Для gdb Я могу использовать ./configure --enable-targets=all, но зачем gdbserver? Есть ли «Список» для всех доступных параметров?

Вот как я пытался собрать gdbserver

  1. скачал g cc - arm-none-eabi-9-2019-q4-major-x86_64- linux, распаковать и добавить его в PATH, добавить переменную среды CC=arm-none-eabi-gcc, CXX=arm-none-eabi-g++, сделать исполняемый файл доступным в PATH
  2. Я пробовал все это:
    ../configure  
    ../configure --host=aarch64-linux             --target=aarch64-linux-androideabi
    ../configure --host=aarch64-linux-androideabi --target=aarch64-linux
    ../configure --host=aarch64-linux-androideabi --target=aarch64-linux-androideabi
make, что приводит к:
    ...
    make[3]: Nothing to be done for 'all'.
    make[3]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver/testsuite'
    make[2]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build/build-libiberty-gdbserver'
    make[1]: Leaving directory '/opt/gdb-9.1/gdb/gdbserver/build'
    make: *** No rule to make target '../alloc.c'.  Stop.
also tried:
    make CC=arm-none-eabi-gcc CXX=arm-none-eabi-g++
    or CC=aarch64-linux-android28-clang CXX=aarch64-linux-android28-clang++
But same result.

Ответы [ 2 ]

1 голос
/ 11 апреля 2020

Получил ответ откуда-то еще, поставьте здесь на случай, если кто-то захочет сделать то же самое.

  1. Скачать исходный код gdb:
   wget ftp://sourceware.org/pub/gdb/releases/gdb-9.1.tar.gz
Извлечь файл:
 tar xzvf gdb-9.1.tar.gz
Переместить в исходную папку
 cd gdb-9.1

Редактировать файл gdb / gdbserver / linux -low. c:

  • 4.1. Добавьте две строки: Строка 107 и Строка 122 с содержанием ниже
#define HAVE_ELF32_AUXV_T  //  Line 107 (Added)
#ifndef HAVE_ELF32_AUXV_T

#define HAVE_ELF64_AUXV_T // Line 122 (Added)
#ifndef HAVE_ELF64_AUXV_T

Эта модификация необходима для сборки Android, поскольку системные библиотеки Android уже определяют struct Elf32_auxv_t и Elf64_auxv_t. (Пожалуйста, смотрите это для деталей: https://github.com/android/ndk/issues/1008)

  • 4.2. Изменить функцию linux_request_interrupt:
static void
linux_request_interrupt (void)
 {
   /* .... */
-  kill (-signal_pid, SIGINT); // replace this line with next 3 lines
+  int r = kill (-signal_pid, SIGINT);
+  if (r != 0)
+      kill (signal_pid, SIGINT);
 }

Это исправляет ошибку «gdbserver не обрабатывает Ctrl+C», подробности по адресу: https://sourceware.org/bugzilla/show_bug.cgi?id=18772

Сборка GDB для linux:
sudo apt-get install build-essential \
  gcc g++ make autogen m4 \
  bison gettext libpython-dev

mkdir build-linux

cd build-linux/

../configure --enable-targets=all --with-python=/usr/bin/python

make -j4

sudo make install

Сборка gdbserver для android:

  • 6.1. Загрузить android -sdk
cd ~

mkdir android

cd android

wget https://dl.google.com/android/repository/commandlinetools-linux-6200805_latest.zip

unzip commandlinetools-linux-6200805_latest.zip

export PATH=$PATH:~/android/tools/bin
  • 6.2. Установите Ndk
sdkmanager --install "ndk;21.0.6113669" --sdk_root=~/android/
  • 6.3. Создание автономной цепочки инструментов для NDK
cd ~/android/ndk/21.0.6113669/

./build/tools/make-standalone-toolchain.sh \ 
--toolchain=aarch64-linux-android-4.9 \
--install-dir=~/android/ndk_21

На этом этапе создайте автономную цепочку инструментов по адресу: ~ / android / ndk_21

  • 6.4. Сконфигурируйте и соберите gdbserver для android
cd ~/gdb-9.1

mkdir build-android

cd build-android

export PATH=$PATH:~/android/ndk_21/bin

CC=aarch64-linux-android-gcc ../configure \
    --target=aarch64-linux-android \
    --host=aarch64-linux-android \
     LDFLAGS="-static-libstdc++"

make -j4

Если вы получили ошибку, связанную с «source-highlight», добавьте --disable-source-highlight флаг компиляции.

После завершения сборки gdbserver находится по адресу: gdb / gdbserver / gdbserver

0 голосов
/ 10 апреля 2020

Самый простой способ получить это через NDK, который поставляется с Android SDK, например, с Android Studio. Добрались до NDK в Android SDK и перейдите к ndk-bundle/prebuilt/android-arm64/gdbserver/gdbserver; это даст вам готовый исполняемый файл gdbserver для aarch64 (arm64). Вы также найдете другие готовые исполняемые файлы gdbserver в ndk-bundle / prebuilt, кроме aarch64.

...