RT-Thread Smart Series Serialization
Serial Number | Content |
---|---|
1 | “When the Raspberry Pi Meets RT-Thread Smart – Introduction to Application Programming” |
2 | “RT-Thread Smart and Raspberry Pi: wget & cURL Network Client” |
3 | “How to Port BusyBox, the Swiss Army Knife of Linux Tools, to RT-Thread Smart?” |
4 | sdl graphics application |
5 |
dropbear and ssh server application |
BusyBox is software that integrates hundreds of commonly used Linux/Unix commands and tools. BusyBox includes some simple tools like ls, cat, and echo, as well as larger, more complex tools like grep, find, mount, and telnet. Some people refer to BusyBox as the Swiss Army knife of Linux tools. In simple terms, BusyBox is like a large toolbox that integrates and compresses many tools and commands of Linux, including the built-in shell of the Android system.
This article will introduce how to port BusyBox to RT-Thread Smart.
Preparation Work
Taking busybox-1.32.0 as an example, download the source package:
1$ mkdir -p userapps/gnu-apps/busybox
2$ wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2
Porting Script
Unlike the previous article, BusyBox comes with a Makefile, so some variables in the Makefile need to be replaced with cross-compilation environment variables, which will be implemented through a patch file below.
First, create a simple build.sh script:
1#!/bin/sh
2
3APP_NAME="busybox"
4VERSION="1.32.0"
5APP_DIR=${APP_NAME}-${VERSION}
6
7# userapps is ROOTDIR
8ROOTDIR=${PWD}/../..
9
10# set env
11export RTT_EXEC_PATH=${ROOTDIR}/../tools/gnu_gcc/arm-linux-musleabi_for_x86_64-pc-linux-gnu/bin
12export PATH=$PATH:$RTT_EXEC_PATH:$RTT_EXEC_PATH/../arm-linux-musleabi/bin
13
14# get src
15tar xjf ${APP_DIR}.tar.bz2
16cd ${APP_DIR}
17
18# patch Makefile
19patch -Np1 -i ../makefile.patch
20
21# get default config
22cp ../def_config .config
23
24make V=1
makefile.patch file is as follows:
1--- busybox-1.32.0/Makefile.orig 2020-12-24 12:51:40.752730739 +0800
2+++ busybox-1.32.0/Makefile 2020-12-24 12:55:44.162093866 +0800
3@@ -4,6 +4,21 @@
4 EXTRAVERSION =
5 NAME = Unnamed
6
7+
8+CROSS_COMPILE= arm-linux-musleabi-
9+
10+PWD := $(shell pwd)
11+# userapp dir
12+ROOTDIR := $(PWD)/../../..
13+RT_DIR=$(ROOTDIR)/sdk/rt-thread
14+INC_DIR=${ROOTDIR}/sdk/include
15+LIB_DIR=${ROOTDIR}/sdk/lib
16+
17+CFLAGS = -march=armv7-a -marm -msoft-float -D__RTTHREAD__ -Wall -O2 -n --static -I. -I$(RT_DIR)/include -I$(RT_DIR)/components/dfs -I$(RT_DIR)/components/drivers -I$(RT_DIR)/components/finsh -I$(RT_DIR)/components/net -I${INC_DIR}
18+
19+LDFLAGS = -L. -L${LIB_DIR} -T $(ROOTDIR)/linker_scripts/arm/cortex-a/link.lds -march=armv7-a -marm -msoft-float -L$(RT_DIR)/lib -Wl,--whole-archive -lrtthread -Wl,--no-whole-archive -n --static -Wl,--start-group -lrtthread -Wl,--end-group
20+
21+
22 # *DOCUMENTATION*
23 # To see a list of typical targets execute "make help"
24 # More info can be located in ./README
It is best to configure the commands to be compiled via “make menuconfig” before compiling BusyBox. For convenience, a configured def_config file is provided, which will be used in the above build.sh script.
The file is quite long, please copy the following link to an external browser to open it, and you can directly download the file:
https://gitee.com/rtthread/rt-smart-notes/tree/master/examples/busybox
Compile:
1userapps/gnu-apps/busybox$ ls
2build.sh busybox-1.32.0.tar.bz2 def_config makefile.patch
3userapps/gnu-apps/busybox$ sh build.sh
Using BusyBox
When using BusyBox on Linux, the general way is to create symbolic links for individual commands, such as linking ls to busybox. This way, when ls is called, it will actually invoke busybox. However, for main(int argc, char** argv), this argv[0] is ‘ls’.
Of course, busybox also supports directly calling busybox with commands appended afterwards, for example:
1msh /> busybox.elf ls -l
Since RT-Thread and RT-Thread Smart do not support symbolic links, the latter method must be used.
BusyBox contains many commands that can be configured for compilation by executing “make menuconfig”.
To view the currently available commands in busybox, you can use the `–help’ option:
To view the usage help for a specific command, such as ls :
More Commands
To ensure that certain commands run normally, you need to enable devices like null, random, zero, etc. in the kernel configuration, and ensure that the /etc/resolv.com and /etc/hosts files exist.
1msh /> busybox.elf cat /etc/resolv.conf
2nameserver 114.114.114.114
3
4msh /> busybox.elf cat /etc/hosts
5127.0.0.1 localhost
BusyBox is a very streamlined toolkit, and the commands that have been verified on rt-smart include (but are not limited to):
-
Archiving tools, such as tar/unzip/bzip2/bunzip2/bzcat/gzip/gunzip/zcat/xz/unxz/xzcat;
-
Core tools, such as cat/cp/dd/echo/head/ls/mv/mkdir/pwd/rm/tail/uname/wc;
-
Editing tools, such as vi/diff/cmp/awk/sed;
-
Network tools, such as ftpd/tcpsvd/ftpgt/ftpput/tftp/nslookup/telnet/httpd/wget;

Recommended Reading:
Embedded Linux
Scan the QR code to follow my public account
👇 Click to read the original text to enter the RT-Thread official website