u-boot 的调试方法
来源:互联网 发布:中国软件行业协会aaa 编辑:程序博客网 时间:2024/06/01 07:37
Tutorial: Debugging the U-Boot Universal Boot Loader
This section shows you how to use the CodeWarrior debugger to debug the U-Boot universal boot loader. U-Boot resides in flash memory on target systems and boots an embedded Linux image developed for those systems.
Note: The Linux Application Edition of this product does not support debugging the U-Boot bootstrap firmware.
The topics in this section are:
- Preparing to Debug U-Boot
- Debugging U-Boot in Flash Memory Before the MMU is Enabled
- Debugging U-Boot in Flash Memory After the MMU is Enabled
- Debugging U-Boot in RAM
Preparing to Debug U-Boot
To prepare to debug U-Boot on a target system, you first install on the host Linux computer the Board Support Package (BSP) for the particular target system you want to debug. Then you configure the BSP U-Boot package to place debugger symbolic information in the U-Boot binary executable file. Finally, you create a new CodeWarrior project that you will use to debug U-Boot on the target system.
Note: The first part of this procedure must be performed on a Linux host.
To prepare to debug U-Boot on a target system:
- On the host computer, where CodeWarrior Development Studio is installed, install the board support package (BSP) for your target system.
- Use the tools included with the BSP to build an ELF-format U-Boot image file that includes debugger symbolic information.
- Make these changes to the file u-boot/config.mk:
- DBGFLAGS = -g2 -gdwarf-2
- AFLAGS_DEBUG = -Wa,-gdwarf2
- OPTFLAGS = -O1
Note: If you are using a Linux Target Image Builder (LTIB) BSP, you may need to change the optimization flag of the CFLAGS argument in this file:
LTIBInstallDir/config/platform/board_name/.config - If the version of U-Boot included with the BSP modifies any of these registers during startup, comment the appropriate lines in the file u-boot/cpu/mpc85xx/start.S file so that U-Boot will not modify the registers:
- DBCR0
- IAC1
- IAC2
- DAC1
- DAC2
- In the file u-boot/lib_ppc/board.c, change the token debug to the token printf in the statement that includes this string:
- Rebuild U-Boot.
You can obtain BSPs for Freescale Power Architecture target systems from this web page:
http://www.freescale.com/codewarrior/downloads
You now have an ELF-format U-Boot binary executable file that contains debugger symbolic information. In addition, you have a U-Boot raw binary (.bin) file that you can write to flash memory on the target board.
Note: It is best to leave the ELF-format U-Boot binary file in this location, so that when you create a CodeWarrior project with the file, the CodeWarrior IDE can find all of the source U-Boot source code files needed to debug the binary file.
Note: The following procedure must be performed using the Professional Edition of this CodeWarrior product.
- Start the CodeWarrior IDE.
- Use the CodeWarrior Flash Programmer to write the raw binary U-Boot file (not the ELF-format file) to the flash memory of that target system.
- From the CodeWarrior menu bar, select File > Open.
- Navigate to and select (highlight) the ELF-format U-Boot file containing debugger symbolic information (one of the files you created in the previous step).
- Click Open.
- The Choose Debugger dialog box (Figure 3.72) appears.
- Select one of these remote connections:
- CodeWarrior Ethernet TAP - if you are using an Ethernet TAP run-control device.
- CodeWarrior USB TAP - if you are using a USB TAP run-control device.
Refer to the "Flashing U-Boot" section of the target system's BSP User's Guide for instructions that show how to flash U-Boot to the system. This document is typically located in the help/software folder of the BSP.
Warning: Do not write the ELF-format U-Boot file to flash memory; you must use the raw binary U-Boot file.
The standard Open dialog box appears.
Note: You must use a JTAG run-control device to debug U-Boot. The CodeWarrior USB TAP and the CodeWarrior Ethernet TAP are each JTAG devices.
The CodeWarrior IDE creates a CodeWarrior project containing the source files used to build the U-boot binary file. The CodeWarrior project file is located in the same directory as the ELF-format U-Boot file.
Note: For the IDE to create complete a U-Boot project file, all source files used to build the ELF format U-Boot file must be available. While the IDE is building the new CodeWarrior project, if it cannot find a U-Boot source code file, it displays a dialog box with which you can navigate to and select the file. For each source code file that cannot be found, the IDE logs a message to theProject Creator Log window.
Once project creation is complete, the IDE displays the project in a project window. (See Figure 3.73.)
You now have CodeWarrior project with which you can debug the U-Boot bootstrap firmware.
Note: While debugging U-Boot on 86xx, if address translations has not been enabled and you set a breakpoint in a part of code after the address translation is done, this breakpoint will not be hit. Breakpoints can be used until enable address translation is done. You can use step into to debug through the address translation section (breakpoints / step over / run to cursor cannot be used). After the translation is enabled, you can start using again the hardware breakpoints. A breakpoint set in the c) part of code while debugging in the a) part of code will not be hit.
During a typical U-Boot start-up sequence, the target processor starts executing U-Boot in flash memory. U-Boot then enables the Memory Management Unit (MMU), and relocates itself to RAM.
CodeWarrior build target settings required to debug U-Boot in flash memory differ from the settings required to debug U-Boot in RAM. Therefore, you must use individual CodeWarrior debug sessions to debug the flash memory and RAM sections:
- "Debugging U-Boot in Flash Memory Before the MMU is Enabled"
- "Debugging U-Boot in Flash Memory After the MMU is Enabled"
- "Debugging U-Boot in RAM"
This procedure shows how to debug U-Boot in flash memory before the memory management unit (MMU) is initialized.
This procedure shows how to debug U-Boot in flash memory after the memory management unit (MMU) is initialized.
This procedure shows how to debug U-Boot in RAM.
Debugging U-Boot in Flash Memory Before the MMU is Enabled
To debug U-Boot in flash memory before the target board's memory management unit (MMU) is enabled:
- Start the CodeWarrior IDE.
- Open the CodeWarrior U-Boot project you created in section "Preparing to Debug U-Boot".
- From the CodeWarrior menu bar, select Edit > Debug Settings.
- From the Target Settings Panels list, select Debugger Settings
- Check the Stop on Application Launch checkbox.
- Select the Program entry point option button.
- From the Target Settings Panels list, select Remote Debugging.
- From the Connection list box, select one of these remote connections:
- CodeWarrior Ethernet TAP
- CodeWarrior USB TAP
- Click the Edit Connection button.
- When the IDE displays a dialog box asking if you want to continue, click OK.
- Check the Reset Target on Launch checkbox.
- Click OK.
- From the Target Settings Panels list, select Debugger PIC Settings.
- Check the Alternate Load Address checkbox.
- In the Alternate Load Address text box, type the hexadecimal form of the memory address at which the U-Boot image was written to flash memory.
- From the Target Settings Panels list, select EPPC Debugger Settings.
- From the Processor Family list box, select the family of the target processor.
- From the Target Processor list box, select the target processor.
- From the Target OS list box, select Bareboard.
- Check the Use Target Initialization File checkbox.
- Click Browse to display a dialog box with which you can navigate to and select the target initialization file for the target system.
- In the Program Download Options area, clear all the checkboxes in the Initial Launch and Successive Runs sections.
- Click the Save button.
- Close the Target Settings window.
- On the host computer running the CodeWarrior IDE, start a terminal emulator program such as minicom.
- Configure the terminal emulator as shown in Table 3.24.
- Power on or reset the target system.
- Stop the autoboot process by pressing any key on the keyboard.
- From the CodeWarrior menu bar, select Debug > Attach To Process.
- From the CodeWarrior menu bar, select Debug > Stop.
- Select Debug > EPPC > Hard Reset.
The Target Settings window (Figure 3.74) appears.
The Debugger Settings panel (Figure 3.75) appears.
The Remote Debugging settings panel (Figure 3.76) appears.
The Edit Connection dialog box (Figure 3.77) appears, displaying the configuration for the selected remote connection.
The Edit Connection dialog box disappears.
The Debugger PIC Settings settings panel (Figure 3.78) appears.
Note: An alternate load address causes the debugger to assume that all sections have been relocated to RAM. If you specify no alternate load address, the debugger can display source code only for sections in flash memory. If you specify an alternate load address, the debugger can display source code only for sections in RAM.
The EPPC Debugger Settings settings panel (Figure 3.79) appears.
The Target Settings window disappears. The CodeWarrior IDE saves your changes to target settings.
The system resets.The terminal emulator displays U-Boot status messages.
Note: If U-Boot asks for the MAC address of the board's Ethernet interface, enter a valid MAC address, such as 00:01:03:00:01:04.
U-Boot finishes initialization and displays this message (where N is the number of seconds left before autoboot starts):
Hit any key to stop autoboot: N
The U-Boot command prompt appears:
-->
The CodeWarrior debugger connects to the target system and displays a debugger window.
The debugger halts U-Boot execution and displays disassembled code in the Source pane of the debugger window (See Figure 3.80).
The debugger sends a hard reset signal to the board. The debugger window displays the __start section. You can debug from this point up to the first blr instruction in start.S.
Debugging U-Boot in Flash Memory After the MMU is Enabled
To debug U-Boot in flash memory after the target board's memory management unit (MMU) is enabled:
- Start the CodeWarrior IDE.
- Open the CodeWarrior U-Boot project you created in section "Preparing to Debug U-Boot".
- From the CodeWarrior menu bar, select Edit > Debug Settings.
- From the Target Settings Panels list, select Debugger Settings
- Check the Stop on Application Launch checkbox.
- Select the Program entry point option button.
- From the Target Settings Panels list, select Remote Debugging.
- From the Connection list box, select one of these remote connections:
- CodeWarrior Ethernet TAP
- CodeWarrior USB TAP
- Click the Edit Connection button.
- When the IDE displays a dialog box asking if you want to continue, click OK.
- Check the Reset Target on Launch checkbox.
- Click OK.
- From the Target Settings Panels list, select Debugger PIC Settings.
- Clear the Alternate Load Address checkbox.
- From the Target Settings Panels list, select EPPC Debugger Settings.
- From the Processor Family list box, select the family of the target processor.
- From the Target Processor list box, select the target processor.
- From the Target OS list box, select Bareboard.
- Check the Use Target Initialization File checkbox.
- Click Browse to display a dialog box with which you can navigate to and select the target initialization file for the target system.
- In the Program Download Options area, clear all the checkboxes in the Initial Launch and Successive Runs sections.
- Click the Save button.
- Close the Target Settings window.
- On the host computer running the CodeWarrior IDE, start a terminal emulator program such as minicom.
- Configure the terminal emulator as shown in Table 3.24.
- Power on or reset the target system.
- Stop the autoboot process by pressing any key on the keyboard.
- From the CodeWarrior menu bar, select Debug > Attach To Process.
- From the CodeWarrior menu bar, select Debug > Stop.
- Select Debug > EPPC > Hard Reset.
- Select Window > Symbolics Window.
- In the Executables list, select u-boot.
- In the Files list, select board.c.
- In the Functions list, select board_init_f.
- The IDE displays the source code of the board_init_f() function in the Source pane (as shown in Figure 3.88).
- In the Source pane, right-click the first line of the board_init_f() function with a tick mark in the breakpoint column on the left side of the window.
- From the contextual menu, select Set Hardware Breakpoint.
- Close the Symbolics Window.
- From the CodeWarrior menu bar, select Debug > EPPC > Hard Reset.
- Select Project > Run.
The Target Settings window (Figure 3.74) appears.
The Debugger Settings panel (Figure 3.75) appears.
The Remote Debugging settings panel (Figure 3.76) appears.
The Edit Connection dialog box (Figure 3.77) appears, displaying the configuration for the selected remote connection.
The Edit Connection dialog box disappears.
The Debugger PIC Settings settings panel (Figure 3.78) appears.
Note: An alternate load address causes the debugger to assume that all sections have been relocated to RAM. If you specify no alternate load address, the debugger can display source code only for sections in flash memory. If you specify an alternate load address, the debugger can display source code only for sections in RAM.
The EPPC Debugger Settings settings panel (Figure 3.79) appears.
The Target Settings window disappears. The CodeWarrior IDE saves your changes to target settings.
The system resets.The terminal emulator displays U-Boot status messages.
Note: If U-Boot asks for the MAC address of the board's Ethernet interface, enter a valid MAC address, such as 00:01:03:00:01:04.
U-Boot finishes initialization and displays this message (where N is the number of seconds left before autoboot starts):
Hit any key to stop autoboot: N
The U-Boot command prompt appears:
-->
The CodeWarrior debugger connects to the target system and displays a debugger window.
The debugger halts U-Boot execution and displays disassembled code in the Source pane of the debugger window (See Figure 3.80).
The debugger sends a hard reset signal to the board. The debugger window displays the __start section. You can debug from this point up to the first blr instruction in start.S.
The Symbolics Window (Figure 3.88) appears.
A contextual menu appears, as shown in Figure 3.89.
The IDE sets the hardware breakpoint on the selected line of code. A blue diamond symbol appears over the tick mark in the breakpoint column, indicating that a hardware breakpoint is set.
The debugger resets the target system and halts U-Boot execution at the start of U-Boot.
The debugger starts U-Boot execution. When execution reaches the hardware breakpoint, the debugger halts execution. A debugger window (Figure 3.90) appears, showing the source code of the board_init_f() function.
Note: In this debugger window, the blue arrow indicates that the program counter (PC) is at the line of code on which you set the hardware breakpoint.
You may now use the features of the CodeWarrior debugger to step through the source code and debug U-Boot in flash memory.
Debugging U-Boot in RAM
To debug U-Boot in RAM:
- On the host computer, start a terminal emulator program such as minicom.
- Configure the terminal emulator as shown in Table 3.26.
- Reset or power on the target system.
- If U-Boot asks for the MAC address of the board's Ethernet interface, enter a valid MAC address, such as 00:01:03:00:01:04.
- Press a key on your keyboard to stop the autoboot process.
- Write down the memory address from this U-Boot startup message (as shown in Figure 3.91):
- Start the CodeWarrior IDE.
- Open the CodeWarrior U-Boot project you created in section "Preparing to Debug U-Boot".
- From the CodeWarrior menu bar, select Edit > Debug Settings.
- From the Target Settings Panels list, select Debugger Settings
- Check the Stop on Application Launch checkbox.
- Select the Program entry point option button.
- From the Target Settings Panels list, select Remote Debugging.
- From the Connection list box, select one of these remote connections:
- CodeWarrior Ethernet TAP
- CodeWarrior USB TAP
- Click the Edit Connection button.
- When the IDE displays a dialog box asking if you want to continue, click OK.
- Check the Reset Target on Launch checkbox.
- Click OK.
- From the Target Settings Panels list, select Debugger PIC Settings.
- Check the Alternate Load Address checkbox.
- In the Alternate Load Address text box, enter the memory address you wrote down earlier, from the U-Boot startup messages displayed in the terminal emulator.
- From the Target Settings Panels list, select EPPC Debugger Settings.
- From the Processor Family list box, select the family of the target processor.
- From the Target Processor list box, select the target processor.
- From the Target OS list box, select Bareboard.
- Check the Use Target Initialization File checkbox.
- Click Browse to display a dialog box with which you can navigate to and select the target initialization file for the target system.
- In the Program Download Options area, clear all the checkboxes in the Initial Launch and Successive Runs sections.
- Click the Save button.
- Close the Target Settings window.
- From the CodeWarrior menu bar, select Debug > Attach To Process.
- From the CodeWarrior menu bar, select Debug > Stop.
- Select Window > Symbolics Window.
- In the Executables list, select u-boot.
- In the Files list, select board.c.
- In the Functions list, select board_init_r.
- The IDE displays the source code of the board_init_r() function in the Source pane (as shown in Figure 3.88).
- In the Source pane, right-click the first line of the board_init_r() function with a tick mark in the breakpoint column.
- From the contextual menu, select Set Hardware Breakpoint.
- Close the Symbolics Window.
- From the CodeWarrior menu bar, select Debug > EPPC > Hard Reset.
- Select Project > Run.
- The debugger starts U-Boot execution. When execution reaches the hardware breakpoint, the debugger halts execution. A debugger window (Figure 3.90) appears, showing the source code of the board_init_f() function.
The system resets.The terminal emulator displays U-Boot status messages (as shown in Figure 3.91).
U-Boot finishes initialization and displays this message (where N is the number of seconds left before autoboot starts):
Hit any key to stop autoboot: N
The U-Boot command prompt appears (as shown in Figure 3.91):
-->
Now running in RAM - U-Boot at: address
The Target Settings window (Figure 3.92) appears.
The Debugger Settings panel (Figure 3.93) appears.
The Remote Debugging settings panel (Figure 3.94) appears.
The Edit Connection dialog box (Figure 3.95) appears, displaying the configuration for the selected remote connection.
The Edit Connection dialog box disappears.
The Debugger PIC Settings settings panel (Figure 3.96) appears.
Use the format: 0xFFFFFFFF
Note: An alternate load address causes the debugger to assume that all sections have been relocated to RAM. If you specify no alternate load address, the debugger can display source code only for sections in flash memory. If you specify an alternate load address, the debugger can display source code only for sections in RAM.
The EPPC Debugger Settings settings panel (Figure 3.79) appears.
The Target Settings window disappears. The CodeWarrior IDE saves your changes to target settings.
The CodeWarrior debugger connects to the target system and displays a debugger window.
The debugger halts U-Boot execution and displays disassembled code in the Source pane of the debugger window (See Figure 3.98).
The Symbolics Window (Figure 3.99) appears.
A contextual menu appears, as shown in Figure 3.89.
The IDE sets the hardware breakpoint on the selected line of code. A blue triangle appears over the tick mark in the breakpoint column, indicating that a hardware breakpoint is set.
The debugger resets the target system and halts U-Boot execution at the start of U-Boot.
Note: In this debugger window, the blue arrow indicates that the program counter (PC) is at the line of code on which you set the hardware breakpoint.
You may now use the features of the CodeWarrior debugger to step through the source code and debug U-Boot in RAM.
- 调试u-boot的方法
- u-boot 的调试方法
- 使用AXD调试U-BOOT的方法
- 使用JLINK GDBSERVER调试U-BOOT的方法
- 使用JLINK GDBSERVER调试U-BOOT的方法
- 使用JLINK GDBSERVER调试U-BOOT的方法
- 纯linux JLINK GDBSERVER调试U-BOOT的方法
- IMX6之emmc的u-boot无法启动调试方法
- IMX6之emmc的u-boot无法启动调试方法
- IMX6之emmc的u-boot无法启动调试方法
- u-boot i2c 的调试
- u-boot下s29gl128p的调试
- 关于U-boot调试
- openjtag 调试 u-boot
- AXD调试u-boot
- S3C2440平台下调试u-boot的方法——代码加载
- 在 Redhat9.0 上安装配置 C-Kermit8.0 和调试 u-boot 的方法
- Tutorial: Debugging the U-Boot Universal Boot Loader (最全的uboot调试方法,找了好久)
- [XML ]SelectNodes的用法
- 虚拟光驱无法加载镜像
- 自定义Navigationbaritem
- C/C++ 如果函数的参数是一个指针 可以用该指针去申请动态内存吗?
- C++实现设计模式:Bridge Pattern
- u-boot 的调试方法
- windows下python安装
- 面向对象(C++)
- poj3974(Manacher算法)
- C++实现设计模式:Builder Pattern
- 程序员面试题精选100题 详解
- hdu 1395 2^x mod n = 1 欧拉定理(当然可以直接暴力)
- C++实现设计模式:Decorator Pattern
- Ubuntu Shell引发编译问题