zoukankan      html  css  js  c++  java
  • 一步步玩pcDuino3--mmc下的bootloader

            pcDuino3下支持mmc启动。官方的Uboot是採用SPL框架实现的,由于内部的SRAM空间达到32K,我们全然能够在这32K空间内编写一个完整可用小巧的bootloader来完毕引导Linux kernel的目的。

        我们首先介绍下SPL框架,能够先看下《GNU ARM汇编--(十八)u-boot-採用nand_spl方式的启动方法》《GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析》。NAND_SPL也算是SPL框架下的一种模式。

        当使用Nand flash或者MMC作为引导方式时,我们须要使用芯片内的ROM或者其他机制载入固件到SRAM中。

         这样的时候就须要SPL,由于SPL短小精悍,适用于4K甚至更小的SRAM的环境。这时候的引导过程就变成。SPL引导Uboot。而由Uboot引导系统内核。

        事实上作为pcDuino3的SPL,它是能够完毕直接引导kernel功能的,假设不须要使用uboot提供的额外的强大功能的话。

        这里介绍下写bootloader的思路:



    使用mmc的read驱动函数将指定位置的kernel镜像读取到内存中。然后依照Linux的要求完毕參数列表的传递,MMU和cache的配置等,就能够完毕跳转动作了。

    最后一个步骤的代码例如以下:

    void boot_linux(void)
    {
    	uart_printf("boot linux
    ");
    	void (*kernel_entry)(int zero, int arch, uint params);
    	unsigned long r2;
    	unsigned long machid;
    	
    	setup_linux_param(0x40000000 + 0x100);
    	
    	cleanup_before_linux();
    	kernel_entry = (void (*)(int, int, uint))0x48000000;
    	
    	machid = 4283;
    	r2= 0x40000100;
    	kernel_entry(0, machid, r2);
    	
    }
    
    这个函数就完毕了内核文档Documentation/arm/booting对booting ARM Linux的描写叙述。

    这样,一个唯独18K大小的bootloader就能够完毕对kernel的引导了。



  • 相关阅读:
    vue零散知识
    vue router 和 组件生命周期的理解
    未搞懂的问题
    前端问题总结
    垂直居中
    css,js加载阻塞页面渲染的理解
    node 学习
    自定义事件
    学习react 遇到的问题
    [AHOI2001]彩票摇奖
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6882850.html
Copyright © 2011-2022 走看看