uboot源码分析 您所在的位置:网站首页 三星sd卡是什么 uboot源码分析

uboot源码分析

2024-07-11 17:56| 来源: 网络整理| 查看: 265

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

参考博客

(1)SD卡镜像制作脚本分析

(2)如何烧写u-boot到SD卡

(3)S5PV210 Uboot开发与移植

一、文件夹sd_fusing简介 1.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。

#################################### # 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文件。

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

1.2 文件夹的使用方法

(1)首先要正确完成uboot编译,在uboot源码顶层目录下生成一个名为u-boot.bin的文件。

(2)然后进入uboot源码顶层目录下的sd_fusing目录,先执行make clean,然后执行make。

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

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

二、分析sd_fusing.sh文件 1.1 掌握基础知识 

在分析这个文件前需要先掌握以下内容。

(1)理解dd命令

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

(2)理解mount与umount命令

见博客:Linux mount命令详解:挂载Linux系统外的文件

(3)理解fopen函数

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

1.2 分析sd_fusing.sh文件

该文件内容见链接百度网盘。

该文件在SD卡内创建一个fat32分区,然后将uboot的BL1和整个uboot烧录进SD卡中。 

(1)对SD卡进行分区

文件sd_fusing.sh中,通过调用sd_fdisk.c(这个文件编译生成sd_fdisk工具,执行这个工具时会创建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卡对应的位置

也就是利用dd命令进行对块设备的烧写。

#################################### # 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 #################################### # echo "u-boot fusing" dd iflag=dsync oflag=dsync if=../uboot_inand.bin of=$1 seek=$uboot_position ​

为什么BL1放在SD卡第1扇区开始的区域,而uboot放在SD卡第49扇区开始的区域?这是因为三星规定BL1必须放在SD卡第1个扇区开始的区域(由S5PV210这款SoC的特性决定的),而49可以变为其他合适的区域。

(3)完整代码分析 #定义SD卡设备,应该根据实际的设备信息进行修改 reader_type1="/dev/sdb" reader_type2="/dev/mmcblk0" #如果没有参数,则显示帮助信息 if [ -z $1 ] then echo "usage: ./sd_fusing.sh


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有