Orange Kunpeng Pro是香橙派Kunpeng Pro,一款专为高校教育和研究量身定制的高性能开发板。它以华为鲲鹏处理器为核心,为高校师生提供了一个功能强大、扩展性强的实验和研究平台。这款开发板的引入,旨在促进计算机科学与技术、嵌入式系统、物联网、人工智能等领域的教学和研究工作,为学生和教师提供实践和创新的机会。 OrangePI Kunpeng Pro在高校领域展示了自己的教育价值和学术潜力,为高校师生提供了一个促进教学和研究发展的强大工具:
明确测评的目标,如评估OrangePi Kunpeng Pro在学术研究、教学实验、项目开发等方面的适用性和性能表现。
我这采用的路由器是
HUAWEI-凌霄-EE-12W2
的路由。
查看openEuler
的ip地址
Xshell
进行连接连接系统三要素
root
为超级管理员openEuler
为管理员点击【连接】后,输入用户名:密码即可
省去每次都需要采用网线连接
[root@openEuler ~]# nmcli dev wifi
[root@openEuler ~]# sudo nmcli dev wifi connect wifiName password wifiPassword
连接:
[root@openEuler ~]# sudo nmcli dev wifi connect HUAWEI-凌霄-EE12W2 password mryang66188
查看WiFi连接的IP
针对OrangePi KunPeng Pro的与x86架构做横向对比
检查开发板中的编译器是否安装,openEuler 自带版本为 gcc10.3.1,符合本次实验要求。
分别输入命令 gcc – v
、g++ -v
。
[root@openEuler ~]$ gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-multilib-list=lp64 --enable-bolt
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 (GCC)
[opengauss@openEuler ~]$ g++ -v
使用内建 specs。
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/aarch64-linux-gnu/10.3.1/lto-wrapper
目标:aarch64-linux-gnu
配置为:../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=aarch64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-multilib-list=lp64 --enable-bolt
线程模型:posix
Supported LTO compression algorithms: zlib
gcc 版本 10.3.1 (GCC)
进行编码:
[openEuler@openEuler test]$ vim test.c
[openEuler@openEuler ~]$ mkdir test
[openEuler@openEuler ~]$ cd test/
# 执行编译
[openEuler@openEuler test]$ gcc -mabi=lp64 -march=armv8-a test.c
[openEuler@openEuler test]$ ll
总用量 20
-rwxrwxr-x 1 openEuler openEuler 70904 5月 28 21:17 a.out
-rw-rw-r-- 1 openEuler openEuler 507 5月 28 21:17 test.c
上述过程中,发现鲲鹏上生成可执行文件:
a.out
, 故说明编译成功
为对比开发板的鲲鹏,特在阿里云购入
x86
的openEuler服务器,进行对比:
root@iZbp16djnvbt0u13pkrbckZ ~]# gcc -v
-bash: gcc: command not found
[root@iZbp16djnvbt0u13pkrbckZ ~]# yum install gcc -y
...
Complete!
[root@iZbp16djnvbt0u13pkrbckZ ~]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/10.3.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=x86_64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-tune=generic --with-arch_32=x86-64 --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.3.1 (GCC)
[root@iZbp16djnvbt0u13pkrbckZ ~]# g++ -v
-bash: g++: command not found
[root@iZbp16djnvbt0u13pkrbckZ ~]# yum install g++ -y
...
Complete!
[root@iZbp16djnvbt0u13pkrbckZ ~]# g++ -v
Using built-in specs.
COLLECT_GCC=g++
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-linux-gnu/10.3.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-linker-hash-style=gnu --enable-languages=c,c++,fortran,objc,obj-c++,lto --enable-plugin --enable-initfini-array --disable-libgcj --without-cloog --enable-gnu-indirect-function --build=x86_64-linux-gnu --with-stage1-ldflags=' -Wl,-z,relro,-z,now' --with-boot-ldflags=' -Wl,-z,relro,-z,now' --disable-bootstrap --without-isl --with-tune=generic --with-arch_32=x86-64 --disable-multilib
Thread model: posix
Supported LTO compression algorithms: zlib
gcc version 10.3.1 (GCC)
[root@iZbp16djnvbt0u13pkrbckZ ~]#
[root@iZbp16djnvbt0u13pkrbckZ home]# mkdir test
[root@iZbp16djnvbt0u13pkrbckZ home]# cd test
[root@iZbp16djnvbt0u13pkrbckZ test]# vim test.c
[root@iZbp16djnvbt0u13pkrbckZ test]# gcc -ma64 test.c
gcc: error: unrecognized command-line option ‘-ma64’; did you mean ‘-m64’?
[root@iZbp16djnvbt0u13pkrbckZ test]# gcc -m64 test.c
[root@iZbp16djnvbt0u13pkrbckZ test]# ls
a.out test.c
[root@iZbp16djnvbt0u13pkrbckZ test]# ./a.out
test_long low = 0xffffffff
test_long high = 0x7ffffff
test_long long = 576460752303423487
0.000000
9223372036854775807
-9223372036854775808
sizeof long = 8
结果对比:
CPU | X86 | OrangePi KunPeng Pro |
---|---|---|
结果 | ||
结论: |
测试在OrangePi KunPeng Pro平台下调用动态 so 库的试验 。在传统的x86架构下,是可以正常运作的,毕竟大多数电脑都是
Intel
,大家在日常开发中都已经使用N次,这里就不再进行测试,直接针对KunPeng
架构测试是否能够正常运行
Calculate 为 Java 类,具体内容如下,进行四则运算然后打印结果, 但是现在加法和减法运算不是用 Java 代码完成,而是依赖了 C 动态库 libtest.so。另外此项目 是通过 maven 构建,后续 jar 包构建也将直接使用 mvn 命令 。
[openEuler@openEuler root]$ sudo dnf install maven -y
Last metadata expiration check: 3:44:57 ago on 2024年05月28日 星期二 18时57分49秒.
Dependencies resolved.
=====================================================================================================================================
Package Architecture Version Repository Size
=====================================================================================================================================
Installing:
maven noarch 1:3.6.3-2.oe2203sp3 everything 10 k
Installing dependencies:
aopalliance noarch 1.0-19.oe2203sp3 everything 14 k
apache-commons-cli noarch 1.4-7.oe2203sp3 everything 65 k
apache-commons-codec noarch 1.11-6.oe2203sp3 everything 276 k
apache-commons-io noarch 1:2.6-8.oe2203sp3 everything 207 k
apache-commons-lang3 noarch 3.9-3.oe2203sp3 everything 469 k
apache-commons-logging noarch 1.2-17.oe2203sp3 everything 80 k
atinject noarch 1-31.oe2203sp3 everything 15 k
cdi-api noarch 1.2-10.oe2203sp3 everything 139 k
cglib noarch 3.3.0-1.oe2203sp3 everything 299 k
easymock noarch 3.6-1.oe2203sp3 everything 144 k
geronimo-annotation noarch 1.0-26.oe2203sp3 everything 21 k
google-guice noarch 4.1-13.oe2203sp3 everything 459 k
guava20 noarch 20.0-11.oe2203sp3 everything 2.7 M
hamcrest noarch 1.3-25.oe2203sp3 everything 122 k
hawtjni-runtime noarch 1.16-4.oe2203sp3 everything 35 k
httpcomponents-client noarch 4.5.5-7.oe2203sp3 everything 707 k
httpcomponents-core noarch 4.4.15-1.oe2203sp3 everything 1.4 M
jakarta-el-api noarch 4.0.0-4.oe2203sp3 everything 151 k
jansi noarch 1.17.1-2.oe2203sp3 everything 74 k
jansi-native aarch64 1.7-8.oe2203sp3 everything 69 k
java-1.8.0-openjdk aarch64 1:1.8.0.402.b06-0.oe2203sp3 update 407 k
java-1.8.0-openjdk-devel aarch64 1:1.8.0.402.b06-0.oe2203sp3 update 9.8 M
java-1.8.0-openjdk-headless aarch64 1:1.8.0.402.b06-0.oe2203sp3 update 38 M
javapackages-tools noarch 5.3.0-6.oe2203sp3 everything 32 k
jboss-interceptors-1.2-api noarch 1.0.1-1.oe2203sp3 everything 52 k
jcl-over-slf4j noarch 1.7.25-8.oe2203sp3 everything 22 k
jsoup noarch 1.14.2-2.oe2203sp3 update 600 k
jsr-305 noarch 3.0.2-1.oe2203sp3 everything 30 k
junit noarch 1:4.12-13.oe2203sp3 everything 292 k
maven-lib noarch 1:3.6.3-2.oe2203sp3 everything 1.5 M
maven-resolver-api noarch 1:1.1.1-4.oe2203sp3 everything 131 k
maven-resolver-connector-basic noarch 1:1.1.1-4.oe2203sp3 everything 48 k
maven-resolver-impl noarch 1:1.1.1-4.oe2203sp3 everything 174 k
maven-resolver-spi noarch 1:1.1.1-4.oe2203sp3 everything 38 k
maven-resolver-transport-wagon noarch 1:1.1.1-4.oe2203sp3 everything 37 k
maven-resolver-util noarch 1:1.1.1-4.oe2203sp3 everything 145 k
maven-shared-utils noarch 3.3.3-1.oe2203sp3 everything 150 k
maven-wagon-file noarch 3.1.0-3.oe2203sp3 everything 19 k
maven-wagon-http noarch 3.1.0-3.oe2203sp3 everything 19 k
maven-wagon-http-shared noarch 3.1.0-3.oe2203sp3 everything 41 k
maven-wagon-provider-api noarch 3.1.0-3.oe2203sp3 everything 55 k
objectweb-asm noarch 8.0.1-1.oe2203sp3 everything 382 k
objenesis noarch 2.6-4.oe2203sp3 everything 213 k
plexus-cipher noarch 1.7-16.oe2203sp3 everything 45 k
plexus-classworlds noarch 2.5.2-10.oe2203sp3 everything 59 k
plexus-containers-component-annotations noarch 1.7.1-7.oe2203sp3 everything 12 k
plexus-interpolation noarch 1.26-2.oe2203sp3 everything 79 k
plexus-sec-dispatcher noarch 1.4-26.oe2203sp3 everything 60 k
plexus-utils noarch 3.3.0-1.oe2203sp3 everything 254 k
qdox noarch 2.0-6.M9.oe2203sp3 everything 290 k
sisu-inject noarch 1:0.3.3-5.oe2203sp3 everything 865 k
slf4j noarch 1.7.25-8.oe2203sp3 everything 68 k
Transaction Summary
=====================================================================================================================================
Install 53 Packages
[WARNING] Replacing pre-existing project main-artifact file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
with assembly file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 11:49 min
[INFO] Finished at: 2024-05-28T23:02:20+08:00
[INFO] ------------------------------------------------------------------------
[root@openEuler Calc]# mvn clean package
[root@openEuler Calc]# ls
pom.xml src target
使用了 c/c++ 的动态库,需要设置环境变量具体步骤如下:
[root@openEuler Calc]# cd target/classes
[root@openEuler classes]# ls
com libtest.so test.c test.h
[root@openEuler classes]# cp libtest.so /usr/local/lib
[root@openEuler classes]# export LD_LIBRARY_PATH=/usr/local/lib
接下来回退一层,进入到target目录下进行运行程序
[root@openEuler classes]# pwd
/home/java_test/Calc/target/classes
[root@openEuler classes]# cd ..
[root@openEuler target]# ls
archive-tmp calculator-1.0-SNAPSHOT.jar classes maven-archiver maven-status
[root@openEuler target]# java -jar calculator-1.0-SNAPSHOT.jar
27.0
3.0
Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'test':
libtest.so: cannot open shared object file: No such file or directory
libtest.so: cannot open shared object file: No such file or directory
Can't obtain InputStream for linux-aarch64/libtest.so
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:302)
at com.sun.jna.NativeLibrary.getInstance(NativeLibrary.java:455)
at com.sun.jna.Library$Handler.<init>(Library.java:192)
at com.sun.jna.Native.loadLibrary(Native.java:646)
at com.sun.jna.Native.loadLibrary(Native.java:630)
at com.mryang.Calculate$CLibrary.<clinit>(Calculate.java:17)
at com.mryang.Calculate.add(Calculate.java:23)
at com.mryang.Calculate.main(Calculate.java:11)
Suppressed: java.lang.UnsatisfiedLinkError: libtest.so: cannot open shared object file: No such file or directory
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:191)
... 7 more
Suppressed: java.lang.UnsatisfiedLinkError: libtest.so: cannot open shared object file: No such file or directory
at com.sun.jna.Native.open(Native Method)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:204)
... 7 more
Suppressed: java.io.IOException: Can't obtain InputStream for linux-aarch64/libtest.so
at com.sun.jna.Native.extractFromResourcePath(Native.java:1115)
at com.sun.jna.NativeLibrary.loadLibrary(NativeLibrary.java:276)
... 7 more
[root@openEuler target]#
发现报错,所以就得需要重新再编译动态 so 库
:::warning
经过上述发现最初的 jar
包只能在安装了 64 位 jdk 的 X86 平台系统上运行,在openEuler系统上不能执行,有违Java最初初衷,”一次编译,到处运行“。 虽然 Java 可以跨平台运行,但是 C++动态库不能跨平台调用,本项目中的加减法实际上是调 用 C动态库完成的,而此 C动态库是在 x86 编译出的 libtest.so 文件,需要在OrangePi KunPeng Pro上使用其源码重新编译成 libtest.so 动态库,Java 才能正常调用它
:::
修复报错:
[root@openEuler target]# cd classes
[root@openEuler classes]# ls
com libtest.so test.c test.h
[root@openEuler classes]# gcc test.c -fPIC -shared -o libtest.so
[root@openEuler classes]# # 到此。已经程序编译新的so库,覆盖原有的libtest.so
[root@openEuler classes]# cp libtest.so /usr/local/lib/
cp:是否覆盖'/usr/local/lib/libtest.so'? y
[root@openEuler classes]# export LD_LIBRARY_PATH=/usr/local/lib
[root@openEuler classes]# pwd
/home/java_test/Calc/target/classes
[root@openEuler classes]# cd ../../
[root@openEuler Calc]# rm -rf target/
[root@openEuler Calc]# mvn clean package
...
[WARNING] Replacing pre-existing project main-artifact file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
with assembly file: /home/java_test/Calc/target/calculator-1.0-SNAPSHOT.jar
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3.991 s
[INFO] Finished at: 2024-05-28T23:39:32+08:00
[INFO] ------------------------------------------------------------------------
[root@openEuler Calc]# ls
pom.xml src target
[root@openEuler Calc]# cd target/
[root@openEuler target]# ls
archive-tmp calculator-1.0-SNAPSHOT.jar classes maven-archiver maven-status
[root@openEuler target]# java -jar calculator-1.0-SNAPSHOT.jar
27.0
3.0
12
6
[root@openEuler target]#
关于跨平台,个人是如下理解: 跨平台是指不依赖操作系统,不依赖硬件环境,具有跨平台性的程序能够在不同的平台上运行。
说起香橙派,或许有些开发没有听过,害怕小众、不敢轻易接触,甚至不乏有些笔友会讨伐OrangePI的文档不够详尽或教程不够完善,但是当OrangePI与华为牵手那一刻,难道这不也算是华为企业已经帮众多开发者进行审视选择后的结果吗,我是一个资深华为粉,更加相信OrangePI在拥有华为诸多支持后必然会越来越好,加油!