Я отлаживаю Linux-ядро, используя две виртуальные машины, хост и цель.Подключен через последовательный порт /dev/ttyS0
.
ХОСТ
Командные строки выделены --> <--
--> root@tony-VirtualBox:~/linux# gdb ./vmlinux <--
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law. Type "show copying"
and "show warranty" for details.
This GDB was configured as "i686-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from ./vmlinux...done.
--> (gdb) target remote /dev/ttyS0 <--
Remote debugging using /dev/ttyS0
0xc1119026 in free_rp_inst (rp=<optimized out>)
at kernel/kprobes.c:1248
1248 kfree(ri);
(gdb) break htb_dequeue_tree
Breakpoint 1 at 0xc17165a9: file net/sched/sch_htb.c, line 850.
(gdb) continue
continuing.
С этого момента яподключившись к целевой машине, я вставляю контрольные точки в интересные точки, а затем continue
, чтобы запустить целевую машину.Управление вернется, когда я достигну этой точки останова ( HTB - это модуль, который помогает контролировать использование исходящей полосы пропускания для данного канала).
Цель
Использование iperf для тестирования linux htb
tc qdisc add dev eno2 root handle 1: htb
tc class add dev eth0 parent 1: classid 1:1 htb rate 100kbps ceil 100kbps
tc class add dev eno2 parent 1:1 classid 1:10 htb rate 30kbps ceil 100kbps
tc class add dev eno2 parent 1:1 classid 1:20 htb rate 10kbps ceil 100kbps
tc filter add dev eno2 protocol ip parent 1:0 prio 1 u32 match ip dport 80 0xffff flowid 1:10
tc filter add dev eno2 protocol ip parent 1:0 prio 1 u32 match ip dport 25 0xffff flowid 1:20
Проблема
Когда я запускаю сервер и подключаюсь к нему, чтобы достичь этой точки останова, я получаю SIGILL
до достижения этой точки останова.Без режима отладки работает отлично.И я могу протестировать HTB и получаю то, что ожидаю (формируя трафик так, как я планировал).
[New Thread -2]
Program received signal SIGILL, Illegal instruction.
[Switching to Thread -2]
0xc17165a8 in ffz (word=3889660160)
at ./arch/x86/include/asm/bitops.h:381
381 : "r" (~word));
(gdb)
Что бы это могло быть?здесь определено ffz , оно не должно падать ... Я в замешательстве.