关于OpenWrt下运行.Net需要上Mono这回事
这几天淘到了一台T640 Plus ,买了一个 I350 AM3 祖国版 和 i210 移除掉自带的 Mini-Pcie 网卡 搭建家庭主路由来着、毕竟T640 支持 AES 指令集 性能强大 拓展完善
原本设想是EXSi 开直通安装 Koolshare 的 LEDE ,结果硬件关系自带的网卡无法直通,CPU 网卡 太烧性能属实浪费,结果发现OpenWrt 可以用 KVM 了
这样正好直接用LEDE 安装 KVM 无损消耗,到时候开个虚拟机用来做挂机宝,结果LEDE 的版本更新慢,KVM 装不上。没办法只能自己编译一个 OpenWrt 出来发光和热了,然后想自己做一个管理中心管理我的KVM
本来想着 .Net 6 预览版都出来了 ,我自己编译一个 .Net 5 到OP上面去 这样就能干活了 ,然后发现 .Net Core 没有编译文档,发现 Mono 提供了 非常完整的文档 包括如何裁剪
于是我就自己跑去编译一个Mono 然后跑我的 OP 上面了,结果发现是真的能折腾,经过和 群友 请教的 两三天 终于在 OP 上面 成功运行了我的 Mono
展示截图 :


关于划水被群主说这回事

(划水被说)
正事
编译环境: podman Ubuntu:laster
构建版本: OpenWrt :snapshots
默认大家都会自己编译OpenWrt的SDK 如果不会请参考 其他人的教程
安装好构建SDK需要的依赖
克隆 OpenWrt 最新的代码
make menuconfig 进入选项中 开启 需要的拓展 zlib 、 libatomic
如果缺少zlib 会报出 -lz
如果缺少libatomic 会报出 少了 atomic_ops.h 头文件 这里基本都是自行推断即可少啥补啥
如果全部正常则理论可以正常编译
Make 构造出来 SDK 、将SDK 解压出来
然后就可以克隆 Mono 仓库了,我使用的是Mono 2021-02
准备构造工具 Path
export PATH=$PATH: .../sdk/openwrt-sdk-x86-64_gcc-8.4.0_musl.Linux-x86_64/staging_dir/toolchain-x86_64_gcc-8.4.0_musl/bin export STAGING_DIR= .../openwrt-sdk-x86-64_gcc-8.4.0_musl.Linux-x86_64/staging_dir/toolchain-x86_64_gcc-8.4.0_musl export STAGING_DIR export PATH
测试:
确保环境配置正确(务必)
echo $PATH

使用git 克隆 Mono 仓库是使用 ./autogen
如果是使用的 Mono 发布的版本 则是使用 configure
这里使用的是克隆的Mono 2021-02
./autogen.sh --prefix=/ --host=x86_64-openwrt-linux-musl --enable-minimal=profiler,debug,logging --enable-small-config=yes --disable-mcs-build --without-mcs-docs --with-moonlight=no --disable-boehm
这里我们需要关闭 boehm gc,我们用不了
使用 --host 指定 运行环境
使用 --enable-minimal 指定需要裁剪的内容
这里只是示范裁剪,具体裁剪内容要根据使用环境去调整
如果一切顺利在输出中会有一句
- checking whether we are cross compiling… yes
表示当前是交叉编译了,可以直接 Make
安装Mono到指定的目录方便提取文件
make install DESTDIR=/Build
复制 /Build 到 测试机 就可以直接测试了
以下是 大佬教的裁剪方法
首先我们编译出来的Mono里面会有一堆的东西 大部分是不需要的比如
share 、includ 文件夹直接删掉
然后我们进入bin 文件夹 除了 mono 和 mono-sgen 其他的都删掉
mono这里是一个软连接 连接到 mono-sgen
strip 是SDK中的一个工具
使用 strip 工具对 mono-sgen 进一步裁剪
使用 strip 工具对 lib 中的 so库 进一步裁剪
最终大小只会不到20m
丢到 OpenWrt 上面去就可以正常运行那么就是编译成功
编译起来难度不大,跟着官方文档走就可以了,只是一些细小的问题如果没有相关经验的确很难办成
一开始少了 zlib 我还自己使用 Make CFLAGS="-I" 添加头文件,结果后来发现是SDK的问题
既然Mono 可以正常运行了,那么下一个软件中心还远吗?

浙公网安备 33010602011771号