SD卡
内存(RAM)与外存(ROM)的区别:
RAM:random access memory.随机访问存储器.特点是任意字节读写(随机访问),掉电丢失.
ROM:read only memory.只读存储器.用于存储东西. 用来存储东西,掉电不丢失,不能随机地址访问,只能以块为单位来访问)叫外存.

5类外存:
原理工作方式 典型应用 速度 可靠性 价格 应用方面
电磁 磁存储.物理运动,摩擦,有损耗 磁带,软盘,CD,光盘,机械硬盘 慢 差 便宜 PC机
flash 闪存设备:利用电学原理来存储,无损耗 nandflash,norflash
SD卡,MMC卡,MicroSD卡,TF卡
inand,movinand,TF卡,ESSD
SSD

SD卡相关分区内容设置

注:
1个block为512个byte.
2048block 为 1M
SD卡存储规则
第一个block(block0) 不能使用.
BL1必须从block1开始写起.长度为16kb(32个block)
BL2,KERNEL长度自己定.
BL1与BL2,BL2与kernel之间最好留有一定的空白区域(隔离安全带).

SD卡相关功能代码
Device Copy Function
iROM中事先内置了一些代码去初始化外部SD卡/NandFlash,并且内置了读取各种SD卡/NandFlash的代码在iROM中。BL0执行时就是通过调用这些device copy function来读取外部SD卡/NandFlash中的BL1的。这些函数代码我们是不知道具体的源码,只知道这些函数的首地址存储在IROM中的特定位置:

IROM里面有一些连续区域,存放着相关Device Copy Function相关类型启动介质函数的首地址.
Device Copy Function使用方法:
由于每种启动介质的函数类型不同,故在使用时候要注意:
1.定义的函数指针类型(输入参数类型及个数,返回值类型)不同.
2.以上图里面存放的仅仅是函数的首地址,类型为uint型,正确的使用方法是先定义一个正确的符合要求的函数指针变量p,
如:
1.*(uint *)0xd0037f98 //按照uint类型读取读取内存地址为0xd0037f98里面的值,.这个值是CopySDMMCtoMem函数代码地址的首地址
2.定义一个函数指针类型pF,其类型是CopySDMMCtoMem函数类型.用以指向CopySDMMCtoMem函数.
3.定义一个函数指针变量p1,并指向CopySDMMCtoMem函数
pF p1=(pF)( (uint)0xd0037f98) 将内存里面的值强制转化为pF型
4.调用p1
*p1;或p1;

宏定义方法:
#define CopySDMMCtoMem(z,a,b,c,e)(((bool()(int, unsigned int, unsigned short, unsigned int,bool))(*((unsigned int *)0xD0037F98)))(z,a,b,c,e))

函数指针调用方法:
( ( bool()(int, unsigned int, unsigned short, unsigned int, bool))(*((unsigned int *)0xD0037F98)) )

makefile 调用子文件夹下的makefile
第一种方式:

cd lib; make; cd…
进入lib文件夹,执行make命令,再cd出来.

第二种方式:

make –C ./BL1 :表示进入到BL1文件夹里执行里面的makefile命令
make clean –C ./BL2 :表示进入到BL2文件夹里执行里面的make clean命令

ubuntu在目标文件夹中中输入 write2sd命令:

执行write2sd这个脚本.

write2sd脚本内容:

#!/bin/sh
sudo dd iflag=dsync oflag=dsync if=./BL1/BL1.bin of=/dev/sdb seek=1
sudo dd iflag=dsync oflag=dsync if=./BL2/BL2.bin of=/dev/sdb seek=45

烧录SD卡命令
dd:linux烧录,读写磁盘命令
if:in file
of:out file
seek:第几个扇区开始.
以上语句表明要烧录2次.

SD卡在ubuntu中烧录的方法:
SD卡通过读卡器连接到PC上,此时进入ubuntu,

点击”断开连接”.如果可移动设备中没有SD卡出现,则需要在XP中开启VMware USB Arbitration Service服务.

XP中开启VMware USB Arbitration Service服务
注:如果ubuntu中没有SD选项,则需要开启此项服务.
开启方法:
XP系统>控制面板>管理工具,开启VMware USB Arbitration Service服务

如何确定有SD卡插入:
ubuntu在目标文件夹中中输入 dev/sd*命令:

dev/sd*:一切设备都是文件,此目录下存放着sd卡的文件描述符.
sdb1:
b位为a,b,c,d,e,f,代表存储设备的编号.一般SD卡为b,硬盘为a .
1代表第几个分区.
注意:烧录脚本中的sd*要和实际中的一致.
如果里面的/dev/sdb 文件类型不对(看颜色),则需要删除它(rm –f /dev/sdb),再重新插入SD卡后即可.

烧录:直接在目录中执行 ./write2sd,直到出现以下信息表明烧录完成

注意:有些生成的镜像文件很大,(如LCD显示图片等程序),大于16kb,这时候就必须要进行代码重定位,实现分步加载.BL1仅仅做一些初始化工作,BL2则是真正运行的主程序代码.分步加载的时候还要注意SD卡烧写的扇区个数要达到整个程序的文件大小.

SD卡重定位
SD卡重定位copy到DDR中的代码(BL2)必须放在已经初始化过的DDR中
S5PV210中DDR内存地址范围:
DRAM0:0x20000000~0x3FFFFFFF(512MB),对应引脚是Xm1xxxx
DRAM1:0x40000000~0x7FFFFFFF(1024MB),对应引脚是Xm2xxxx

X210中DDR内存地址范围:
DRAM0:0x20000000~0x2FFFFFFF(256MB)
DRAM1:0x40000000~0x4FFFFFFF(256MB)

DDR初始化
SDRAM(DDR)初始化使用一个函数sdram_asm_init,函数在sdram_init.S文件中实现,是一个汇编函数。

分散加载SD卡

文件结构

BL1:包含
link.lds 链接脚本.链接到0xd0020010
start.S:汇编文件.主要功能是
关看门狗,
设置SVC栈,设置完成后就可以调用C函数了
开关icache
初始化DDR(bl sdram_asm_init函数),初始化DDR后就可以把代码拷贝至DDR中运行了.
重定位: bl copy_bl2_2_ddr 将SD卡中的BL2拷贝至DDR某处.并跳转到此处运行
makefile:设置编译规则,其中
bootloader1.bin:可以用USB烧录.
BL1.bin:是复制到SD卡中用SD卡烧录. BL1.bin是bootloader1.bin经过mkv210加工转化增加头文字校验信息得到的专门用于SD卡烧录的镜像文件.
mkv210_image.c:加工文件.
s5pv210.h: s5pv210头文件.
sd_relocate.c:SD卡复制及跳转函数
其中
p1(2, SD_START_BLOCK, SD_BLOCK_CNT, (unsigned int *)DDR_START_ADDR, 0); // 读取SD卡相关内容到DDR指定位置中
//2:代表SD卡通道号.
//SD_START_BLOCK:SD卡复制的起始扇区号.
//SD_BLOCK_CNT:SD卡要复制扇区的个数.
//DDR_START_ADDR:0x23E00000 //为长跳转的地址,与重定位的链接脚本地址要一致

pBL2Type p2 = (pBL2Type)DDR_START_ADDR;//实现强制长跳转.

BL2:包含
start.S:汇编文件,实现长跳转ldr pc, =main
link.lds 链接脚本.链接到长跳转的地址0x23E00000并从此处开始运行
makefile:设置编译规则,此makefile已经不需要将生成的bin文件再通过mkv210加工转化增加头文字校验信息得到的专门用于SD卡烧录的镜像文件.

开机,IROM自动将SD卡中的block1-block32扇区的内容(BL1)加载至iram中运行,当DDR初始化完毕的时候,就可以将SD卡其他内容复制到DDR中.

复制完毕后,用一长跳转指令,跳转到DDR中去执行BL2.

准备工作:
确保拨码开关ompin[5]打到GND.

SD/inand启动步骤:
第一层启动从SD0(inand)启动, 当iNand启动做校验和时失败才会转为启动SD2。而我们做裸机实验时是通过SD2来提供裸机程序镜像的,因此需要先破坏内部iNand的uboot才可以强迫开发板从SD2启动去执行我们的裸机程序。

1.破坏开发板iNand中的uboot:

uboot环境下擦除开发板iNand中的uboot
连接串口uart2,打开SecureCRT
开机先回车,再执行movi命令,确认一下.

SecureCRT 调整字体背景在”会话选项”中进行

movi - sd/mmc r/w sub system for SMDK board
在uboot底下擦除uboot:
执行(输入):movi write u-boot 0x30000000
//将内存0x30000000里面的内容(应该全部是0)写入到u-boot分区(inand)里面

执行命令完毕后,画面显示

重启X210,发现串口中输出,表明头部校验和失败,已经转入SD卡通道启动了.

再插入烧好的SD卡,即可启动.

linux和android系统下,擦除uboot:
待X210完全启动后,在SecureCRT中输入
命令:busybox dd if=/dev/zero of=/dev/block/mmcblk0 bs=512 seek=1 count=1 conv=sync

命令:sync

共2条命令.(破坏inand第一个扇区)

解释:这句话的意思就是说把板载的iNand的第一个扇区用全0来填充,其实就是擦除它,这样我们板载的iNand的bootloader的开始第1个扇区就被破坏了。将来启动时iROM还是会先从iNand中读取前16KB,然后计算校验和。这时候因为有1个扇区被擦掉了,所以校验和不通过,所以启动失败(会从SD2去执行2nd启动)。
注意:破坏板载iNand的bootloader后,不插外部SD卡,启动时串口得到:SD checksum Error

2.烧录
SD卡PC环境下烧录镜像:
PC环境下,用专用工具:browse找到镜像后,点击start.将镜像复制到SD卡后,将SD卡插入至SD2口即可.(此方法只能做辅助启动,拔掉SD卡后也不能启动)

fastboot 烧录:
fastboot:是windows下的一个软件,也是uboot下的一个命令.
注意:如果uboot已经被擦除,则需要将烧好的SD插入,否则X210启动不起来,无法进入控制台.

  1. 使用USB线传输连接OTG接口,打开SecureCRT串口,开机后,迅速敲回车进入控制台,输入fastboot命令.

2.进入windous,运行cmd,切换到fastboot.exe所在的文件夹里面(我的电脑文件路径是: E:\fastboot)
相关操作命令:
切换命令:cd E:\fastboot //切换至E:\fastboot文件夹下
进入命令:dir //显示当前文件夹里的文件相关信息
查看命令: fastboot devices //命令用来查看当前连接的设备。

表明已经检测到设备,下面就开始烧录镜像文件了.共有3个文件,这3个文件均需自己拷贝至e:\fastboot文件夹里面.

烧uboot: fastboot flash bootloader android4.0.4/uboot.bin
烧linux kernel: fastboot flash kernel android4.0.4/zImage-android
烧android rom: fastboot flash system android4.0.4/x210.img

一般:我们破坏的是uboot,所以我们只需要烧录uboot即可:
命令:fastboot flash bootloader android4.0.4/uboot.bin

重启命令:fastboot reboot //命令用来重启系统
3.UBUNTU环境下烧录(见SD卡部分)

SD卡相关分区内容设置 x210 SD卡烧录方法相关推荐

  1. linux hba卡超时时间,如何设置QLogic HBA卡超时参数

    查看QLogic HBA卡生效驱动,执行esxcfg-scsidevs -a命令,下图生效的驱动为"qlnativefc". [root@localhost:~] esxcfg-s ...

  2. Linux下对TF卡进行分区

    第一步查看TF卡的分区:ls /dev/sd* (因为我知道他是sdb所以我后面用的/dev/sdb*) 第二步删除原有分区:sudo pated -s /dev/sdb mklabel msdos ...

  3. android 数据持久化——读写SD卡中的内容

    在前面讲的那三个方法:openFileOutput .openFileInput 虽然都能通过流对象OutputStream和InputStream可以处理任意文件中的数据,但与SharedPrefe ...

  4. ubuntu挂载sd卡到分区目录+修改docker镜像存储位置

    ubuntu挂载sd卡到分区目录+修改docker镜像存储位置 一. 挂载SD卡到/data 1.查看Linux硬盘信息 lsblk 或 fdisk -l lsblk 新的硬盘,最好删除之前的分区,再 ...

  5. 华为内部存储转sd卡_华为tit al00怎么将手机存储内容转移到sd卡

    1.可以在设置-管理应用程序-已下载,可以查看哪些应用是可以搬家的. 2.应用搬家后,sd卡中查看不到相应的文件夹,这是出于对应用数据的保护避免误操作,默认将数据设置为隐藏文件:如果您需要查看这些文件 ...

  6. SD卡分区教程 安卓手机SD卡分区

    教程来自安智论坛 PS:对SD卡进行分区的软件和方法很多.本贴只举一例.另外.分区会导致卡里的内容全部丢失,所以请提前将卡里的内容复制出来备份好 SD卡分区软件WinPM.rar下载 安卓系统SD卡分 ...

  7. ubuntu16.04对SD卡进行分区

    赶在2020年上半年的最后一天,匆忙地写上一个博客.这篇博客是对自己的一个反思,我的博客属于自己完全开辟的内容几很少,有些博客大家随便在网上一搜就能找到.说实话,有时候我会怀疑自己的智商有问题.哈哈哈 ...

  8. STM32F4——SD卡相关操作

    一.简介: SD卡从MMC基础发展而来,一种记忆设备,广泛用于便携设备,SD卡按容量分为:SD卡(0~2G).SDHC卡(2~32G)和SDXC卡(32G~2T).对于SD的使用过程中相应引脚和对应模 ...

  9. DM8168心得之SD卡快速分区制作

    DM8168心得之SD卡快速分区制作 /****************************************************************** *       autho ...

最新文章

  1. 如何读懂MEMS惯性器件的精度指标
  2. 11 个 Linux 终端命令,没用过的快去试试吧!
  3. docker 部署 redis
  4. 接口测试指导方案 转:紫漪
  5. static_cast 和 reinterpret_cast的区别以及dynamic_cast
  6. VMware演示手机虚拟化
  7. 如何用word写书_如何将100页PPT转换成Word?1键轻松搞定,看完你还用复制黏贴吗...
  8. JavaScript:在JS中截取字符串的方法
  9. unbtun python tab补全
  10. 为什么程序员下班后只关显示器却从不关电脑?
  11. PHP基于gettexts实现多语言i18n利用PoEdit
  12. 2022聚合工艺复训题库及在线模拟考试
  13. 报告:黑马11月就业薪资出炉!哪个学科更好就业?
  14. 北航大学计算机教学平台,信息学院赴北京航空航天大学计算机教学实验中心参观交流...
  15. 为什么量子计算机是锥形,科学家制作超高精度微腔为量子计算机铺垫
  16. python symbols函数_Python应用 | 求解微积分!
  17. 直播电商如何才能“酒香不怕巷子深”?
  18. 解决win10部分程序文本乱码,亲测有效
  19. java sqlite 多线程并发_C#_C#解决SQlite并发异常问题的方法(使用读写锁),本文实例讲述了C#解决SQlite并 - phpStudy...
  20. 穿山甲广告切后台点Icon进入后广告消失或游戏重启的解决方法

热门文章

  1. jpg格式转png教程
  2. 串口通讯JustinIO.cs
  3. 纸箱机器人演出服制作_烈山机器人演出服装未来创意科技
  4. 实用 Windows 软件系列分享(四)
  5. can`t resolve fs in xlsx-style
  6. Spring Boot + Redis 实现分布式锁,还有谁不会??
  7. 11、Java——吃货联盟订餐系统(对象+数组)
  8. Windows UI改造-任务栏全透明、桌面数字时钟、息屏显示数字时钟
  9. 云计算与大数据第15章 分布式大数据处理平台Hadoop习题带答案
  10. SDOI 2019 R1 摸鱼记