如何从openwrt移植软件包到entware
答案:2 悬赏:0 手机版
解决时间 2021-03-02 02:26
- 提问者网友:辞取
- 2021-03-01 07:16
如何从openwrt移植软件包到entware
最佳答案
- 五星知识达人网友:渊鱼
- 2021-03-01 07:34
因为要把fastd移到entware,找了一下发现entware并没有提供完整的文档说明,在这里整理一下我的心得。各种错误疏漏在所难免,欢迎指正。 背景: Broadcom方案的路由一般将系统设置保存在NVRAM,文件系统的根卷采用只读的SquashFS,意味着你虽然...
全部回答
- 1楼网友:行雁书
- 2021-03-01 08:37
因为要把fastd移到entware,找了一下发现entware并没有提供完整的文档说明,在这里整理一下我的心得。各种错误疏漏在所难免,欢迎指正。
背景:
broadcom方案的路由一般将系统设置保存在nvram,文件系统的根卷采用只读的squashfs,意味着你虽然看得到/etc/下的各种配置,但其实无法修改,除非重新编译安装固件。由此派生出来的dd-wrt和tomato也是照办。
对于额外可用的flash,dd-wrt和tomato都支持格式化为jffs2卷(jffs2以下也统一简称jffs),并一般挂载到/jffs路径。
而主要支持atheros方案路由的openwrt则一般采用squashfs + jffs overlay的方案,即根卷仍然是只读的squashfs卷,但在其上覆盖可读写的jffs卷,看起来就好像你可以自由修改文件系统一样,但其实只是jffs卷的内容覆盖在squashfs上。这样既方便,又保留了只读squashfs的灾难恢复功能。
作为对比,下面是r6300v2运行tomato的mount表:
rootfs on / type rootfs (rw)
/dev/root on / type squashfs (ro,relatime)
proc on /proc type proc (rw,relatime)
tmpfs on /tmp type tmpfs (rw,relatime)
devfs on /dev type tmpfs (rw,noatime)
sysfs on /sys type sysfs (rw,relatime)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
usbfs on /proc/bus/usb type usbfs (rw,relatime)
/dev/mtdblock6 on /jffs type jffs2 (rw,noatime)
在r6300v2上登录到ssh以后,我的home目录是跑在tmpfs上的/tmp/home/root,相当于是ramdisk里面。真正可以写入内容并且重启后不丢失的位置只有 /jffs。在r6300v2 + tomato上面,/jffs是利用系统64mb空闲的flash。
下面是wndr3700v4运行openwrt的mount表:
rootfs on / type rootfs (rw)
/dev/root on /rom type squashfs (ro,relatime)
proc on /proc type proc (rw,noatime)
sysfs on /sys type sysfs (rw,noatime)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/ubi0_1 on /overlay type ubifs (rw,noatime)
overlayfs:/overlay on / type overlayfs (rw,noatime,lowerdir=/,upperdir=/overlay)
tmpfs on /dev type tmpfs (rw,relatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,relatime,mode=600)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
wndr3700v4有128m nand flash,大概90多mb空闲。从上面可以看出和tomato的区别在于这些空间(/dev/ubi0_1)被作为overlayfs,透明覆盖于 / 之上。我在wndr3700v4的/etc/下所作的修改都保存到了overlay中,遮蔽了原有存在于squashfs中的文件。另外wndr3700v4是使用廉价的nand flash,因此openwrt专门为其使用ubifs文件系统,而不是上文所说的jffs。
说了这么多看似无关的,是为了解释openwrt/opkg和entware之间一个重要的区别:openwrt默认把opkg包安装到/usr/,而作为移植版的entware默认安装到/opt/。因为ddwrt/tomato根卷只读,/usr/不像openwrt上面那样可以写入,所以只能另选一个通常根卷上没有的路径,因此就有了/opt/。别忘了entware的前身就是optware。
所以ddwrt/tomato的用户常常会需要将/jffs重新bind到/opt,或者挂外接硬盘/u盘到/opt上,openwrt用户则不需要。当然路由内置空间太小的openwrt是另外一回事。
那么把一个软件包从openwrt移植到entware所要做的工作就很直观了:把各种约定好的路径统统改到/opt!
/usr/bin? 改到 /opt/bin
/usr/sbin? 改到 /opt/bin
/etc/配置文件? 改到 /opt/etc/配置文件
使用openwrt uci配置系统的 /etc/config/配置文件?还有openwrt风格的 /etc/init.d/启动脚本?对不起,这些和ddwrt/tomato不兼容,只能case by case修改
实际上entware仓库中你可以找到大量的fix-path.patch文件,就是针对各个软件包修改makefile中的路径。当然,由于内核版本不同(openwrt bb是3.10,cc已经升到3.18,tomato仍然沿用2.26系列)和其他种种原因,总有一些软件包还需要修改其他地方。
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯