NXP芯片 i.MX系列 UBOOT reset 命令简析

在uboot命令行中我们会经常用到reset 命令,那么这个reset命令是怎么在代码中实现的呢,现在我们来一探究竟。在这里我们以NXP的i.MX 系列芯片为例。

1. do_reset

首先我们看对于reset命令的定义,在cmd/boot.c文件中。代码如下:


U_BOOT_CMD(
        reset, 1, 0,    do_reset,
        "Perform RESET of the CPU",
        ""
);

这里就涉及到一个关键的函数,do_reset,下面我们继续跟,在文件arch/arm/lib/reset.c中,do_reset的定义如下

int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
        puts ("resetting ...\n");

        udelay (50000);                         /* wait 50 ms */

        disable_interrupts();

        reset_misc();
        reset_cpu(0);

        /*NOTREACHED*/
        return 0;
}

reset_misc()函数在这里没有东西,定义如下。

__weak void reset_misc(void)
{
}

这里面的关键就是,reset_cpu()函数,下面我们看一下reset_cpu()函数。

2. reset_cpu()

reset_cpu()函数定义在drivers/watchdog/imx_watchdog.c,看位置大家应该就心知肚明了,这个就是利用watchdog来实现的。那我们接下来看一下这个函数的实现,上代码:

void __attribute__((weak)) reset_cpu(ulong addr)
{
        struct watchdog_regs *wdog = (struct watchdog_regs *)WDOG1_BASE_ADDR;

        clrsetbits_le16(&wdog->wcr, WCR_WT_MSK, WCR_WDE);

        writew(0x5555, &wdog->wsr);
        writew(0xaaaa, &wdog->wsr);     /* load minimum 1/2 second timeout */
        while (1) {
                /*
                 * spin for .5 seconds before reset
                 */
        }
}

好了,reset代码部分就先分析到这里了。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
i.MX6U SPL和u-boot是嵌入式系统中的两个重要组件,用于启动ARM架构的i.MX6U处理器。SPL(Secondary Program Loader)是首先加载到处理器的一段代码,其主要功能是初始化内存控制器和一些必要的外设,然后通过加载u-boot来完成系统的启动。 SPL可以理解为一个小型的操作系统,其大小通常在几十到几百KB之间,由于其能力有限,因此只能完成初始化和加载u-boot的任务。SPL会配置处理器的时钟、内存和外设等硬件资源,以便后续的操作系统能够正常运行。在i.MX6U处理器上,SPL还可以提供一些额外的功能,如从网络或外部存储设备加载u-boot。 u-boot是一个开源的引导加载器,在ARM嵌入式系统中广泛应用。它负责加载操作系统内核和文件系统,并提供丰富的命令行接口,用于系统的配置和调试。u-boot可以通过串口、网络和外部存储设备等多种方式进行通信,从而实现系统的启动和调试。 i.MX6U SPL和u-boot常常一起使用,以实现系统的启动和初始化。首先,SPL会被加载到处理器的内存中,并执行初始化操作和加载u-boot。接下来,u-boot会被加载到内存中,并根据配置文件的设置启动操作系统或加载文件系统。 总结来说,i.MX6U SPL和u-boot是i.MX6U处理器启动过程中不可或缺的两个组件,其中SPL负责初始化和加载u-boot,而u-boot则负责加载操作系统和提供系统配置和调试的功能。这两个组件的协同工作确保了i.MX6U处理器能够正常启动和运行。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值