Как отладить кросс-скомпилированное ядро ​​Linux? - PullRequest
3 голосов
/ 19 января 2012

Я скомпилировал ядро ​​Linux (для ARM на i686 - с использованием Cross-LFS). Сейчас я пытаюсь загрузить это ядро, используя QEMU.

$ qemu-system-arm -m 128 -kernel /mnt/clfs-dec4/boot/clfskernel-2.6.38.2 --nographic -M versatilepb

Затем он показывает эту строку и ждет бесконечное время !!

Uncompressing Linux... done, booting the kernel.

Итак, я хочу отладить ядро, чтобы я мог изучить, что именно происходит.

Я новичок в этих сборках ядра. Может кто-нибудь помочь мне отладить мое собственно построенное ядро, так как после этого оператора ничего не отображается. Есть ли вероятность поломки ядра? (Я так не думаю, потому что это не выдает никакой ошибки при компиляции)

И моя цель - создать собственную минимальную ОС Linux. Любые предложения, касающиеся цепочек инструментов и т. Д., Которые будут простыми и гибкими в зависимости от моих требований, таких как драйверы и т. Д.,

ThankYou

Ответы [ 3 ]

4 голосов
/ 04 августа 2012

Вы можете использовать GDB для отладки вашего ядра с QEMU, вы можете использовать опции -s -S. Если вам нужен простой и надежный набор инструментов, вы можете использовать ELDK от DENX (http://www.denx.de/wiki/DULG/ELDK).

Вы можете установить его так (это не последняя версия, но у вас есть идея):

wget http://ftp.denx.de/pub/eldk/4.2/arm-linux-x86/iso/arm-2008-11-24.iso

sudo mkdir -p /mnt/cdrom (при необходимости)

sudo mount -o loop arm-2008-11-24.iso /mnt/cdrom

/mnt/cdrom/install -d $HOME/EMBEDDED_TOOLS/ELDK/

Приведенная выше команда должна установить набор инструментов под $HOLE/EMBEDDED_TOOLS/ELDK (измените его, если вам нужно)

echo "export PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin" >> $HOME/.bashrc

Затем вы можете увидеть версию вашего набора инструментов ARM следующим образом:

arm-linux-gcc -v

Вы можете протестировать программу hello_world.c следующим образом:

arm-linux-gcc hello_world.c -o hello_world

И вы набираете: file hello_wrold, чтобы увидеть целевую архитектуру двоичного файла, она должна выглядеть примерно так:

hello_wrold: ELF 32-bit LSB executable, ARM, version 1 (SYSV)

Теперь, если вы хотите скомпилировать производственное ядро, вам нужно его оптимизировать (я предлагаю использовать busybox), а если вы хотите только одно для тестирования сейчас, попробуйте выполнить следующие шаги:

  1. Создайте скрипт для настройки инструмента цепочки set_toolchain.sh:

    #! /usr/bin/sh

    PATH=$PATH:$HOME/EMBEDDED_TOOLS/ELDK/ELDK42/usr/bin

    ARCH=arm

    CROSS_COMPILE=arm-linux-gnueabi-

    export PATH ARCH CROSS_COMPILE

И запустите свой скрипт (source ./set_toolchain.sh)

  1. Загрузите ядро ​​Linux и распакуйте его (предположим, что 2.6.x - это старое ядро, но есть много шансов, что оно будет работать без ошибок компиляции).

Внутри вашего разархивированного ядра:

cd ~/linux-2.6.29/arch/arm/configs
make versatile_defconfig

Здесь мы используем универсальный чип, вам может понадобиться использовать make menuconfig, чтобы изменить параметр OABI и установить его на ARM EABI, этот параметр находится под Kernel features menu

После всех этих шагов вы можете скомпилировать ваше ядро:

make

если вы хотите многословную компиляцию make v=1

После этого вы получили ваше ядро ​​под arch/arm/boot/zImage.

Надеюсь, что это поможет.

Привет.

0 голосов
/ 04 августа 2012

Вы также можете подключить Qemu и GDB.В Qemu есть опции -s и -S, которые запускают сервер GDB и позволяют вам подключаться к нему через TCP к localhost: 1234.Затем вы можете загрузить образ ядра (распакованный) в GDB и посмотреть, как далеко загружается ваше ядро.

0 голосов
/ 04 августа 2012

Я бы предложил собрать ваше ядро, активировав опцию в разделе Kernel hacking вашего файла конфигурации. Тогда вы можете использовать kdb или kgdb, который проще в использовании, но требует другой машины, работающей gdb.

`

...