debug.pl
上传用户:jnhtjd
上传日期:2022-07-16
资源大小:403k
文件大小:2k
源码类别:

微处理器开发

开发平台:

C/C++

  1. # Perl script to easily launch AT91 debug sessions.
  2. use File::Basename;
  3. # List of supported boards
  4. my @boards = ("at91sam7se-ek",
  5.              "at91sam9260-ek",
  6.              "at91sam9261-ek",
  7.              "at91sam9263-ek",
  8.              "at91sam9rl-ek",
  9.              "at91sam9xe-ek",
  10.              "at91sam9g20-ek",
  11.              "at91sam9m10-ek",
  12.              "at91cap9-dk",
  13.              "at91cap9-stk"
  14.              );
  15. # Check that an argument has been provided
  16. if (!@ARGV[0]) {
  17.    print("Usage: " . basename($0) . " <elf-file>n");
  18.    exit(1);
  19. }
  20. # Parse file name
  21. my $file = @ARGV[0];
  22. my $script = "";
  23. my $gdb = dirname($0);
  24. # Check #2: this must be an elf file
  25. if ($file !~ m/.*.elf/i) {
  26.    print(".elf file expected.n");
  27.    exit(2);
  28. }
  29. # Check #1: 'sdram' or 'ddram' or 'bcram' token in filename
  30. if (($file =~ m/.*sdram.*/i) or ($file =~ m/.*ddram.*/i) or ($file =~ m/.*bcram.*/i) or ($file =~ m/.*sam9.*/i) or ($file =~ m/.*cap9.*/i) ) {
  31.    # Find board basename
  32.    foreach $board (@boards) {
  33.       if (index($file, $board) != -1) {
  34.          $script = "$gdb\$board";
  35.       }
  36.    }
  37.    # Add -ek-mck or -ek-sdram depending on need
  38.    if ($file =~ m/.*sdram.*/i) {
  39.       $script .= "-sdram.gdb";
  40.    }
  41.    elsif ($file =~ m/.*ddram.*/i) {
  42.       $script .= "-ddram.gdb";
  43.    }
  44.    elsif ($file =~ m/.*bcram.*/i) {
  45.       $script .= "-bcram.gdb";
  46.    }   
  47.    else {
  48.       $script .= "-sram.gdb";
  49.    }
  50. }
  51. # Create command file to define "reset" command
  52. open(CMD, ">cmd.gdb") or die("Could not create command file:n$!");
  53. print(CMD "define resetn");
  54. print(CMD "    target remote localhost:2331n");
  55. print(CMD "    monitor resetn");
  56. if ($script) {
  57.    print(CMD "    source $scriptn");
  58. }
  59. print(CMD "    loadn");
  60. print(CMD "end");
  61. close(CMD);
  62. # Launch GDB
  63. $pid = fork();
  64. if ($pid == 0) {
  65.    exec("arm-none-eabi-gdb -x cmd.gdb -ex "reset" $file");
  66. }
  67. else {
  68.    $SIG{INT} = 'IGNORE';
  69.    $res = waitpid($pid, 0);
  70. }
  71. print("Donen");
  72. unlink("cmd.gdb");