Magellan Linux

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

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 532 by niro, Sat Sep 1 22:45:15 2007 UTC revision 816 by niro, Fri Apr 24 18:33:46 2009 UTC
# Line 6  This document details the steps you must Line 6  This document details the steps you must
6  Credits:  Credits:
7  Matt Kraai - initial writeup  Matt Kraai - initial writeup
8  Mark Whitley - the remix  Mark Whitley - the remix
9  Thomas Lundquist - Added stuff for the new directory layout.  Thomas Lundquist - Trying to keep it updated.
10    
11    When doing this you should consider using the latest svn trunk.
12    This is a good thing if you plan to getting it commited into mainline.
13    
14  Initial Write  Initial Write
15  -------------  -------------
# Line 16  such as who you stole the code from and Line 19  such as who you stole the code from and
19  boilerplate. Be sure to name the main function <applet>_main instead of main.  boilerplate. Be sure to name the main function <applet>_main instead of main.
20  And be sure to put it in <applet>.c. Usage does not have to be taken care of by  And be sure to put it in <applet>.c. Usage does not have to be taken care of by
21  your applet.  your applet.
22  Make sure to #include "busybox.h" as the first include file in your applet so  Make sure to #include "libbb.h" as the first include file in your applet so
23  the bb_config.h and appropriate platform specific files are included properly.  the bb_config.h and appropriate platform specific files are included properly.
24    
25  For a new applet mu, here is the code that would go in mu.c:  For a new applet mu, here is the code that would go in mu.c:
26    
27    (busybox.h already includes most usual header files. You do not need
28    #include <stdio.h> etc...)
29    
30    
31  ----begin example code------  ----begin example code------
32    
33  /* vi: set sw=4 ts=4: */  /* vi: set sw=4 ts=4: */
# Line 32  For a new applet mu, here is the code th Line 39  For a new applet mu, here is the code th
39   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
40   */   */
41    
42  #include "busybox.h"  #include "libbb.h"
43  #include <other.h>  #include "other.h"
44    
45    int mu_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
46  int mu_main(int argc, char **argv)  int mu_main(int argc, char **argv)
47  {  {
48   int fd;   int fd;
49     ssize_t n;
50   char mu;   char mu;
51    
52   fd = xopen("/dev/random", O_RDONLY);   fd = xopen("/dev/random", O_RDONLY);
# Line 68  useful functions in libbb. Use these ins Line 77  useful functions in libbb. Use these ins
77  Additionally, if you have any useful, general-purpose functions in your  Additionally, if you have any useful, general-purpose functions in your
78  applet that could be useful in other applets, consider putting them in libbb.  applet that could be useful in other applets, consider putting them in libbb.
79    
80    And it may be possible that some of the other applets uses functions you
81    could use. If so, you have to rip the function out of the applet and make
82    a libbb function out of it.
83    
84    Adding a libbb function:
85    ------------------------
86    
87    Make a new file named <function_name>.c
88    
89    ----start example code------
90    
91    #include "libbb.h"
92    #include "other.h"
93    
94    int function(char *a)
95    {
96     return *a;
97    }
98    
99    ----end example code------
100    
101    Add <function_name>.o in the right alphabetically sorted place
102    in libbb/Kbuild. You should look at the conditional part of
103    libbb/Kbuild aswell.
104    
105    You should also try to find a suitable place in include/libbb.h for
106    the function declaration. If not, add it somewhere anyway, with or without
107    ifdefs to include or not.
108    
109    You can look at libbb/Config.in and try to find out if the function is
110    tuneable and add it there if it is.
111    
112    
113  Placement / Directory  Placement / Directory
114  ---------------------  ---------------------
# Line 77  Find the appropriate directory for your Line 118  Find the appropriate directory for your
118  Make sure you find the appropriate places in the files, the applets are  Make sure you find the appropriate places in the files, the applets are
119  sorted alphabetically.  sorted alphabetically.
120    
121  Add the applet to Makefile.in in the chosen directory:  Add the applet to Kbuild in the chosen directory:
122    
123  obj-$(CONFIG_MU)               += mu.o  lib-$(CONFIG_MU)               += mu.o
124    
125  Add the applet to Config.in in the chosen directory:  Add the applet to Config.in in the chosen directory:
126    
127  config CONFIG_MU  config MU
128   bool "MU"   bool "MU"
129   default n   default n
130   help   help
# Line 118  Next, add an entry to include/applets.h. Line 159  Next, add an entry to include/applets.h.
159  in alphabetical order, or else it will break the binary-search lookup  in alphabetical order, or else it will break the binary-search lookup
160  algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily:  algorithm in busybox.c and the Gods of BusyBox smite you. Yea, verily:
161    
162    Be sure to read the top of applets.h before adding your applet.
163    
164   /* all programs above here are alphabetically "less than" 'mu' */   /* all programs above here are alphabetically "less than" 'mu' */
165   #ifdef CONFIG_MU   USE_MU(APPLET(mu, _BB_DIR_USR_BIN, _BB_SUID_NEVER))
  APPLET("mu", mu_main, _BB_DIR_USR_BIN, mu_usage)  
  #endif  
166   /* all programs below here are alphabetically "greater than" 'mu' */   /* all programs below here are alphabetically "greater than" 'mu' */
167    
168    
 Documentation  
 -------------  
   
 If you're feeling especially nice, you should also document your applet in the  
 docs directory (but nobody ever does that).  
   
 Adding some text to docs/Configure.help is a nice start.  
   
   
169  The Grand Announcement  The Grand Announcement
170  ----------------------  ----------------------
171    
172  Then create a diff -urN of the files you added and/or modified. Typically:  Then create a diff by adding the new files with svn (remember your libbb files)
173   <appletdir>/<applet>.c   svn add <where you put it>/mu.c
174   include/usage.c  eventually also:
175   include/applets.h   svn add libbb/function.c
176   <appletdir>/Makefile.in  then
177   <appletdir>/config.in   svn diff
178  and send it to the mailing list:  and send it to the mailing list:
179   busybox@busybox.net   busybox@busybox.net
180   http://busybox.net/mailman/listinfo/busybox   http://busybox.net/mailman/listinfo/busybox

Legend:
Removed from v.532  
changed lines
  Added in v.816