Top

第5章 ツール類

ビルドや、リリース時の記事作成で使用するツール類を置いています。

5.1 ファイルシステム作成

tools/make_os5_fs.sh

リスト5.1: tools/make_os5_fs.sh

 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)で説明した通りにファイルシステムを生成します。

5.2 ブログ記事作成支援

tools/cap.sh

リスト5.2: tools/cap.sh

 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"を生成します。


Top