如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?

RT-Thread Smart 系列连载

序号内容
1《当“树莓派”遇上RT-Thread Smart——应用编程入门》
2《RT-Thread Smart和树莓派:wget & cURL网络客户端》
3《如何把Linux工具里的“军刀”BusyBox移植到RT-Thread Smart?》
4sdl图形类应用
5

dropbear及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_NAME="busybox"4VERSION="1.32.0"5APP_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 V=1

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 = Unnamed67+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    

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官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465762.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STM32项目(七) —— 智能仓库管理系统

智能仓库管理系统 随着经济的发展,对企业的生产经营要求提高,企业必须综合利用各种先进技术,在网络与信息技术的支持下,改进现在的生产经营模式和组织结构,增加利润。随着企业规模的扩大。高效方便的仓库管理系统&…

花三千块钱求推荐一个靠谱的C++工程师

直接说重点有个朋友想招一个C工程师,因为项目的原因,不可能现在招新人培养,想招到一个熟练C的工程师,所以想在公众号里面广而告之。如果是你推荐的人入职后,就可以获得三千奖励,如果是你本人入职&#xff0…

老外码农酒后吐槽,该说的不该说的全说了!!

上个月,一个有着10年码龄的程序猿喝高了,在社交网站Reddit上吐槽。然后被疯狂转发,点赞。可说是讲出了咱们很多码农的心声。咱们国内这边也有不少版本了。我们也凑凑热闹翻译一版。跟大家一块儿欣赏一下:今天是有点儿高了&#xf…

Intel官宣开发RISC-V处理器:明年首发7nm工艺

近日业界盛传,Intel计划以20亿美元收购RISC-V IP供应商SiFive——后者的产品已被80多家公司采纳,设计了200多种产品,出货量极大,广泛用于各种加速器。虽然双方对于收购都拒绝置评,但深入合作已经展开。Intel官方宣布&a…

SCCM2007 R2的部署前准备,SCCM系列之一

SCCM 2007 R2的部属前准备<?xml:namespace prefix o />System Center 是微软著名的管理平台软件&#xff0c;在实现Microsoft的MOF&ITIL的IT管理理念的过程中发挥了很重要的作用&#xff0c;System Center可以在MOF的每一个运维象限中都有对应的System Center产品协…

硬件基础 —— 电阻

硬件基础 —— 电阻1、电阻基本知识电阻&#xff1a;在电路中对电流有阻碍作用并且造成能量消耗的部分。主要物理特性是变电能为热能&#xff08;耗能元件&#xff09;&#xff0c;符号R&#xff08;单位&#xff1a;Ω&#xff09;。2、电阻的作用&#xff1a;分流、限流、分压…

史上最全的LED点灯程序,你都掌握了吗?

摘要&#xff1a;你点亮过多少板子的LED灯呢&#xff1f;有很多小伙伴留言说讲一下STM32、FPGA、Liunx他们之间有什么不同。不同点很多&#xff0c;口说无凭&#xff0c;今天就来点亮一下STM32、FPGA和Liunx板子的LED灯&#xff0c;大家大致看一下点灯流程和点灯环境以及点灯流…

B站硬核up主稚晖君:对于3年以上软件开发工程师,我有这些建议!

稚晖君&#xff0c;何许人也&#xff1f;本硕就读于电子科技大学华为AI架构师热爱硬件开发B站硬核UP主“栈溢出”工程师加入“华为天才少年计划”或许当你看到这一堆Title的时候并不觉得有什么特别&#xff0c;那么接下来看看他的一些作品。作品1&#xff1a;B站最强小电视这条…

同事说rar压缩有风险,让我用zip压缩文件

在现在最常见的压缩文件有zip、rar、7z三种&#xff0c;它们都有各自的优点和缺点。我们用一句话来概括一下&#xff1a;7z压缩率最高&#xff0c;RAR安全性高&#xff0c;ZIP使用范围广。文件压缩打包是最为常见的一种分享方式了&#xff0c;而众多的压缩格式中zip仍然是主流。…

JAVA实现概率计算(数字不同范围按照不同几率产生随机数)

程序中经常遇到随机送红包之类的情景&#xff0c;这个随机还得指定概率&#xff0c;比如10%的机率可以得到红包。那么java怎么实现一个简单的概率计算了&#xff0c;见如下例子&#xff1a; int randomInt RandomUtils.nextInt(1,101); if(randomInt < 10){ //100里面1个数…

AKI-H8串口通信

串口通信是一种通信接口简写SCI&#xff0c;它可是实现异步和同步两种传输模式。可以思考一下同步和异步的区别。 所谓同步就是接收方和发送方使用的是同一个时钟&#xff0c;步调一致的处理数据。典型的就是CPU和内存&#xff0c;通过总线存取数据。特点就是快&#xff0c;发送…

字节取消大小周,部分员工:心疼,每个月少拿 1W 块

如图&#xff0c;是脉脉最近的一个热帖&#xff0c;头条昨天全员发邮件取消了大小周&#xff0c;原本是一件好事&#xff0c;减轻大家的工作压力&#xff0c;努力向 workbalance 靠拢&#xff0c;可是看着风向好像不太对&#xff0c;我们继续看下 TOP 的几个回复。下面是反对头…

高通LCD的pwm背光驱动

发生异常的现象&#xff1a; msm8953 lcd在快速亮灭的情况下背光概率性休眠不灭&#xff1b;测量高通pwm&#xff0c;发现正常的时候pwm的管脚LCM_BL_PWM为低电平&#xff0c;失败的时候为高电平&#xff1b; 根据原理图&#xff1a; mpp是什么&#xff1f; mpp是基于电源pmic的…

为什么一个字节定义成8位?

今天给大家分享一个小小知识点&#xff0c;为什么一个字节定义成8位呢&#xff1f;一些人没有回答到点子上。这件事得追溯计算机历史&#xff0c;源于IBM360操作系统和图灵奖得主&#xff08;Fred&#xff09;Brooks Jr。布鲁克斯被问到“您认为自己最大的技术成就是什么&#…

硬件基础 —— 光耦

光耦1、工作原理以光为媒介传递电信号。对输入和输出信号有良好的隔离作用&#xff08;光耦隔离&#xff09;。光耦一般由三个部分组成&#xff1a;光的发射、光的接收和信号放大。输入的电信号驱动发光二极管&#xff0c;被光探测器接收而产生光电流&#xff0c;再经过进一步放…

红外感应自动出水水龙头的电路原理

红外感应自动出水的水龙头&#xff0c;生活中很常见&#xff1a;可以用以下的电路方案实现&#xff0c;供电采用USB的5V&#xff1a;只要手靠近“红外线靠近检测模块”&#xff0c;直流水泵就会开启供水&#xff1a;其中这种直流水泵长这样&#xff1a;当“红外线靠近检测模块”…

Linux面试最高频的5个基本问题

CPU利用率和CPU负载的区别是什么提到CPU利用率&#xff0c;就必须理解时间片。什么是CPU时间片&#xff1f;我们现在所使用的Windows、Linux、Mac OS都是“多任务操作系统”&#xff0c;就是说他们可以“同时”运行多个程序&#xff0c;比如一边打开Chrome浏览器浏览网页还能一…

用iptables实现G1手机cmwap代理上http网站[转]

2019独角兽企业重金招聘Python工程师标准>>> 折腾了几天&#xff0c;总算有点阶段性成果&#xff1a; 证实可以用iptables实现通过cmwap的代理上HTTP协议的网站。 首先&#xff0c;android系统的实现是有缺陷的。在接入apn中指定的proxy并不会被系统所用。好似只有浏…

初识Buildroot

转自CSDN &#xff0c;记录是为了作者小编学习需要作者&#xff1a;xixihaha331什么是buildrootBuildroot是Linux平台上一个构建嵌入式Linux系统的框架。整个Buildroot是由Makefile脚本和Kconfig配置文件构成的。你可以和编译Linux内核一样&#xff0c;通过buildroot配置&#…

Python3安装(Windows)

Windows下Python3环境搭建 目录 Windows下Python3环境搭建 安装Python 启动终端会话 IDE —— Geany 安装Python 访问https://www.python.org/downloads 点击上图红色区域按钮&#xff0c;下载Python。下载完成后开始安装&#xff1a; 勾选“Add Python 3.7 to PATH”&…