chainofhonor 发表于 2024-3-19 21:53

编译openwrt怎么调整分区大小?

我目前用的R6220

然后分区信息如下


#####################################################root@OpenWrt:~# mount
/dev/root on /rom type squashfs (ro,relatime,errors=continue)
proc on /proc type proc (rw,nosuid,nodev,noexec,noatime)
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,noatime)
cgroup2 on /sys/fs/cgroup type cgroup2 (rw,nosuid,nodev,noexec,relatime,nsdelegate)
tmpfs on /tmp type tmpfs (rw,nosuid,nodev,noatime)
/dev/ubi0_1 on /overlay type ubifs (rw,noatime,assert=read-only,ubi=0,vol=1)
overlayfs:/overlay on / type overlay (rw,noatime,lowerdir=/,upperdir=/overlay/upper,workdir=/overlay/work)
tmpfs on /dev type tmpfs (rw,nosuid,noexec,noatime,size=512k,mode=755)
devpts on /dev/pts type devpts (rw,nosuid,noexec,noatime,mode=600,ptmxmode=000)
debugfs on /sys/kernel/debug type debugfs (rw,noatime)
bpffs on /sys/fs/bpf type bpf (rw,nosuid,nodev,noexec,noatime,mode=700)

#####################################################root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root               3.8M      3.8M         0 100% /rom
tmpfs                  58.9M    216.0K   58.7M   0% /tmp
/dev/ubi0_1            17.1M      3.5M   12.8M21% /overlay
overlayfs:/overlay       17.1M      3.5M   12.8M21% /
tmpfs                   512.0K         0    512.0K   0% /dev

#####################################################root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesizename
mtd0: 00100000 00020000 "u-boot"
mtd1: 00100000 00020000 "SC PID"
mtd2: 00400000 00020000 "kernel"
mtd3: 01c00000 00020000 "ubi"
mtd4: 00100000 00020000 "factory"
mtd5: 03c00000 00020000 "reserved"

#####################################################root@OpenWrt:~# cat/proc/partitions
major minor#blocksname

31      0       1024 mtdblock0
31      1       1024 mtdblock1
31      2       4096 mtdblock2
31      3      28672 mtdblock3
31      4       1024 mtdblock4
31      5      61440 mtdblock5
254      0       3844 ubiblock0_0

#########################################################################################


可以看到,最下面有60M的预留空间是没有用的
我想把这60M的预留空间添加到根目录去
然后我就用docker编译固件

######################################################################

docker run --rm -v /root/docker/openwrt/bin:/home/build/openwrt/bin -it openwrt/imagebuilder:ramips-mt7621-openwrt-23.05

######################################################################
然后查看信息
make info |more

找到R6220的信息
netgear_r6220:
    NETGEAR R6220
    Packages: kmod-mt7603 kmod-usb3 kmod-usb-ledtrig-usbport -uboot-envtools kmod-mt76x2
    hasImageMetadata: 1
    SupportedDevices: netgear,r6220 r6220

######################################################################
cat /builder/target/linux/ramips/image/mt7621.mk
这个文件里面有定义r6220的镜像空间大小 28672k

define Device/netgear_r6220
$(Device/netgear_sercomm_nand)
DEVICE_MODEL := R6220
SERCOMM_HWNAME := R6220
SERCOMM_HWID := AYA
SERCOMM_HWVER := A001
SERCOMM_SWVER := 0x0086
IMAGE_SIZE := 28672k
DEVICE_PACKAGES += kmod-mt76x2
SUPPORTED_DEVICES += r6220
endef
TARGET_DEVICES += netgear_r6220
######################################################################
cat /builder/target/linux/ramips/dts/mt7621_netgear_r6220.dts

下面是关键的内容 reg = <0x600000 0x1c00000>;
这个表示从0x600000开始 有一个0x1c00000大小的空间
通过计算得知0x1c00000刚好就是十进制的28672k 和上面的IMAGE_SIZE := 28672k吻合

&nand {
      status = "okay";

      partitions {
                compatible = "fixed-partitions";
                #address-cells = <1>;
                #size-cells = <1>;

                partition@0 {
                        label = "u-boot";
                        reg = <0x0 0x100000>;
                        read-only;
                };

                partition@100000 {
                        label = "SC PID";
                        reg = <0x100000 0x100000>;
                        read-only;
                };

                partition@200000 {
                        label = "kernel";
                        reg = <0x200000 0x400000>;
                };

                partition@600000 {
                        label = "ubi";
                        reg = <0x600000 0x7600000>;
                };

                factory: partition@7C00000 {
                        label = "factory";
                        reg = <0x7C00000 0x100000>;
                        read-only;
                };

                partition@7D00000 {
                        label = "reserved";
                        reg = <0x7D00000 0x100000>;
                        read-only;
                };
      };
};

######################################################################
然后修改大小
空间的总大小是7E00000126M
我把最后的预留改为了1M
多余的空间都添加到ubi了
顺便把ubi和factory中间没用到的空间也利用上了

最后改完以后的分区信息如下

&nand {
      status = "okay";

      partitions {
                compatible = "fixed-partitions";
                #address-cells = <1>;
                #size-cells = <1>;

                partition@0 {
                        label = "u-boot";
                        reg = <0x0 0x100000>;
                        read-only;
                };

                partition@100000 {
                        label = "SC PID";
                        reg = <0x100000 0x100000>;
                        read-only;
                };

                partition@200000 {
                        label = "kernel";
                        reg = <0x200000 0x400000>;
                };

                partition@600000 {
                        label = "ubi";
                        reg = <0x600000 0x7600000>;
                };

                factory: partition@7C00000 {
                        label = "factory";
                        reg = <0x7C00000 0x100000>;
                        read-only;
                };

                partition@7D00000 {
                        label = "reserved";
                        reg = <0x7D00000 0x100000>;
                        read-only;
                };
      };
};



IMAGE_SIZE := 120832k

######################################################################
开始编译
make PROFILE="netgear_r6220" imagePACKAGES="luci";

最后把编译好的bin文件复制出来 刷到路由器里面
ls /builder/bin/targets/ramips/mt7621
可以看到下面的文件
sha256sums
profiles.json
openwrt-23.05-snapshot-r23800-100a5606d6-ramips-mt7621-netgear_r6220.manifest

openwrt-23.05-snapshot-r23800-100a5606d6-ramips-mt7621-netgear_r6220-squashfs-kernel.bin
openwrt-23.05-snapshot-r23800-100a5606d6-ramips-mt7621-netgear_r6220-squashfs-rootfs.bin

openwrt-23.05-snapshot-r23800-100a5606d6-ramips-mt7621-netgear_r6220-squashfs-sysupgrade.bin

openwrt-23.05-snapshot-r23800-100a5606d6-ramips-mt7621-netgear_r6220-squashfs-factory.img

######################################################################
我在breed界面直接刷入固件,重启以后分区信息还是原来的

请问我编译的步骤是哪里做错了吗?
为什么我修改了分区没生效

gravely 发表于 2024-3-19 22:57

breed,要选 mtk sdk刷入

gravely 发表于 2024-3-19 22:58

btw, mt7621就放过它吧,跑不动docker的

chainofhonor 发表于 2024-3-20 04:16

gravely 发表于 2024-3-19 22:57
breed,要选 mtk sdk刷入

没看懂这个回答
是说要把我上面改好的
/builder/target/linux/ramips/dts/mt7621_netgear_r6220.dts
/builder/target/linux/ramips/image/mt7621.mk
这2个文件刷入breed? (这个怎么刷)

还是说编译固件 最后make的时候要手动指定?(怎么手动指定)

ysc3839 发表于 2024-3-20 05:25

本帖最后由 ysc3839 于 2024-3-20 05:29 编辑

最后执行的是make image?不应该是make menuconfig,然后make吗?这个流程看的是什么文档?
没记错的话make image是ImageBuilder的流程,是从官方源里下载软件包下来组合成新的镜像,不会重新编译内核,你需要用编译的流程。

gravely 发表于 2024-3-20 09:18

chainofhonor 发表于 2024-3-20 04:16
没看懂这个回答
是说要把我上面改好的
/builder/target/linux/ramips/dts/mt7621_netgear_r6220.dts


编译固件 make defconfig && make
在breed 刷 factory 选mtk sdk

chainofhonor 发表于 2024-3-20 17:34

gravely 发表于 2024-3-20 09:18
编译固件 make defconfig && make
在breed 刷 factory 选mtk sdk

我用SDK编译方式如下:

docker run --rm -v /root/docker/openwrt_sdk/sdk/:/home/sdk/ -it openwrt/sdk:ramips-mt7621-openwrt-23.05


然后输入make menuconfig以后报了很多错误


进入的menu界面选项也很少



这个是什么原因

我看了网上的教程,说要先
./scripts/feeds update -a

我也执行了,都正常的更新完毕了
执行make menuconfig还是提示上面的错误

步骤是哪里错了
还是说我yunxingdocker的命令少了什么参数?

Icarus_Radio 发表于 2024-3-20 18:33

https://openwrt.org/toh/netgear/r6220#make_use_of_reserved_60_mib_partition
OpenWRT 官方有教程,不用重新编译固件

chainofhonor 发表于 2024-3-20 18:56

Icarus_Radio 发表于 2024-3-20 18:33
https://openwrt.org/toh/netgear/r6220#make_use_of_reserved_60_mib_partition
OpenWRT 官方有教程,不用 ...

这个我看过了
这是仅仅只是把预留的60M空间挂载到一个目录下

我想把这个空间合并到用户/目录

Icarus_Radio 发表于 2024-3-20 22:50

本帖最后由 Icarus_Radio 于 2024-3-20 22:51 编辑

chainofhonor 发表于 2024-3-20 18:56
这个我看过了
这是仅仅只是把预留的60M空间挂载到一个目录下



我记得openwrt可以把overlayfs挂载到别的地方,你直接挂在这个60m分区上试试。合并也就多10m空间,也没多大区别吧
比如Extroot:https://openwrt.org/docs/guide-user/additional-software/extroot_configuration

shanpo 发表于 2024-3-21 07:44

要刷factory固件,sysupgrade固件不会重写分区。

gravely 发表于 2024-3-21 09:11

chainofhonor 发表于 2024-3-20 17:34
我用SDK编译方式如下:

docker run --rm -v /root/docker/openwrt_sdk/sdk/:/home/sdk/ -it openwrt/sdk: ...

从没用过docker容器编译固件 没法回答.......

ysc3839 发表于 2024-3-22 23:29

chainofhonor 发表于 2024-3-20 17:34
我用SDK编译方式如下:

docker run --rm -v /root/docker/openwrt_sdk/sdk/:/home/sdk/ -it openwrt/sdk: ...

./scripts/feeds update -a之后要执行./scripts/feeds install -a

chainofhonor 发表于 2024-3-23 00:06

ysc3839 发表于 2024-3-22 23:29
./scripts/feeds update -a之后要执行./scripts/feeds install -a

嗯op论坛的版主也这样回复的

我尝试了一下,用了一台香港的服务器
然后make menuconfig的时候貌似还是没有找到选路由器型号的选项
我就直接开始编译了,太慢了,我放弃了

目前这个路由器我就装了个KMS
默认的分区够用了

不折腾了

Icarus_Radio 发表于 2024-3-23 10:29

chainofhonor 发表于 2024-3-23 00:06
嗯op论坛的版主也这样回复的

我尝试了一下,用了一台香港的服务器


找不到型号应该是你没有去官网下载对应架构的 config.buildinfo,默认选的不是你路由器的架构,所以找不到
页: [1]
查看完整版本: 编译openwrt怎么调整分区大小?