银河麒麟龙芯mips64架构集成RXTX串口通讯兼容问题

前言

应用涉及到串口通讯,用到的是RXTX。一直部署在win环境,项目要求用国产服务器、银河麒麟操作系统、龙芯处理器、国产中间件、国产数据库。因此出现rxtx在以上环境中兼容问题,下面记录下我遇到的问题。如有其他问题可邮箱联系[email protected]

问题

1:龙芯基于open jdk,不同于sun jdk。对rxtx是否有兼容问题?

        安装中测试中出现openjdk崩溃的情况,只要一发送指令jdk就崩溃,所以开始人为是openjdk不兼容rxtx,尝试很多办法后发现openjdk是可以兼容的,大家不用考虑这个问题

2:rxtx是否兼容mips64架构?

        网上找了很多版本,win、arm、i386、mac、x86_64但是没看到有mips64的,也尝试过用x86_64的但是还是报错JDK崩溃,报如下错误

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  SIGBUS (0xa) at pc=0x000000ffe40078b4, pid=7969, tid=0x000000ffdf6ff1d0
#
# JRE version: OpenJDK Runtime Environment (8.0_312-b07) (build 1.8.0_312-b07) (Loongson 8.1.10-loongson3a-Fedora)
# Java VM: OpenJDK 64-Bit Server VM (25.312-b07 mixed mode linux-mips64el compressed oops)
# Problematic frame:
# C  [librxtxSerial.so+0x78b4]  Java_gnu_io_RXTXPort_nativeDrain+0x144
#
# Core dump written. Default location: /root/web-app/apache-tomcat-8.5.69/bin/core or core.7969
#
# An error report file with more information is saved as:
# /root/web-app/apache-tomcat-8.5.69/bin/hs_err_pid7969.log
Could not load hsdis-mips64el.so; library not loadable; PrintAssembly is disabled
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
#
Experimental:  JNI_OnLoad called.

当时用的是RXTX-2.1-7版本,openjdk8。后来发现是版本问题,下面记录解决办法

解决办法

切记要从官网下载可编译包,别从其他地方下载编译完的,编译完的基本都没有mips64架构的,

官网地址:Download - Rxtx

我下载的是rxtx-2.2pre2.zip,别下载2.1.7版本,2.1.7版本不兼容我这套环境

银河麒麟龙芯mips64架构集成RXTX串口通讯兼容问题_第1张图片

千万要下载zip包,别下载bins.zip包, bins.zip是可直接拿去用的,但是没有mips64架构的,咱们下载的这个可在服务器环境进行编译,它会根据环境生成相应架构的库文件

下载后上传至服务器,本人上传到/usr/local/src目录,解压 rxtx-2.2pre2.zip 进入目录

cd /usr/local/src
unzip rxtx-2.2pre2.zip​
cd /usr/local/src/rxtx-2.1-7r2

 编译前要进行一些处理,不然会报错

1:添加系统版本信息

首选获取系统版本信息

uname -r

本人操作系统版本是4.19.90-21.3.ky10.mips64el

在/usr/include/linux/version.h中添加版本信息,#define UTS_RELEASE "4.19.90-21.3.ky10.mips64el"

vi /usr/include/linux/version.h

添加完如下图

 

 2:删除

修改/usr/local/src/rxtx-2.2pre2/./src/RawImp.c文件,删除。不然会报错误

修改完后可进行编译

cd /usr/local/src/rxtx-2.1-7r2
./configure
make
make install

make过程中会出现warn,不用管,只要没有error就可以。

编译过程中rxtx会自动生成一个匹配当前架构的文件夹,我的是mips64el-unknown-linux-gnu,里面有rxtx用到的库文件和jar,同时会自动将librxtxSerial.so、librxtxParallel.so等库文件和RXTXcomm.jar复制到openjdk环境遍历的目录中,so库文件在jdk的jre/lib/mips64el中,jar在jdk的jre/lib/ext中。

完成以上操作后rxtx即可兼容当前环境。启动应用发送指令后就不会出现jdk崩溃问题,总结来说,就是因为rxtx版本和库文件不兼容导致的。如有疑问[email protected]

你可能感兴趣的:(java,开发语言,架构)