Beaglebone black eMMC烧写脚本debrick.s分析

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的分区即可

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值