bbb 燒寫指令碼分析

2021-06-28 13:00:52 字數 2111 閱讀 6189

ftp伺服器位址,即ccs uniflash的位址

server_ip="192.168.2.1"

boot_partition="boot_partition.tar.gz"

rootfs_partition="rootfs_partition.tar.gz"

要燒寫的emmc的裝置名稱

drive="/dev/mmcblk0"

time tftp -b 4096 -g -r $ $ &

boot_pid=$!

time tftp -b 4096 -g -r $ $ &

rootfs_pid=$!

清除分割槽

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

sync

sync

獲得emmc的大小,以位元組為單位

size=`fdisk -l $drive | grep disk | awk ''`

計算柱面數,一般來說,linux系統都是將磁碟空間的計算以這樣的公式

磁頭數*每磁軌的扇區數*每扇區的位元組數*柱面數 = 磁碟總大小

而且一般計算的時候,磁頭數=255,每磁軌的扇區數=63,每扇區的位元組數=512,然後用總大小來計算出「柱面數」,

然後分割槽的時候,就以柱面的數量來劃分區

因此,下面就是來計算柱面數

cylinders=`echo $size/255/63/512 | bc`

這個函式的作用就是解除安裝已掛載的分割槽,並用dd命令來清除分割槽

check_mounted()p /proc/mounts | awk '')

if grep -q $p /proc/mounts; then

echo "found mounted partition(s) on " $": " $is_mounted

如果有分割槽存在,則需要umount所有分割槽

umount $is_mounted

counter=1

for i in $is_mounted; do \

echo "4k erase on $p$"; 

然後,依次用dd命令來清除分割槽

dd if=/dev/zero of=$p$ 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" $p1

mkfs.ext3 -l "rootfs" $p2

掛載剛剛分的兩個區

mkdir tmp_boot

mkdir tmp_rootfs

mount -t vfat $p1 tmp_boot

mount -t ext3 $p2 tmp_rootfs

time tar -xf $ -c tmp_boot

sync

sync

umount $p1

time tar -xf $ -c tmp_rootfs

sync

sync

umount $p2

總結:

通過分析這個燒寫指令碼,可以看到,bbb的燒寫就是對以下幾步

1. 首先要先啟動乙個linux,同過ftp或sd卡

2. 通過ftp或sd卡得到需要燒寫的檔案

3. 對emmc分割槽

4. mount emmc分割槽,並解壓燒些檔案到emmc的分割槽即可

燒寫SD卡指令碼

bin bash n 指令碼引數n 所有引數,將所有引數視為乙個字串 所有引數,不含 0,將所有引數視為單個字串 引數個數 shift 引數左移,自動 1 test expression 或者用 expression 代替 判斷條件 z 0 n 0 str 字串判斷 eq le ge lt gt n...

Repo指令碼分析

repo指令碼是作為整個repo工具的入口,只要負責repo環境的初始化和轉殖repo庫。repo有兩處if name main 位於開始部分主要是給shell執行用的,位於末尾的部分是給python執行用的。來看看repo引導指令碼的前幾行。1 bin sh 2 3 repo url git 4 ...

鏈結指令碼分析

鏈結三要素 鏈結順序,鏈結位址,載入位址 1.連線順序的問題 倘若有鏈結指令碼,則會按照鏈結指令碼的規則進行鏈結。例如 sections second x30000000 at 4096 這個規則中定義了兩個大段,first和second。first的鏈結順序為head.o init.o nand....