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的分區即可
總結
以上是生活随笔為你收集整理的bbb 烧写脚本分析的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 开通云闪付有什么好处和缺点,云闪付好用吗
- 下一篇: .mod.c 是什么文件