关于SD卡启动linux的问题

来源:互联网 发布:淘宝 电视便宜 编辑:程序博客网 时间:2024/05/04 16:37

2013514日)经过前段时间的折腾,到今天为止,对于uboot终于有点头绪了,虽然上星期已经成功移植了uboottiny210上,但感觉到很多东西都是半懂不懂的。很多都是照搬来。只能说是会用,那个之 所以而然确不一定能说得上来。

 

 

本次对linux下为SD卡烧写uboot.bin的原理与方法进行一个讲解


一、对于网上关于SD卡烧写的问题,得出以下结论:

原命令为:

$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1

 

此处查资料可得----

ddlinux 的命令语法以及功能如下-

功能说明:读取,转换并输出数据。

语  法:dd [bs=<字节数>][cbs=<字节数>][conv=<关键字>][count=<区块数>][ibs=<字节数>][if=<文件>][obs=<字节数>][of=<文件>][seek=<区块数>][skip=<区块数>][--help][--version]

补充说明:dd可从标准输入或文件读取数据,依指定的格式来转换数据,再输出到文件,设备或标准输出。

dd:用指定大小的块拷贝一个文件,并在拷贝的同时进行指定的转换。

注意:指定数字的地方若以下列字符结尾则乘以相应的数字:b=512c=1k=1024w=2

参数:

1. if=文件名:输入文件名,缺省为标准输入。即指定源文件。< if=input file >

2. of=文件名:输出文件名,缺省为标准输出。即指定目的文件。< of=output file >

3. ibs=bytes:一次读入bytes个字节,即指定一个块大小为bytes个字节。

  obs=bytes:一次输出bytes个字节,即指定一个块大小为bytes个字节。

  bs=bytes:同时设置读入/输出的块大小为bytes个字节。

4. cbs=bytes:一次转换bytes个字节,即指定转换缓冲区大小。

5. skip=blocks:从输入文件开头跳过blocks个块后再开始复制。

6. seek=blocks:从输出文件开头跳过blocks个块后再开始复制。

注意:通常只用当输出文件是磁盘或磁带时才有效,即备份到磁盘或磁带时才有效。

7. count=blocks:仅拷贝blocks个块,块大小等于ibs指定的字节数。

8. conv=conversion:用指定的参数转换文件。

  ascii:转换ebcdicascii

   ebcdic:转换asciiebcdic

  ibm:转换asciialternate ebcdic

  block:把每一行转换为长度为cbs,不足部分用空格填充

  unblock:使每一行的长度都为cbs,不足部分用空格填充

  lcase:把大写字符转换为小写字符

  ucase:把小写字符转换为大写字符

  swab:交换输入的每对字节

   noerror:出错时不停止

   notrunc:不截短输出文件

  sync:将每个输入块填充到ibs个字节,不足部分用空(NUL)字符补齐。

 

 

FLAGS参数说明:

append -append  mode  (makes  sense  only  for output; conv=notrunc sug-gested)

direct 读写数据采用直接IO方式;

directory 读写失败除非是directory

dsync  读写数据采用同步IO

sync   同上,但是针对是元数据

fullblock 堆积满blockaccumulate full blocks of input (iflag only)

nonblack 读写数据采用非阻塞IO方式

noatime 读写数据不更新访问时间

noctty -do not assign controlling terminal from file

nofollow -do not follow symlinks

 

 

因此,可以知道前面提到的命令

$sudo dd iflag=dsync oflag=dsync if=tiny210-uboot.bin of=/dev/sdb seek=1

意思为:

 

sudo为超级用户权限)把tiny210-uboot.bin输出到设备sdb上,跳过该设备的第一个block

(每个block的大小为512B,具体原因请参考本节后的图片(在三星官方的irom说明书中提取))

 

  fdisk -l,检查是否识别了USB设备 fdisk -l,检查是否识别了USB设备 找出SD卡对应的设备

 

前提:
    1、SD卡
    2、linux系统,装虚拟机中就行。

步骤:
    1、格式化SD卡为FAT32格式。
    2、把光盘的images复制到SD卡的根目录
    3、linux命令行中执行: dd iflag=dsync oflag=dsync if=Superboot210.bin of=/dev/sdc seek=1
    /dev/sdc SD卡在linux中的设备名字
    Superboot210.bin 友善bootloader文件
    4、linux命令行中执行: sync
    把缓存中的东西强制写入SD卡
    5、开发板从SD卡启动,就会出现烧写界面了 

 


 

 

 

 

 

 

 

 

 


0 0
原创粉丝点击