如何把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,一经查实,立即删除!

相关文章

bzoj3195 [Jxoi2012]奇怪的道路——状压DP

题目&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id3195 看到数据范围就应该想到状压呢... 题解(原来是这样)&#xff1a;https://www.cnblogs.com/LadyLex/p/7252789.html 代码如下&#xff1a; #include<iostream> #include<cstdio> #include&l…

Google Maps API 进级: GoogleMaps常用事件及应用思路1

转自&#xff1a;http://hi.baidu.com/xfm_zhr/blog/item/8c1790517e87ea888d54302a.html1. GoogleMaps常用事件及应用思路 地图再被鼠标拖动时&#xff0c;GMap2对象会激发dragstart,drag,dragend等事件。 示例&#xff1a;动态显示地图的中心位置。 //更新信息&#xf…

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

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

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

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

Linux服务器安全设置总结

众所周知&#xff0c;网络安全是一个非常重要的课题&#xff0c;而服务器是网络安全中最关键的环节。Linux被认为是一个比较安全的Internet服务器&#xff0c;作为一种开放源代码操作系统&#xff0c;一旦Linux系统中发现有安全漏洞&#xff0c;Internet上来自世界各地的志愿者…

STM32 —— LIN

STM32 —— LIN/* LIN 总线的主要特性有 单主机 多从机概念 基于普通 UART/SCI 接口的低成本硬件实现 低成本软件或作为纯状态机 从机节点不需要石英或陶瓷谐振器可以实现自同步 保证信号传输的延迟时间 低成本的单线设备 速度高达 20kbit/s 总线的通讯由单…

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

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

朋友与“蓝颜知己”

??闲着无事&#xff0c;便往了图书馆&#xff0c;寻到自己一直想要找的书&#xff1a;《大明王朝1566》。是想写点什么了&#xff0c;一直想写的东西&#xff0c;是心中酝酿许久的本子&#xff0c;却总感到驾御不了&#xff0c;不敢下笔。盼望能从书中得到些启示&#xff0c;…

Kettle 学习导航帖整理

最近在学习Kettle&#xff0c;期间收集了很多帖子&#xff0c;在此整理汇总以备后续查询或分享&#xff0c;如果有更好的学习资源也欢迎在评论区留言&#xff0c;谢谢。 Kettle入门&#xff1a; Kettle简介&#xff1a;百度百科https://baike.baidu.com/item/Kettle/5920713?f…

STM32 —— 中景园0.96寸OLED

STM32 —— 中景园0.96寸OLED OLED&#xff0c;即有机发光二极管&#xff08; Organic Light Emitting Diode &#xff09;。 OLED 由于同时具备自发光&#xff0c;不需背光源、对比度高、厚度薄、视角广、反应速度快、可用于挠曲性面板、使用温度范围广、构造及制程较简单等优…

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

近日业界盛传&#xff0c;Intel计划以20亿美元收购RISC-V IP供应商SiFive——后者的产品已被80多家公司采纳&#xff0c;设计了200多种产品&#xff0c;出货量极大&#xff0c;广泛用于各种加速器。虽然双方对于收购都拒绝置评&#xff0c;但深入合作已经展开。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;大家大致看一下点灯流程和点灯环境以及点灯流…

修复远程过程调用 (RPC) 时发生的各种问题KB908521

当系统出现RPC通讯问题时可以尝安装KB908521进行修复。安装本更新程序可以解决当您在 Microsoft Windows Server 2003 和 Microsoft Windows XP 中的客户端/服务器通信中使用远程过程调用 (RPC) 时发生的各种问题。http://www.microsoft.com/downloads/details.aspx?FamilyID7…

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

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

Python 实现微信小程序的用户登录

小程序可以通过官方提供的登录能力来获取用户身份的标示&#xff0c;具体文档可以参考 这里&#xff0c;通过流程时序可以看到&#xff0c;对于需要和前端配合的服务端开发&#xff0c;主要实现的就是通过小程序提供的 code 换取用户的 openid 和 session_key&#xff0c;并用换…

硬件基础 —— 电容

硬件基础 —— 电容1、电容基本知识&#xff08;记忆元件&#xff09;电容器是一种能储存电荷的容器。电容器对直流电阻力无穷大&#xff0c;即电容器具有通交隔直的作用。电容器对交流电的阻力受交流电频率影响&#xff0c;即相同容量的电容器对不同频率的交流电呈现不同的容抗…

python 学习笔记一

有关 dictionary、tuple、和 list Tuple 是不可变的 list。一旦创建了一个 tuple&#xff0c;就不能以任何方式改变它。如t ("a", "b", "mpilgrim", "z", "example") List 是 Python 中使用最频繁的数据类型。如&#xff1…

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

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