BusyBox 是一個(gè)集成了數(shù)百個(gè)常用Linux/Unix命令和工具的軟件。BusyBox 包含了一些簡(jiǎn)單的工具,例如ls、cat和echo等等,還包含了一些更大、更復(fù)雜的工具,例grep、find、mount以及telnet。有些人將 BusyBox 稱(chēng)為 Linux 工具里的瑞士軍刀。簡(jiǎn)單的說(shuō)BusyBox就好像是個(gè)大工具箱,它集成壓縮了 Linux 的許多工具和命令,也包含了 Android 系統(tǒng)的自帶的shell。
這篇文章將介紹把BusyBox移植到RT-Thread Smart下。
準(zhǔn)備工作
以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里面的一些變量替換成交叉編譯環(huán)境變量,下面會(huì)通過(guò)一個(gè)patch文件實(shí)現(xiàn)。
首先還是創(chuàng)建一份簡(jiǎn)單的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在編譯之前最好通過(guò)“make menuconfig”配置一下需要編譯的指令,這里為了方便提供一個(gè)配置好的def_config文件,在上面的build.sh腳本里面會(huì)用到。
文件比較長(zhǎng),請(qǐng)將以下鏈接復(fù)制至外部瀏覽器打開(kāi),打開(kāi)后可直接下載文件:
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,一般的方式會(huì)是建立一個(gè)個(gè)的符號(hào)鏈接,例如把ls通過(guò)符號(hào)鏈接的方式鏈接到busybox,這樣在調(diào)用ls時(shí),實(shí)際上會(huì)被調(diào)用到busybox。只是對(duì)于main(int argc, char** argv)來(lái)說(shuō),這個(gè)argv[0]是‘ls’。
當(dāng)然busybox也支持直接調(diào)用busybox,并把命令附加在后面的方式,例如:
1msh /》 busybox.elf ls -l
因?yàn)镽T-Thread及RT-Thread Smart并不支持符號(hào)鏈接,所以還只能采用后面的形式。
BusyBox包含有很多個(gè)指令,可以通過(guò)執(zhí)行“make menuconfig”來(lái)配置需要編譯的指令。
查看busybox當(dāng)前可使用的命令可以使用`--help‘ 選項(xiàng):
查看具體某個(gè)指令的使用幫助,如 ls 的:
更多指令
為確保一些特定的指令正常運(yùn)行,需要在kernel配置里面打開(kāi)null、random、zero等設(shè)備;并確保/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是一套很精簡(jiǎn)的工具集,已經(jīng)在rt-smart上驗(yàn)證過(guò)的命令包括(但不限于):
歸檔類(lèi)工具,例如 tar/unzip/bzip2/bunzip2/bzcat/gzip/gunzip/zcat/xz/unxz/xzcat 等;
核心類(lèi)工具,例如 cat/cp/dd/echo/head/ls/mv/mkdir/pwd/rm/tail/uname/wc 等;
編輯類(lèi)工具,例如 vi/diff/cmp/awk/sed 等;
網(wǎng)絡(luò)類(lèi)工具,例如ftpd/tcpsvd/ftpgt/ftpput/tftp/nslookup/telnet/httpd/wget 等
文章出處:【微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】
責(zé)任編輯:gt
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2903文章
44284瀏覽量
371321 -
Linux
+關(guān)注
關(guān)注
87文章
11230瀏覽量
208933 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
6742瀏覽量
123192
原文標(biāo)題:如何把Linux工具里的“軍刀”BusyBox移植到RT-Thread Smart?
文章出處:【微信號(hào):RTThread,微信公眾號(hào):RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論