news 2026/10/23 12:24:07

飞凌嵌入式系统安装Java环境

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
飞凌嵌入式系统安装Java环境

文章目录

    • 1.安装JDK
    • 2.mysql注意事项
    • 3.redis注意事项
    • 4.nginx注意事项
    • 5.开机自启

1.安装JDK




使用tar -zxvf解压不支持↓

用zip来解压↓

whichgzipgzip-djdk-15.0.2_linux-aarch64_bin.tar.gztar-xvfjdk-15.0.2_linux-aarch64_bin.tar

2.mysql注意事项

mysql安装也一样,但是因为没有groupadd命令,不能执行groupadd mysql和useradd -r -g mysql -s /bin/false mysql,执行以下命令,注意要先检查下UID 和 GID是否存在↓

cat/etc/groupecho"mysql:x:20:">>/etc/groupcat/etc/passwdecho"mysql:x:20:20:MySQL user:/nonexistent:/bin/false">>/etc/passwdchown-Rmysql:mysql /userdata/local/mysql

注意要下载或从其它arm架构系统获取这两个文件放入/usr/lib目录再执行./mysqld --initialize --console


因为是精简的系统,没有libaio文件,执行初始化会报错./mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory↓


启动服务↓

/userdata/local/mysql/support-files/mysql.server startchmod-R777你的mysql目录

同样也要复制libtinfo.so到/usr/lib目录再执行./mysql -u root -p,否则会报错↓


别忘了my.cnf配置文件↓

完成后执行systemctl enable mysqld也不行的,Buildroot 默认没有 systemd↓

执行vi etc/my.cnf修改配置↓

[mysqld]# 设置3306端口port=3306# 设置mysql的安装目录basedir=/userdata/local/mysql# 设置mysql数据库的数据的存放目录datadir=/userdata/local/mysql/mysqldb# 允许最大连接数max_connections=10000# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统max_connect_errors=10# 服务端使用的字符集默认为utf8mb4character-set-server=utf8mb4# 创建新表时将使用的默认存储引擎default-storage-engine=INNODB# 默认使用“mysql_native_password”插件认证default_authentication_plugin=mysql_native_password# 分组拼接长度group_concat_max_len=10240000[mysql]# 设置mysql客户端默认字符集default-character-set=utf8[client]# 设置mysql客户端连接服务端时默认使用的端口port=3306default-character-set=utf8

执行vi /etc/init.d/mysql进行配置↓

#!/bin/shMYSQLD=/userdata/local/mysql/bin/mysqldMYSQL_CONF=/etc/my.cnfMYSQL_PID=/var/run/mysqld.pidauthentication_policy=mysql_native_passwordcase"$1"instart)echo"Starting MySQL..."$MYSQLD--defaults-file=$MYSQL_CONF--user=root&;;stop)echo"Stopping MySQL..."if[-f$MYSQL_PID];thenkill$(cat$MYSQL_PID)rm-f$MYSQL_PIDelsepkillmysqldfi;;restart)$0stopsleep1$0start;;*)echo"Usage:$0{start|stop|restart}"exit1;;esacexit0

保存后执行↓

chmod+x /etc/init.d/mysql#如果目录不存在则先新建此目录mkdir-p/etc/rc3.dln-s/etc/init.d/mysql /etc/rc3.d/S98mysql /etc/init.d/mysql start /etc/init.d/mysql stop /etc/init.d/mysql restart

3.redis注意事项

因为嵌入式系统没有GCC,安装redis会报错。可以在其它系统交叉编译后拷贝过来。我这里采用的是在一台centos8虚拟机编译。进入官网搜索GCC查看相关文章↓

下载地址https://releases.linaro.org/components/toolchain/binaries/latest-7/aarch64-linux-gnu/

如图,解压gcc和redis压缩包到当前目录,分别命名为gcc和reids↓

#设置 PATH 环境变量exportPATH=$PATH:/home/temp/gcc/bin# 验证 GCC 是否可用,正常输出:aarch64-linux-gnu-gcc (Linaro GCC 7.5-2019.12) 7.5.0aarch64-linux-gnu-gcc--versioncd/home/temp/redis#单线程编译以减少内存占用make-j1#安装到cross-redis目录makePREFIX=/home/temp/cross-redisinstall#检查生成的二进制文件是否为 AArch64 架构,正常输出:/home/temp/cross-redis/bin/redis-server: ELF 64-bit LSB executable, ARM aarch64, ...file/home/temp/cross-redis/bin/redis-server

编译好后传输至飞凌↓

不要忘了配置文件

执行vi etc/redis.conf修改↓

daemonizeyesdir/userdata/redis-data logfile /userdata/redis-data/redis.log

保存后执行vi /etc/init.d/redis加入以下配置↓

#!/bin/shREDIS_SERVER=/userdata/local/redis/bin/redis-serverREDIS_CONF=/etc/redis.confREDIS_PID=/var/run/redis.pidcase"$1"instart)echo"Starting Redis..."$REDIS_SERVER$REDIS_CONF;;stop)echo"Stopping Redis..."if[-f$REDIS_PID];thenkill$(cat$REDIS_PID)rm-f$REDIS_PIDelsepkillredis-serverfi;;restart)$0stopsleep1$0start;;*)echo"Usage:$0{start|stop|restart}"exit1;;esacexit0

保存后↓

chmod+x /etc/init.d/redisln-s/etc/init.d/redis /etc/rc3.d/S99redis /etc/init.d/redis start /etc/init.d/redis stop /etc/init.d/redis restartpsaux|grepredis-server

4.nginx注意事项

接下来还是在centos编译nginx。nginx需要zlib和pcre支持,先下载压缩包解压。我这里不仅有源码,还有带-aarch64的目录,代表是已经独立 编译过的

我采用的是动态编译↓

# 设置过临时变量的可以不用设置,但是如果是新启用会话得重新设置,包括export PATH=$PATH:/home/temp/gcc/binexportTOOLCHAIN=/home/temp/gccexportPATH=$TOOLCHAIN/bin:$PATHexportCC=$TOOLCHAIN/bin/aarch64-linux-gnu-gccexportLD=$TOOLCHAIN/bin/aarch64-linux-gnu-ldexportAR=$TOOLCHAIN/bin/aarch64-linux-gnu-arexportAS=$TOOLCHAIN/bin/aarch64-linux-gnu-asexportCXX=aarch64-linux-gnu-g++ ./configure--prefix=/home/temp/nginx-aarch64 --with-ld-opt='-static-libgcc -static-libstdc++'--with-pcre=/home/temp/pcre-8.45 --with-zlib=/home/temp/zlibmake-j1&&makeinstall

这时候编译会出错↓

编译完后执行/home/temp/nginx-aarch64/sbin/nginx -v验证↓

如果是静态编译,先独立编译zlib和pcre↓

#编译zlib,pcre照着来重复遍就行,注意目录cdzlib/ ./configure--prefix=/home/temp/zlib-aarch64make-j1makeinstall

然后再编译nginx↓

exportLD=/home/temp/gcc/bin/aarch64-linux-gnu-ldexportAR=/home/temp/gcc/bin/aarch64-linux-gnu-arexportAS=/home/temp/gcc/bin/aarch64-linux-gnu-asexportCXX=aarch64-linux-gnu-g++exportCFLAGS="-O2 -I/home/temp/pcre-aarch64/include -I/home/temp/zlib-aarch64/include"exportLDFLAGS="-static -L/home/temp/pcre-aarch64/lib -L/home/temp/zlib-aarch64/lib -static-libgcc -static-libstdc++"./configure\--prefix=/home/temp/nginx-aarch64\--with-cc="$CC"\--with-cc-opt="$CFLAGS"\--with-ld-opt="$LDFLAGS"\--without-pcre\--without-zlib\make-j1&&makeinstall

如果是编译opentesty,必须有openssl的源码文件↓


编译openresty↓

cd/home/temp/openresty ./configure--prefix=/home/temp/openresty-aarch64 --with-ld-opt='-static-libgcc -static-libstdc++'--with-pcre=/home/temp/pcre-8.45 --with-zlib=/home/temp/zlib --with-openssl=/home/temp/openssl --with-http_gunzip_module --with-http_gzip_static_modulemake-j1&&makeinstall/home/temp/openresty-aarch64/nginx/sbin/nginx-v


解压到飞凌,添加用户和组并授权

echo"nginx:x:22:">>/etc/groupecho"nginx:x:22:22:Nginx user:/nonexistent:/bin/false">>/etc/passwdchown-Rnginx:nginx /userdata/local/nginx-aarch64chmod-R755/userdata/local/nginx-aarch64

执行vi /etc/init.d/nginx创建启动脚本

#!/bin/shNGINX_BIN=/userdata/local/nginx-aarch64/sbin/nginxNGINX_CONF=/userdata/local/nginx-aarch64/conf/nginx.confNGINX_PID=/userdata/local/nginx-aarch64/logs/nginx.pidcase"$1"instart)echo"Starting nginx..."$NGINX_BIN-c$NGINX_CONFif[$?-eq0];thenecho"Nginx started."elseecho"Failed to start nginx."exit1fi;;stop)echo"Stopping nginx..."if[-f$NGINX_PID];thenkill-QUIT`cat$NGINX_PID`echo"Nginx stopped."elseecho"Nginx is not running."fi;;restart)$0stopsleep1$0start;;reload)echo"Reloading nginx..."if[-f$NGINX_PID];thenkill-HUP`cat$NGINX_PID`echo"Nginx reloaded."elseecho"Nginx is not running."exit1fi;;*)echo"Usage:$0{start|stop|restart|reload}"exit1;;esacexit0

创建保存后授权可执行chmod +x /etc/init.d/nginx,然后vi /etc/rc.local↓

/etc/init.d/nginx start

保存后chmod +x /etc/rc.local

如果编译时的路径与现在的安装路径不致,执行

mkdir-p/home/makeln-s/userdata/local/nginx-aarch64 /home/make/nginx-aarch64

测试

/etc/init.d/nginx start /etc/init.d/nginx stop /etc/init.d/nginx restart /etc/init.d/nginx reload

5.开机自启

最后的rc.local配置如下↓

#!/bin/sh -e# 启动 redis/etc/init.d/redis start# 启动 mysql/etc/init.d/mysql start# 启动 nginx/etc/init.d/nginx startexit0

设置了rc.local并不一定会开机自启。使用cat /etc/inittab查看 /etc/inittab 是否调用了 rc.local↓


你应该看到类似这一行↓

::sysinit:/etc/rc.local

如果没有,你需要手动添加,一定要放在启动程序的最后一个↓

如果像这样随便放一个地方,会出现问题,因为系统环境还没初始化好↓

如果想查看日志,可以这样写↓

#!/bin/sh -eecho"rc.local begin">>/tmp/rc.local.log# 启动 redis/etc/init.d/redis start>>/tmp/rc.local.log2>&1# 启动 mysql/etc/init.d/mysql start>>/tmp/rc.local.log2>&1# 启动 nginx/etc/init.d/nginx start>>/tmp/rc.local.log2>&1exit0
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/20 15:59:46

ponytail插件实战:用收束思维打造高效工作流

1. 从“ponytail”这个热词说起:它到底是什么第一次看到“ponytail”被当成一个技能、一个插件来讨论的时候,我其实愣了一下。马尾辫?这不是发型吗?但稍微在圈子里泡几天就明白了,现在大家嘴里的 ponytail,…

作者头像 李华
网站建设 2026/10/21 15:52:43

Copilot CLI 安装及命令:把 endpoint 改到 TaoToken 的完整配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/21 15:52:42

Loop:8 个方向管好 Mac 窗口的开源工具

Loop:8 个方向管好 Mac 窗口的开源工具 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 如果你的 Mac 屏幕上整天摆满窗口,Loop 这款开源的 Mac 窗口管理工具可以帮你省掉大半拖拽…

作者头像 李华
网站建设 2026/10/23 8:58:59

LRE框架:重构AI智能体的时间感知与因果记忆机制

1. 这不是“给AI加个备忘录”,而是重构智能体的时间感知能力很多人第一次看到“AI智能体记忆管理”这个词,下意识会想:不就是让大模型多存点上下文、加个向量数据库当外挂硬盘吗?我试过——在某个模拟项目X里,给一个任…

作者头像 李华