diff --git a/lycium/Buildtools/README.md b/lycium/Buildtools/README.md new file mode 100644 index 0000000000000000000000000000000000000000..25a55d0aff4d052ce33790a2213804e2e652c1ff --- /dev/null +++ b/lycium/Buildtools/README.md @@ -0,0 +1,25 @@ +## 下载ohos sdk +[参考OHOS_SDK-Usage](../doc/ohos_use_sdk/OHOS_SDK-Usage.md) + +## 配置环境变量 +```shell + # 此处是我的ohos sdk解压目录, 使用者需自行配置自己的目录 + export OHOS_SDK=/home/ohos/tools/OH_SDK/ohos-sdk/linux +``` + +## 拷贝编译工具 +``` + # 校验压缩包 + sha512sum -c SHA512SUM + #输出 toolchain.tar.gz: OK + # 解压拷贝编译工具 + tar -zxvf toolchain.tar.gz + cp toolchain/* ${OHOS_SDK}/native/llvm/bin +``` + +## 设置编译机cmake识别OHOS系统 +由于sdk中的cmake版本过低, 导致很多开源库在cmake阶段报错. 这个时候就需要用户在编译机上安装一个高版本的cmake(推荐使用3.26版本). 但是 +cmake官方是不支持OHOS的. 解决方案: +``` +cp $OHOS_SDK/native/build-tools/cmake/share/cmake-3.16/Modules/Platform/OHOS.cmake xxx(代表你编译机安装的cmake的路径)/cmake-3.26.3-linux-x86_64/share/cmake-3.26/Modules/Platform +``` diff --git a/lycium/Buildtools/SHA512SUM b/lycium/Buildtools/SHA512SUM new file mode 100644 index 0000000000000000000000000000000000000000..08d6dc6b692f5f0eb63e45ee9fb9c32ed7de9cac --- /dev/null +++ b/lycium/Buildtools/SHA512SUM @@ -0,0 +1 @@ +392ced3d95dec1be7354eb4d530df2bb3a1798da327b133592646ea6040841f1645a4690309ce72a3d0d28da083eaf53557c6345905b715083d0d9062445d4b7 toolchain.tar.gz \ No newline at end of file diff --git a/lycium/Buildtools/toolchain.tar.gz b/lycium/Buildtools/toolchain.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..e533e7906b07a3ba9eb61dc6ff1ce65333b1d703 Binary files /dev/null and b/lycium/Buildtools/toolchain.tar.gz differ diff --git a/lycium/CItools/busybox/busybox_arm64_v8a_Compilation_instructions.md b/lycium/CItools/busybox/busybox_arm64_v8a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..637ec75522d58e8cee73fccc6e12270978ada804 --- /dev/null +++ b/lycium/CItools/busybox/busybox_arm64_v8a_Compilation_instructions.md @@ -0,0 +1,125 @@ +# busybox 工具arm64-v8a交叉编译说明 + +## 简介 +BusyBox:嵌入式Linux的瑞士军刀。 + +本文档主要介绍其arm64位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 64位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz) + +### 解压编译工具链 + +- 解压64位 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压busybox源码 + +- 下载最新版本busybox源码 https://busybox.net/downloads/busybox-1.36.1.tar.bz2 (以1.36.1为例) +- 通过tar命令解压源码 tar xvf busybox-1.36.1.tar.bz2 + +- 进入源码解压后目录 cd busybox-1.36.1 + +### 设置交叉编译环境 + +- 通过make menuconfig 设置 64 位交叉编译环境 +- 首先要安装 sudo apt-get install libncurses5-dev,确保可以看到配置界面 +- make menuconfig 执行后展示界面如下, 选择Setting进入 + + ![conifig](media/config1.png) + +- 通过下方向键,选择---Build Options 里面的Build static binary选项 + + ![conifig](media/config2.png) + +- 通过下方向键,选择---Build Options 里面的Cross compiler prefix选项 + + ![conifig](media/config3.png) + +- 进入后输入 /xxxgcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu- ,xxx 是表示工具链存放的目录路径 + + ![conifig](media/config_arm64_v8a.png) + +- 选择OK后,界面如下图所示 + + ![conifig](media/config_arm64_v8a_success.png) + +- 通过下方向键,选择---Installation Options 里面的Destination path for 'make install'选项,通过Shift+Backspace删除原来的路径,设置为arm64_v8a_install + + ![conifig](media/config_arm64_v8a_install.png) + +- 选择OK后,界面如下图所示 + + ![conifig](media/config_arm64_v8a_install_success.png) + +- 通过右方向键,选择Exit 退出设置,回到如下界面 + + ![conifig](media/config4.png) + +- 再通过右方向键,选择Exit 退出设置,展示如下页面,选择Yes保存配置 + + ![conifig](media/config5.png) + + + +### 编译busybox源码 + +在解压后的目录执行make VERBOSE=1 命令编译busybox源码,执行结果截图如下 + + ![build_success](media/build_success.png) + +### 安装busybox + +执行 make install,执行结果截图如下: + + ![install](media/install64.png) + +### 编译安装完成 + +查看编译目录下的arm64_v8a_install文件夹,并可通过file bin/busybox看到文件属性 + + ![file32](media/file_64.png) + +### 运行结果 + +将安装目录arm64_v8a_install文件夹压缩打包,发送到OHOS开发板中 + +```shell +#打包对应编译目录下的install文件夹 +tar -zcvf arm64_v8a_install.tar.gz arm64_v8a_install/ +#发送到OHOS系统开发板上 +hdc file send xxx\arm64_v8a_install.tar.gz /data +#进入开发板/data,解压arm64_v8a_install.tar.gz +hdc shell +cd /data +tar -zxvf arm64_v8a_install.tar.gz +``` + +进入arm64_v8a_install/bin目录,执行./busybox --help 效果如下截图 + + ![run_file](./media/run.png) + +### busybox 支持的命令 + +busybox 支持的命令, 如果程序运行时报 cmd 找不到或者不识别. 优先在下表中查找看看 busybox 是否支持 + + ![cmd](./media/cmd64.png) + + 如果已经支持, 则可在 /bin 目录创建对应 cmd 的软连接,示例: + +```shell +# 假设 sed 命令报错 +# busybox 支持 sed +cd /bin +ln -fs busybox sed +# 验证 +sed --version +``` + + ![lnfile](./media/lnfile.png) + diff --git a/lycium/CItools/busybox/busybox_armeabi-v7a_Compilation_instructions.md b/lycium/CItools/busybox/busybox_armeabi-v7a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..832aa9a1b4f311ba5a7544b44ea2dc77e2163a83 --- /dev/null +++ b/lycium/CItools/busybox/busybox_armeabi-v7a_Compilation_instructions.md @@ -0,0 +1,124 @@ +# busybox 工具armeabi-v7a交叉编译说明 + +## 简介 +BusyBox:嵌入式Linux的瑞士军刀。 + +本文档主要介绍其arm32位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 32位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz) + +### 解压编译工具链 + +- 解压32位tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压make源码 + +- 下载最新版本busybox源码 https://busybox.net/downloads/busybox-1.36.1.tar.bz2 (以1.36.1为例) +- 通过tar命令解压源码 tar xvf busybox-1.36.1.tar.bz2 + +- 进入源码解压后目录 cd busybox-1.36.1 + +### 设置交叉编译环境 + +- 通过make menuconfig 设置32位交叉编译环境 +- 首先要安装 sudo apt-get install libncurses5-dev,确保可以看到配置界面 +- make menuconfig 执行后展示界面如下, 选择Setting进入 + + ![conifig](media/config1.png) + +- 通过下方向键,选择---Build Options 里面的Build static binary选项 + + ![conifig](media/config2.png) + +- 通过下方向键,选择---Build Options 里面的Cross compiler prefix选项 + + ![conifig](media/config3.png) + +- 进入后输入 /xxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin/arm-linux-gnueabi- ,xxx 是表示工具链存放的目录路径 + + ![conifig](media/config_armeabi_v7a.png) + +- 选择OK后,界面如下图所示 + + ![conifig](media/config_armeabi_v7a_success.png) + +- 通过下方向键,选择---Installation Options 里面的Destination path for 'make install'选项,通过Shift+Backspace删除原来的路径,设置为armeabi_v7a_install + + ![conifig](media/config_armeabi_v7a_install.png) + +- 选择OK后,界面如下图所示 + + ![conifig](media/config_armeabi_v7a_install_success.png) + +- 通过右方向键,选择Exit 退出设置,回到如下界面 + + ![conifig](media/config4.png) + +- 再通过右方向键,选择Exit 退出设置,展示如下页面,选择Yes保存配置 + + ![conifig](media/config5.png) + + + +### 编译busybox源码 + +在解压后的目录执行make VERBOSE=1 命令编译busybox源码,执行结果截图如下 + + ![buildsuccess](media/build_success.png) + +### 安装busybox + +执行 make install,执行结果截图如下: + + ![install](media/install32.png) + +### 编译安装完成 + +查看编译目录下的armeabi_v7a_install文件夹,并可通过file bin/busybox看到文件属性 + + ![file32](media/file_32.png) + +### 运行结果 + +将安装目录armeabi_v7a_install文件夹压缩打包,发送到OHOS开发板中 + +```shell +#打包对应编译目录下的install文件夹 +tar -zcvf armeabi_v7a_install.tar.gz armeabi_v7a_install/ +#发送到OHOS系统开发板上 +hdc file send xxx\armeabi_v7a_install.tar.gz /data +#进入开发板/data,解压armeabi_v7a_install.tar.gz +hdc shell +cd /data +tar -zxvf armeabi_v7a_install.tar.gz +``` + +进入armeabi_v7a_install/bin目录,执行./busybox --help 效果如下截图 + + ![run_file](./media/run.png) + +### busybox 支持的命令 + +busybox 支持的命令, 如果程序运行时报 cmd 找不到或者不识别. 优先在下表中查找看看 busybox 是否支持 + + ![cmd](./media/cmd32.png) + + 如果已经支持, 则可在 /bin 目录创建对应 cmd 的软连接,示例: + +```shell +# 假设 sed 命令报错 +# busybox 支持 sed +cd /bin +ln -fs busybox sed +# 验证 +sed --version +``` + + ![lnfile](./media/lnfile.png) diff --git a/lycium/CItools/busybox/media/build_success.png b/lycium/CItools/busybox/media/build_success.png new file mode 100644 index 0000000000000000000000000000000000000000..5a4b629ee201d29dc5a40ea23f216634edb103a6 Binary files /dev/null and b/lycium/CItools/busybox/media/build_success.png differ diff --git a/lycium/CItools/busybox/media/cmd32.png b/lycium/CItools/busybox/media/cmd32.png new file mode 100644 index 0000000000000000000000000000000000000000..3bc15a18b721d4a67baf6091332a81cc22fc8fb5 Binary files /dev/null and b/lycium/CItools/busybox/media/cmd32.png differ diff --git a/lycium/CItools/busybox/media/cmd64.png b/lycium/CItools/busybox/media/cmd64.png new file mode 100644 index 0000000000000000000000000000000000000000..83a895060b94bc8b5027000b532e78d0b3a2eae5 Binary files /dev/null and b/lycium/CItools/busybox/media/cmd64.png differ diff --git a/lycium/CItools/busybox/media/config1.png b/lycium/CItools/busybox/media/config1.png new file mode 100644 index 0000000000000000000000000000000000000000..212c18aafc9f57e37073d4d96e64a1c15f1f93e5 Binary files /dev/null and b/lycium/CItools/busybox/media/config1.png differ diff --git a/lycium/CItools/busybox/media/config2.png b/lycium/CItools/busybox/media/config2.png new file mode 100644 index 0000000000000000000000000000000000000000..12e7a2a4461c1c8776cb9ab78956f0808e1ab201 Binary files /dev/null and b/lycium/CItools/busybox/media/config2.png differ diff --git a/lycium/CItools/busybox/media/config3.png b/lycium/CItools/busybox/media/config3.png new file mode 100644 index 0000000000000000000000000000000000000000..1d4c3dc5ff0ba27ecc901ac84c19b6dd59184bec Binary files /dev/null and b/lycium/CItools/busybox/media/config3.png differ diff --git a/lycium/CItools/busybox/media/config4.png b/lycium/CItools/busybox/media/config4.png new file mode 100644 index 0000000000000000000000000000000000000000..affbaa1765ee0beadb33c76e3d4fa48d69ba2527 Binary files /dev/null and b/lycium/CItools/busybox/media/config4.png differ diff --git a/lycium/CItools/busybox/media/config5.png b/lycium/CItools/busybox/media/config5.png new file mode 100644 index 0000000000000000000000000000000000000000..27c0bfc42c69388727eacc2d2821cf5721ecf861 Binary files /dev/null and b/lycium/CItools/busybox/media/config5.png differ diff --git a/lycium/CItools/busybox/media/config_arm64_v8a.png b/lycium/CItools/busybox/media/config_arm64_v8a.png new file mode 100644 index 0000000000000000000000000000000000000000..c8d4f794c6131b5fceff218d385387802afd636b Binary files /dev/null and b/lycium/CItools/busybox/media/config_arm64_v8a.png differ diff --git a/lycium/CItools/busybox/media/config_arm64_v8a_install.png b/lycium/CItools/busybox/media/config_arm64_v8a_install.png new file mode 100644 index 0000000000000000000000000000000000000000..f32e1d042847c5169f7def53ef341d0e831c9e46 Binary files /dev/null and b/lycium/CItools/busybox/media/config_arm64_v8a_install.png differ diff --git a/lycium/CItools/busybox/media/config_arm64_v8a_install_success.png b/lycium/CItools/busybox/media/config_arm64_v8a_install_success.png new file mode 100644 index 0000000000000000000000000000000000000000..39b96d50cc831d65c76de43d9b7e1d5690968dba Binary files /dev/null and b/lycium/CItools/busybox/media/config_arm64_v8a_install_success.png differ diff --git a/lycium/CItools/busybox/media/config_arm64_v8a_success.png b/lycium/CItools/busybox/media/config_arm64_v8a_success.png new file mode 100644 index 0000000000000000000000000000000000000000..9154fb562e7a900aa627e5deba246e759e19ab91 Binary files /dev/null and b/lycium/CItools/busybox/media/config_arm64_v8a_success.png differ diff --git a/lycium/CItools/busybox/media/config_armeabi_v7a.png b/lycium/CItools/busybox/media/config_armeabi_v7a.png new file mode 100644 index 0000000000000000000000000000000000000000..f6293cdd6feae174aefe0252a61399c71b93a353 Binary files /dev/null and b/lycium/CItools/busybox/media/config_armeabi_v7a.png differ diff --git a/lycium/CItools/busybox/media/config_armeabi_v7a_install.png b/lycium/CItools/busybox/media/config_armeabi_v7a_install.png new file mode 100644 index 0000000000000000000000000000000000000000..454fc7bb806d911dc7d94b65b2882f54d0c76d58 Binary files /dev/null and b/lycium/CItools/busybox/media/config_armeabi_v7a_install.png differ diff --git a/lycium/CItools/busybox/media/config_armeabi_v7a_install_success.png b/lycium/CItools/busybox/media/config_armeabi_v7a_install_success.png new file mode 100644 index 0000000000000000000000000000000000000000..fb48c25a6292743bcf4baaea4874f3167f8eb51e Binary files /dev/null and b/lycium/CItools/busybox/media/config_armeabi_v7a_install_success.png differ diff --git a/lycium/CItools/busybox/media/config_armeabi_v7a_success.png b/lycium/CItools/busybox/media/config_armeabi_v7a_success.png new file mode 100644 index 0000000000000000000000000000000000000000..07d5b8db90aeb72afdeccae61a7e7c7e0468817e Binary files /dev/null and b/lycium/CItools/busybox/media/config_armeabi_v7a_success.png differ diff --git a/lycium/CItools/busybox/media/file_32.png b/lycium/CItools/busybox/media/file_32.png new file mode 100644 index 0000000000000000000000000000000000000000..c1a40a245b0682358f2a5a5305ab42d29ae03f1c Binary files /dev/null and b/lycium/CItools/busybox/media/file_32.png differ diff --git a/lycium/CItools/busybox/media/file_64.png b/lycium/CItools/busybox/media/file_64.png new file mode 100644 index 0000000000000000000000000000000000000000..159927752b1dcabb6183a4fa30d4759e37ed775a Binary files /dev/null and b/lycium/CItools/busybox/media/file_64.png differ diff --git a/lycium/CItools/busybox/media/install32.png b/lycium/CItools/busybox/media/install32.png new file mode 100644 index 0000000000000000000000000000000000000000..2f420676812819f704ea757eb8d7e8f861fc67c4 Binary files /dev/null and b/lycium/CItools/busybox/media/install32.png differ diff --git a/lycium/CItools/busybox/media/install64.png b/lycium/CItools/busybox/media/install64.png new file mode 100644 index 0000000000000000000000000000000000000000..bdbb6551bb2138f30d5cec5bf3145a2bb10a89b0 Binary files /dev/null and b/lycium/CItools/busybox/media/install64.png differ diff --git a/lycium/CItools/busybox/media/lnfile.png b/lycium/CItools/busybox/media/lnfile.png new file mode 100644 index 0000000000000000000000000000000000000000..4e2d307d6c074bdf25241ce9c22dbe85676a35cb Binary files /dev/null and b/lycium/CItools/busybox/media/lnfile.png differ diff --git a/lycium/CItools/busybox/media/run.png b/lycium/CItools/busybox/media/run.png new file mode 100644 index 0000000000000000000000000000000000000000..b552870d9d733c5ede4ee66c19dfa2277d348b55 Binary files /dev/null and b/lycium/CItools/busybox/media/run.png differ diff --git a/lycium/CItools/cmake/cmake_arm64_v8a_compilation_instructions.md b/lycium/CItools/cmake/cmake_arm64_v8a_compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..330c144e23f7492cfaf64bff61087c582acb3ea6 --- /dev/null +++ b/lycium/CItools/cmake/cmake_arm64_v8a_compilation_instructions.md @@ -0,0 +1,123 @@ +# cmake工具arm64-v8a交叉编译说明 + +## 简介 +CMake是一个跨平台的编译安装工具。 + +本文档主要介绍其arm64位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 64位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz) + +### 解压编译工具链 + +- 解压64位工具链tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压cmake源码 + +- 下载最新版本的cmake源码,[下载链接](https://cmake.org/files/v3.27/cmake-3.27.0-rc2.tar.gz) (以3.27-rc2为例) +- 通过tar命令解压源码 tar -xzvf cmake-3.27.0-rc2.tar.gz + +### 创建编译目录 + +- 进入源码解压后目录 cd cmake-3.27.0-rc2 +- 创建64位编译目录 mkdir arm64_v8a + +### 设置交叉编译环境 + +- 设置64位交叉编译环境, xxx 是表示工具链存放的目录路径 + + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin +export AS=${TOOLS}/aarch64-linux-gnu-as +export CC=${TOOLS}/aarch64-linux-gnu-gcc +export CXX=${TOOLS}/aarch64-linux-gnu-g++ +export LD=${TOOLS}/aarch64-linux-gnu-ld +export STRIP=${TOOLS}/aarch64-linux-gnu-strip +export RANLIB=${TOOLS}/aarch64-linux-gnu-ranlib +export OBJDUMP=${TOOLS}/aarch64-linux-gnu-objdump +export OBJCOPY=${TOOLS}/aarch64-linux-gnu-objcopy +export NM=${TOOLS}/aarch64-linux-gnu-gcc-nm +export AR=${TOOLS}/aarch64-linux-gnu-ar +export LDFLAGS="-static" +``` + +### 生成makefile + +- 进入64位编译路径 cd arm64_v8a +- 执行如下命令生成makefile + +```shell +cmake ../ -L -DCMAKE_USE_OPENSSL=OFF -DBUILD_TESTING=OFF +``` + +### 编译cmake源码 + +在对应的编译目录执行 make VERBOSE=1,编译成功截图如下 + + ![file](media/build_success_64.png) + +### 编译完成 + +查看编译生成的文件ls bin/, 编译出来cmake ctest 就可以,并可通过file cmake 看到文件属性,必须是静态链接 + + ![64_file](media/64_file.png) + +### 安装cmake + +由于交叉编译不能make install安装cmake,故make install X86系统的cmake + +- 重新开一个窗口,进入cmake源码目录 + +- 创建一个host目录 + +```shell +mkdir host +``` + +- 进入host目录,执行 cmake生成makefile,命令如下 + +```shell +cmake ../ -L -DCMAKE_USE_OPENSSL=OFF -DCMAKE_INSTALL_PREFIX="${PWD}/install" +``` + +- 执行make install 进行编译安装,完成后可以看到Modules目录下的文件 + +![insatll_file](media/install.png) + +- 将./install/share/cmake-3.27/Modules/ 拷贝到交叉编译目录下 + +```shell +#重新进入交叉编译目录,新建share/cmake-3.27/目录 +cd ../arme64_v8a +mkdir -p share/cmake-3.27/ +cp ../host/install/share/cmake-3.27/Modules/ ./share/cmake-3.27/ -rf +``` + +### OHOS系统上运行 + +将编译目录文件压缩打包,发送到OHOS开发板中 + +```shell +#打包编译目录 +tar -zcvf arme64_v8a.tar.gz arm64_build/ +#发送到OHOS系统开发板上 +hdc file send xxx\arme64_v8a.tar.gz /data +#进入开发板/data,解压arme64_v8a.tar.gz +hdc shell +cd /data +tar -zxvf arme64_v8a.tar.gz +``` + +进入arme64_v8a/bin目录,执行./cmake -version 和 ./ctest -version 效果如下截图 + + ![run_file](media/run.png) + + + diff --git a/lycium/CItools/cmake/cmake_armeabi_v7a_compilation_instructions.md b/lycium/CItools/cmake/cmake_armeabi_v7a_compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..16d9198a39f7e66d67c8b797c3828471eb891f2e --- /dev/null +++ b/lycium/CItools/cmake/cmake_armeabi_v7a_compilation_instructions.md @@ -0,0 +1,122 @@ +# cmake工具armeabi_v7a 交叉编译说明 + +## 简介 +CMake是一个跨平台的编译安装工具。 + +本文档主要介绍其arm32位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 32位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz) + +### 解压编译工具链 + +- 解压32位工具链 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压cmake源码 + +- 下载最新版本的cmake源码,[下载链接](https://cmake.org/files/v3.27/cmake-3.27.0-rc2.tar.gz) (以3.27-rc2为例) +- 通过tar命令解压源码 tar -xzvf cmake-3.27.0-rc2.tar.gz + +### 创建编译目录 + +- 进入源码解压后目录 cd cmake-3.27.0-rc2 +- 创建32位编译目录 mkdir armeabi_v7a + +### 设置交叉编译环境 + +- 设置32位交叉编译环境, xxx 是表示工具链存放的目录路径 + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin +export AS=${TOOLS}/arm-linux-gnueabi-as +export CC=${TOOLS}/arm-linux-gnueabi-gcc +export CXX=${TOOLS}/arm-linux-gnueabi-g++ +export LD=${TOOLS}/arm-linux-gnueabi-ld +export STRIP=${TOOLS}/arm-linux-gnueabi-strip +export RANLIB=${TOOLS}/arm-linux-gnueabi-ranlib +export OBJDUMP=${TOOLS}/arm-linux-gnueabi-objdump +export OBJCOPY=${TOOLS}/arm-linux-gnueabi-objcopy +export NM=${TOOLS}/arm-linux-gnueabi-gcc-nm +export AR=${TOOLS}/arm-linux-gnueabi-ar +export LDFLAGS="-static" +``` + +### 生成makefile + +- 进入32位为 cd armeabi_v7a +- 执行如下命令生成makefile + +```shell +cmake ../ -L -DCMAKE_USE_OPENSSL=OFF -DBUILD_TESTING=OFF +``` + +### 编译cmake源码 + +在对应的编译目录执行 make VERBOSE=1,编译成功截图如下 + + ![file](media/build_success_32.png) + +### 编译完成 + +查看编译生成的文件ls bin/, 编译出来cmake ctest 就可以,并可通过file cmake 看到文件属性,必须是静态链接 + + ![32_file](media/32_file.png) + +### 安装cmake + +由于交叉编译不能make install安装cmake,故make install X86系统的cmake + +- 重新开一个窗口,进入cmake源码目录 + +- 创建一个host目录 + +```shell +mkdir host +``` + +- 进入host目录,执行 cmake生成makefile,命令如下 + +```shell +cmake ../ -L -DCMAKE_USE_OPENSSL=OFF -DCMAKE_INSTALL_PREFIX="${PWD}/install" +``` + +- 执行make install 进行编译安装,完成后可以看到Modules目录下的文件 + +![insatll_file](media/install.png) + +- 将./install/share/cmake-3.27/Modules/ 拷贝到交叉编译目录下 + +```shell +#重新进入交叉编译目录,新建share/cmake-3.27/目录 +cd ../armeabi_v7a +mkdir -p share/cmake-3.27/ +cp ../host/install/share/cmake-3.27/Modules/ ./share/cmake-3.27/ -rf +``` + +### OHOS系统上运行 + +将编译目录文件压缩打包,发送到OHOS开发板中 + +```shell +#打包编译目录 +tar -zcvf armeabi_v7a.tar.gz armeabi_v7a/ +#发送到OHOS系统开发板上 +hdc file send xxx\armeabi_v7a.tar.gz /data +#进入开发板/data,解压arm64_build.tar.gz +hdc shell +cd /data +tar -zxvf armeabi_v7a.tar.gz +``` + +进入arm64_build/bin目录,执行./cmake -version 和 ./ctest -version 效果如下截图 + + ![run_file](media/run.png) + + + diff --git a/lycium/CItools/cmake/media/32_file.png b/lycium/CItools/cmake/media/32_file.png new file mode 100644 index 0000000000000000000000000000000000000000..f463d14ec301655d8531e72d3ca42803ebffa6a9 Binary files /dev/null and b/lycium/CItools/cmake/media/32_file.png differ diff --git a/lycium/CItools/cmake/media/64_file.png b/lycium/CItools/cmake/media/64_file.png new file mode 100644 index 0000000000000000000000000000000000000000..c667de2784171ee386f4c141290924ef8c6e8ec8 Binary files /dev/null and b/lycium/CItools/cmake/media/64_file.png differ diff --git a/lycium/CItools/cmake/media/build_success_32.png b/lycium/CItools/cmake/media/build_success_32.png new file mode 100644 index 0000000000000000000000000000000000000000..ac326bed2fc3bed0c07e5219aad5530b4570c175 Binary files /dev/null and b/lycium/CItools/cmake/media/build_success_32.png differ diff --git a/lycium/CItools/cmake/media/build_success_64.png b/lycium/CItools/cmake/media/build_success_64.png new file mode 100644 index 0000000000000000000000000000000000000000..f64aa8f9af996f2aa70626baee8e0019e1572c32 Binary files /dev/null and b/lycium/CItools/cmake/media/build_success_64.png differ diff --git a/lycium/CItools/cmake/media/install.png b/lycium/CItools/cmake/media/install.png new file mode 100644 index 0000000000000000000000000000000000000000..689499a3048310b1c15f7438164e2b7a1b2b0cb2 Binary files /dev/null and b/lycium/CItools/cmake/media/install.png differ diff --git a/lycium/CItools/cmake/media/run.png b/lycium/CItools/cmake/media/run.png new file mode 100644 index 0000000000000000000000000000000000000000..41c73eb3e538ff0424c0fcdf23e56a37437148c4 Binary files /dev/null and b/lycium/CItools/cmake/media/run.png differ diff --git a/lycium/CItools/make/make_arm64_v8a_Compilation_instructions.md b/lycium/CItools/make/make_arm64_v8a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..22122fd8feeda0619b93453dc5db18d764004faa --- /dev/null +++ b/lycium/CItools/make/make_arm64_v8a_Compilation_instructions.md @@ -0,0 +1,97 @@ +# make 工具arm64-v8a交叉编译说明 + +## 简介 +GNUMake是一种工具,用于控制从程序的源文件生成程序的可执行文件和其他非源文件。 + +本文档主要介绍其arm64位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 64位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz) + +### 解压编译工具链 + +- 解压64位 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压make源码 + +- 下载最新版本的make源码 https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz (以4.4.1为例) +- 通过tar命令解压源码 tar -xzvf make-4.4.1.tar.gz + +### 创建编译目录 + +- 进入源码解压后目录 cd make-4.4.1 + +- 创建64位编译目录 mkdir arm64_v8a + +### 设置交叉编译环境 + +- 设置64位交叉编译环境, xxx 是表示工具链存放的目录路径 + + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin +export AS=${TOOLS}/aarch64-linux-gnu-as +export CC=${TOOLS}/aarch64-linux-gnu-gcc +export CXX=${TOOLS}/aarch64-linux-gnu-g++ +export LD=${TOOLS}/aarch64-linux-gnu-ld +export STRIP=${TOOLS}/aarch64-linux-gnu-strip +export RANLIB=${TOOLS}/aarch64-linux-gnu-ranlib +export OBJDUMP=${TOOLS}/aarch64-linux-gnu-objdump +export OBJCOPY=${TOOLS}/aarch64-linux-gnu-objcopy +export NM=${TOOLS}/aarch64-linux-gnu-gcc-nm +export AR=${TOOLS}/aarch64-linux-gnu-ar +``` + +### 生成makefile + +- 进入64位编译路径 cd arm64_v8a +- 执行如下命令生成Makefile + +```shell +../configure --host="aarch64-linux" --prefix="${PWD}/install" +``` + +- 修改Makefile,将AM_LDFLAGS = -Wl,--export-dynamic 改成AM_LDFLAGS = 即删除后面的-Wl,--export-dynamic + +### 编译make源码 + +在对应的编译目录执行make CFLAGS="-static" LDFLAGS="-static" VERBOSE=1,执行结果截图如下 + + ![success](media/build_success_64.png) + +### 安装make + +在对应编译目录执行 make install,执行结果截图如下: + + ![makesuccess](media/make_64_install.png) + +### 编译安装完成 + +查看编译目录下的install文件夹,并可通过file bin/make 看到文件属性 + + ![file64](media/file_64.png) + +### 运行结果 + +将安装目录install文件夹压缩打包,发送到OHOS开发板中 + +```shell +#打包对应编译目录下的install文件夹 +tar -zcvf install.tar.gz install/ +#发送到OHOS系统开发板上 +hdc file send xxx\install.tar.gz /data +#进入开发板/data,解压install.tar.gz +hdc shell +cd /data +tar -zxvf install.tar.gz +``` + +进入install/bin目录,执行./make -version 效果如下截图 + + ![run_file](./media/make_run.png) diff --git a/lycium/CItools/make/make_armeabi-v7a_Compilation_instructions.md b/lycium/CItools/make/make_armeabi-v7a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..0e5d5e2d7fbbf52317108e0fa8ce1e9c2bd99d51 --- /dev/null +++ b/lycium/CItools/make/make_armeabi-v7a_Compilation_instructions.md @@ -0,0 +1,96 @@ +# make 工具armeabi-v7a交叉编译说明 + +## 简介 +GNUMake是一种工具,用于控制从程序的源文件生成程序的可执行文件和其他非源文件。 + +本文档主要介绍其arm32位交叉编译步骤 + +## 编译步骤 + +### 编译工具链下载 + +- 32位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz [下载链接]https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz) + +### 解压编译工具链 + +- 解压32位 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 下载解压make源码 + +- 下载最新版本的make源码 https://ftp.gnu.org/gnu/make/make-4.4.1.tar.gz (以4.4.1为例) +- 通过tar命令解压源码 tar -xzvf make-4.4.1.tar.gz + +### 创建编译目录 + +- 进入源码解压后目录 cd make-4.4.1 + +- 创建32位为 mkdir armeabi_v7a + +### 设置交叉编译环境 + +- 设置32位交叉编译环境, xxx 是表示工具链存放的目录路径 + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin +export AS=${TOOLS}/arm-linux-gnueabi-as +export CC=${TOOLS}/arm-linux-gnueabi-gcc +export CXX=${TOOLS}/arm-linux-gnueabi-g++ +export LD=${TOOLS}/arm-linux-gnueabi-ld +export STRIP=${TOOLS}/arm-linux-gnueabi-strip +export RANLIB=${TOOLS}/arm-linux-gnueabi-ranlib +export OBJDUMP=${TOOLS}/arm-linux-gnueabi-objdump +export OBJCOPY=${TOOLS}/arm-linux-gnueabi-objcopy +export NM=${TOOLS}/arm-linux-gnueabi-gcc-nm +export AR=${TOOLS}/arm-linux-gnueabi-ar +``` + +### 生成makefile + +- 进入32位为 cd armeabi_v7a +- 执行如下命令生成makefile + +```shell +../configure --host="arm-linux" --prefix="${PWD}/install" +``` + +- 修改Makefile,将AM_LDFLAGS = -Wl,--export-dynamic 改成AM_LDFLAGS = 即删除后面的-Wl,--export-dynamic + +### 编译make源码 + +在对应的编译目录执行make CFLAGS="-static" LDFLAGS="-static" VERBOSE=1,执行结果截图如下 + + ![success](media/build_success_32.png) + +### 安装make + +在对应编译目录执行 make install,执行结果截图如下: + + ![makesuccess](media/make_install.png) + +### 编译安装完成 + +查看编译目录下的install文件夹,并可通过file bin/make 看到文件属性 + + ![file32](media/file_32.png) + +### 运行结果 + +将安装目录install文件夹压缩打包,发送到OHOS开发板中 + +```shell +#打包对应编译目录下的install文件夹 +tar -zcvf install.tar.gz install/ +#发送到OHOS系统开发板上 +hdc file send xxx\install.tar.gz /data +#进入开发板/data,解压install.tar.gz +hdc shell +cd /data +tar -zxvf install.tar.gz +``` + +进入install/bin目录,执行./make -version 效果如下截图 + + ![run_file](./media/make_run.png) diff --git a/lycium/CItools/make/media/build_success_32.png b/lycium/CItools/make/media/build_success_32.png new file mode 100644 index 0000000000000000000000000000000000000000..a769d9bad9bb907464f0ea2d2668b0ab5081b90a Binary files /dev/null and b/lycium/CItools/make/media/build_success_32.png differ diff --git a/lycium/CItools/make/media/build_success_64.png b/lycium/CItools/make/media/build_success_64.png new file mode 100644 index 0000000000000000000000000000000000000000..c4ddb796951b9937a7af0261811cfccd5182a9f6 Binary files /dev/null and b/lycium/CItools/make/media/build_success_64.png differ diff --git a/lycium/CItools/make/media/file_32.png b/lycium/CItools/make/media/file_32.png new file mode 100644 index 0000000000000000000000000000000000000000..f00c320bbde34ac499bbb9c6d3ecb7daa297016e Binary files /dev/null and b/lycium/CItools/make/media/file_32.png differ diff --git a/lycium/CItools/make/media/file_64.png b/lycium/CItools/make/media/file_64.png new file mode 100644 index 0000000000000000000000000000000000000000..066876d12e919efec228753852d471cacee3265f Binary files /dev/null and b/lycium/CItools/make/media/file_64.png differ diff --git a/lycium/CItools/make/media/make_64_install.png b/lycium/CItools/make/media/make_64_install.png new file mode 100644 index 0000000000000000000000000000000000000000..266df81d48448ec6ac2c48b1b9cdd56e305581b3 Binary files /dev/null and b/lycium/CItools/make/media/make_64_install.png differ diff --git a/lycium/CItools/make/media/make_install.png b/lycium/CItools/make/media/make_install.png new file mode 100644 index 0000000000000000000000000000000000000000..e6ced8ae1918c8eaddb309fc21da1dba5cf064e5 Binary files /dev/null and b/lycium/CItools/make/media/make_install.png differ diff --git a/lycium/CItools/make/media/make_run.png b/lycium/CItools/make/media/make_run.png new file mode 100644 index 0000000000000000000000000000000000000000..6175b0e48ca60b090103ba1991887d06c73a5b70 Binary files /dev/null and b/lycium/CItools/make/media/make_run.png differ diff --git a/lycium/CItools/shell_cmd/media/bashbuild_success.png b/lycium/CItools/shell_cmd/media/bashbuild_success.png new file mode 100644 index 0000000000000000000000000000000000000000..5eb659143ce8816a9b9c16fd0557cb1251710610 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashbuild_success.png differ diff --git a/lycium/CItools/shell_cmd/media/bashfile32.png b/lycium/CItools/shell_cmd/media/bashfile32.png new file mode 100644 index 0000000000000000000000000000000000000000..e5429b1e8cddd6b05040341d152817f9f8bccf3e Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashfile32.png differ diff --git a/lycium/CItools/shell_cmd/media/bashfile64.png b/lycium/CItools/shell_cmd/media/bashfile64.png new file mode 100644 index 0000000000000000000000000000000000000000..7c5efb968685f83f9474bc6de7635c6ced5ef30e Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashfile64.png differ diff --git a/lycium/CItools/shell_cmd/media/bashinstall_32.png b/lycium/CItools/shell_cmd/media/bashinstall_32.png new file mode 100644 index 0000000000000000000000000000000000000000..7185bf5667dc7aef5042ae5aa6da57a60cbcbbc8 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashinstall_32.png differ diff --git a/lycium/CItools/shell_cmd/media/bashinstall_64.png b/lycium/CItools/shell_cmd/media/bashinstall_64.png new file mode 100644 index 0000000000000000000000000000000000000000..27fa0ac7d195d5ec33fcf45666e59d621d30ce00 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashinstall_64.png differ diff --git a/lycium/CItools/shell_cmd/media/bashrun.png b/lycium/CItools/shell_cmd/media/bashrun.png new file mode 100644 index 0000000000000000000000000000000000000000..30c7663ef64fbee98e9a6c59f2ca718a486ece02 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/bashrun.png differ diff --git a/lycium/CItools/shell_cmd/media/mawk_build_success_32.png b/lycium/CItools/shell_cmd/media/mawk_build_success_32.png new file mode 100644 index 0000000000000000000000000000000000000000..6383c5986e4468c939471b21ba1ba627bac79eee Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawk_build_success_32.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkbuild_success_64.png b/lycium/CItools/shell_cmd/media/mawkbuild_success_64.png new file mode 100644 index 0000000000000000000000000000000000000000..2dd3456e1149cc6211794436227e16b620022f9c Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkbuild_success_64.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkfile32.png b/lycium/CItools/shell_cmd/media/mawkfile32.png new file mode 100644 index 0000000000000000000000000000000000000000..b60d720de055a4d6337993c632c86f352ab1fad1 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkfile32.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkfile64.png b/lycium/CItools/shell_cmd/media/mawkfile64.png new file mode 100644 index 0000000000000000000000000000000000000000..e2d1e33c401a40e3f90d13d8b596921011113764 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkfile64.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkinstall_32.png b/lycium/CItools/shell_cmd/media/mawkinstall_32.png new file mode 100644 index 0000000000000000000000000000000000000000..71d54635f4efdd06543a5443b8b6027daf23ab89 Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkinstall_32.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkinstall_64.png b/lycium/CItools/shell_cmd/media/mawkinstall_64.png new file mode 100644 index 0000000000000000000000000000000000000000..6984406361b6d33128320f4c9c9c156a59f8e55c Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkinstall_64.png differ diff --git a/lycium/CItools/shell_cmd/media/mawkrun.png b/lycium/CItools/shell_cmd/media/mawkrun.png new file mode 100644 index 0000000000000000000000000000000000000000..5aaf8d730ab1ff49e5aa42a8f35cb9ce603ee7af Binary files /dev/null and b/lycium/CItools/shell_cmd/media/mawkrun.png differ diff --git a/lycium/CItools/shell_cmd/shell_cmd_arm64_v8a_Compilation_instructions.md b/lycium/CItools/shell_cmd/shell_cmd_arm64_v8a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..87a2e9b6d8feb0946cfa07d3ff746db7b87b9e4e --- /dev/null +++ b/lycium/CItools/shell_cmd/shell_cmd_arm64_v8a_Compilation_instructions.md @@ -0,0 +1,114 @@ +# shell_cmd 工具arm64-v8a交叉编译说明 + +## 简介 +命令是用户向系统内核发出控制请求,与之交互的文本流。 +shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。 + +本文主要介绍bash和mawk这两个命令的编译方法,这两个工具的编译步骤都是一样的,其他shell命令,可以参考该编译方法进行编译。 + +## 编译步骤 + +### 编译工具链下载 + +- 64位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz) + +### 解压编译工具链 + +- 解压64位 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 设置交叉编译环境 + +- 设置64位交叉编译环境, xxx 是表示工具链存放的目录路径 + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/bin +export AS=${TOOLS}/aarch64-linux-gnu-as +export CC=${TOOLS}/aarch64-linux-gnu-gcc +export CXX=${TOOLS}/aarch64-linux-gnu-g++ +export LD=${TOOLS}/aarch64-linux-gnu-ld +export STRIP=${TOOLS}/aarch64-linux-gnu-strip +export RANLIB=${TOOLS}/aarch64-linux-gnu-ranlib +export OBJDUMP=${TOOLS}/aarch64-linux-gnu-objdump +export OBJCOPY=${TOOLS}/aarch64-linux-gnu-objcopy +export NM=${TOOLS}/aarch64-linux-gnu-gcc-nm +export AR=${TOOLS}/aarch64-linux-gnu-ar +export READELF="${TOOLS}/aarch64-linux-gnu-readelf" +``` + +### 下载解压源码 + +- 下载bash源码,[下载链接](https://ftp.gnu.org/gnu/bash/bash-5.2.15.tar.gz) (以5.2.15为例) +- 通过tar命令解压源码 tar -zxf bash-5.2.15.tar.gz +- 下载mawk源码,[下载链接](https://invisible-island.net/archives/mawk/mawk-1.3.4-20230525.tgz) (以1.3.4-20230525为例) +- 通过tar命令解压源码 tar -zxf mawk-1.3.4-20230525.tgz + +### 生成makefile + +- 编译bash,请进入bash源码目录执行如下命令生成makefile +- 编译mawk,请进入mawk源码目录执行如下命令生成makefile + +```shell +./configure --host=aarch64-linux --prefix="${PWD}/arm64_v8a_install" +``` + +### 编译源码 + +- 进入bash源码目录执行 make LDFLAGS="-static" VERBOSE=1 命令编译bash源码,执行结果截图如下 + + + ![bashbuildsuccess](./media/bashbuild_success.png) + +- 进入mawk源码目录执行 make LDFLAGS="-static" VERBOSE=1 命令编译mawk源码,执行结果截图如下 + + ![mawkbuildsuccess](./media/mawkbuild_success_64.png) + +### 安装 + +- 进入bash源码目录执行 执行 make install,执行结果截图如下 + + + ![bashinstallsuccess](./media/bashinstall_64.png) + +- 进入mawk源码目录执行 执行 make install,执行结果截图如下 + + ![mawkinstallsuccess](./media/mawkinstall_64.png) + +### 编译安装完成 + +- 进入bash安装目录下的arm64_v8a_install/bin文件夹,并可通过file bash看到文件属性 + + + ![bashfile32](./media/bashfile64.png) + +- 进入mawk安装目录下的arm64_v8a_install/bin文件夹,并可通过file mawk看到文件属性 + + ![mawkfile32](./media/mawkfile64.png) + +### 运行结果 + +- 将bash和mawk的安装目录arm64_v8a_install文件夹合并,然后压缩打包,发送到OHOS开发板中 + +```shell +#合并安装目录,进入bash源码目录,将mawk安装目录下拷贝到当前 +cp ../mawk-1.3.4-20230525/arm64_v8a_install/ ./ -rf +#打包的arm64_v8a_install文件夹 +tar -zcvf arm64_v8a_install.tar.gz armeabi_v7a_install/ +#发送到OHOS系统开发板上 +hdc file send xxx\arm64_v8a_install.tar.gz /data +#进入开发板/data,解压arm64_v8a_install.tar.gz +hdc shell +cd /data +tar -zxvf arm64_v8a_install.tar.gz +``` + +- 进入arm64_v8a_install/bin目录,执行./bash --version 效果如下截图 + + + ![run](./media/bashrun.png) + +- 进入arm64_v8a_install/bin目录,执行./mawk --version 效果如下截图 + + ![run](./media/mawkrun.png) diff --git a/lycium/CItools/shell_cmd/shell_cmd_armeabi_v7a_Compilation_instructions.md b/lycium/CItools/shell_cmd/shell_cmd_armeabi_v7a_Compilation_instructions.md new file mode 100644 index 0000000000000000000000000000000000000000..227a67b7661e76d6ef0e624b4b4a7db04f7dbb28 --- /dev/null +++ b/lycium/CItools/shell_cmd/shell_cmd_armeabi_v7a_Compilation_instructions.md @@ -0,0 +1,114 @@ +# shell_cmd 工具armeabi-v7a交叉编译说明 + +## 简介 +命令是用户向系统内核发出控制请求,与之交互的文本流。 +shell是一个命令行解释器,将用户命令解析为操作系统所能理解的指令,实现用户与操作系统的交互。 + +本文主要介绍bash和mawk这两个命令的编译方法,这两个工具的编译步骤都是一样的,其他shell命令,可以参考该编译方法进行编译。 + +## 编译步骤 + +### 编译工具链下载 + +- 32位编译工具:gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz [下载链接](https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabi/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz) + +### 解压编译工具链 + +- 解压32位 tar xvJf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi.tar.xz + + +- 进入解压后的文件夹,查看bin目录下就有我们编译用到的工具链 + +### 设置交叉编译环境 + +- 设置32位交叉编译环境, xxx 是表示工具链存放的目录路径 + +```shell +export TOOLS=/xxx/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabi/bin +export AS=${TOOLS}/arm-linux-gnueabi-as +export CC=${TOOLS}/arm-linux-gnueabi-gcc +export CXX=${TOOLS}/arm-linux-gnueabi-g++ +export LD=${TOOLS}/arm-linux-gnueabi-ld +export STRIP=${TOOLS}/arm-linux-gnueabi-strip +export RANLIB=${TOOLS}/arm-linux-gnueabi-ranlib +export OBJDUMP=${TOOLS}/arm-linux-gnueabi-objdump +export OBJCOPY=${TOOLS}/arm-linux-gnueabi-objcopy +export NM=${TOOLS}/arm-linux-gnueabi-gcc-nm +export AR=${TOOLS}/arm-linux-gnueabi-ar +export READELF="${TOOLS}/arm-linux-gnueabi-readelf" +``` + +### 下载解压源码 + +- 下载bash源码,[下载链接](https://ftp.gnu.org/gnu/bash/bash-5.2.15.tar.gz) (以5.2.15为例) +- 通过tar命令解压源码 tar -zxf bash-5.2.15.tar.gz +- 下载mawk源码,[下载链接](https://invisible-island.net/archives/mawk/mawk-1.3.4-20230525.tgz) (以1.3.4-20230525为例) +- 通过tar命令解压源码 tar -zxf mawk-1.3.4-20230525.tgz + +### 生成makefile + +- 编译bash,请进入bash源码目录执行如下命令生成makefile +- 编译mawk,请进入mawk源码目录执行如下命令生成makefile + +```shell +./configure --host=arm-linux --prefix="${PWD}/armeabi_v7a_install" +``` + +### 编译源码 + +- 进入bash源码目录执行 make LDFLAGS="-static" VERBOSE=1 命令编译bash源码,执行结果截图如下 + + + ![bashbuildsuccess](media/bashbuild_success.png) + +- 进入mawk源码目录执行 make LDFLAGS="-static" VERBOSE=1 命令编译mawk源码,执行结果截图如下 + + ![mawkbuildsuccess](media/mawk_build_success_32.png) + +### 安装 + +- 进入bash源码目录执行 执行 make install,执行结果截图如下 + + + ![bashinstallsuccess](media/bashinstall_32.png) + +- 进入mawk源码目录执行 执行 make install,执行结果截图如下 + + ![mawkinstallsuccess](media/mawkinstall_32.png) + +### 编译安装完成 + +- 进入bash安装目录下的armeabi_v7a_install/bin文件夹,并可通过file bash看到文件属性 + + + ![bashfile32](media/bashfile32.png) + +- 进入mawk安装目录下的armeabi_v7a_install/bin文件夹,并可通过file mawk看到文件属性 + + ![mawkfile32](media/mawkfile32.png) + +### 运行结果 + +- 将bash和mawk的安装目录armeabi_v7a_install文件夹合并,然后压缩打包,发送到OHOS开发板中 + +```shell +#合并安装目录,进入bash源码目录,将mawk安装目录下拷贝到当前 +cp ../mawk-1.3.4-20230525/armeabi_v7a_install/ ./ -rf +#打包的armeabi_v7a_install文件夹 +tar -zcvf armeabi_v7a_install.tar.gz armeabi_v7a_install/ +#发送到OHOS系统开发板上 +hdc file send xxx\armeabi_v7a_install.tar.gz /data +#进入开发板/data,解压armeabi_v7a_install.tar.gz +hdc shell +cd /data +tar -zxvf armeabi_v7a_install.tar.gz +``` + +- 进入armeabi_v7a_install/bin目录,执行./bash --version 效果如下截图 + + + ![run](./media/bashrun.png) + +- 进入armeabi_v7a_install/bin目录,执行./mawk --version 效果如下截图 + + ![run](./media/mawkrun.png)