关于tiny4412开发板SD卡烧写u-boot脚本sd_fusing.sh的解释

2023-10-10 07:50

本文主要是介绍关于tiny4412开发板SD卡烧写u-boot脚本sd_fusing.sh的解释,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

对于嵌入式linux开发而言拿到tiny4412开发板
第一件事就是将定制好linux内核跟板子实现很好的挂接
CPU跟MCU(单片机)不同,单片机内部集成了RAM、ROM,在大多数情况下单个芯片就可以完成
程序的存储以及运行。
但是CPU,一般内部不集成或者只集成很小的RAM ROM空间,
只提供芯片进行最基本的开机配置或者进行程序引导来使用。
CPU生来为运行大型任务或者操作系统而生,运行的程序或者系统占用空间比较大,
将他们存放到CPU内部显然不现实,就需要将他们存放到cpu外部存储设备。
就像电脑要发挥作用需要为芯片额外配置内存条、硬盘一样。
tiny4412开发板板载芯片是三星公司的Exynos4412芯片,该款芯片支持的启动设备包括:
General NAND flash memory:NAND Flash
SD/MMC memory card:SD卡
eMMC memory:eMMc
USB device:USB设备
在tiny4412开发板核心板上集成DDR3 1G大小的RAM(相当于电脑内存条),4GB eMMc存储(相当于计算机硬盘)
还有额外的SD卡座(相当于计算机硬盘)。
开发板提供了一个开关进行启动设备的切换(SD启动 eMMc启动);
为了方便起见,在学习测试时还是以上面两种方式为主
为了保险,防止学习测试时频繁擦写或者操作意外导致eMMc损坏变“砖”的情况,建议初学者还是以SD卡方式启动(将SD卡作为‘硬盘’)。
毕竟SD易得,核心板不易得。SD卡在进行u-boot烧写之前用光盘里的sd格式化工具格式化,否则不能烧写成功。
从光盘将uboot安装包uboot_tiny4412-sdk1506.2.19.tgz拷贝到虚拟机
利用tar xf uboot_tiny4412-sdk1506.2.19.tgz解压安装包得到解压文件夹       
[root@localhost zhangchao]# tar xf uboot_tiny4412-sdk1506.2.19.tgz 
[root@localhost zhangchao]# ls
uboot_tiny4412-sdk1506  uboot_tiny4412-sdk1506.2.19.tgz
解压完毕就可以看到 uboot_tiny4412-sdk1506这个文件夹
里面就是uboot源码和烧写uboot的脚本文件还有一些其他平台的支持文件(不止用于tiny4412)
打开文件夹查看内容
root@localhost zhangchao]# cd uboot_tiny4412-sdk1506
[root@localhost uboot_tiny4412-sdk1506]# ls
api         common       CREDITS  examples  MAINTAINERS  nand_spl     README           System.map  u-boot.lds
arch        config.mk    disk     fs        MAKEALL      net          rules.mk         tools       u-boot.map
board       COPYING      doc      include   Makefile     onenand_ipl  sd_fuse          u-boot      u-boot.srec
boards.cfg  COPYING.txt  drivers  lib       mkconfig     post         snapshot.commit  u-boot.bin
我们可以看到里面已经生成有 u-boot 的二进制文件但是这不一定就是针对tiny4412开发板的
所以我们还要进行处理一下:
执行以下命令
[root@localhost uboot_tiny4412-sdk1506]# make clean
make: arm-linux-gcc:命令未找到
/bin/sh: arm-linux-gcc: command not found
dirname: 缺少操作数
请尝试执行"dirname --help"来获取更多信息。
[root@localhost uboot_tiny4412-sdk1506]# make distclean
make: arm-linux-gcc:命令未找到
/bin/sh: arm-linux-gcc: command not found
dirname: 缺少操作数
请尝试执行"dirname --help"来获取更多信息。
/bin/sh: arm-linux-gcc: command not found
dirname: 缺少操作数
请尝试执行"dirname --help"来获取更多信息。
/bin/sh: arm-linux-gcc: command not found
dirname: 缺少操作数
请尝试执行"dirname --help"来获取更多信息。
[root@localhost uboot_tiny4412-sdk1506]# 
会出现报错找不到 arm-linux-gcc编译器
gcc编译器运行在windows x86平台,arm平台的gcc为arm-linux-gcc
交叉编译器arm-linux-gcc的安装:
将光盘里arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz拷贝到虚拟机
# tar xvzf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz 
复制解压目录下的toolschain目录 到/opt目录下
# vim /etc/profile
export PATH=/opt/toolschain/4.5.1/bin:$PATH
声明系统变量 
# source /etc/profile
更新文件
执行arm-linux-gcc -v命令
若成功打印出交叉编译器版本则证明安装成功
接下来在uboot解压目录uboot_tiny4412-sdk1506下执行make clean;make distclean;两条指令
make clean:清除生成目标信息 执行完后可以发现uboot.bin文件全都消失
make distclean:清除板子配置信息(默认可能不是4412)
执行完两条指令后再执行 make tiny4412_config命令进行单板配置
执行完毕 执行make 生成与tiny_4412开发板对应的uboot.bin文件
顶层makefile本篇文章先不分析,主要分析向SD卡烧写uboot的sh脚本
以上操作执行完毕,进入sd_fush文件夹
[root@localhost uboot_tiny4412-sdk1506]# cd sd_fuse/
[root@localhost sd_fuse]# ls
Makefile  mkbl2  sd_fdisk  sd_fdisk.c  tiny4412  V310-EVT1-mkbl2.c
[root@localhost sd_fuse]# 
如果文件夹下有mkbl2文件不用执行make  若没有执行make生成mkbl2文件先不解释为什么
进入tiny4412文件夹
[root@localhost sd_fuse]# cd tiny4412/
[root@localhost tiny4412]# ls
E4412_N.bl1.bin  E4412_tzsw.bin  fast_fuse.sh  sd_fusing.sh  uboot_tiny4412-sdk1506.tar.bz2
[root@localhost tiny4412]# 
执行SD烧写脚本(前提是SD卡已经挂载到虚拟机)
[root@localhost tiny4412]# ./sd_fusing.sh /dev/sdb
这样就把u-boot烧写进入SD卡,烧写完毕将卡插到开发板,启动设备选择开关拨到SD启动,开发板的串口线连接到
电脑,打开串口助手,打开发板电源就能看见u-boot启动过程。
u-boot是干嘛的?
u-boot类似电脑BIOS一样是引导系统用的,是在操作系统内核运行之前运行的一段小程序。
通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,
从而将系统的软硬件环境带到一个合适的状态,
以便为最终调用操作系统内核准备好正确的环境
除此之外它的好处还不少:
选择U-Boot的理由:
① 开放源码;
② 支持多种嵌入式操作系统内核,如Linux、NetBSD, VxWorks, QNX, RTEMS, ARTOS, LynxOS, android;
③ 支持多个处理器系列,如PowerPC、ARM、x86、MIPS;
④ 较高的可靠性和稳定性;
⑤ 高度灵活的功能设置,适合U-Boot调试、操作系统不同引导要求、产品发布等;
⑥ 丰富的设备驱动源码,如串口、以太网、SDRAM、FLASH、LCD、NVRAM、EEPROM、RTC、键盘等;
⑦ 较为丰富的开发调试文档与强大的网络技术支持;

额,废话不多讲,我们在执行./sd_fusing.sh /dev/sdb时完成了u-boot的烧写,那么sd_fusing.sh文件中到底是怎样执行的呢?
接下来我们分析一下源码:
#
# Copyright (C) 2011 Samsung Electronics Co., Ltd.
#              http://www.samsung.com/
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 as
# published by the Free Software Foundation.
#
####################################
//上面的部分是一些介绍没什么讲的
//在shell脚本中$1代表传入的第二个参数,脚本自身算作第一个参数。
if [ -z $1 ]
thenecho "usage: ./sd_fusing.sh <SD Reader's device file>"exit 0
fi
//以上是shell脚本的if语句以fi结束
//主要功能是判断执行脚本时是否跟了参数
//如果没有跟参数,提示你执行脚本时要加上你的设备名,并退出脚本执行
if [ -b $1 ]
thenecho "$1 reader is identified."
elseecho "$1 is NOT identified."exit 0
fi
//上面同样是if判断语句
//判断设备是否是块文件设备
// /dev/sdb 属于SD卡设备属于块设备
//如果属于块设备 打印 <设备>被辨认出
//如果不是块设备 打印 <设备>没有被辨认####################################
#<verify device>BDEV_NAME=`basename $1`
BDEV_SIZE=`cat /sys/block/${BDEV_NAME}/size`
//定义两个变量 
//第一个是设备名称 也就是SD卡
//第二个是 设备扇区 块大小
if [ ${BDEV_SIZE} -le 0 ]; thenecho "Error: NO media found in card reader."exit 1
fi
//判断 设备块小于0 输出在设备里没有发现介质
if [ ${BDEV_SIZE} -gt 32000000 ]; thenecho "Error: Block device size (${BDEV_SIZE}) is too large"exit 1
fi
//判断设备块大于32000000,提示块设备存储块太大
####################################
# check filesE4412_UBOOT=../../u-boot.bin
MKBL2=../mkbl2
//定义两个变量
//第一个 生成的u-boot目录
//第二个 mkbl2文件的目录
if [ ! -f ${E4412_UBOOT} ]; thenecho "Error: u-boot.bin NOT found, please build it & try again."exit -1
fi
//判断u-boot.bin文件是否存在
//不存在 就提示文件不存在 重新编译建立
if [ ! -f ${MKBL2} ]; thenecho "Error: can not find host tool - mkbl2, stop."exit -1
fi
//判断mkbl2文件是否存在
//不存在 就提示文件不存在 
#<make bl2>
${MKBL2} ${E4412_UBOOT} bl2.bin 14336
//将u-boot.bin 转化为bl2.bin 具体怎样实现查看上一级目录的生成mkbl2的相关文件
####################################
# fusing imagessigned_bl1_position=1
bl2_position=17
uboot_position=49
tzsw_position=705
//定义扇区编号
#<BL1 fusing>
echo "---------------------------------------"
echo "BL1 fusing"
dd iflag=dsync oflag=dsync if=./E4412_N.bl1.bin of=$1 seek=$signed_bl1_position
//前两行输出提示信息
//第三行烧写指令dd  iflag=dsync oflag=dsync保持同步读写IO
//if输出到of这er
//seek偏移量 这里是1 空出SD卡上0扇区储存卡的分区配置等信息 
//BL1从第一扇区开始存储 BL1 8k字节,SD每个扇区512B 1-16扇区正好是8K 17扇区开始存储BL2
#<BL2 fusing>
echo "---------------------------------------"
echo "BL2 fusing"
dd iflag=dsync oflag=dsync if=./bl2.bin of=$1 seek=$bl2_position
//前两行输出提示信息
//dd解释同上  具体为什么这样可以参考exynos4412启动流程
#<u-boot fusing>
echo "---------------------------------------"
echo "u-boot fusing"
dd iflag=dsync oflag=dsync if=${E4412_UBOOT} of=$1 seek=$uboot_position
//前两行输出提示信息
//dd解释同上
#<TrustZone S/W fusing>
echo "---------------------------------------"
echo "TrustZone S/W fusing"
dd iflag=dsync oflag=dsync if=./E4412_tzsw.bin of=$1 seek=$tzsw_position
//前两行输出提示信息
//dd通上 E4412_tzsw.bin为厂家自带,从名字上看是关于trustzone的,不去理会
#<flush to disk>
sync
//更新到介质
####################################
#<Message Display>
echo "---------------------------------------"
echo "U-boot image is fused successfully."
echo "Eject SD card and insert it again."
//输出u-boot烧写成功信息

附:

   tiny4412 SD卡启动流程

 

基于以下环境的测试:

虚拟机:VMware12版本 CentOS7系统  arm-linux-gcc 4.5.1版本 SD卡闪迪8G SD卡                                                                                                   




























这篇关于关于tiny4412开发板SD卡烧写u-boot脚本sd_fusing.sh的解释的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/179068

相关文章

如何使用Spring boot的@Transactional进行事务管理

《如何使用Springboot的@Transactional进行事务管理》这篇文章介绍了SpringBoot中使用@Transactional注解进行声明式事务管理的详细信息,包括基本用法、核心配置... 目录一、前置条件二、基本用法1. 在方法上添加注解2. 在类上添加注解三、核心配置参数1. 传播行为(

Spring Boot Actuator使用说明

《SpringBootActuator使用说明》SpringBootActuator是一个用于监控和管理SpringBoot应用程序的强大工具,通过引入依赖并配置,可以启用默认的监控接口,... 目录项目里引入下面这个依赖使用场景总结说明:本文介绍Spring Boot Actuator的使用,关于Spri

10个Python自动化办公的脚本分享

《10个Python自动化办公的脚本分享》在日常办公中,我们常常会被繁琐、重复的任务占据大量时间,本文为大家分享了10个实用的Python自动化办公案例及源码,希望对大家有所帮助... 目录1. 批量处理 Excel 文件2. 自动发送邮件3. 批量重命名文件4. 数据清洗5. 生成 PPT6. 自动化测试

使用Java实现一个解析CURL脚本小工具

《使用Java实现一个解析CURL脚本小工具》文章介绍了如何使用Java实现一个解析CURL脚本的工具,该工具可以将CURL脚本中的Header解析为KVMap结构,获取URL路径、请求类型,解析UR... 目录使用示例实现原理具体实现CurlParserUtilCurlEntityICurlHandler

10个Python Excel自动化脚本分享

《10个PythonExcel自动化脚本分享》在数据处理和分析的过程中,Excel文件是我们日常工作中常见的格式,本文将分享10个实用的Excel自动化脚本,希望可以帮助大家更轻松地掌握这些技能... 目录1. Excel单元格批量填充2. 设置行高与列宽3. 根据条件删除行4. 创建新的Excel工作表5

Spring Boot 整合 ShedLock 处理定时任务重复执行的问题小结

《SpringBoot整合ShedLock处理定时任务重复执行的问题小结》ShedLock是解决分布式系统中定时任务重复执行问题的Java库,通过在数据库中加锁,确保只有一个节点在指定时间执行... 目录前言什么是 ShedLock?ShedLock 的工作原理:定时任务重复执行China编程的问题使用 Shed

Spring Boot统一异常拦截实践指南(最新推荐)

《SpringBoot统一异常拦截实践指南(最新推荐)》本文介绍了SpringBoot中统一异常处理的重要性及实现方案,包括使用`@ControllerAdvice`和`@ExceptionHand... 目录Spring Boot统一异常拦截实践指南一、为什么需要统一异常处理二、核心实现方案1. 基础组件

Linux中shell解析脚本的通配符、元字符、转义符说明

《Linux中shell解析脚本的通配符、元字符、转义符说明》:本文主要介绍shell通配符、元字符、转义符以及shell解析脚本的过程,通配符用于路径扩展,元字符用于多命令分割,转义符用于将特殊... 目录一、linux shell通配符(wildcard)二、shell元字符(特殊字符 Meta)三、s

Python脚本实现自动删除C盘临时文件夹

《Python脚本实现自动删除C盘临时文件夹》在日常使用电脑的过程中,临时文件夹往往会积累大量的无用数据,占用宝贵的磁盘空间,下面我们就来看看Python如何通过脚本实现自动删除C盘临时文件夹吧... 目录一、准备工作二、python脚本编写三、脚本解析四、运行脚本五、案例演示六、注意事项七、总结在日常使用

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma