写在开头
非常感谢CSDN给予我本次参与OrangePi KunPeng Pro开发板的机会,让我感到非常幸运,因我一直深处高校授课,教研团队也多次给我提及要深入了解学习KunPeng套件,下学期即将开设openEuler、openGauss、及鲲鹏平台下程序设计课程,这次开发板刚好包含以上内容,让我感觉热血沸腾,感谢之情,难以溢于言表。
引言
Orange Kunpeng Pro是香橙派Kunpeng Pro,一款专为高校教育和研究量身定制的高性能开发板。它以华为鲲鹏处理器为核心,为高校师生提供了一个功能强大、扩展性强的实验和研究平台。这款开发板的引入,旨在促进计算机科学与技术、嵌入式系统、物联网、人工智能等领域的教学和研究工作,为学生和教师提供实践和创新的机会。
OrangePI Kunpeng Pro在高校领域展示了自己的教育价值和学术潜力,为高校师生提供了一个促进教学和研究发展的强大工具:
- 教学支持:作为教学辅助工具,OrangePI Kunpeng Pro能够支持计算机系统能力课程设计,帮助学生更好地理解硬件与软件的协同工作原理。
- 实践平台:提供真实的开发环境,让学生能够在项目中实践理论知识,从服务器课程创新到云计算、边缘计算、嵌入式课程创新,覆盖多个技术层面。
- 研究与创新:为教师和研究生提供强大的计算能力和丰富的接口,支持复杂的研究项目和前沿技术探索,特别是在物联网和AI领域。
- 开源生态:鼓励学生参与到开源项目中来,通过OrangePI Kunpeng Pro提供的开源工具和资源,培养他们的创新精神和团队协作能力。
- 经济高效:OrangePI Kunpeng Pro的高性价比使其成为高校在有限预算下的理想选择,为学生提供了一种负担得起的、高性能的学习和研究工具。
测评目的和背景
2.1 目的说明:
明确测评的目标,如评估OrangePi Kunpeng Pro在学术研究、教学实验、项目开发等方面的适用性和性能表现。
2.1.1 学术研究
- 计算密集型任务:
- 数据挖掘与分析:处理大规模数据集,进行复杂的数据分析任务。
- 机器学习与深度学习:作为算法原型验证和模型训练的平台,支持AI研究的快速迭代。
- 高性能计算:
- 并行计算:利用多核处理器进行并行算法的开发和测试。
- 分布式计算:在多个OrangePi Kunpeng Pro之间搭建集群,进行分布式系统的实验和研究。
- 边缘计算:
- 实时数据处理:在边缘节点进行数据的实时采集、处理和分析。
- 物联网应用:作为物联网项目的核心处理单元,支持复杂的传感器数据处理。
- 网络安全与加密:
- 加密算法研究:利用硬件加速进行加密算法的实现和性能测试。
- 网络安全实验:模拟网络攻击和防御,进行网络安全相关的研究。
- 图形处理与视觉计算:
- 图像和视频处理:进行图像识别、视频分析和增强等视觉计算任务。
- 计算机视觉:为计算机视觉项目提供足够的计算能力和硬件加速。
2.1.2 教学实验
- 计算机科学与技术教育:
- 系统编程:教授操作系统、网络编程、多线程编程等课程。
- 硬件接口教学:通过GPIO、UART、I2C、SPI等接口进行硬件编程教学。
- 人工智能与机器学习课程:
- AI算法实践:让学生通过实际操作来理解机器学习和深度学习算法。
- 智能硬件项目:设计和实现智能机器人、自动驾驶小车等教学项目。
- 嵌入式系统教学:
- 嵌入式系统设计:教授基于ARM架构的嵌入式系统设计。
- 实时系统开发:基于OrangePi Kunpeng Pro进行实时操作系统和应用程序的开发。
- 网络与通信课程:
- 网络协议实验:模拟和实现各种网络协议。
- 无线通信教学:利用Wi-Fi和蓝牙模块进行无线通信实验。
- 综合项目实践:
- 课程设计:作为课程设计的平台,让学生综合应用所学知识。
- 毕业设计:为学生提供强大的计算平台,进行高水平的毕业设计。
:::warning
OrangePi Kunpeng Pro不仅在于其高性能的硬件配置,还在于其开放性和可扩展性。它支持多种操作系统和开发工具,能够满足不同学术研究和教学实验的需求。当然,其相对较低的成本和易于使用的特性也使其成为高校师生理想的实验和教学平台。
:::
2.2 背景介绍:
2.2.1 硬件配置:
- 处理器:搭载华为鲲鹏920处理器,具有4核64位处理器+AI处理器。
- 内存:支持DDR4内存,配备8GB或16GB可选,速率达到3200Mbps。
- 存储:支持多种存储解决方案,包括SATA接口和M.2接口2280,可用于安装SSD硬盘还具备eMMC插槽、TF卡槽。
- 扩展接口:提供PCIe x4插槽,可用于扩展显卡、网络卡等。
- 网络:通常配备千兆以太网接口,支持高速网络连接。
- 无线通信:包括Wi-Fi和蓝牙模块4.2,支持双频2.4G和5G无线网络连接。
- **有线通信:**1000Mbps以太网高速运转
- 显示输出:提供2个HDMI接口,支持高清视频输出。
- USB接口:提供多个USB接口,包括USB 3.0和USB 2.0。
- 其他接口:可能包括音频接口、GPIO针脚等。
2.2.2 特点:
- 国产处理器:采用华为自主研发的鲲鹏处理器,支持国内处理器生态系统的发展。
- 高性能计算:鲲鹏处理器具有高性能、低功耗的特点,适合进行高性能计算任务。
- 开放生态:支持多种操作系统,如Ubuntu、openEuler等,便于开发者进行系统开发和定制。
- 丰富的接口:提供多样的扩展接口,支持多种外设连接,灵活性高。
- 适用于教育与研究:由于其高度的可扩展性和开放的特性,非常适合高校和研究机构用于教学和科研。
- 适用于企业应用:可以作为服务器使用,适用于企业中的轻量级计算需求。
- 安全性:华为鲲鹏处理器在硬件层面提供了安全特性,有助于保障系统安全。
- 节能环保:低功耗设计有助于节约能源,减少碳排放。
开箱连接
连接电源线
查看路由器管理端
家用路由器
我这采用的路由器是
HUAWEI-凌霄-EE-12W2
的路由。
查看openEuler
的ip地址
启动ssh
基于Xshell
进行连接
连接系统三要素
- ip地址 : 192.168.3.161
- 用户名:openEuler/root
root
为超级管理员openEuler
为管理员- 密 码:openEuler
点击【连接】后,输入用户名:密码即可
配置wifi登录
省去每次都需要采用网线连接
- 扫描当前附近的wifi热点:
[root@openEuler ~]# nmcli dev wifi
- 连接wifi:
- wifiName
- wifiPassword
[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架构做横向对比
实验1: OrangePi KunPeng Pro 与x86在双精度浮点型转整型的差异
OrangePi KunPeng Pro
检查开发板中的编译器是否安装,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
, 故说明编译成功
- 执行命令 ./a.out,观察输出结果,如下所示
2.3.2 x86架构
为对比开发板的鲲鹏,特在阿里云购入
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 |
---|---|---|
结果 | ||
结论: |
- 两个大平台下,是两套 cpu 架构,其中算数逻辑单元的实现可能会有差异。
- 操作系统都是OpenEuler。
- x86 指令集中浮点到整型的转换指令,定义了一 indefinite integer value—"不确定 数值 64bit:0x8000000000000000,大多数都遵循这个原则,但是在从 double 向无符号整型转换 时,又出现不同的结果,
- OrangePi KunPeng Pro处理器处理非常清晰和简单,上溢和下溢时。保留整型能表示 的最大最小值。这样开发者不会面对不确定或无法预期的结果。
| | |
|
实验2: 关于动态 so 库的调用
测试在OrangePi KunPeng Pro平台下调用动态 so 库的试验 。在传统的x86架构下,是可以正常运作的,毕竟大多数电脑都是
Intel
,大家在日常开发中都已经使用N次,这里就不再进行测试,直接针对KunPeng
架构测试是否能够正常运行
Calculate 为 Java 类,具体内容如下,进行四则运算然后打印结果, 但是现在加法和减法运算不是用 Java 代码完成,而是依赖了 C 动态库 libtest.so。另外此项目 是通过 maven 构建,后续 jar 包构建也将直接使用 mvn 命令 。
- 安装Maven:
[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]#
关于跨平台,个人是如下理解:
跨平台是指不依赖操作系统,不依赖硬件环境,具有跨平台性的程序能够在不同的平台上运行。
意见反馈:
标签:KunPeng,oe2203sp3,--,Pro,noarch,everything,openEuler,root,OrangePi From: https://blog.csdn.net/kese7952/article/details/139302808说起香橙派,或许有些开发没有听过,害怕小众、不敢轻易接触,甚至不乏有些笔友会讨伐OrangePI的文档不够详尽或教程不够完善,但是当OrangePI与华为牵手那一刻,难道这不也算是华为企业已经帮众多开发者进行审视选择后的结果吗,我是一个资深华为粉,更加相信OrangePI在拥有华为诸多支持后必然会越来越好,加油!