日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

bbb 烧写脚本分析

發(fā)布時(shí)間:2023/12/10 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bbb 烧写脚本分析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。