分析三星提供的sd_fusing文件夹(用来制作SD卡启动镜像)

以下内容源于网络资源的学习与整理,如有其侵权请告知删除。 

参考博客

uboot分析:SD卡镜像制作脚本分析 - 走看看

如何烧写u-boot到SD卡

S5PV210 Uboot开发与移植01:Uboot概述(推荐)

一、sd_fusing文件夹简介

1、文件夹的内容

这个文件夹在三星版本的uboot中,主要工作是将uboot镜像文件烧写至SD卡。

root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding/sd_fusing# ls
C110-EVT1-mkbl1.c   Makefile    sd_fusing2.sh
c110.signedBL1_bin  sd_fdisk.c  sd_fusing.sh
root@ubuntu:/home/xjh/iot/embedded_basic/uboot/uboot_jiuding/sd_fusing#

(1)C110-EVT1-mkbl1.c文件,负责将uboot前8K的分离出来形成BL1。

(2)c110.signedBL1_bin文件,在sd_fusing2.sh文件中被调用,由下面代码可知它属于某种情形下的BL1。

####################################
#<BL1 fusing>
signed_bl1_position=1
bl2_position=9
uboot_position=57
echo "BL1 fusing"
dd iflag=dsync oflag=dsync if=c110.signedBL1_bin of=$1 seek=$signed_bl1_position

(3)Makefile文件,是编译文件。

(4)sd_fdisk.c文件,负责将sd卡进行分区。

(5)sd_fusing2.sh文件,很少使用这个文件,一般用sd_fusing.sh文件。

(7)sd_fusing.sh文件,将BL1、uboot.bin文件下载到sd卡。


2、文件夹的使用方法

(1)首先要完成uboot编译。

(2)接着进入sd_fusing目录,执行make clean,然后make。

(3)最后执行烧写,即“./sd_fusing.sh /dev/sdb”。

可知,$0=./sd_fusing.sh,$1=/dev/sdb,$#=1($#表示参数的个数)。

二、分析sd_fusing.sh文件

该文件内容见链接百度网盘。在分析这个文件前先掌握以下内容。

1、dd命令的用法

见博客:dd命令:用于读取、转换并输出数据_天糊土的博客-CSDN博客

2、mount与umount命令的用法

见博客:

3、fopen函数的用法

见博客:C语言fopen函数的用法,C语言打开文件详解


4、分析sd_fusing.sh代码

(1)对sd卡进行分区

sd_fusing.sh调用sd_fdisk.c(这个文件创建了sd_mbr.dat文件)对sd卡进行分区,并将分区信息(即MBR)存储在mmc的第0扇区。内核在初始化mmc设备时,通过读取MBR即可得知mmc设备的分区信息。

####################################
# make partition
echo "make sd card partition"
echo "./sd_fdisk $1" 
./sd_fdisk $1  #调用sd_fdisk工具对sd卡进行分区,并生成sd_mbr.dat文件
#将sd_mbr.dat文件(即MBR)写进sd卡0扇区
dd iflag=dsync oflag=dsync if=sd_mbr.dat of=$1
rm sd_mbr.dat

(2)烧写BL1和uboot到sd卡对应的位置

如何将BL1、uboot烧写至sd卡对应的位置?为什么是1和49?利用dd命令进行对块设备的烧写。三星规定BL1必须放在第1个 block开始的区域,而49可以变为其他合适的

####################################
#<BL1 fusing>
bl1_position=1     # 三星规定BL1存放SD卡中第1个扇区(这里扇区编号从0开始)
uboot_position=49  # 整个uboot放在合适的位置即可,这里放在SD卡的第49扇区echo "BL1 fusing"
./mkbl1 ../uboot_inand.bin SD-bl1-8k.bin 8192
dd iflag=dsync oflag=dsync if=SD-bl1-8k.bin of=$1 seek=$bl1_position
rm SD-bl1-8k.bin####################################
#<u-boot fusing>
echo "u-boot fusing"
dd iflag=dsync oflag=dsync if=../uboot_inand.bin of=$1 seek=$uboot_position​

(3)完整代码分析

sd_fusing.sh脚本的主要作用是在SD卡内创建一个fat32分区,然后将uboot的BL1和整个uboot烧录进SD卡中。

#定义SD卡设备,应该根据实际的设备信息进行修改
reader_type1="/dev/sdb"
reader_type2="/dev/mmcblk0"#如果没有参数,则显示帮助信息
if [ -z $1 ]
thenecho "usage: ./sd_fusing.sh <SD Reader's device file>"exit 0
fi#判断SD卡的设备类型,然后定义四个分区
if [ $1 = $reader_type1 ]
then partition1="$11"  # $1=/dev/sdb,所以partition1=/dev/sdb1partition2="$12"partition3="$13"partition4="$14"elif [ $1 = $reader_type2 ]
then partition1="$1p1"partition2="$1p2"partition3="$1p3"partition4="$1p4"else #不能识别SD卡设备echo "Unsupported SD reader"exit 0
fi#判断设备是否存在,且是否是块设备
if [ -b $1 ]
thenecho "$1 reader is identified."
elseecho "$1 is NOT identified."exit 0
fi####################################
# make partition,开始进行SD卡分区
echo "make sd card partition"
echo "./sd_fdisk $1" 
#调用sd_fdisk工具对sd卡进行分区,并生成sd_mbr.dat文件
./sd_fdisk $1 
#将sd_mbr.dat文件(即MBR)写进sd卡0扇区
dd iflag=dsync oflag=dsync if=sd_mbr.dat of=$1 
rm sd_mbr.dat####################################
# format,以下是什么意思?
umount $partition1 2> /dev/null
umount $partition2 2> /dev/null
umount $partition3 2> /dev/null
umount $partition4 2> /dev/nullecho "mkfs.vfat -F 32 $partition1"  
mkfs.vfat -F 32 $partition1  #建立一个fat32分区,即sdb1#echo "mkfs.ext2 $partition2"
#mkfs.ext2 $partition2  #echo "mkfs.ext2 $partition3"
#mkfs.ext2 $partition3  #echo "mkfs.ext2 $partition4"
#mkfs.ext2 $partition4  ####################################
# mount 
#umount /media/sd 2> /dev/null
#mkdir -p /media/sd
#echo "mount -t vfat $partition1 /media/sd"
#mount -t vfat $partition1 /media/sd####################################
#<BL1 fusing>
bl1_position=1 #定义uboot的扇区位置
uboot_position=49#将uboot的BL1(前8K)和uboot的校验和(uboot的前16字节)烧录进SD卡的1扇区
echo "BL1 fusing"
./mkbl1 ../uboot_inand.bin SD-bl1-8k.bin 8192     
dd iflag=dsync oflag=dsync if=SD-bl1-8k.bin of=$1 seek=$bl1_position #烧录
rm SD-bl1-8k.bin#将整个uboot烧录进SD卡的uboot_position=49扇区
#<u-boot fusing>
echo "u-boot fusing"
dd iflag=dsync oflag=dsync if=../uboot_inand.bin of=$1 seek=$uboot_position#烧录成功信息提示
#<Message Display>
echo "U-boot image is fused successfully."
echo "Eject SD card and insert it again."

三、 分析sd_fdisk.c文件

sd_fdisk.c文件(编译得到sd_fdisk)用来生成分区表。它是如何对sd卡进行分区的?

见博客:uboot中sd_fdisk.c分析_天炜的博客-CSDN博客

见博客:S5PV210 Uboot开发与移植01:Uboot概述_麦兜的学习笔记的博客-CSDN博客

(1)仔细分析发现这个sd_fdisk.c里面只是给SD卡制作了一个10M的fat32分区,导致后面缺少一些system.img等镜像时,还要在uboot里面执行“fdisk -c 0”来再次做一次分区,这是否多此一举呢?一次性sd_fdisk.c里面分好区不好吗?

(2)之所以要制作fat32分区,是因为dd命令?

四、分析C110-EVT1-mkbl1.c文件

(1)该文件的作用是什么?

与mkv210_image.c功能一致,用于读取uboot.bin的前8KB并计算其校验和,构成BL1。

(2)为什么是复制8k?

复制8k,是因为8k的代码能够完成必要的工作了,尽管可以复制更多,但没必要。

(3)8k中必须完成什么任务?

uboot的前8K代码肯定要完成重定位,因为BL1和BL2的链接地址不同,比如BL1的链接地址为0xd0020010,BL2链接地址为0x23e00000。见博文汇编阶段的start.S文件讲述的uboot的重定位。

更多具体内容,见博客S5PV210 Uboot开发与移植01:Uboot概述。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/461684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux系统管理----LVM逻辑卷和磁盘配额作业习题

1&#xff0e;为主机增加80G SCSI 接口硬盘 2&#xff0e;划分三个各20G的主分区 [rootlocalhost chen]# fdisk /dev/sdb 命令(输入 m 获取帮助)&#xff1a;n Partition type: p primary (0 primary, 0 extended, 4 free) e extended Select (default p): Using default r…

外存——S5PV210的外部存储器(nandflash与inand的介绍)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 关于iNand ,oneNand,moviNAND的区别——大家一起来扫盲 - 嵌入式系统 总结 本文首先介绍了目前主流的外存设备有哪些。 然后介绍了NandFlash芯片的接口、结构、常见操作&#xff0c;以及…

uboot中关于LCD的代码分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 1、在uboot-jiuding/board.c中&#xff0c;init_sequence中的display_banner中的open_backlight函数中&#xff0c;给GPF3_5输出高电平。 注释掉这一句uboot的LCD显示照样正常的&am…

寒假自助游之济南

以前很少去旅行&#xff0c;主要原因是孩子年龄比较小&#xff0c;再就是经济方面的考虑。如今孩子渐渐长大了&#xff0c;行路与读万卷书同等重要&#xff0c;遂决定以后无论寒暑假都应陪孩子到处走一走。我不喜欢那种走马观花式的跟团游&#xff0c;因而自助游便是最佳选择。…

与fastboot相关的知识

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 一、fastboot的基本知识 1、什么是fastboot &#xff08;1&#xff09;fastboot是android使用的一种刷机方法。 android系统设计了2种刷机方式&#xff1a;fastboot和recovery。 &#xf…

Android中Activity启动模式详解

在Android中每个界面都是一个Activity&#xff0c;切换界面操作其实是多个不同Activity之间的实例化操作。在Android中Activity的启动模式决定了Activity的启动运行方式。 Android总Activity的启动模式分为四种&#xff1a; Activity启动模式设置&#xff1a; <activity and…

第一次软工作业展示——潘学

第一次软工作业完成啦&#xff01; 回首这个作业的完成过程&#xff0c;我是很有收获。这个作业有几个难点&#xff1a;1、在给定目录下读取TXT文件的内容&#xff1b;2、从读到的内容中分析出单词&#xff1b;3、统计单词的出现频率并输出。 我之前只学习过C和java&#xff0c…

uboot源码——命令体系

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6394710.html 一、uboot命令体系基础 1、使用uboot命令 uboot启动后进入命令行环境&#xff0c;在此输入命令按回车结束&#xff0…

XMPP文件传输(XEP-0096协议说明)

XMPP XEP-0096协议是XMPP中的文件传输协议。 关于文件传输&#xff0c;在xmpp协议中有不少协议可以实现&#xff0c;而XEP-0096协议是其中非常简单的一个协议。由于邮件被删&#xff0c;我的代码demo丢失&#xff0c;因此只能在这里给大家讲一下其中的逻辑实现&#xff0…

uboot源码——环境变量

以下内容源于朱有鹏嵌入式课程的学习&#xff0c;如有侵权&#xff0c;请告知删除。 参考资料&#xff1a;http://www.cnblogs.com/biaohc/p/6398515.html。 一、uboot的环境变量基础 1、环境变量的作用 在不改变源码、不用重新编译的情况下&#xff0c;可以通过设置环境变量…

Linq To Sql进阶系列 -目录导航

博客园CLR基础研究团队|CLR团队精品系列|C# 3.0专题 [Linq To Sql进阶系列] 目录导航 1 Linq To Sql进阶系列&#xff08;一&#xff09;-从映射讲起 本系列&#xff0c;或多或少&#xff0c;直接或间接依赖入门系列知识。但&#xff0c;依然追求独立成章。因本文作者水平有限&…

uboot源码——mmc驱动分析

以下内容源于朱有鹏《物联网大讲坛》课程的学习&#xff0c;以及博客http://www.cnblogs.com/biaohc/p/6409197.html的学习整理&#xff0c;如有侵权&#xff0c;请告知删除。 一、uboot与linux驱动 1、uboot是裸机程序 狭义的驱动的概念&#xff1a;操作系统中用来具体操控硬…

RDIFramework.NET(.NET快速开发框架) 答客户问(2014-02-23)

1、框架的部署安装&#xff0c;服务器端和客户端 答&#xff1a;开发版以上版本支持SOA模式&#xff0c;也即真正的面向服务端的模式&#xff0c;在实际使用过程中&#xff0c;可根据项目的实际需要&#xff0c;来选择性的进行部署&#xff08;直连模式或SOA模式&#xff09;&a…

I2C通信——I2C通信的基础介绍

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除 。 参考博客 SPI、I2C、UART&#xff08;即串口&#xff09;三种串行总线详解_天糊土的博客-CSDN博客_串口总线 s5pv210 I2C通信详解 - biaohc - 博客园 嵌入式常用技术概览之IIC(I2C)_C_XianRen的博…

IBM SOA[ESB,BPM,Portal等]基础架构图解

最近公司对众多的异构系统进行SOA化&#xff0c;产品选型为IBM的Websphere系列产品的WMB&#xff0c;BPM&#xff0c;Portal&#xff0c;LDAP等技术&#xff0c;根据具体的描述&#xff0c;连猜带蒙的画了个系统协作图&#xff0c;有不对的地方欢迎大家拍砖....谢谢。 SOA详细技…

css3图标悬停导航菜单

纯css3制作的图标悬停导航菜单&#xff0c;包含9中不同的悬停风格&#xff0c;干净大气。转载于:https://blog.51cto.com/jimanyu/1362823

I2C通信——S5PV210的I2C通信简单案例

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考内容 I2C子系统详解3——I2C总线驱动层代码分析_天糊土的博客-CSDN博客 一、S5PV210的I2C控制器 1、为什么需要控制器&#xff1f; 通信双方通过时序协调工作&#xff0c;但是时序比较复杂而…

POJ 2718

题意&#xff1a;给出最多10个数字&#xff0c;将它们划分为两个整数&#xff0c;求差异值最小的值&#xff08;除非只有一位数&#xff0c;否则不允许出现先导0&#xff09; 题解&#xff1a;很显然如果总共有n个数&#xff0c;必然有一个整数长n/2,另一个长n-n/2&#xff0c;…

HDUOJ---1879 继续畅通工程

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 11473 Accepted Submission(s): 5026 Problem Description省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通&#xff08;但不一…

动态载入树 (ASP+数据库)

ASPACCESS 在数据量达100万条记录下&#xff0c;载入速度仍然惊人.... // 网上转载. 忘了作者... : ) //********************** Index.asp ************************// 1<%LANGUAGE"VBSCRIPT"CODEPAGE"936"%>2<%OptionExplicit%>3<htm…