Будем использовать это ядро. При пересборке ядра (./tools/rebuild.sh) включим следующие опции:
1) Kernel hacking -> Compile time checks and compiler options -> Compile the kernel with debug info [*]
2) Kernel hacking -> Kgdb: Kernel Debugger [*]
3) Kernel Features -> Compile kernel in thumb-2 mode [] (отключаем сборку в режиме thumb-2, чтобы побороть ошибку Internal error: Oops - undefined instruction: 0 [#1] THUMB2)
Отредактируем /boot/uEnv.txt, добавим:
1) Kernel hacking -> Compile time checks and compiler options -> Compile the kernel with debug info [*]
2) Kernel hacking -> Kgdb: Kernel Debugger [*]
3) Kernel Features -> Compile kernel in thumb-2 mode [] (отключаем сборку в режиме thumb-2, чтобы побороть ошибку Internal error: Oops - undefined instruction: 0 [#1] THUMB2)
Отредактируем /boot/uEnv.txt, добавим:
optargs=kgdbwait kgdboc=ttyS0,115200
Запускаем BBB, вывод процесса загрузки по uart (sudo screen /dev/ttyUSB0 115200,cs8) остановился на:
[ 3.125478] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[ 3.125613] io scheduler noop registered
[ 3.125627] io scheduler deadline registered
[ 3.125660] io scheduler cfq registered (default)
[ 3.126677] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[ 3.128057] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[ 3.130208] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 154, base_baud = 3000000) is a 8250
[ 3.939841] console [ttyS0] enabled
[ 3.944036] KGDB: Registered I/O driver kgdboc
[ 3.948520] KGDB: Waiting for connection from remote gdb...
[ 3.954150] Internal error: Oops - undefined instruction: 0 [#1] THUMB2
Entering kdb (current=0xdd8f3840, pid 1) due to Keyboard Entry
kdb>
Будем отлаживать через тот же uart. Собранный незаархивирванный образ ядра (Image) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/KERNEL/arch/arm/boot.
Клиент gdb (arm-linux-gnueabihf-gdb) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/dl/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin. Скидываем их в одну локальную папку (например, /mnt/Data/Projects/LinuxKernel/Debug), переходим в папку, запускаем:
cd /mnt/Data/Projects/LinuxKernel/Debug
arm-linux-gnueabihf-gdb -ex 'file vmlinuz-4.1.38-bone24' -ex 'target remote /dev/ttyUSB0'
Получаем:
Запускаем BBB, вывод процесса загрузки по uart (sudo screen /dev/ttyUSB0 115200,cs8) остановился на:
[ 3.125478] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 249)
[ 3.125613] io scheduler noop registered
[ 3.125627] io scheduler deadline registered
[ 3.125660] io scheduler cfq registered (default)
[ 3.126677] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
[ 3.128057] Serial: 8250/16550 driver, 6 ports, IRQ sharing disabled
[ 3.130208] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 154, base_baud = 3000000) is a 8250
[ 3.939841] console [ttyS0] enabled
[ 3.944036] KGDB: Registered I/O driver kgdboc
[ 3.948520] KGDB: Waiting for connection from remote gdb...
[ 3.954150] Internal error: Oops - undefined instruction: 0 [#1] THUMB2
Entering kdb (current=0xdd8f3840, pid 1) due to Keyboard Entry
kdb>
Будем отлаживать через тот же uart. Собранный незаархивирванный образ ядра (Image) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/KERNEL/arch/arm/boot.
Клиент gdb (arm-linux-gnueabihf-gdb) лежит здесь: /mnt/Data/Projects/LinuxKernel/4.1.38/bb-kernel/dl/gcc-linaro-4.9-2016.02-x86_64_arm-linux-gnueabihf/bin. Скидываем их в одну локальную папку (например, /mnt/Data/Projects/LinuxKernel/Debug), переходим в папку, запускаем:
cd /mnt/Data/Projects/LinuxKernel/Debug
arm-linux-gnueabihf-gdb -ex 'file vmlinuz-4.1.38-bone24' -ex 'target remote /dev/ttyUSB0'
[adil@adil Debug]$ ./arm-linux-gnueabihf-gdb -ex 'file Image' -ex 'target remote /dev/ttyUSB0'
...
/dev/ttyUSB0: Device or resource busy.
Источники:
1) https://code-examples.net/en/q/4b6ff1
...
/dev/ttyUSB0: Device or resource busy.
1) https://code-examples.net/en/q/4b6ff1
6) http://nickdesaulniers.github.io/blog/2018/10/24/booting-a-custom-linux-kernel-in-qemu-and-debugging-it-with-gdb/
7) https://stackoverflow.com/questions/43291068/how-can-i-see-the-full-backtrace-using-kgdb-to-debug-an-arm-linux-module
8) https://github.com/beagleboard/linux/issues/133
9) https://pagefault.blog/2017/05/03/why-and-how-to-enable-arm-thumb-2-instruction-set-in-yocto/
7) https://stackoverflow.com/questions/43291068/how-can-i-see-the-full-backtrace-using-kgdb-to-debug-an-arm-linux-module
8) https://github.com/beagleboard/linux/issues/133
9) https://pagefault.blog/2017/05/03/why-and-how-to-enable-arm-thumb-2-instruction-set-in-yocto/
Комментариев нет:
Отправить комментарий