环境:

ubuntu 2204

openharmony 3.2(Linux kernel 5.10)

hdc 1.2.0a

在openharmony中运行libbpf程序主要是交叉编译和几个依赖库的移植:

交叉编译:

下载交叉编译器:

sudo apt-get install gcc-aarch64-linux-gnu

静态库移植

zlib库

wget https://www.zlib.net/zlib-1.3.tar.gz
tar -xzvf zlib-1.3.tar.gz 
cd zlib-1.3/
#指定编译器
export CC=aarch64-linux-gnu-gcc
#库文件输出路径
./configure --prefix=/home/nans/install
make
make install

elfutils库

git clone https://gitee.com/mirrors/platform_external_elfutils.git
​
#生成配置文件
autoreconf -i -f && \
 ./configure  --prefix=/home/nans/install --enable-maintainer-mode --disable-libdebuginfod --disable-debuginfod  --host=aarch64-linux-gnu 
#编译安装
make&&make install

复制aarch64库文件到交叉编译器目录下

sudo cp /home/nans/install/*.a  /lib/aarch64-linux-gnu/

libbpf库

源码中的makefile默认编译为x86架构,这里需要指令交叉编译器

git clone https://github.com/libbpf/libbpf-bootstrap.git

修改libbpf源码中/libbpf-bootstrap/libbpf/src/Makefile27行和28行的编译器和链接器选项:

 $(call allow-override,CC,aarch64-linux-gnu-gcc)
 $(call allow-override,LD,aarch64-linux-gnu-ld)

libbpf库依赖zlib库和elfutils库,修改43行库文件搜索路径:

    ALL_LDFLAGS += -L/lib/aarch64-linux-gnu/

编译安装

make&&make install

复制aarch64库文件到交叉编译器目录下

sudo cp /home/nans/libbpf-bootstrap/libbpf/src/libbpf.a  /lib/aarch64-linux-gnu/

编译libbpf程序

bpftool安装:

sudo apt install linux-tools-$(uname -r)     
sudo apt install linux-cloud-tools-$(uname -r) 

生成内核头文件:

sudo bpftool btf dump file /sys/kernel/btf/vmlinux format c > vmlinux.h

编译为字节码:

clang -g  -O2 -target bpf -D__TARGET_ARCH_aarch64 -I/usr/aarch64-linux-gnu/include -I. -c minimal.bpf.c -o minimal.bpf.o 
sudo bpftool gen skeleton minimal.bpf.o > minimal.skel.h

编译用户态程序:

clang -g -O2 -Wall -I . -c minimal.c -o minimal.o -target aarch64-linux-gnu
clang -Wall -O2 -g minimal.o -static -lbpf -lelf -lz -o minimal -target aarch64-linux-gnu 

将编译好的libbpf可执行文件通过hdc发送到ohos开发板

hdc file send bootstrap /data
hdc shell 
chmod +x bootstrap
#运行libbpf程序
./data/bootstrap
./data/minimal

运行结果如下:

 

 

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐