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 |
------------- |
------------- |
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: */ |
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); |
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 |
--------------------- |
--------------------- |
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 |
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 |