bbb 烧写脚本分析
ftp服務(wù)器地址,即CCS Uniflash的地址
SERVER_IP="192.168.2.1"
MLO u-boot.img uImage壓縮文件的名稱,即ftp服務(wù)器下載目錄里的文件名
BOOT_PARTITION="boot_partition.tar.gz"
文件系統(tǒng)的名稱,即ftp服務(wù)器下載目錄里的文件名
ROOTFS_PARTITION="rootfs_partition.tar.gz"
要燒寫(xiě)的emmc的設(shè)備名稱
DRIVE="/dev/mmcblk0"
通過(guò)tftp下載上面兩個(gè)文件,這里其實(shí)可以不用從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=$!
清除分區(qū)
dd if=/dev/zero of=$DRIVE bs=4k count=1
sync
sync
獲得emmc的大小,以字節(jié)為單位
SIZE=`fdisk -l $DRIVE | grep Disk | awk '{print $5}'`
計(jì)算柱面數(shù),一般來(lái)說(shuō),linux系統(tǒng)都是將磁盤(pán)空間的計(jì)算以這樣的公式
磁頭數(shù)*每磁道的扇區(qū)數(shù)*每扇區(qū)的字節(jié)數(shù)*柱面數(shù) = 磁盤(pán)總大小
而且一般計(jì)算的時(shí)候,磁頭數(shù)=255,每磁道的扇區(qū)數(shù)=63,每扇區(qū)的字節(jié)數(shù)=512,然后用總大小來(lái)計(jì)算出“柱面數(shù)”,
然后分區(qū)的時(shí)候,就以柱面的數(shù)量來(lái)劃分區(qū)
因此,下面就是來(lái)計(jì)算柱面數(shù)
CYLINDERS=`echo $SIZE/255/63/512 | bc`
這個(gè)函數(shù)的作用就是卸載已掛載的分區(qū),并用dd命令來(lái)清除分區(qū)
check_mounted(){
? 從proc文件系統(tǒng)中得到已經(jīng)掛載的分區(qū)列表
? 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
? ? ? ?如果有分區(qū)存在,則需要umount所有分區(qū)
? ? ? umount $is_mounted
? ? ? counter=1
? ? ? for i in $is_mounted; do \
? ? ? ? ? echo "4k erase on ${DRIVE}p${counter}";?
?然后,依次用dd命令來(lái)清除分區(qū)
? ? ? ? ? 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;
用上面得到的柱面數(shù)來(lái)分區(qū)
echo "Partitioning the eMMC..."
用sfdisk指定emmc,磁頭數(shù)=255,每磁道的扇區(qū)數(shù)=63,柱面數(shù)=上面計(jì)算的結(jié)果
sfdisk -D -H 255 -S 63 -C $CYLINDERS $DRIVE << EOF
這里分了兩個(gè)區(qū),每個(gè)區(qū)4個(gè)參數(shù),第一個(gè)參數(shù)是起始柱面號(hào),第二個(gè)參數(shù)是柱面數(shù),因此下面的參數(shù)實(shí)際
就是,第一個(gè)區(qū)的柱面數(shù)0-9,第二個(gè)區(qū)的柱面數(shù)10-MAX
,9,0x0C,* ? ? ? ?
10,,,-
EOF
格式化剛剛分的兩個(gè)區(qū)
mkfs.vfat -F 32 -n "boot" ${DRIVE}p1
mkfs.ext3 -L "rootfs" ${DRIVE}p2
掛載剛剛分的兩個(gè)區(qū)
mkdir tmp_boot
mkdir tmp_rootfs
mount -t vfat ${DRIVE}p1 tmp_boot
mount -t ext3 ${DRIVE}p2 tmp_rootfs
分別解壓用ftp下載的兩個(gè)文件到那兩個(gè)分區(qū)即可
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
總結(jié):
通過(guò)分析這個(gè)燒寫(xiě)腳本,可以看到,bbb的燒寫(xiě)就是對(duì)以下幾步
1. 首先要先啟動(dòng)一個(gè)linux,同過(guò)ftp或sd卡
2. 通過(guò)ftp或sd卡得到需要燒寫(xiě)的文件
3. 對(duì)emmc分區(qū)
4. mount emmc分區(qū),并解壓燒些文件到emmc的分區(qū)即可
總結(jié)
以上是生活随笔為你收集整理的bbb 烧写脚本分析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 开通云闪付有什么好处和缺点,云闪付好用吗
- 下一篇: .mod.c 是什么文件