Magellan Linux

Annotation of /trunk/mkinitrd-magellan/busybox/docs/new-applet-HOWTO.txt

Parent Directory Parent Directory | Revision Log Revision Log


Revision 532 - (hide annotations) (download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 3983 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd

1 niro 532 How to Add a New Applet to BusyBox
2     ==================================
3    
4     This document details the steps you must take to add a new applet to BusyBox.
5    
6     Credits:
7     Matt Kraai - initial writeup
8     Mark Whitley - the remix
9     Thomas Lundquist - Added stuff for the new directory layout.
10    
11     Initial Write
12     -------------
13    
14     First, write your applet. Be sure to include copyright information at the top,
15     such as who you stole the code from and so forth. Also include the mini-GPL
16     boilerplate. Be sure to name the main function <applet>_main instead of main.
17     And be sure to put it in <applet>.c. Usage does not have to be taken care of by
18     your applet.
19     Make sure to #include "busybox.h" as the first include file in your applet so
20     the bb_config.h and appropriate platform specific files are included properly.
21    
22     For a new applet mu, here is the code that would go in mu.c:
23    
24     ----begin example code------
25    
26     /* vi: set sw=4 ts=4: */
27     /*
28     * Mini mu implementation for busybox
29     *
30     * Copyright (C) [YEAR] by [YOUR NAME] <YOUR EMAIL>
31     *
32     * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
33     */
34    
35     #include "busybox.h"
36     #include <other.h>
37    
38     int mu_main(int argc, char **argv)
39     {
40     int fd;
41     char mu;
42    
43     fd = xopen("/dev/random", O_RDONLY);
44    
45     if ((n = safe_read(fd, &mu, 1)) < 1)
46     bb_perror_msg_and_die("/dev/random");
47    
48     return mu;
49     }
50    
51     ----end example code------
52    
53    
54     Coding Style
55     ------------
56    
57     Before you submit your applet for inclusion in BusyBox, (or better yet, before
58     you _write_ your applet) please read through the style guide in the docs
59     directory and make your program compliant.
60    
61    
62     Some Words on libbb
63     -------------------
64    
65     As you are writing your applet, please be aware of the body of pre-existing
66     useful functions in libbb. Use these instead of reinventing the wheel.
67    
68     Additionally, if you have any useful, general-purpose functions in your
69     applet that could be useful in other applets, consider putting them in libbb.
70    
71    
72     Placement / Directory
73     ---------------------
74    
75     Find the appropriate directory for your new applet.
76    
77     Make sure you find the appropriate places in the files, the applets are
78     sorted alphabetically.
79    
80     Add the applet to Makefile.in in the chosen directory:
81    
82     obj-$(CONFIG_MU) += mu.o
83    
84     Add the applet to Config.in in the chosen directory:
85    
86     config CONFIG_MU
87     bool "MU"
88     default n
89     help
90     Returns an indeterminate value.
91    
92    
93     Usage String(s)
94     ---------------
95    
96     Next, add usage information for you applet to include/usage.h.
97     This should look like the following:
98    
99     #define mu_trivial_usage \
100     "-[abcde] FILES"
101     #define mu_full_usage \
102     "Returns an indeterminate value.\n\n" \
103     "Options:\n" \
104     "\t-a\t\tfirst function\n" \
105     "\t-b\t\tsecond function\n" \
106     ...
107    
108     If your program supports flags, the flags should be mentioned on the first
109     line (-[abcde]) and a detailed description of each flag should go in the
110     mu_full_usage section, one flag per line. (Numerous examples of this
111     currently exist in usage.h.)
112    
113    
114     Header Files
115     ------------
116    
117     Next, add an entry to include/applets.h. Be *sure* to keep the list
118     in alphabetical order, or else it will break the binary-search lookup
119     algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily:
120    
121     /* all programs above here are alphabetically "less than" 'mu' */
122     #ifdef CONFIG_MU
123     APPLET("mu", mu_main, _BB_DIR_USR_BIN, mu_usage)
124     #endif
125     /* all programs below here are alphabetically "greater than" 'mu' */
126    
127    
128     Documentation
129     -------------
130    
131     If you're feeling especially nice, you should also document your applet in the
132     docs directory (but nobody ever does that).
133    
134     Adding some text to docs/Configure.help is a nice start.
135    
136    
137     The Grand Announcement
138     ----------------------
139    
140     Then create a diff -urN of the files you added and/or modified. Typically:
141     <appletdir>/<applet>.c
142     include/usage.c
143     include/applets.h
144     <appletdir>/Makefile.in
145     <appletdir>/config.in
146     and send it to the mailing list:
147     busybox@busybox.net
148     http://busybox.net/mailman/listinfo/busybox
149    
150     Sending patches as attachments is preferred, but not required.