|
@@ -0,0 +1,53 @@
|
|
|
+// -*- mode:doc; -*-
|
|
|
+// vim: set syntax=asciidoc:
|
|
|
+
|
|
|
+=== Using +gdb+ in Buildroot
|
|
|
+
|
|
|
+Buildroot allows to do cross-debugging, where the debugger runs on the
|
|
|
+build machine and communicates with +gdbserver+ on the target to
|
|
|
+control the execution of the program.
|
|
|
+
|
|
|
+To achieve this:
|
|
|
+
|
|
|
+* If you are using an _internal toolchain_ (built by Buildroot), you
|
|
|
+ must enable +BR2_PACKAGE_HOST_GDB+, +BR2_PACKAGE_GDB+ and
|
|
|
+ +BR2_PACKAGE_GDB_SERVER+. This ensures that both the cross gdb and
|
|
|
+ gdbserver get built, and that gdbserver gets installed to your target.
|
|
|
+
|
|
|
+* If you are using an _external toolchain_, you should enable
|
|
|
+ +BR2_TOOLCHAIN_EXTERNAL_GDB_SERVER_COPY+, which will copy the
|
|
|
+ gdbserver included with the external toolchain to the target. If your
|
|
|
+ external toolchain does not have a cross gdb or gdbserver, it is also
|
|
|
+ possible to let Buildroot build them, by enabling the same options as
|
|
|
+ for the _internal toolchain backend_.
|
|
|
+
|
|
|
+Now, to start debugging a program called +foo+, you should run on the
|
|
|
+target:
|
|
|
+
|
|
|
+----------------------------
|
|
|
+gdbserver :2345 foo
|
|
|
+----------------------------
|
|
|
+
|
|
|
+This will cause +gdbserver+ to listen on TCP port 2345 for a connection
|
|
|
+from the cross gdb.
|
|
|
+
|
|
|
+Then, on the host, you should start the cross gdb using the following
|
|
|
+command line:
|
|
|
+
|
|
|
+----------------------------
|
|
|
+<buildroot>/output/host/usr/bin/<tuple>-gdb -x <buildroot>/output/staging/usr/share/buildroot/gdbinit foo
|
|
|
+----------------------------
|
|
|
+
|
|
|
+Of course, +foo+ must be available in the current directory, built
|
|
|
+with debugging symbols. Typically you start this command from the
|
|
|
+directory where +foo+ is built (and not from +output/target/+ as the
|
|
|
+binaries in that directory are stripped).
|
|
|
+
|
|
|
+The +<buildroot>/output/staging/usr/share/buildroot/gdbinit+ file will tell the
|
|
|
+cross gdb where to find the libraries of the target.
|
|
|
+
|
|
|
+Finally, to connect to the target from the cross gdb:
|
|
|
+
|
|
|
+----------------------------
|
|
|
+(gdb) target remote <target ip address>:2345
|
|
|
+----------------------------
|