如何将BusyBox移植到RT-Thread Smart下

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/sh
2 3app_name=“busybox” 4version=“1.32.0” 5app_dir=${app_name}-${version}
6 7# userapps is rootdir
8rootdir=${pwd}/。./。.
910# 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
1314# get src
15tar xjf ${app_dir}.tar.bz2
16cd ${app_dir}
1718# patch makefile
19patch -np1 -i 。./makefile.patch
2021# get default config
22cp 。./def_config .config
2324make v=1
makefile.patch文件如下:
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
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.11434msh /》 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 等
文章出处:【微信公众号:rtthread物联网操作系统】


藏在首台Android机内部芯片电路设计的秘密
PCB行业资本市场有哪四件大事情
德索连接器厂家分享M16连接器的基本性能
敏芯股份入选上市公司数字化转型典型案例
Awesome 工具如何更好地管理Kubernetes
如何将BusyBox移植到RT-Thread Smart下
液晶面板价格持续走低 彩电市场销量不确定性增加
无线网卡的信号强度越强它的网速就会越快吗
实现智能家电控制系统设计方案的几大关键点
烧结机齿轮轴磨损如何修复
TD-SCDMA空中接口用户数据加密功能研究
浅谈SWZ-8V智能数字毫秒计的功能
全彩LED显示屏的三大基本常识
人工智能+医疗机器人发展迅速,医疗服务机器人占比13%
印度愿为特斯拉提供激励措施,生产成本低于中国
中国移动有足够的实力推动产业链支持2.6GHz
音圈马达加持的TCL卷轴+折叠屏真机曝光
基于快速傅里叶IP核的数字脉压处理器的实现
打造差异化竞争优势,中孚智慧康养全院部署清雷数字医养解决方案
如何制作一个心形18LED循环灯?