Run Linux Shell on HarmonyOS devices! Based on qemu-ohos, both 2in1(PC), Tablet and Phone are supported.
You can try one of following methods to get HiSH:
- Install from AppGallery (JIT not supported, run slower)
- Download hap from Releases page and signed by yourself, then install to your device or emulator (JIT suported, runs faster)
- Build from source code in DevEco Studio, see Build and install HAP (JIT suported, runs faster)
- Complete arm64 Linux kernel
- Networking with port forwarding
- Alpine Linux rootfs
- Virtual Keys (Tab/Ctrl/Esc/Up/Down/Left/Right)
- Shared Folder
- JIT (Only available for developer)
- Image import(Ubuntu24.04 / Debian12)
- HAP bundle
- libqemu-system (optional)
- Linux kernel (optional)
- rootfs (optional)
- Download and install DevEco Studio
- Clone this repo to local
- Run
git submodule update --init --recursivein HiSH directory - Copy
build-profile.template.json5tobuild-profile.json5 - Download files and move to corresponding location as following (Notice: you should rename files as links)
- Build project in DevEco Studio
- Sign and run in your device or emulator. See Running Your App on a Local Real Device | Signing an App Not Associated with a Registered App
Build your own libqemu-system-aarch64.so for entry/libs on Ubuntu (or WSL2 on Windows), for customizing libqemu
- Install dependencies
sudo apt install -y build-essential cmake curl wget unzip python3 libncurses-dev \
git flex bison bash make autoconf libcurl4-openssl-dev tcl \
gettext zip pigz meson- Download "Command Line Tools" for Linux from https://developer.huawei.com/consumer/cn/download/
- Extract downloaded zip and set TOOL_HOME env variable to
command-line-toolsdirectory - Change current directory to
depsand runmake, for x86_64 emulator default- For real devices(aarch64), you can run
make aarch64
- For real devices(aarch64), you can run
cd deps
make- See
*.sofiles indeps/output
ls -lh outputBuild your own Linux kernel for HiSH, for customizing Linux kernel
- Install dependencies
sudo apt install build-essential gcc bc bison flex libssl-dev \
libncurses5-dev libelf-dev gcc-aarch64-linux-gnu \
clang lld llvm make - Clone linux kernel source to local
git clone --depth=1 -b v6.12 https://github.com/torvalds/linux- Download linux kernel build config
cd linux
curl https://raw.githubusercontent.com/harmoninux/linux-config/refs/heads/master/arm64_virt > .config- Build Linux kernel
export KCFLAGS='-march=armv8.5-a+crc+crypto+lse+rcpc+rng+sm4+sha3+dotprod+fp16 -mtune=neoverse-n1 -O2 -falign-functions=64 -fno-strict-aliasing -mllvm -vectorize-loops -mllvm -force-vector-width=2'
env KCFLAGS="$KCFLAGS" make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 menuconfig
env KCFLAGS="$KCFLAGS" make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 -j$(nproc)- The kernel image is at
arch/arm64/boot/Image, copy it toentry/src/main/resources/rawfile/vm/kernel_aarch64
Build your own rootfs for HiSH
- Download and extract Alpine rootfs from downloads | Alpine Linux
mkdir alpine
tar xvf alpine-minirootfs-3.22.1-aarch64.tar.gz -C alpine- Use
qemu-imgto create arootfs.imgfile
qemu-img create -f raw rootfs.img 8G- Make fs for
rootfs.imgfile
mkfs.ext4 rootfs.img- Mount
rootfs.imgas directory
sudo mkdir /mnt/rootfs
sudo mount rootfs.img /mnt/rootfs- Copy files of rootfs to
/mnt/rootfs
sudo cp -r alpine/* /mnt/rootfs- Unmount
/mnt/rootfs
sudo umount /mnt/rootfs- Convert raw img to qcow2 format
qemu-img convert -p -f raw -O qcow2 rootfs.img rootfs.qcow2- Put
rootfs.qcow2toentry/src/main/resources/rawfile/vm/rootfs_aarch64.qcow2
