前言
应用涉及到串口通讯,用到的是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版本不兼容我这套环境
千万要下载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]