网站技术的解决方案,网站谁家做得好,域名收录提交,政务网站建设索引RT-Thread Smart 系列连载序号内容1《当“树莓派”遇上RT-Thread Smart——应用编程入门》2《RT-Thread Smart和树莓派#xff1a;wget cURL网络客户端》3《如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart#xff1f;》4sdl图形类应用5dropbear及ssh server… RT-Thread Smart 系列连载序号内容1《当“树莓派”遇上RT-Thread Smart——应用编程入门》2《RT-Thread Smart和树莓派wget cURL网络客户端》3《如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart》4sdl图形类应用5dropbear及ssh server应用BusyBox 是一个集成了数百个常用Linux/Unix命令和工具的软件。BusyBox 包含了一些简单的工具例如ls、cat和echo等等还包含了一些更大、更复杂的工具例grep、find、mount以及telnet。有些人将 BusyBox 称为 Linux 工具里的瑞士军刀。简单的说BusyBox就好像是个大工具箱它集成压缩了 Linux 的许多工具和命令也包含了 Android 系统的自带的shell。这篇文章将介绍把BusyBox移植到RT-Thread Smart下。准备工作以busybox-1.32.0为例下载源码包1$ mkdir -p userapps/gnu-apps/busybox
2$ wget https://busybox.net/downloads/busybox-1.32.0.tar.bz2
移植脚本与上篇文章有些许不同的是busybox自带Makefile所以需要给Makefile里面的一些变量替换成交叉编译环境变量下面会通过一个patch文件实现。首先还是创建一份简单的build.sh脚本 1#!/bin/sh23APP_NAMEbusybox4VERSION1.32.05APP_DIR${APP_NAME}-${VERSION}67# userapps is ROOTDIR8ROOTDIR${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 V1
makefile.patch文件如下 1--- busybox-1.32.0/Makefile.orig 2020-12-24 12:51:40.752730739 08002 busybox-1.32.0/Makefile 2020-12-24 12:55:44.162093866 08003 -4,6 4,21 4 EXTRAVERSION 5 NAME Unnamed678CROSS_COMPILE arm-linux-musleabi-9
10PWD : $(shell pwd)
11# userapp dir
12ROOTDIR : $(PWD)/../../..
13RT_DIR$(ROOTDIR)/sdk/rt-thread
14INC_DIR${ROOTDIR}/sdk/include
15LIB_DIR${ROOTDIR}/sdk/lib
16
17CFLAGS -marcharmv7-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
19LDFLAGS -L. -L${LIB_DIR} -T $(ROOTDIR)/linker_scripts/arm/cortex-a/link.lds -marcharmv7-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
Busybox在编译之前最好通过make menuconfig配置一下需要编译的指令这里为了方便提供一个配置好的def_config文件在上面的build.sh脚本里面会用到。文件比较长请将以下链接复制至外部浏览器打开打开后可直接下载文件https://gitee.com/rtthread/rt-smart-notes/tree/master/examples/busybox编译1userapps/gnu-apps/busybox$ ls
2build.sh busybox-1.32.0.tar.bz2 def_config makefile.patch
3userapps/gnu-apps/busybox$ sh build.sh
使用BusyBox在Linux上使用BusyBox一般的方式会是建立一个个的符号链接例如把ls通过符号链接的方式链接到busybox这样在调用ls时实际上会被调用到busybox。只是对于main(int argc, char** argv)来说这个argv[0]是ls。当然busybox也支持直接调用busybox并把命令附加在后面的方式例如1msh / busybox.elf ls -l
因为RT-Thread及RT-Thread Smart并不支持符号链接所以还只能采用后面的形式。BusyBox包含有很多个指令可以通过执行“make menuconfig”来配置需要编译的指令。查看busybox当前可使用的命令可以使用--help 选项查看具体某个指令的使用帮助如 ls 的更多指令为确保一些特定的指令正常运行需要在kernel配置里面打开null、random、zero等设备并确保/etc/resolv.com和/etc/hosts文件存在。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是一套很精简的工具集已经在rt-smart上验证过的命令包括但不限于归档类工具例如 tar/unzip/bzip2/bunzip2/bzcat/gzip/gunzip/zcat/xz/unxz/xzcat 等核心类工具例如 cat/cp/dd/echo/head/ls/mv/mkdir/pwd/rm/tail/uname/wc 等编辑类工具例如 vi/diff/cmp/awk/sed 等网络类工具例如ftpd/tcpsvd/ftpgt/ftpput/tftp/nslookup/telnet/httpd/wget 等推荐阅读专辑|Linux文章汇总专辑|程序人生专辑|C语言我的知识小密圈关注公众号后台回复「1024」获取学习资料网盘链接。欢迎点赞关注转发在看您的每一次鼓励我都将铭记于心~嵌入式Linux微信扫描二维码关注我的公众号???? 点击阅读原文进入RT-Thread官网