ビルドや、リリース時の記事作成で使用するツール類を置いています。
1: #!/bin/bash 2: 3: block_size=4096 4: 5: # make control block 6: echo $# | awk '{printf "%c", $1}' 7: dd if=/dev/zero count=$((block_size - 1)) bs=1 8: 9: # make data block(s) 10: while [ -n "$1" ]; do 11: # make header 12: name=$(basename $1) 13: echo -n $name 14: dd if=/dev/zero count=$((32 - ${#name})) bs=1 15: header_size=48 16: data_size=$(stat -c '%s' $1) 17: block_num=$((((header_size + data_size) / block_size) + 1)) 18: echo $block_num | awk '{printf "%c", $1}' 19: dd if=/dev/zero count=15 bs=1 20: 21: # make data 22: dd if=$1 23: data_size_1st_block=$((block_size - header_size)) 24: if [ $data_size -le $data_size_1st_block ]; then 25: dd if=/dev/zero count=$((data_size_1st_block - data_size)) bs=1 26: else 27: cnt=$((block_size - ((header_size + data_size) % block_size))) 28: dd if=/dev/zero count=$cnt bs=1 29: fi 30: 31: shift 32: done
ユーザーランドのファイルシステムを生成するシェルスクリプトです。ファイルシステム(kernel/fs.c)で説明した通りにファイルシステムを生成します。
1: #!/bin/sh 2: 3: work_dir=cap_$(date '+%Y%m%d%H%M%S') 4: 5: mkdir ${work_dir} 6: 7: qemu-system-i386 -fda fd.img & 8: 9: sleep 1 10: echo "convert -loop 0 -delay 15 ${work_dir}/cap_*.gif anime.gif" 11: 12: window_id=$(xwininfo -name QEMU | grep 'Window id' | cut -d' ' -f4) 13: 14: i=0 15: while :; do 16: import -window ${window_id} "${work_dir}/$(printf 'cap_%04d.gif' $i)" 17: i=$((i + 1)) 18: sleep 0.1 19: done
ブログ記事に掲載しているGIFアニメを生成するシェルスクリプトです。
cap.shを実行するとQEMUが立ち上がり、cap_年月日時分秒という名前のディレクトリへ0.1秒毎にスクリーンショットを保存していきます。スクリプトの実行終了後、cap.sh実行時に表示されるconvertコマンドを実行することでGIFアニメ"anime.gif"を生成します。