//zz//####################################################################################
zz-tiny210-sd卡烧写141029c
zz-write:
@2014-10-28 23:14:34
@2014-11-24 00:03:55
@
REF:
嵌入式Linux学习笔记(基于S5PV210 TQ210)
http://blog.csdn.net/zjhsucceed_329/article/details/32336019
u-boot学习笔记TQ210陶海武zz141028a时钟宏.pdf
tq210_noos_zz141028b.zip
5-CopySDMMCtoMem
DD_For_Windows.exe
VMware 中怎么用u盘?
http://zhidao.baidu.com/link?url=gdLamVxyyTJf00cLdWjDawYU_TljQGoIene3YYI49a9PCQiqSzvPpC0gBEZMfCmFSPoLYj3B-sybSg9Vdu0prK
KeyWord:
//zz//####################################################################################
1.
编译 5-CopySDMMCtoMem/bl1 出错,提示信息是
arm-linux-ld: cannot find -lgcc
原因:
Makefile 中 -L/opt/... 没有改过来
把这句改好就行了
arm-linux-ld -Ttext 0xD0020010 -o $(OBJ).elf $^ -lgcc -L/opt/FriendlyARM/toolschain/4.5.1/lib/gcc/arm-none-linux-gnueabi/4.5.1/
//zz//####################################################################################
2.
DD_For_Windows.exe 烧写
sector 1
BL1烧写时候要把"添加头信息"勾上
相当于 addheader.c 编译出的程序,添加的16Bytes 的操作
BL1中的 main() 函数,最后return就行;系统会自动的调用BL2在内存中的程序代码;内存中地址是 iRAM:0xD0022800
sector 20
BL2烧写到这里是由BL1中程序copy决定的,并不一定要是推荐的sector 32处
后面u-boot.bin也说明,大小也无80KB的限制的(just recommended)
//zz//####################################################################################
3.
linux 下的SD卡操作
1)
制作 addheader 软件
# gcc -Wall -O2 addheader.c bl1head
2)
拷贝到 bl1.bin 同一个路径下
# ./bl1head bl1.bin bl1_head.bin
查看文件属性,确实多了16bytes
3)
烧写
查看分区情况的命令
# fdisk -l
# df
# df -hT
查看容量详情及盘符的文件系统类型
###############################################
注意:
插入 USB优盘/SD卡读卡器的时候,要保证鼠标焦点在 VMware里面
只有这样才能让U盘/读卡器 插入到虚拟机中,否则,插入后,USB转串口/USB蓝牙等是可以在 虚拟机=>可移动设备 里面找到;但是U盘/读卡器却不能找到
##############################################
可以看到有个 /dev/sdb1 的盘符就是U盘
# dd bs=512 iflag=dsync oflag=dsync if=bl1_head.bin of=/dev/sdb seek=1
bs=512 表示块大小为512Bytes; seek=1 表示从第一簇开始写
# dd bs=512 iflag=dsync oflag=dsync if=bl2.bin of=/dev/sdb seek=20
################################
参考 write2sd 这个脚本
#!/bin/sh
sudo dd bs=512 iflag=dsync oflag=dsync if=210.bin of=/dev/sdb seek=1
#########################################
实际操作命令记录如下:
# dd bs=512 iflag=dsync oflag=dsync if=bl1_head.bin of=/dev/sdb seek=1
记录了10+1 的读入
记录了10+1 的写出
5204字节(5.2 kB)已复制,0.0595135 秒,87.4 kB/秒
# dd bs=512 iflag=dsync oflag=dsync if=bl2.bin of=/dev/sdb seek=20
记录了4+1 的读入
记录了4+1 的写出
2224字节(2.2 kB)已复制,0.0514541 秒,43.2 kB/秒
结果OK成功:
串口终端输出了两个程序的输出
##### Running in BL1 #####
##### Running in BL2 #####
//zz//####################################################################################
4.
linux 下将BL1 BL2 两个文件合并
将一个文件扩展成 15.5KB 大小(先扩到16K,再去掉尾部512Bytes)
# truncate -c -s 16K bl1_head_x.bin
# truncate -c -s -512 bl1_head_x.bin
将 bl2.bin 添加到 bl1_head_x.bin 尾部去
# cat bl2.bin >> bl1_head_x.bin
将 bl1 + bl2 合并后的文件从 sector 1 写入sd卡
# dd bs=512 iflag=dsync oflag=dsync if=bl1h2.bin of=/dev/sdb seek=1
#########################################
2)
实际命令记录如下:
因为BL2 放的位置是 sector 20 (不是 32 = 0x20),所以bl1.bin扩充到10K
因为SD卡的 bl1.bin 是从 sector 1 开始摆放的,所以实际是扩充 9.5K
# truncate -c -s 10k bl1h2.bin
# truncate -c -s -512 bl1h2.bin
# cat bl2.bin >> bl1h2.bin
用 winhex 把SD卡的 sector 1 开头几行写0,存盘 => 放到tiny210从SD卡启动,已经不会启动了..
或者使用如下命令清掉 sector 1 的512 bytes
# dd bs=512 iflag=dsync oflag=dsync if=/dev/zero of=/dev/sdb seek=1 count=5
记录了1+0 的读入
记录了1+0 的写出
512字节(512 B)已复制,0.000255396 秒,2.0 MB/秒
查看一下是否为0
# hexdump -C /dev/sdb -s 512 -n 512
# dd bs=512 iflag=dsync oflag=dsync if=bl1h2.bin of=/dev/sdb seek=1
记录了23+1 的读入
记录了23+1 的写出
11952字节(12 kB)已复制,0.0889259 秒,134 kB/秒
结果OK成功:
串口终端输出了两个程序的输出
##### Running in BL1 #####
##### Running in BL2 #####