【前言】近期向RK3568平台移植EtherCAT时发现目标板中没有bash,只有sh。如果想要shell脚本在目标机中运行,则需要把脚本中的“#!/bin/bash”改为“#!/bin/sh”。通过这种方式虽然可以执行脚本,但是脚本中的许多bash语法是不支持的,脚本运行时会报错,因此最好的解决办法就是将bash移植到ARM平台上。
1、环境说明
1.1、硬件平台
M3568-4GF16GLI-T(RK3568)
1.2、Linux内核版本
Linux4.19.193
2、下载bash
3、解压bash源码
将官网下载的bash压缩包下载到编译平台后,进行解压。输入如下命令:
tar -zxvf bash-5.2.21.tar.gz
4、配置编译
./configure CC=aarch64-buildroot-linux-gnu-gcc --prefix=/home/vmuser/workspace/Bash/output --host=aarch64-buildroot-linux-gnu --target=aarch64-buildroot-linux-gnu --enable-static-link --enable-history --without-bash-malloc
注意:--prefix指定编译后镜像和库文件安装的位置,CC 指定交叉编译工具。
特别说明:
使用最新版本的bash源码(5.2.21版本)会报如下错误:
该错误目前未找到合适的解决方案,肯定各位大佬留言指导。
我目前使用的版本是:4.4版本,实测可用。(源码包为:bash-4.4.tar.gz)
4.4版本之后的版本均有上述的错误。
5、设置静态编译
在Makefile的CFLAGS后面加上-static 选项,如下所示:
CFLAGS = -g -O2 -static
6、编译源码
make
7、安装
make install
安装成功后在安装路径 /home/vmuser/workspace/Bash/output下生成两个文件夹 bin和share。
8、拷贝bash可执行文件
将bin目录中的bash可执行文件下载到开发板/bin目录中,并修改执行权限:
chmod 775 /bin/bash
至此bash已经移植到了ARM平台上了。
【结束语】因技术能力有限,文章如有不妥之处,恳请各位技术大佬留言指正!