前提:都是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系统中的文件结构。
运行问题处理
上传程序之后出现程序无法运行的情况,如上图所示。
- 修改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查找路径:
- 修改ld版本问题:
cp -rf /lib/ld-linux-aarch64.so.1 /lib/ld-musl-aarch64.so.1复制一个musl名称的文件名。
制作安装打包脚本文章来源:https://www.toymoban.com/news/detail-823246.html
- 安装脚本:
root@easyHome:/home/forlinx/test/sw-config# cat sw-install.sh #!/bin/bash basepath=$(cd `dirname $0`; pwd) if [ "$1" != "-f" ]; then echo "$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" ];then echo "same file, skip the install..." exit 1 fi else echo "force to update" fi echo "start to install swconfig..." echo "$basepath...." cd $basepath cp -rf * / rm -r /sw-install.sh echo "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. 打包文件结构:文章来源地址https://www.toymoban.com/news/detail-823246.html
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.service
14 directories, 14 files
到了这里,关于如何把openwrt的ipk软件包安装到ubuntu上的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!