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....