分析三星提供的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;以及…

软件定义的数据中心已经来临

VMware和微软提供了软件定义的数据中心的解决方案。在软件定义的数据中心中&#xff0c;所有的资源——包括计算、存储、可用性、网络和安全等——都实现了虚拟化和自动化。本文主要关注的是其中新加入的特性&#xff1a;虚拟化网络与安全。 为了提供一个完全自动化的数据中心&…

21 个非常有用的 .htaccess 提示和技巧

Apache Web 服务器可以通过 .htaccess 文件来操作各种信息&#xff0c;这是一个目录级配置文件的默认名称&#xff0c;允许去中央化的 Web 服务器配置管理。可用来重写服务器的全局配置。该文件的目的就是为了允许单独目录的访问控制配置&#xff0c;例如密码和内容访问。下面是…

【笔记目录1】【jessetalk 】ASP.NET Core快速入门_学习笔记汇总

当前标签: ASP.NET Core快速入门 共2页: 1 2 下一页 任务50&#xff1a;Identity MVC&#xff1a;DbContextSeed初始化GASA 2019-03-02 14:09 阅读:16 评论:0任务49&#xff1a;Identity MVC&#xff1a;Model前端验证GASA 2019-03-02 14:08 阅读:6 评论:0任务48&#xff1a;I…

PWM信号作用示例(调节LED台灯亮度)

以下内容源于网络资源的学习与整理&#xff0c;非原创&#xff0c;如有侵权请告知删除。 比如你有5V电源&#xff0c;要控制一台灯的亮度。 &#xff08;1&#xff09;传统方式 串联一个可调电阻&#xff0c;改变电阻&#xff0c;灯的亮度就会改变。 &#xff08;2&#xff09…

第二十二章 6未命名的命名空间

//第二十二章 6未命名的命名空间 /*#include <iostream> using namespace std; namespace {int x2; } namespace {int y3; } int main() {cout<<"x:"<<x<<" y:"<<y<<endl; //输出的结果就是未命名空间的x和y的值&…

阅读,

1&#xff0c;2月28日&#xff0c;杭州&#xff0c;浙江省最大规模招聘会&#xff0c;超过5万名大学生在雨中等待进场。2009年&#xff0c;中国需要就业的高校毕业生超过700万人&#xff0c;截至9月1日就业率为74%&#xff08;国家统计局数字&#xff09;。中国已决定放缓高校扩…

uboot中关于LCD的代码分析

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

HDU-1069 Monkey and Banana

链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1069 题意&#xff1a;n种长方形木块&#xff0c;长宽高x,y,z&#xff0c;要求叠放要按照长宽严格递减&#xff08;不能相等&#xff09;&#xff0c;问最高能叠多高 思路&#xff1a;由于一种木块有三种叠放方式&a…

对 makefile 中 override 优先级的学习体会

上例子 override gaoabcgao12345all:  echo $(gao) 运行的结果&#xff0c;make abc override 指令比其他的变量赋值优先级要高。 结束转载于:https://www.cnblogs.com/gaojian/archive/2012/10/04/2711412.html

寒假自助游之济南

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

与fastboot相关的知识

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

OpenCL向量相加

原文http://www.olcf.ornl.gov/training_articles/opencl-vector-addition/ 本文仅仅是为了学习OpenCL而做的的相关翻译。 由于原文中的例子不能在我的环境中运行&#xff0c;因此做了一些改动。 通过这个例子能很好地了解OpenCL的编程模型。 1. 简介 这个例子是表示了两个向量…

AndroidManifest.xml文件解析(转帖)

原帖地址&#xff1a;http://www.cnblogs.com/pilang/archive/2011/04/20/2022932.html 一、关于AndroidManifest.xml AndroidManifest.xml 是每个android程序中必须的文件。它位于整个项目的根目录&#xff0c;描述了package中暴露的组件&#xff08;activities, services, 等…

windows 7系统搭建本地SVN服务器的过程

1、安装svn:TortoiseSVN-1.7.9.23248-x64-svn-1.7.6; 1、在PC机的D盘创建如下目录&#xff1a;D:\svn\project\workspace; 2、右键点击目录workspace文件&#xff0c;选择Tortoise->Create repository here,即在此创建版本库&#xff08;Y&#xff09;; 然后你就会看到D:\sv…

x210开发板的BSP(其中使用buildroot文件夹建立rootfs)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 参考博客&#xff1a;buildroot详解和分析_Alex-wu的博客-CSDN博客_buildroot 板级支持包&#xff08;BSP&#xff0c;Board Support Package&#xff09;&#xff0c;是由引导程序&#xff08;Boo…

Android中Activity启动模式详解

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

EDM的九大用途盘点

对于什么是EDM&#xff0c;前面博主的博文已经有所介绍。那么&#xff0c;EDM的九大用途是什么呢&#xff1f;本文博主就为大家介绍一下。 交叉营销交叉营销是通过把时间&#xff0c;金钱、构想、活动或演示空间等资源整合&#xff0c;为任何企业&#xff0c;包括家庭式小企业、…

分析根文件系统中的/etc/inittab文件

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 1、文件简介 &#xff08;1&#xff09;/etc/inittab文件属于运行时配置文件。 &#xff08;2&#xff09;这个文件是文本格式的&#xff0c;即内容由一系列遵照某格式的字符组成。 &#xff08;3&…