2012-05-18 43 views
2

我正試圖讓Uboot在飛思卡爾mx28evk板上運行。它編譯得很好,並給我一個圖像,我可以dd複製到SD卡。如何調試uBoot?

當我打開電路板時,串口調試控制檯沒有輸出,甚至沒有出現錯誤信息。我可以確認,雖然董事會工作正常卡上的另一個工作形象。

什麼是適當的下一步找出導致問題的原因?在uBoot分區上是否有任何模式或幻數,我可以查找以確認它是有效的uBoot?

+0

*「它編譯得很好」* - 你在使用什麼編譯器?問題一開始就可能是正確的。否則,對於大多數人來說,使用在線仿真器(例如J-Link)將是下一步。 – sawdust

+0

請指出您編譯的U-Boot的版本。另請參閱https://community.freescale.com/thread/304614 –

回答

3

假設已配置一個的U-Boot版本如u-boot-2013.07mx28evk_config配置和使用的工具鏈如arm-2009q1-203-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2u-boot.sb生成文件目標,並轉換目標到.sd文件使用./tools/mxsboot sd u-boot.sb u-boot.sd,那麼最可能的問題是您在PMU或SDRAM配置中有錯誤。這些配置中的錯誤可能會導致重置循環重置發生在您到達U-Boot橫幅打印輸出之前。

確保您已經設置了EVK交換機作爲the Denx U-Boot doc/README.mx28evk file規定:設置啓動模式DIP開關:

  • 引導模式選擇:1 0 0 1(啓動從SD卡插槽0 - U42)
  • JTAG PSWITCH RESET:向右(復位禁用)
  • 電池來源:唐氏
  • 牆5V:截至
  • VDD 5V:左(關)
  • 保持按鈕:向下(關)

,你爲了調試這類問題需要下一步是把串行輸出年初,在SPL SRAM代碼。開始時在arch/arm/cpu/arm926ejs/mxs/spl_boot.c:mxs_common_spl_init()中輸入putc。例如:

void mxs_common_spl_init(const iomux_cfg_t *iomux_setup, 
        const unsigned int iomux_size) 
{ 
    struct mxs_spl_data *data = (struct mxs_spl_data *) 
      ((CONFIG_SYS_TEXT_BASE - sizeof(struct mxs_spl_data)) & ~0xf); 

    debug_putc('a'); 

    uint8_t bootmode = mxs_get_bootmode_index(); 

    debug_putc('b'); 

    mxs_iomux_setup_multiple_pads(iomux_setup, iomux_size); 

    debug_putc('c'); 

    mxs_power_init(); 

    debug_putc('d'); 

    mxs_mem_init(); 

    debug_putc('e'); 

    data->mem_dram_size = mxs_mem_get_size(); 

    data->boot_mode_idx = bootmode; 

    mxs_power_wait_pswitch(); 
} 

,我使用的,這是從飛思卡爾i.MX28 bootlet代碼借的putc

void debug_putc(char ch) 
{ 
    int loop = 0; 
    while (((*(volatile hw_uartdbgfr_t *) ((0x80000000 + 0x74000) + 0x18)).U)&0x00000020) 
    { 
      loop++; 
      if (loop > 10000) 
      break; 
    }; 
    ((*(volatile hw_uartdbgdr_t *) ((0x80000000 + 0x74000) + 0x0)).U = (ch)); 
} 

,你需要的類型是:

typedef unsigned int reg32_t; 
typedef unsigned short reg16_t; 
typedef unsigned char reg8_t; 

typedef union 
{ 
    reg32_t U; 
    struct 
    { 
     unsigned DIV_EMI   : 6; 
     unsigned RSRVD1    : 2; 
     unsigned DIV_XTAL   : 4; 
     unsigned RSRVD2    : 4; 
     unsigned DCC_RESYNC_ENABLE : 1; 
     unsigned BUSY_DCC_RESYNC : 1; 
     unsigned RSRVD3    : 8; 
     unsigned BUSY_SYNC_MODE  : 1; 
     unsigned BUSY_REF_CPU  : 1; 
     unsigned BUSY_REF_EMI  : 1; 
     unsigned BUSY_REF_XTAL  : 1; 
     unsigned SYNC_MODE_EN  : 1; 
     unsigned CLKGATE   : 1; 
    } B; 
} hw_clkctrl_emi_t; 

typedef union 
{ 
    reg32_t U; 
    struct 
    { 
      unsigned TRG    : 5; 
      unsigned RSRVD1   : 3; 
      unsigned BO_OFFSET   : 3; 
      unsigned RSRVD2   : 1; 
      unsigned LINREG_OFFSET  : 2; 
      unsigned RSRVD3   : 2; 
      unsigned DISABLE_FET  : 1; 
      unsigned ENABLE_LINREG  : 1; 
      unsigned DISABLE_STEPPING : 1; 
      unsigned PWDN_BRNOUT  : 1; 
      unsigned RSRVD4   : 12; 
    } B; 
} hw_power_vddactrl_t; 


typedef union 
{ 
    reg32_t U; 
    struct 
    { 
      reg8_t DATA; 
      unsigned FE   : 1; 
      unsigned PE   : 1; 
      unsigned BE   : 1; 
      unsigned OE   : 1; 
      unsigned RESERVED  : 4; 
      reg16_t UNAVAILABLE; 
    } B; 
} hw_uartdbgdr_t; 

typedef union 
{ 
    reg32_t U; 
    struct 
    { 
      unsigned CTS   : 1; 
      unsigned DSR   : 1; 
      unsigned DCD   : 1; 
      unsigned BUSY   : 1; 
      unsigned RXFE   : 1; 
      unsigned TXFF   : 1; 
      unsigned RXFF   : 1; 
      unsigned TXFE   : 1; 
      unsigned RI   : 1; 
      unsigned RESERVED  : 7; 
      reg16_t UNAVAILABLE; 
    } B; 
} hw_uartdbgfr_t; 

void debug_putc(char c); 

我把類型arch/arm/cpu/arm926ejs/mxs/mxs_init.hspl_boot.cputc實施。我也傾向於把很多putc報表spl_power_init.cspl_mem_init.c

注意,誤編程PMU spl_power_init.c可能會導致復位,當你到spl_mem_init.c只會出現以後。別讓這個假冒出來。

1

嘗試使SD卡沒有U形引導(mk_mx28_sd的/ dev/sdX的)

嘗試使SD卡用的U-Boot之前重新編譯bootlets(./ltib -p boot_stream.spec -f)( mk_mx28_sd -u的/ dev/sdX的)

+1

如果您使用的是啓用了SPL的最新版本的U-Boot,則無法使用bootlet來啓動它。相反,你需要建立''u-boot.sd''目標(''./tools/mxsboot sd u-boot.sb u-boot.sd''),''dd''到SD卡並開機。 U-Boot的SPL特性實際上是對bootlet概念的一般重寫。請參閱http://www.emlinews.net/2012/10/u-boot-spl-framework-becomes-generic/。 –