1 我的使用场景
开发板无网络, 无奈只得用U盘拷贝文件
文件不大, 每次都插拔U盘, 很繁琐
原来的环境不支持rz等命令
就需要移植这个命令来使用
下载地址 https://ohse.de/uwe/releases/lrzsz-0.12.20.tar.gz
2 编译脚本
# 主要内容在这里
configure_for_arm(){
mkdir -p $PATH_BUILD_ARM && cd $PATH_BUILD_ARM
CFLAGS=-O2 CC=arm-linux-gnueabihf-gcc $PATH_UN_TAR/configure --prefix=${PATH_INSTALL_ARM} --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- \
--without-profile --without-progs --without-manpages --without-tests
# [1] CC=arm-linux-gnueabihf-gcc
# [2] --host=arm-linux-gnueabihf
# 这里两个都给他指定了, 之前只用了[2], 编译之后再开发板上运行失败
# [3] --program-prefix=arm-linux-gnueabihf-
# 这个用于生成可执行程序的前缀, 如最终会生成这样的程序arm-linux-gnueabihf-lrz
}
# 完整脚本
#!/bin/bash
#COLORS
LOG_WHITE() { echo -e "\033[0m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_RED() { echo -e "\033[0;31m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_GREEN() { echo -e "\033[0;32m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_YELLO() { echo -e "\033[0;33m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_BLUE() { echo -e "\033[0;34m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_PINK() { echo -e "\033[0;35m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
LOG_CYAN() { echo -e "\033[0;36m" "[${FUNCNAME[1]},${BASH_LINENO}] ${@} \033[0m" ;}
errCode=0
errCheck(){
errCode=$?
if [ $errCode != 0 ];
then
LOG_RED $errCode
exit $errCode
fi
}
PATH_CURR_SCRIPT=$(cd $(dirname $0);pwd -P) # 当前脚本的路径
FILE_TAR_GZ=${PATH_CURR_SCRIPT}/lrzsz-0.12.20.tar.gz
PATH_UN_TAR=${PATH_CURR_SCRIPT}/temp # 解压目录
PATH_BUILD_PC=${PATH_UN_TAR}/build_pc
PATH_BUILD_ARM=${PATH_UN_TAR}/build_arm
PATH_INSTALL_PC=${PATH_CURR_SCRIPT}/install_pc
PATH_INSTALL_ARM=${PATH_CURR_SCRIPT}/install_arm
un_tar_file(){
mkdir -p $PATH_UN_TAR
tar -zxvf $FILE_TAR_GZ -C $PATH_UN_TAR --strip-components 1
# --strip-components 1 去掉顶级目录
}
configure_for_pc(){
mkdir -p $PATH_BUILD_PC && cd $PATH_BUILD_PC
$PATH_UN_TAR/configure --prefix=${PATH_INSTALL_PC}
}
configure_for_arm(){
mkdir -p $PATH_BUILD_ARM && cd $PATH_BUILD_ARM
CFLAGS=-O2 CC=arm-linux-gnueabihf-gcc $PATH_UN_TAR/configure --prefix=${PATH_INSTALL_ARM} --host=arm-linux-gnueabihf --program-prefix=arm-linux-gnueabihf- \
--without-profile --without-progs --without-manpages --without-tests
# [1] CC=arm-linux-gnueabihf-gcc
# [2] --host=arm-linux-gnueabihf
# 这里两个都给他指定了, 之前只用了[2], 编译之后再开发板上运行失败
# [3] --program-prefix=arm-linux-gnueabihf-
# 这个用于生成可执行程序的前缀, 如最终会生成这样的程序arm-linux-gnueabihf-lrz
}
make_target(){ # [0]-path
cd $1
make -j12
}
make_install(){ # [0]-path
cd $1
make install
}
TTY_X=$(($(stty size | awk '{print $2}')-6)) # determine terminal width
TTY_Y=$(($(stty size | awk '{print $1}')-6)) # determine terminal height
OPTIONS=$1
if [ -z "$OPTIONS" ]; then # 如果输入的参数为空,则进入图形界面,否则为命令行编译
OPTIONS=$(whiptail \
--title "$0" \
--backtitle "$URL" \
--menu "请选择要运行的指令" ${TTY_Y} ${TTY_X} 0 \
"tar" "tar -zxvf $FILE_TAR_GZ -C $PATH_UN_TAR --strip-components 1" \
"configure_pc" "为PC端生成配置文件" \
"configure_arm" "为ARM端生成配置文件" \
"make_pc" "编译" \
"make_arm" "编译" \
"install_pc" "安装" \
"install_arm" "安装" \
--ok-button "OK" --cancel-button "Cancel" \
3>&1 1>&2 2>&3)
fi
case $OPTIONS in
tar) un_tar_file;;
configure_pc) configure_for_pc;;
make_pc) make_target $PATH_BUILD_PC ;;
install_pc) make_install $PATH_BUILD_PC;;
configure_arm) configure_for_arm;;
make_arm) make_target $PATH_BUILD_ARM ;;
install_arm) make_install $PATH_BUILD_ARM;;
*) LOG_YELLO "unknow '${OPTIONS}'";;
esac
3 编译步骤
./build_configure.sh tar
./build_configure.sh configure_arm
./build_configure.sh make_arm
./build_configure.sh install_arm