裸机——210SD卡启动
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卡启动的更多相关文章
- 不从SD卡启动树莓派2
本文你可以学到: berryboot使用,kali安装,开挂的MobaXterm,以及关于通过LABEL和UUID挂载的小技巧. 本文默认你有一定Linux基础,同时针对刚入门的水平,因为这是我的折腾 ...
- am335x sd卡启动开启识别emmc kernel 上的改动
sbc 7109-454 sd 卡启动qt系统后一直识别不了 emmc 也就是mmc1口, 一开始以为是硬件初始化的问题,后面又以为是io口复用,最后才知道是根本没有注册mmc1设备. 更改下面的代 ...
- am335x sd卡启动系统参数设置
首先直接记录结果 在u-boot 中修改参数 #define AUTO_UPDATESYS */ 直接把这个参数注释掉. 这个参数是原来用来升级nor flash 启动系统设置的一个参数,也就是说, ...
- Samsung_tiny4412(驱动笔记01)----linux 3.5,U-Boot,Busybox,SD卡启动环境搭建
/*********************************************************************************** * * linux 3.5,U ...
- Exynos4412从SD卡启动的简单网络文件系统制作
Exynos4412从SD卡启动的简单网络文件系统制作 1. 简介 嵌入式系统能够在开发板上正常运行,需要先进行系统配置,一个完整的嵌入式系统应该包含的几个部分::uboot,kernel,rootf ...
- 制作SD卡启动自己编译的uboot.bin
README for FriendlyARM Tiny4412 -----------------------------------------------------1. Build uboot ...
- [i.MX6q]i.MX6q处理器,linux操作系统平台搭建 从SD卡启动系统
转自:http://www.07net01.com/linux/2016/02/1232094.html 参照1:http://blog.csdn.net/girlkoo/article/detail ...
- imx6 android SD卡启动
工作中需要将imx6的android系统从SD卡启动,所以就分析了MfgTool中的脚本,分析android的分区情况,并尝试自己操作,竟然成功了,记录于此. 参考文档 http://www.kanc ...
- ZYNQ的Linux Linaro系统镜像制作SD卡启动
ZYNQ的Linux Linaro系统镜像制作SD卡启动 0. 概述 ZYNQ生成uboot的时候和正常的ARM设备不太一样,ZYNQ属于二次辅助启动uboot然后由uboot启动内核,大概意思就是 ...
随机推荐
- php赋值运算符
= 赋值 += $x+=3相当于$x = $x+3; -= *= /+ %= .=
- 用 React 编写的基于Taro + Dva构建的适配不同端(微信小程序、H5、React-Native 等)的时装衣橱
前言 Taro 是一套遵循 React 语法规范的 多端开发 解决方案.现如今市面上端的形态多种多样,Web.React-Native.微信小程序等各种端大行其道,当业务要求同时在不同的端都要求有所表 ...
- 手把手教你用android studio创建第一个安卓程序加载html5页面(二)
经过上一篇,我们已经可以打开html页面了,但是有很多细节方面的内容我们还需要调整. 打开链接的问题 细心的网友可能已经发现,打开百度页面后,点击顶部的链接,会在手机的浏览器中打开相应的页面,这显然不 ...
- c语言 Implement strStr()【Leetcode】
实现在一个母字符串中找到第一个子字符串的位置. #include <stdio.h> #include <string.h> #define _IRON_TRUE 1 #def ...
- 【Android 界面效果48】Android-RecyclerView-Item点击事件设置
在上一篇博客Android-RecylerView初识中提到,RecyclerView不再负责Item视图的布局及显示,所以RecyclerView也没有为Item开放OnItemClick等点击事件 ...
- Cocos2d-x v3.1项目创建(三)
Cocos2d-x v3.1项目创建(三) Cocos2d-x官方为我们提供了用于创建.编译.运行和部署的一套命令行的工具集,也就是上篇文章中我们所提到的Cocos2d-Console,它位于我们的引 ...
- SqlServer存储过程中常用函数及操作
1.case语句 用于选择语句 SELECT ProductNumber, Category = CASE ProductLine WHEN 'R' THEN 'Road' WHEN 'M' THEN ...
- staticmethod classmethod property方法
@staticmethod 静态方法 函数修饰符,用来修饰一个函数,类似于装饰器 class Dog(object): def __init__(self,name): self.name = nam ...
- libmysqlclient.so.16未找到方法
用mysql命令登录的时候报错: [root@iZ www]# mysql -uroot -p mysql: error while loading shared libraries: libmysq ...
- SQL Server(第一章) 创建表 删除表 创建主键约束、唯一约束、外键约束、CHECK约束、默认约束
1.Employees员工表 /** 创建Employees员工表 **/ USE TSQL2012 IF OBJECT_ID('dbo.Employees','U') IS NOT NULL DRO ...