1.通过阅读iROM_Application_note可以获取关于启动的全部信息

  

2.记录下代码

制作SD卡启动的代码,即添加校验和的

#include <strings.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>

#define BL1SIZE        (16*1024)
#define HEADSIZE    (16)    

static void sys_err(char *str)
{
    perror(str);
    exit();
}

int main(int argc, char **argv)
{
    ) {
        printf("format: a.out [infile] [outfile]\n");
        ;
    }

    int fd;
    ], O_RDONLY)) < )
        sys_err("open");

    ;
    , SEEK_END)) < )
        sys_err("lseek");
    , SEEK_SET)) < )
        sys_err("lseek 2");

    ;
    char *newfile = NULL;
    if (filesize < BL1SIZE) {
        newfilesize = BL1SIZE + HEADSIZE;
    } else {
        newfilesize = filesize + HEADSIZE;
    }
    if ((newfile = (char *)malloc(newfilesize)) == NULL)
        sys_err("malloc newfile");
    bzero(newfile, newfilesize);

    int ncount;
    )
        sys_err("read err");
    if (ncount != filesize) {
        printf("read err 2\n");
        exit();
    }

    ;
    char *getsum = newfile + HEADSIZE;
    unsigned , count = ;
    for (; count < BL1SIZE - HEADSIZE; count++) {
        sum += getsum[count] & 0xff;
    }
    *(unsigned int *)checksum = sum;

    int newfd;
    ], O_WRONLY | O_CREAT | O_TRUNC, )) < )
        sys_err("open outfile");

    )
        sys_err("write outfile");
    if (ncount != newfilesize) {
        printf("write outfile err\n");
        exit();
    }

    ;
}

使用 dd 命令,将SD卡启动代码拷贝到 SD 的 block1

#/bin/sh
sudo dd iflag=dsync oflag=dsync 

使用iROM中的库将SD卡中的代码考到DDR上

typedef unsigned int bool;

typedef bool (*pfunc_t) (int , unsigned int , unsigned short, unsigned int* , bool );
/**
* This Function copy MMC(MoviNAND/iNand) Card Data to memory.
* Always use EPLL source clock.
* This function works at 20Mhz.
* @param u32 StartBlkAddress : Source card(MoviNAND/iNand MMC)) Address.(It must block address.)
* @param u16 blockSize : Number of blocks to copy.
* @param u32* memoryPtr : Buffer to copy from.
* @param bool with_init : determined card initialization.
* @return bool(u8) - Success or failure.
*/

#define channel            2
#define StartBlkAddress    1
#define blockSize        50
#define memoryPtr        0x20000000
#define with_init        0

void sd_relcate()
{
    pfunc_t pfunc = (pfunc_t)(*(unsigned int *)0xD0037F98);

    if (!pfunc(channel, StartBlkAddress, blockSize, memoryPtr, with_init))
        printf("sd_relcate err\n");
    else
        printf("sd_relcate success\n");
}

在汇编中,使用长跳转,跳转到DDR上的main

    bl sdram_asm_init

    bl sd_relcate

    ldr sp, =0x2E000000  // 在DDR上重新设置栈

    ldr pc, =main

裸机——210SD卡启动的更多相关文章

  1. 不从SD卡启动树莓派2

    本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾 ...

  2. am335x sd卡启动开启识别emmc kernel 上的改动

    sbc 7109-454 sd 卡启动qt系统后一直识别不了  emmc 也就是mmc1口, 一开始以为是硬件初始化的问题,后面又以为是io口复用,最后才知道是根本没有注册mmc1设备. 更改下面的代 ...

  3. am335x sd卡启动系统参数设置

    首先直接记录结果 在u-boot 中修改参数 #define AUTO_UPDATESYS */ 直接把这个参数注释掉. 这个参数是原来用来升级nor flash 启动系统设置的一个参数,也就是说, ...

  4. Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建

    /*********************************************************************************** * * linux 3.5,U ...

  5. Exynos4412从SD卡启动的简单网络文件系统制作

    Exynos4412从SD卡启动的简单网络文件系统制作 1. 简介 嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootf ...

  6. 制作SD卡启动自己编译的uboot.bin

    README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot ...

  7. [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统

    转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...

  8. imx6 android SD卡启动

    工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...

  9. ZYNQ的Linux Linaro系统镜像制作SD卡启动

    ZYNQ的Linux Linaro系统镜像制作SD卡启动 0. 概述 ZYNQ生成uboot的时候和正常的ARM设备不太一样,ZYNQ属于二次辅助启动uboot然后由uboot启动内核,大概意思就是 ...

随机推荐

  1. div模拟textarea自适应高度

    之前在公司做项目的时候,有这么一个需求,要我写一个评论框,可以随着评论的行数增加而自动扩大,最开始我想用textarea实现,但是后来尝试后发现textarea并不适合,textarea的高度不会随着 ...

  2. Day3 Form表单

    Day3  Form表单 一.form表单 :提交数据    表单在网页中主要负责数据采集功能,它用<form>标签定义.    用户输入的信息都要包含在form标签中,点击提交后,< ...

  3. 在Git上创建新分支(实用性高!!!)

    在github上创建仓库: Create a new repository on the command line touch README.md git init git add README.md ...

  4. Android 切换主题换肤实现

    思路以及实现 1.主题的切换以及实现 首先我们先来明确个概念,现在我所说的切换主题,就切换整个app的颜色风格,当然也有少部分的图片的切换.注意哦 我这边说的是少部分图片哦!如果是大面积的换图片的吧! ...

  5. 如何让MVC和多层架构和谐并存(二)

    上一节说了一些笼统的东西,这节说一些实际的操作. 1.取列表.这是一个新闻列表:         对应MVC的model是: public class NewsListModel { /// < ...

  6. Verilog八线 - 三线优先编码器设计(74LS148)

    百度百科_74LS148 if语句法 //8线-3线优先编码器设计(74LS148) // //EI | A7 A6 A5 A4 A3 A2 A1 A0 | Y2 Y1 Y0 GS EO //0 | ...

  7. JAX-WS @WebParam自定义参数名称无效

    在使用myeclipse 自动对service方法类进行创建webservice服务时,默认创建参数命名都是arg0-9 这样就导致生成的xml配置文件命名不规范,需要对参数名称进行修改: myecl ...

  8. 深入了解MongoDB

    一.介绍: 数据库分为关系型数据库和非关系型数据库 关系型数据库是建立在关系模型上的数据库,主要的有Oracle MySQL Microsoft SQL Server NoSQL是非关系型数据存储的广 ...

  9. Last_Errno: 1396

    Last_Errno: 1396   Last_Error: Error 'Operation CREATE USER failed for 'usera63'@'%'' on query. Defa ...

  10. Last_IO_Errno: 1032

    (一):更新找不到记录 1032   Last_SQL_Errno: 1032                Last_SQL_Error: Could not execute Update_rows ...