Install
git clone --depth 1 https://github.com/qemu/qemu
cd qemu
qemu-arm
Refer to https://github.com/Tencent/ncnn/blob/master/.github/workflows/linux-arm-cpu-gcc.yml
# To generate only qemu-arm
./configure --prefix=/ceph-fj/fangjun/software/qemu/ --target-list=arm-linux-user,aarch64-linux-user --disable-system
make -j10
# It genertates the executable: ./build/qemu-arm and ./build/qemu-aarch64
# If we run `make install`, it will generate
#
# /ceph-fj/fangjun/software/qemu/bin/qemu-arm
# /ceph-fj/fangjun/software/qemu/bin/qemu-aarch64
#
# Add it to PATH and use it!
To run it, we have to download some cross-compile toochain, e.g,
Go to https://developer.arm.com/tools-and-software/open-source-software/developer-tools/gnu-toolchain/gnu-a/downloads/8-3-2019-03 to download the toolchain.
mkdir /ceph-fj/fangjun/software
cd /ceph-fj/fangjun/software
tar xvf /path/to/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf.tar.xz
export PATH=/ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/bin:$PATH
If we have built an executable using the above toolchain, we can run it with qemu-arm
:
./build/qemu-arm /path/to/sherpa-ncnn
It throws the following error:
qemu-arm: Unable to reserve 0xfffff000 bytes of virtual address space at
0x1000 (Success) for use as guest address space (check your virtual memory
ulimit setting, min_mmap_addr or reserve less using -R option)
We can use
./build/qemu-arm -B 0x10000000 /path/to/sherpa-ncnn
which throws the following new error:
(py38) kuangfangjun:qemu$ find /ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/ -name "ld-linux-armhf.so.3"
/ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc/lib/ld-linux-armhf.so.3
(py38) kuangfangjun:qemu$ export QEMU_LD_PREFIX=/ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc
Now we can restart:
./build/qemu-arm -B 0x10000000 /path/to/sherpa-ncnn
export PATH=/ceph-fj/fangjun/software/qemu/bin:$PATH
export QEMU_LD_PREFIX=/ceph-fj/fangjun/software/gcc-arm-8.3-2019.03-x86_64-arm-linux-gnueabihf/arm-linux-gnueabihf/libc
qemu-arm -B 0x10000000 ./build-arm-linux-gnueabihf/bin/sherpa-ncnn \
./sherpa-ncnn-2022-09-05/tokens.txt \
./sherpa-ncnn-2022-09-05/bar/encoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/encoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./sherpa-ncnn-2022-09-05/bar/decoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/decoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./sherpa-ncnn-2022-09-05/bar/joiner_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/joiner_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./test_wavs/1221-135766-0002.wav
qemu-aarch64
wget https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
cd /ceph-fj/fangjun/software
tar xvf /path/to/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu.tar.xz
export PATH=/ceph-fj/fangjun/software/qemu/bin:$PATH
export QEMU_LD_PREFIX=/ceph-fj/fangjun/software/gcc-linaro-7.5.0-2019.12-x86_64_aarch64-linux-gnu/aarch64-linux-gnu/libc
qemu-aarch64 -B 0x10000000 ./build-aarch64-linux-gnu/bin/sherpa-ncnn \
./sherpa-ncnn-2022-09-05/tokens.txt \
./sherpa-ncnn-2022-09-05/bar/encoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/encoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./sherpa-ncnn-2022-09-05/bar/decoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/decoder_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./sherpa-ncnn-2022-09-05/bar/joiner_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.param \
./sherpa-ncnn-2022-09-05/bar/joiner_jit_trace-v2-iter-468000-avg-16-pnnx.ncnn.bin \
./test_wavs/1221-135766-0002.wav