如何把openwrt的ipk软件包安装到ubuntu上

前提:都是arm64的架构的软件包。

下载openwrt的ipk软件包

1. 从https://pkgs.org/ 查找下载软件包:

本文以swconfig软件包为例,下载swconfig和相关的依赖软件包:

swconfig_12_aarch64_cortex-a72.ipk

libuci20130104_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk

libubox20220515_2022-05-15-d2223ef9-1_aarch64_cortex-a72.ipk

libnl-tiny1_2021-11-21-8e0555fb-1_aarch64_cortex-a72.ipk

uci_2021-10-22-f84f49f0-6_aarch64_cortex-a72.ipk (可选,用于测试)

2. 解压回档文件:

如上图所示把ipk的软件包解压,提出出data.tar, 然后把所有的data.tar解压到一个tmp_rootfs的目录夹,这个目录夹就是我们最后要复制到ubuntu系统中的文件结构。

运行问题处理

上传程序之后出现程序无法运行的情况,如上图所示。

  1. 修改libc.so格式问题:

目前大多是ubuntu的发行版用的是glibc, /lib/aarch64-linux-gnu/libc.so 为一个ASCII text的,里面包含了真正的库文件路径和名称:

使用strace分析ldd的装在过程:strace -f -s 1024 ldd itgw/bin/swconfig,可以看到如下查找libc.so的过程

再查看系统当前的libc的情况:

把ubuntu系统中的/lib/aarch64-linux-gnu/libc-2.31.so复制到sw-rootfs的安装包里,和执行程序放在一个位置,之后执行swconfgi时,只要在swconfgi坐在的目录去执行程序,自动的就会使用当前路径下的libc.so,而不会去使用根目录下的/lib/aarch64-linux-gnu/libc.so这个ASCII text。

添加运行时的环境变量脚本,指定对应的lib查找路径:

  1. 修改ld版本问题:

cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1复制一个musl名称的文件名。

制作安装打包脚本

  1. 安装脚本:
    root@easyHome:/home/forlinx/test/sw-config# cat sw-install.sh
    #!/bin/bashbasepath=$(cd `dirname $0`; pwd)if [ "$1" != "-f" ]; thenecho "$basepath"old_md5=`md5sum /xxx/switch/swconfig | awk '{printf $1}'`new_md5=`md5sum "$basepath"/xxx/switch/swconfig | awk '{printf $1}'`if [ "$old_md5" == "$new_md5" ];thenecho "same file, skip the install..."exit 1fielseecho "force to update"
    fiecho "start to install swconfig..."
    echo "$basepath...."
    cd $basepath
    cp -rf * /
    rm -r /sw-install.shecho "create the openwrt's running EVN..."
    cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1
    cp /lib/aarch64-linux-gnu/libc.so.6 /itgw/switch/usr/local/lib/libc.so
    ldconfig
    ldconfig
    echo "enable inspur-switch service..."
    systemctl enable inspur-switch

2. 打包文件结构:

root@easyHome:/home/forlinx/test/sw-config# tree
.
├── etc
│   ├── netplan
│   │   └── 00-netcfg.yaml
│   └── uci-defaults
├── xxx
│   └── switch
│       ├── sw-config.sh
│       ├── sw-env.sh
│       ├── swconfig
│       ├── uci
│       └── usr
│           └── local
│               └── lib
│                   ├── libc.so
│                   ├── libnl-tiny.so
│                   ├── libubox.so -> libubox.so.20220515
│                   ├── libubox.so.20220515
│                   └── libuci.so
├── sw-install.sh
└── usr└── lib├── config│   └── uci.sh├── network│   └── switch.sh└── systemd└── system└── inspur-switch.service14 directories, 14 files

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/650723.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

podman+centos和docker+alpine中作性能对比遇到的问题及解决

1.dockeralpine中遇到这个问题 这是由于缺少相关的配置和依赖造成的 通过以下命令在alpine中安装相关配置 apk add --no-cache build-base cairo-dev cairo cairo-tools jpeg-dev zlib-dev freetype-dev lcms2-dev openjpeg-dev tiff-dev tk-dev tcl-dev 2.alpine中python找…

C++——IO流

C语言中我们学习过文件IO的相关函数,那么在C中也一定有各种IO流的 函数或者功能,由我今天来简单介绍一下C中IO流的大致原理及使用。在C语言中我们经常会使用到scanf、printf、sscanf、sprintf等等来实现进程和文件之间数据的流动,在C中虽然由…

python黑马模块

1、使用内置模块 # import通过.使用模块内部的全部功能 """ import time print("ff") time. sleep(5) print("as")# 使用from 导入某个功能 from time import sleep print("ff") sleep(5) print("as")# 使用 * 导入全部…

taskflow 源码阅读笔记-1

之前写了一篇介绍Taskflow的短文:传送门 Taskflow做那种有前后依赖关系的任务管理还是不错的,而且他的源码里运用了大量C17的写法,觉得还是非常值得学习的,因此决定看一下他的源码,这里顺便写了一篇代码学习笔记。 概…

Amazon 亚马逊新玩具——在线购物试衣服“虚拟试穿”模型:Diffuse to Choose

这个模型拥有强大的能力,它能够将任何商品无缝地融入任何环境之中,确保商品与环境完美匹配。例如,你可以轻松地将在线商店中的椅子图片放入你客厅照片中,预览它实际摆放的效果。无论环境如何变化,该模型都能确保商品展…

Java复习系列之阶段二:数据库

1. 基础语法 1.1 DQL(数据查询语句) 执行顺序: from、join 、on、where、group by、having、select、distinct、order by、limit 1.2 DML(数据修改语言) 对数据表的增删改 insert into update set delete form 1.…

【JavaEE进阶】 #{}和${}

文章目录 🍃前言🌳#{}和${}使⽤🚩Interger类型的参数(基础数据类型)🎈使用#{}🎈使用${} 🚩String类型的参数使用🎈#{}使用🎈${} 🎍#{}和${}区别&a…

C++:引用

目录 概念: 引用的使用格式: 引用特性: 常引用 使用场景: 1、做参数 二级指针时的取别名 一级指针取别名 一般函数取别名 2、做返回值 函数返回值的原理: 引用的返回值使用: 引用和指针的对比&…

Java Swing桌面项目打包成可执行jar

前言 最近有需求,将Swing项目打包为一个可执行的jar包,遇见了一些问题,参考AI助手,解决了遇到的问题,也有一些亲身实践体会,记录一下。开发环境IntelliJ IDEA,JDK8,用kotlin语言实现…

navicat连接postgresql、人大金仓等数据库报错

navicat连接postgresql、人大金仓数据库报错问题是一个偶现的问题,需要我们特别关注: 1、客户端连接人大金仓数据库 这里注意:navicat连接postgresql、人大金仓数据库时均选择postgresql类型,因为人大金仓数据库底层和psql数据库…

【第五天】蓝桥杯备战

1、金币 https://www.lanqiao.cn/problems/357/learning/ 解法:暴力 import java.util.Scanner; // 1:无需package // 2: 类名必须Main, 不可修改public class Main {public static void main(String[] args) {Scanner scan new Scanner(System.in);//在此输入…

01_Anaconda环境搭建

概述 Anaconda包含了许多常用的科学计算和数据分析的库和工具。通过Anaconda,用户可以更方便地安装、管理和更新这些库和工具,从而提高工作效率。 Anaconda还提供了一个名为conda的包管理器,可以帮助用户方便地安装、管理和更新这些库和工具…

写静态页面——魅族声学_前端页面练习

1、效果: 1、html代码: <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>魅族声学</titl…

金智易表通构建学生缴费数据查询+帆软构建缴费大数据报表并整合到微服务

使用金智易表通挂接外部数据,快速建设查询类服务,本次构建学生欠费数据查询,共有3块设计,规划如下: 1、欠费明细查询:学校领导和财务处等部门可查询全校欠费学生明细数据;各二级学院教职工可查询本二级学院欠费学生明细数据。 2、大数据统计报表:从应收总额、欠费总额…

Spring与Redis集成

1.引入RedisTemplate 据以前的情况&#xff0c;我们在Java中使用Redis时一般是使用Jedis来操作的&#xff0c;大致的一段代码如下所示 Overridepublic User findUserById(Integer id) {User user null;Jedis jedis null;try {jedis jedisPool.getResource();String userStr…

直接在GitHub上使用vscode阅读源码

方法&#xff1a; 直接在github后面输入1s即可 效果&#xff1a;

光学系统的核心--分辨率

前言 在机器视觉领域&#xff0c;可以把各个部件划分为光源&#xff0c;镜头&#xff0c;相机&#xff0c;采集卡&#xff0c;算法&#xff0c;运动平台等。各个部件都是系统的有机组合&#xff0c;均有各自的重要性。在实际应用中&#xff0c;成像镜头涉及的光学理论较多&…

[数据结构]-哈希

前言 作者&#xff1a;小蜗牛向前冲 名言&#xff1a;我可以接受失败&#xff0c;但我不能接受放弃 如果觉的博主的文章还不错的话&#xff0c;还请点赞&#xff0c;收藏&#xff0c;关注&#x1f440;支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习目标&…

智能工厂4G无线设备预测维护云端联动的DI、AI、DO混合信号处理单元

在现代工业智能化进程中&#xff0c;一款集成了丰富I/O接口并能与各大云平台无缝对接的智能设备显得尤为重要。比如最近推出的这款创新产品&#xff0c;它集合了8路数字输入通道&#xff0c;涵盖了干湿节点的识别功能&#xff0c;适用于多种开关量信号的读取&#xff1b;同时&a…

(八)springboot实战——springboot3下的webflux项目全局异常处理

前言 在webflux响应式编程中&#xff0c;如何处理系统运行时异常是本节的主要内容。在传统的Servlet阻塞式web项目中主要通过HandlerExceptionResolver处理器来处理&#xff0c;而在webflux响应式web项目中&#xff0c;则是通过DispatchExceptionHandler异常处理器来处理异常。…