bbb 烧写脚本分析

ftp服务器地址,即CCS Uniflash的地址

SERVER_IP="192.168.2.1"


MLO u-boot.img uImage压缩文件的名称,即ftp服务器下载目录里的文件名

BOOT_PARTITION="boot_partition.tar.gz"


文件系统的名称,即ftp服务器下载目录里的文件名

ROOTFS_PARTITION="rootfs_partition.tar.gz"


要烧写的emmc的设备名称

DRIVE="/dev/mmcblk0"


通过tftp下载上面两个文件,这里其实可以不用从ftp上下载,直接拷贝到sd卡也行

time tftp -b 4096 -g -r ${BOOT_PARTITION} ${SERVER_IP} &
boot_pid=$!
time tftp -b 4096 -g -r ${ROOTFS_PARTITION} ${SERVER_IP} &
rootfs_pid=$!


清除分区

dd if=/dev/zero of=$DRIVE bs=4k count=1
sync
sync


获得emmc的大小,以字节为单位

SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`


计算柱面数,一般来说,linux系统都是将磁盘空间的计算以这样的公式

磁头数*每磁道的扇区数*每扇区的字节数*柱面数 = 磁盘总大小

而且一般计算的时候,磁头数=255,每磁道的扇区数=63,每扇区的字节数=512,然后用总大小来计算出“柱面数”,

然后分区的时候,就以柱面的数量来划分区

因此,下面就是来计算柱面数

CYLINDERS=`echo $SIZE/255/63/512 | bc`


这个函数的作用就是卸载已挂载的分区,并用dd命令来清除分区

check_mounted(){

  从proc文件系统中得到已经挂载的分区列表
  is_mounted=$(grep ${DRIVE}p /proc/mounts | awk '{print $2}')


  if grep -q ${DRIVE}p /proc/mounts; then
      echo "Found mounted partition(s) on " ${DRIVE}": " $is_mounted

       如果有分区存在,则需要umount所有分区
      umount $is_mounted
      counter=1
      for i in $is_mounted; do \
          echo "4k erase on ${DRIVE}p${counter}"; 

 然后,依次用dd命令来清除分区
          dd if=/dev/zero of=${DRIVE}p${counter} bs=4k count=1;
          counter=$((counter+1));
      done
  else
      echo "No partition found. Continuing."
  fi
}


check_mounted;


用上面得到的柱面数来分区

echo "Partitioning the eMMC..."

用sfdisk指定emmc,磁头数=255,每磁道的扇区数=63,柱面数=上面计算的结果
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF

这里分了两个区,每个区4个参数,第一个参数是起始柱面号,第二个参数是柱面数,因此下面的参数实际

就是,第一个区的柱面数0-9,第二个区的柱面数10-MAX
,9,0x0C,*        
10,,,-
EOF


格式化刚刚分的两个区

mkfs.vfat -F 32 -n "boot" ${DRIVE}p1

mkfs.ext3 -L "rootfs" ${DRIVE}p2


挂载刚刚分的两个区

mkdir tmp_boot
mkdir tmp_rootfs
mount -t vfat ${DRIVE}p1 tmp_boot
mount -t ext3 ${DRIVE}p2 tmp_rootfs


分别解压用ftp下载的两个文件到那两个分区即可

time tar -xf ${BOOT_PARTITION} -C tmp_boot
sync
sync
umount ${DRIVE}p1

time tar -xf ${ROOTFS_PARTITION} -C tmp_rootfs
sync
sync
umount ${DRIVE}p2


总结:

通过分析这个烧写脚本,可以看到,bbb的烧写就是对以下几步

1. 首先要先启动一个linux,同过ftp或sd卡

2. 通过ftp或sd卡得到需要烧写的文件

3. 对emmc分区

4. mount emmc分区,并解压烧些文件到emmc的分区即可

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

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

相关文章

mysql 增量备份脚本_MySQL自动化(全量+增量)备份脚本

一、MySQL的日常备份方案&#xff1a;全备增量备份&#xff1a;1、周日凌晨三点进行全备&#xff1b;2、周一到周日增量备份。不是往常的周日全备份&#xff0c;周一到周六增量备份&#xff0c;这样如果周日数据库在完全备份前出问题&#xff0c;恢复完成后&#xff0c;会少周日…

JS代码大全

一、验证类 1、数字验证内 1.1 整数 /^(-|\)?\d$/.test(str) 1.2 大于0的整数 &#xff08;用于传来的ID的验证) /^\d$/.test(str) 1.3 负整数的验证 /^-\d$/.test(str) 2、时间类 2.1 短时间&#xff0c;形如 (13:04:06) function isTime(str) …

Linux编程里getopt_long_only函数用法详解

在程序中难免需要使用命令行选项&#xff0c;可以选择自己解析命令行选项&#xff0c;但是有现成的&#xff0c;何必再造轮子。下面介绍使用getopt_long_only和getopt_long( 两者用法差不多 )解析命令行选项。 程序中主要使用&#xff1a; 短选项长选项是否需要参数-n--userna…

mybatis的mysql参数传递参数_mybatis 传递参数的方法总结

有三种mybatis传递参数的方式:第一种mybatis传入参数是有序号的,可以直接用序号取得参数User selectUser(Stringname,String area);可以在xml配置文件中写select * from user_user_t where user_name #{0} and user_area#{1}#{0} 表示传递过来的第一参数 . 也就是说#{N} 就可以…

C# 数据的加密解密

/// <summary> /// 加密数据 /// </summary> /// <param name"Text"></param> /// <param name"sKey"></param> /// <returns></returns> public static string Encrypt(string Text, string sKey){DESCr…

strdup函数的用法

函数名: strdup 功 能: 将串拷贝到新建的位置处 用 法: char *strdup(char *str)&#xff1b; 这个函数在linux的man手册里解释为&#xff1a; The strdup() function returns a pointer toa new string which is a duplicate of the string s. Memory for thenew string is …

eclipse中查看mysql_eclipse中怎样查看sqlite数据库的表

string createtable(classclazz , string tablename){//实例化一个容器&#xff0c;用来拼接sql语句stringbuffer sbuffer new stringbuffer();//sql语句&#xff0c;第一个字段为_id 主键自增&#xff0c;这是通用的&#xff0c;所以直接写死sbuffer.append("create tab…

Java 泛型(一)

1&#xff0c;泛型的声明 a&#xff09;在方法中的声明&#xff1a; 现在访问修饰符后&#xff0c;返回值类型前加上<T>&#xff0c;其它字母亦可。 b&#xff09;在类中的声明&#xff1a; 在类名后加<T> 练习&#xff1a;用泛型写一个方法&#xff0c;将一个数组…

敏捷开发之Scrum扫盲篇

现在敏捷开发是越来越火了&#xff0c;人人都在谈敏捷&#xff0c;人人都在学习Scrum和XP... 为了不落后他人&#xff0c;于是我也开始学习Scrum&#xff0c;今天主要是对我最近阅读的相关资料&#xff0c;根据自己的理解&#xff0c;用自己的话来讲述Scrum中的各个环节&#x…

macos xampp mysql 命令_MAC系统XAMPP 中 MySQL命令行client配置使用

在PHP的学习过程中。MySQL预计是必定会接触的。MySQL的管理相信大家也会使用phpmyadmin&#xff1a;好吧。phpmyadmin的确是MySQL管理的神器&#xff0c;你想要的。他好多都有&#xff0c;在开发的过程中。对于后台数据库的设计架构帮助真的非常大。可是。在这篇文章的主角确不…

]Kinect for Windows SDK开发入门(六):骨骼追踪基础 上

原文来自&#xff1a;http://www.cnblogs.com/yangecnu/archive/2012/04/06/KinectSDK_Skeleton_Tracking_Part1.html Kinect产生的景深数据作用有限&#xff0c;要利用Kinect创建真正意义上交互&#xff0c;有趣和难忘的应用&#xff0c;还需要除了深度数据之外的其他数据。这…

signal(SIGPIPE, SIG_IGN);

TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制…

mysql与groupconcat相反的_MySQL中GROUP_CONCAT的反义词是什么?

我认为这是你需要的(存储过程)&#xff1a;Mysql split column string into rowsDELIMITER $$DROP PROCEDURE IF EXISTS explode_table $$CREATE PROCEDURE explode_table(bound VARCHAR(255))BEGINDECLARE id INT DEFAULT 0;DECLARE value TEXT;DECLARE occurance INT DEFAULT…

leetcode: Roman to Integer

http://oj.leetcode.com/problems/roman-to-integer/ Given a roman numeral, convert it to an integer.Input is guaranteed to be within the range from 1 to 3999. 思路&#xff1a; 根据个十百千位分别作为一个状态机处理就可以了。 1 class Solution {2 public:3 in…

mysql 线程池 下载_java线程池实现批量下载文件

本文实例为大家分享了java线程池实现批量下载文件的具体代码&#xff0c;供大家参考&#xff0c;具体内容如下1 创建线程池package com.cheng.webb.thread;import java.util.concurrent.ArrayBlockingQueue;import java.util.concurrent.ExecutorService;import java.util.conc…

sqlite3 编译问题

sqlite3用到libpthread和libdl因此要链接这两个库 假如先把sqlite3.c编译成sqlite3.o或者libsqlite3.a g -lm -lpthread -ldl -o 目标 main.o sqlite3.o 或者 g -lm -lpthread -ldl -lsqlite3 -o 目标 main.o sqlite3.o 都会报链接错误&#xff0c;找不到pthread和dl里面的…

从零开始学习Hadoop--第2章 第一个MapReduce程序

1.Hadoop从头说 1.1 Google是一家做搜索的公司 做搜索是技术难度很高的活。首先要存储很多的数据&#xff0c;要把全球的大部分网页都抓下来&#xff0c;可想而知存储量有多大。然后&#xff0c;要能快速检索网页&#xff0c;用户输入几个关键词找资料&#xff0c;越快越好&…

mysql可以使用sqlplus么_使用sqlplus

1. 执行一个SQL脚本文件SQL>start file_nameSQL> file_name可以将多条sql语句保存在一个文本文件中&#xff0c;这样当要执行这个文件中的所有的sql语句时&#xff0c;用上面的任一命令即可.等于start命令&#xff0c;用来运行一个sql脚本文件命令调用当前目录下的&#…

CPU8085 8086名字的由来

为什么CPU叫8085呢&#xff1f; 8085这个名字的由来还是很有逻辑的&#xff1a;The naming of microprocessor indicates historical facts blended with technology improvements.1)The microprocessor came in the late 70s(1976).This was close to 80.so from here 1ST …

Daily Scrum 10.29

时间越来越紧迫&#xff0c;不过大家逐渐进入了状态。虽然在有些问题上大家意见有些不同&#xff0c;但是最终还都是为着团队着想&#xff0c;很好地达成一致了。 MemberToday’s Task Tomorrow’s Task李孟 task615 测试(活动) task571 完成daily scrum 10.29撰文 task615 测试…