1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
|
# DO NOT EDIT. This file is generated from Config.src
#
# For a description of the syntax of this configuration file,
# see docs/Kconfig-language.txt.
#
comment "Library Tuning"
config BUSYBOX_FEATURE_USE_BSS_TAIL
bool "Use the end of BSS page"
default n
help
Attempt to reclaim a small unused part of BSS.
Executables have the following parts:
= read-only executable code and constants, also known as "text"
= read-write data
= non-initialized (zeroed on demand) data, also known as "bss"
At link time, "text" is padded to a full page. At runtime, all "text"
pages are mapped RO and executable.
"Data" starts on the next page boundary, but is not padded
to a full page at the end. "Bss" starts wherever "data" ends.
At runtime, "data" pages are mapped RW and they are file-backed
(this includes a small portion of "bss" which may live in the last
partial page of "data").
Pages which are fully in "bss" are mapped to anonymous memory.
"Bss" end is usually not page-aligned. There is an unused space
in the last page. Linker marks its start with the "_end" symbol.
This option will attempt to use that space for bb_common_bufsiz1[]
array. If it fits after _end, it will be used, and COMMON_BUFSIZE
will be enlarged from its guaranteed minimum size of 1 kbyte.
This may require recompilation a second time, since value of _end
is known only after final link.
If you are getting a build error like this:
appletlib.c:(.text.main+0xd): undefined reference to '_end'
disable this option.
config BUSYBOX_FLOAT_DURATION
bool "Enable fractional duration arguments"
default y
help
Allow sleep N.NNN, top -d N.NNN etc.
config BUSYBOX_FEATURE_RTMINMAX
bool "Support RTMIN[+n] and RTMAX[-n] signal names"
default y
help
Support RTMIN[+n] and RTMAX[-n] signal names
in kill, killall etc. This costs ~250 bytes.
config BUSYBOX_FEATURE_RTMINMAX_USE_LIBC_DEFINITIONS
bool "Use the definitions of SIGRTMIN/SIGRTMAX provided by libc"
default y
depends on BUSYBOX_FEATURE_RTMINMAX
help
Some C libraries reserve a few real-time signals for internal
use, and adjust the values of SIGRTMIN/SIGRTMAX seen by
applications accordingly. Saying yes here means that a signal
name RTMIN+n will be interpreted according to the libc definition
of SIGRTMIN, and not the raw definition provided by the kernel.
This behavior matches "kill -l RTMIN+n" from bash.
choice
prompt "Buffer allocation policy"
default BUSYBOX_FEATURE_BUFFERS_USE_MALLOC
help
There are 3 ways busybox can handle buffer allocations:
- Use malloc. This costs code size for the call to xmalloc.
- Put them on stack. For some very small machines with limited stack
space, this can be deadly. For most folks, this works just fine.
- Put them in BSS. This works beautifully for computers with a real
MMU (and OS support), but wastes runtime RAM for uCLinux. This
behavior was the only one available for versions 0.48 and earlier.
config BUSYBOX_FEATURE_BUFFERS_USE_MALLOC
bool "Allocate with Malloc"
config BUSYBOX_FEATURE_BUFFERS_GO_ON_STACK
bool "Allocate on the Stack"
config BUSYBOX_FEATURE_BUFFERS_GO_IN_BSS
bool "Allocate in the .bss section"
endchoice
config BUSYBOX_PASSWORD_MINLEN
int "Minimum password length"
default 6
range 5 32
help
Minimum allowable password length.
config BUSYBOX_MD5_SMALL
int "MD5: Trade bytes for speed (0:fast, 3:slow)"
default 1 # all "fast or small" options default to small
range 0 3
help
Trade binary size versus speed for the md5 algorithm.
Approximate values running uClibc and hashing
linux-2.4.4.tar.bz2 were:
value user times (sec) text size (386)
0 (fastest) 1.1 6144
1 1.4 5392
2 3.0 5088
3 (smallest) 5.1 4912
config BUSYBOX_SHA1_SMALL
int "SHA1: Trade bytes for speed (0:fast, 3:slow)"
default 3 # all "fast or small" options default to small
range 0 3
help
Trade binary size versus speed for the sha1 algorithm.
With FEATURE_COPYBUF_KB=64:
throughput MB/s size of sha1_process_block64
value 486 x86-64 486 x86-64
0 440 485 3481 3502
1 265 265 641 696
2,3 220 210 342 364
config BUSYBOX_SHA1_HWACCEL
bool "SHA1: Use hardware accelerated instructions if possible"
default y
help
On x86, this adds ~590 bytes of code. Throughput
is about twice as fast as fully-unrolled generic code.
config BUSYBOX_SHA256_HWACCEL
bool "SHA256: Use hardware accelerated instructions if possible"
default y
help
On x86, this adds ~1k bytes of code.
config BUSYBOX_SHA3_SMALL
int "SHA3: Trade bytes for speed (0:fast, 1:slow)"
default 1 # all "fast or small" options default to small
range 0 1
help
Trade binary size versus speed for the sha3 algorithm.
SHA3_SMALL=0 compared to SHA3_SMALL=1 (approximate):
64-bit x86: +270 bytes of code, 45% faster
32-bit x86: +450 bytes of code, 75% faster
config BUSYBOX_FEATURE_NON_POSIX_CP
bool "Non-POSIX, but safer, copying to special nodes"
default y
help
With this option, "cp file symlink" will delete symlink
and create a regular file. This does not conform to POSIX,
but prevents a symlink attack.
Similarly, "cp file device" will not send file's data
to the device. (To do that, use "cat file >device")
config BUSYBOX_FEATURE_VERBOSE_CP_MESSAGE
bool "Give more precise messages when copy fails (cp, mv etc)"
default n
help
Error messages with this feature enabled:
$ cp file /does_not_exist/file
cp: cannot create '/does_not_exist/file': Path does not exist
$ cp file /vmlinuz/file
cp: cannot stat '/vmlinuz/file': Path has non-directory component
If this feature is not enabled, they will be, respectively:
cp: cannot create '/does_not_exist/file': No such file or directory
cp: cannot stat '/vmlinuz/file': Not a directory
This will cost you ~60 bytes.
config BUSYBOX_FEATURE_USE_SENDFILE
bool "Use sendfile system call"
default y
help
When enabled, busybox will use the kernel sendfile() function
instead of read/write loops to copy data between file descriptors
(for example, cp command does this a lot).
If sendfile() doesn't work, copying code falls back to read/write
loop. sendfile() was originally implemented for faster I/O
from files to sockets, but since Linux 2.6.33 it was extended
to work for many more file types.
config BUSYBOX_FEATURE_COPYBUF_KB
int "Copy buffer size, in kilobytes"
range 1 1024
default 4
help
Size of buffer used by cp, mv, install, wget etc.
Buffers which are 4 kb or less will be allocated on stack.
Bigger buffers will be allocated with mmap, with fallback to 4 kb
stack buffer if mmap fails.
config BUSYBOX_MONOTONIC_SYSCALL
bool "Use clock_gettime(CLOCK_MONOTONIC) syscall"
default y
help
Use clock_gettime(CLOCK_MONOTONIC) syscall for measuring
time intervals (time, ping, traceroute etc need this).
Probably requires Linux 2.6+. If not selected, gettimeofday
will be used instead (which gives wrong results if date/time
is reset).
config BUSYBOX_IOCTL_HEX2STR_ERROR
bool "Use ioctl names rather than hex values in error messages"
default y
help
Use ioctl names rather than hex values in error messages
(e.g. VT_DISALLOCATE rather than 0x5608). If disabled this
saves about 1400 bytes.
config BUSYBOX_FEATURE_EDITING
bool "Command line editing"
default y
help
Enable line editing (mainly for shell command line).
config BUSYBOX_FEATURE_EDITING_MAX_LEN
int "Maximum length of input"
range 128 8192
default 1024
depends on BUSYBOX_FEATURE_EDITING
help
Line editing code uses on-stack buffers for storage.
You may want to decrease this parameter if your target machine
benefits from smaller stack usage.
config BUSYBOX_FEATURE_EDITING_VI
bool "vi-style line editing commands"
default n
depends on BUSYBOX_FEATURE_EDITING
help
Enable vi-style line editing. In shells, this mode can be
turned on and off with "set -o vi" and "set +o vi".
config BUSYBOX_FEATURE_EDITING_HISTORY
int "History size"
# Don't allow way too big values here, code uses fixed "char *history[N]" struct member
range 0 9999
default 255
depends on BUSYBOX_FEATURE_EDITING
help
Specify command history size (0 - disable).
config BUSYBOX_FEATURE_EDITING_SAVEHISTORY
bool "History saving"
default y
depends on BUSYBOX_FEATURE_EDITING
help
Enable history saving in shells.
config BUSYBOX_FEATURE_EDITING_SAVE_ON_EXIT
bool "Save history on shell exit, not after every command"
default n
depends on BUSYBOX_FEATURE_EDITING_SAVEHISTORY
help
Save history on shell exit, not after every command.
config BUSYBOX_FEATURE_REVERSE_SEARCH
bool "Reverse history search"
default y
depends on BUSYBOX_FEATURE_EDITING
help
Enable readline-like Ctrl-R combination for reverse history search.
Increases code by about 0.5k.
config BUSYBOX_FEATURE_TAB_COMPLETION
bool "Tab completion"
default y
depends on BUSYBOX_FEATURE_EDITING
config BUSYBOX_FEATURE_USERNAME_COMPLETION
bool "Username completion"
default y
depends on BUSYBOX_FEATURE_TAB_COMPLETION
config BUSYBOX_FEATURE_EDITING_FANCY_PROMPT
bool "Fancy shell prompts"
default y
depends on BUSYBOX_FEATURE_EDITING
help
Setting this option allows for prompts to use things like \w and
\$ and escape codes.
config BUSYBOX_FEATURE_EDITING_WINCH
bool "Enable automatic tracking of window size changes"
default y
depends on BUSYBOX_FEATURE_EDITING
config BUSYBOX_FEATURE_EDITING_ASK_TERMINAL
bool "Query cursor position from terminal"
default n
depends on BUSYBOX_FEATURE_EDITING
help
Allow usage of "ESC [ 6 n" sequence. Terminal answers back with
current cursor position. This information is used to make line
editing more robust in some cases.
If you are not sure whether your terminals respond to this code
correctly, or want to save on code size (about 400 bytes),
then do not turn this option on.
config BUSYBOX_LOCALE_SUPPORT
bool "Enable locale support (system needs locale for this to work)"
default n
help
Enable this if your system has locale support and you would like
busybox to support locale settings.
config BUSYBOX_UNICODE_SUPPORT
bool "Support Unicode"
default y
help
This makes various applets aware that one byte is not
one character on screen.
Busybox aims to eventually work correctly with Unicode displays.
Any older encodings are not guaranteed to work.
Probably by the time when busybox will be fully Unicode-clean,
other encodings will be mainly of historic interest.
config BUSYBOX_UNICODE_USING_LOCALE
bool "Use libc routines for Unicode (else uses internal ones)"
default n
depends on BUSYBOX_UNICODE_SUPPORT && BUSYBOX_LOCALE_SUPPORT
help
With this option on, Unicode support is implemented using libc
routines. Otherwise, internal implementation is used.
Internal implementation is smaller.
config BUSYBOX_FEATURE_CHECK_UNICODE_IN_ENV
bool "Check $LC_ALL, $LC_CTYPE and $LANG environment variables"
default n
depends on BUSYBOX_UNICODE_SUPPORT && !BUSYBOX_UNICODE_USING_LOCALE
help
With this option on, Unicode support is activated
only if locale-related variables have the value of the form
"xxxx.utf8"
Otherwise, Unicode support will be always enabled and active.
config BUSYBOX_SUBST_WCHAR
int "Character code to substitute unprintable characters with"
depends on BUSYBOX_UNICODE_SUPPORT
default 63
help
Typical values are 63 for '?' (works with any output device),
30 for ASCII substitute control code,
65533 (0xfffd) for Unicode replacement character.
config BUSYBOX_LAST_SUPPORTED_WCHAR
int "Range of supported Unicode characters"
depends on BUSYBOX_UNICODE_SUPPORT
default 767
help
Any character with Unicode value bigger than this is assumed
to be non-printable on output device. Many applets replace
such characters with substitution character.
The idea is that many valid printable Unicode chars
nevertheless are not displayed correctly. Think about
combining charachers, double-wide hieroglyphs, obscure
characters in dozens of ancient scripts...
Many terminals, terminal emulators, xterms etc will fail
to handle them correctly. Choose the smallest value
which suits your needs.
Typical values are:
126 - ASCII only
767 (0x2ff) - there are no combining chars in [0..767] range
(the range includes Latin 1, Latin Ext. A and B),
code is ~700 bytes smaller for this case.
4351 (0x10ff) - there are no double-wide chars in [0..4351] range,
code is ~300 bytes smaller for this case.
12799 (0x31ff) - nearly all non-ideographic characters are
available in [0..12799] range, including
East Asian scripts like katakana, hiragana, hangul,
bopomofo...
0 - off, any valid printable Unicode character will be printed.
config BUSYBOX_UNICODE_COMBINING_WCHARS
bool "Allow zero-width Unicode characters on output"
default n
depends on BUSYBOX_UNICODE_SUPPORT
help
With this option off, any Unicode char with width of 0
is substituted on output.
config BUSYBOX_UNICODE_WIDE_WCHARS
bool "Allow wide Unicode characters on output"
default n
depends on BUSYBOX_UNICODE_SUPPORT
help
With this option off, any Unicode char with width > 1
is substituted on output.
config BUSYBOX_UNICODE_BIDI_SUPPORT
bool "Bidirectional character-aware line input"
default n
depends on BUSYBOX_UNICODE_SUPPORT && !BUSYBOX_UNICODE_USING_LOCALE
help
With this option on, right-to-left Unicode characters
are treated differently on input (e.g. cursor movement).
config BUSYBOX_UNICODE_NEUTRAL_TABLE
bool "In bidi input, support non-ASCII neutral chars too"
default n
depends on BUSYBOX_UNICODE_BIDI_SUPPORT
help
In most cases it's enough to treat only ASCII non-letters
(i.e. punctuation, numbers and space) as characters
with neutral directionality.
With this option on, more extensive (and bigger) table
of neutral chars will be used.
config BUSYBOX_UNICODE_PRESERVE_BROKEN
bool "Make it possible to enter sequences of chars which are not Unicode"
default n
depends on BUSYBOX_UNICODE_SUPPORT
help
With this option on, on line-editing input (such as used by shells)
invalid UTF-8 bytes are not substituted with the selected
substitution character.
For example, this means that entering 'l', 's', ' ', 0xff, [Enter]
at shell prompt will list file named 0xff (single char name
with char value 255), not file named '?'.
choice
prompt "Use LOOP_CONFIGURE for losetup and loop mounts"
default BUSYBOX_TRY_LOOP_CONFIGURE
help
LOOP_CONFIGURE is added to Linux 5.8
https://lwn.net/Articles/820408/
This allows userspace to completely setup a loop device with a single
ioctl, removing the in-between state where the device can be partially
configured - eg the loop device has a backing file associated with it,
but is reading from the wrong offset.
config BUSYBOX_LOOP_CONFIGURE
bool "use LOOP_CONFIGURE, needs kernel >= 5.8"
config BUSYBOX_NO_LOOP_CONFIGURE
bool "use LOOP_SET_FD + LOOP_SET_STATUS"
config BUSYBOX_TRY_LOOP_CONFIGURE
bool "try LOOP_CONFIGURE, fall back to LOOP_SET_FD + LOOP_SET_STATUS"
endchoice
|