RT-Thread Smart 系列连载

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

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

  1. linux世界里类似source insight的工具(zz)-如梦初醒-中国教育人博客

    linux世界里类似source insight的工具(zz)-如梦初醒-中国教育人博客 linux世界里类似source insight的工具(zz)-如梦初醒-中国教育人博客 sourcenav ...

  2. 09 编译2022年最新的Linux kernel、U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行

    编译2022年最新的Linux kernel.U-Boot和BusyBox rootfs源码,并用QEMU模拟器运行 作者 将狼才鲸 创建日期 2022-11-26 Gitee源码和工程地址:才鲸嵌入 ...

  3. exfat单元分配要设置多少_微软宣布,支持往Linux内核里添加exFAT存储了!跨系统存储的福音...

    栗子 发自 凹非寺  量子位 报道 | 公众号 QbitAI exFAT,是微软开发的文件系统,为闪存而生. 你的U盘.SD卡.手机等等存储设备,能存4G以上的大文件,很大程度上是它的功劳. 可exF ...

  4. linux usb设备名 ks,在Linux系统里识别USB设备名字的4种方法

    对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备.这也许是你的系统硬盘.外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等. 现如今,使用 U ...

  5. linux查看usb设备文件,技术|在 Linux 系统里识别 USB 设备名字的 4 种方法

    对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备.这也许是你的系统硬盘.外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等. 现如今,使用 U ...

  6. linux工具之jq

    linux工具之jq 后端开发的工程师经常在linux下开发,当我们拿到一个json格式的数据时,如何有效对这个数据进行分析?我们可以采用python结合json库来分析,但是linux有一个很好用的 ...

  7. linux 查询usb端口名称,在Linux系统里识别USB设备名字的4种方法

    对于初学者来说,在 Linux 系统里你必须掌握的技术之一就是识别出插入系统里的各种设备.这也许是你的系统硬盘.外部的存储设备或者是可移动设备,比如 USB 设备或 SD 闪存卡等. 现如今,使用 U ...

  8. linux怎么编译并安装busybox,busybox的编译使用及安装

    busybox是什么? http://www.busybox.net/,在这里你可以找到与busybox相关的所有资料. busybox编译和移植 (2)make menuconfig busybox ...

  9. Linux圈子里的“鲁大师“vmstat-尚文网络xUP楠哥

    进Q群11372462领取专属报名福利! #说在前面 鲁大师的名声无需多介绍,IT江湖上也被称为"鲁大爷",主要就是帮助我们做电脑的配置信息收集,除此之外还有一个非常重要的主流功能 ...

最新文章

  1. 交互设计师到底是干嘛的
  2. 小型云台用的是什么电机_盘一下目前国内主流的电动汽车都用什么电机
  3. 文献记录(part58)--不平衡数据处理的新方法一基于样本相似度的少数合成法
  4. android Content provider 组件
  5. html中class类怎么写,HTML class 属性 | 菜鸟教程
  6. 【python爬虫】http.cookiejar库之CookieJar,模拟登录与访问
  7. 安庆集团-冲刺日志(第七天)
  8. 如何用python把Mac录屏转换成GIF
  9. Go Ticker实现原理剖析(轻松掌握Ticker实现原理)
  10. Windows系统复制文件到虚拟机Linux环境的解决
  11. python小工具—图片转为字符txt
  12. 无法安装 cloudera-manager-agent
  13. uni-app开发微信小程序常见问题(更新版):uni.getUserProfile要怎么写?uni.login和uni.getUserProfile的顺序?
  14. 1.2 聪明的投资者:投资与投机(聪明投资者的预期收益)
  15. 学什么技术专业最有前途?
  16. BZOJ 2743: [HEOI2012]采花
  17. 负的几次方怎么使用计算机,负五次方如何用电脑输入
  18. iframe使用总结(实战)
  19. 第二届智能制造与工业自动化国际研讨会(CIMIA 2022)
  20. 串口屏和段码屏的区别?

热门文章

  1. 继续努力奋斗,生活会更美好
  2. 超全十大经典排序算法及其分析
  3. Java SE、Java EE、Java ME三者的区别
  4. 【代码刷题】排序算法总结(python实现)
  5. mongo的php查询,使用PHP进行简单查询的mongo查询速度慢
  6. java创建对象new后面为啥可以传入参数_你有认真了解过自己的“Java对象”吗?渣男...
  7. Django中的Model模型
  8. 解决:pycharm运行程序时在Python console窗口中运行 һ����ң�������1�����
  9. celery AttributeError: 'str' object has no attribute 'items'
  10. 智能外呼系统相关资料总结