mkdosfsコマンドの追加
busyboxにはmkdosfsコマンドがなかったのでとってきて追加する。
miscutils/mkdosfs.c
いいディレクトリがうかばなかったのでmiscutilsに入れることにする。
dosfstools-2.11/mkdosfs/mkdosfs.cをbusybox-1.3.2/miscutilsにコピー
以下を追加。下の2行はdosfstools-2.11/version.hに書いてあったもの。
#include "busybox.h" #define VERSION "2.11" #define VERSION_DATE "12 Mar 2005"
#include "../version.h"をコメントアウト
usage()の中身をコメントアウト
main()をmkdosfs_main()に変更
miscutils/Kbuild
ドキュメントではMakefile.inと書いてあるが内容的にこのファイルのはず。以下の内容を挿入。
lib-$(CONFIG_MKDOSFS) += mkdosfs.o
miscutils/Config.in
以下を挿入。helpの文章が手抜きだ。
config MKDOSFS bool "mkdosfs" default n help Make DOS Filesystem.
include/usage.h
以下を挿入。これはmkdosfs.cでコメントアウトしたusage()のテキストを使い回し。
#define mkdosfs_trivial_usage \ "[-A] [-c] [-C] [-v] [-I] [-l bad-block-file] [-b backup-boot-sector]\n" \ "[-m boot-msg-file] [-n volume-name] [-i volume-id]\n" \ "[-s sectors-per-cluster] [-S logical-sector-size] [-f number-of-FATs]\n" \ "[-h hidden-sectors] [-F fat-size] [-r root-dir-entries] [-R reserved-sectors]\n" \ "/dev/name [blocks]\n" #define mkdosfs_full_usage \ ""
include/applets.h
以下を挿入
USE_MKDOSFS(APPLET(mkdosfs, _BB_DIR_SBIN, _BB_SUID_NEVER))
デバッグ
これでmake menuconfigを実行するとmkdofsがメニューに加わるのでyで追加してmake
コンパイルエラーが出たので以下のように対処
miscutils/mkdosfs.c:112:1: error: "TRUE" redefined miscutils/mkdosfs.c:113:1: error: "FALSE" redefined
busybox側のlibbb.hでも同じ値で#defineしているのでコメントアウト
miscutils/mkdosfs.c: In function ‘check_mount’: miscutils/mkdosfs.c:582: warning: declaration of ‘device_name’ shadows a global declaration miscutils/mkdosfs.c:293: warning: shadowed declaration is here
check_mount()内のdevice_nameはそのままにして、それ以外をmkdosfs_device_nameに置換
miscutils/mkdosfs.c: In function ‘setup_tables’: miscutils/mkdosfs.c:805: warning: declaration of ‘ctime’ shadows a global declaration /usr/include/time.h:254: warning: shadowed declaration is here
構造体のメンバのctimeを除いてすべてmkdosfs_ctimeに置換
miscutils/mkdosfs.c:1430: warning: ‘cblocks’ may be used uninitialized in this function
unsigned long long cblocks; の後に = 0; を追記
これでコンパイルが通った。