# ohos_cross_tools **Repository Path**: wshixjr/ohos_cross_tools ## Basic Information - **Project Name**: ohos_cross_tools - **Description**: 一个中年未秃头码畜业余为OH生态做一点小小的贡献 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 40 - **Created**: 2024-02-04 - **Last Updated**: 2024-02-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # ohos_cross_tools # 介绍 针对OpenHarmony的linux版本提供工具移植,当前支持工具列表如下: | name | 本文档支持 | 脚本 | | ---------- | ---------- | ---- | | gdb | Y | Y | | strace | Y | Y | | bash | Y | Y | | openssl | Y | Y | | python | Y | Y | | vim | Y | Y | | curl | Y | Y | | elfutils | Y | | | util-linux | Y | Y | | coreutils | Y | Y | | valgrind | Y | Y | | htop | Y | | | jemalloc | Y | Y | | libunwind | Y | Y | | iproute2 | Y | Y | 脚本在scripts目录中,默认通过docker编译,定制run_docker.sh中的BUILD_LIST去修改打包工具集合。BUILD_ARCH可以改为arm或者aarch64. arm/arm64的编译产物临时归档到(2023.4.19): 链接:https://pan.baidu.com/s/12mVZzbHak94Ky7mI3ge6dg?pwd=ucit 提取码:ucit 注意最近202208月底左右的版本开启了seccomp,gdb等工具被限制了,临时解决方案是: ``` mount -rw -o remount / rm -frv /system/{lib,lib64}/libsystem_filter.z.so #名字里有filter的几个so,主要是system_filter sync reboot ``` # 工具链准备 基于 [musl-cross-make](https://github.com/richfelker/musl-cross-make),该项目是为linux musl创建的,为了适配ohos需要做一些小修改,我fork了一个仓 https://gitee.com/stesen/musl-cross-make_for_openharmony 里面修改了不少,可以看下git log ## 准备编译工具链 ``` git clone https://gitee.com/stesen/musl-cross-make_for_openharmony pushd musl-cross-make_for_openharmony ``` ## 创建config.mak 如果是arm: ```shell export TOOLCHAIN_TARGET=arm-linux-musleabi ``` 如果是arm64 ```shell export TOOLCHAIN_TARGET=aarch64-linux-musleabi ``` 然后创建config: ```shell cat > config.mak << EOF OHOS_DIR = XXXX/openharmony TARGET = ${TOOLCHAIN_TARGET} OUTPUT = /opt/cross LINUX_FROM = ohos LINUX_VER = 5.10 MUSL_FROM = ohos MUSL_VER = ohos GCC_VER = 10.1.0 EOF ``` ## 编译安装工具链 ```shell sudo install -m 777 -d /opt/cross make && make install popd ## musl 1.2.2需要额外定义个宏: sed -i '15i#define FNM_EXTMATCH 0' /opt/cross/${TOOLCHAIN_TARGET}/include/fnmatch.h ## 如果要提供给buildroot编译,需要建个链接 mkdir /opt/cross/arm-linux-musleabi/usr ln -svf ../include /opt/cross/arm-linux-musleabi/usr/ ## OpenHarmony的musl libc添加了fortify支持,但目前还没有宏隔离,完成工具链构建后需要手动进行处理 find /opt/tools/aarch64-linux-musleabi/include -type f -name "*.h" -exec sed -i "s/^#include ${DEBUGROOT}/init.sh << EOF export PATH=/data/debugroot/bin:\$PATH export LD_LIBRARY_PATH=/data/debugroot/lib:\$LD_LIBRARY_PATH bash EOF chmod +x ${DEBUGROOT}/init.sh ``` 通过hdc或者nfs推送到设备/data/debugroot目录下(可以提前删掉里面的manpages、头文件、静态库等,减少体积) 运行/data/debugroot/init.sh,就可以运行其中的工具了 # 使用说明 1. 你们自己用用就算了,有问题我也解决不了,如果你知道怎么解决,告诉我,我请你喝咖啡 # 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request