

busyboxに自作のコマンドを追加したいです。

下記のサイトを参考にしながら進めています。

[BusyBoxを拡張してアプレットを追加する方法【前編】](https://monoist.itmedia.co.jp/mn/articles/0902/03/news118.html)

記事ではversion 1.9.0なのですが、僕の環境ではうまくできなかったのでversion 1.27.0のbusyboxで動かしています。

問題点としては、

> （b）「include/applets.h」を修正し、＜アプレット名＞_main関数を登録する

この部分が僕のbusyboxでは存在しません。その代わりIF_から始まるコードが存在します。

[code]

    IF_MICROCOM(APPLET(microcom, BB_DIR_USR_BIN, BB_SUID_DROP))
    IF_MT(APPLET(mt, BB_DIR_BIN, BB_SUID_DROP))
    IF_NANDWRITE(APPLET(nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP))
    IF_NANDDUMP(APPLET_ODDNAME(nanddump, nandwrite, BB_DIR_USR_SBIN, BB_SUID_DROP, $
    IF_PARTPROBE(APPLET(partprobe, BB_DIR_USR_SBIN, BB_SUID_DROP))
    IF_RAIDAUTORUN(APPLET(raidautorun, BB_DIR_SBIN, BB_SUID_DROP))
    IF_READAHEAD(APPLET(readahead, BB_DIR_USR_SBIN, BB_SUID_DROP))
    
[/code]

なので記事の方では

[code]

    USE_MTD_DEBUG(APPLET(mtd_debug, _BB_DIR_SBIN, _BB_SUID_NEVER))
    
[/code]

となっているものを

[code]

    IF_MTD_DEBUG(APPLET(mtd_debug, _BB_DIR_SBIN, _BB_SUID_DROP))
    
[/code]

と変えて追加、実行しましたがアプレットが見つからないといわれます。

[code]

    ./busybox mtd_debug
    mtd_debug: applet not found
    
[/code]

さらに、先ほど変更したはずのinclude/applets.hを見てみると変更が反映されていません。  
実行前は確かに変更が反映されていましたが、makeの後make installをすると

[code]

    IF_MTD_DEBUG(APPLET(mtd_debug, _BB_DIR_SBIN, _BB_SUID_DROP))
    
[/code]

がなくなっています。

どのようにすれば自作コマンドを追加できるのでしょうか？


CC BY-SA 4.0
2023-07-11T07:21:48.573
95560
2023-07-11T09:04:09.910
2023-07-11T09:04:09.910
3060
58699
question
linux command-line
busyboxにコマンドを追加したい


v1.36.1 で動作する最低限の例です。

`miscutils/hello.c`（追加するファイル）:

[code]

    /* vi: set sw=4 ts=4: */
    
    //config:config HELLO
    //config:   bool "hello (?? kb)"
    //config:   default y
    //config:   help
    //config:   print hello message.
    
    //applet:IF_HELLO(APPLET(hello, BB_DIR_USR_BIN, BB_SUID_DROP))
    
    //kbuild:lib-$(CONFIG_HELLO) += hello.o
    
    //usage:#define hello_trivial_usage NOUSAGE_STR
    //usage:#define hello_full_usage ""
    
    #include "libbb.h"
    
    int hello_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
    int hello_main(int argc UNUSED_PARAM, char **argv)
    {
        puts("hello world!");
        return EXIT_SUCCESS;
    }
    
[/code]

ビルド:

[code]

    make menuconfig
    make
    
[/code]

実行:

[code]

    $ ./busybox hello
    hello world!
    
[/code]

* * *

`include/applets.h` は冒頭に、

[code]

    /* DO NOT EDIT. This file is generated from applets.src.h */
    
[/code]

とある通り、`make menuconfig`
で生成されるものですので、直接編集することはありません。[FAQ](https://busybox.net/FAQ.html#adding)に従い既存のアプレットを参考にして、適切なコメント（`config:`
など）が含まれたソースコードを追加すればよいです。


CC BY-SA 4.0
2023-07-11T08:49:11.350
95562
2023-07-11T08:49:11.350
3054
95560
answer