找回密码
 加入我们
搜索
      
查看: 1986|回复: 14

[软件] 编译openwrt怎么调整分区大小?

[复制链接]
发表于 2024-3-19 21:53 | 显示全部楼层 |阅读模式
我目前用的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.8M  21% /overlay
overlayfs:/overlay       17.1M      3.5M     12.8M  21% /
tmpfs                   512.0K         0    512.0K   0% /dev

#####################################################root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
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  #blocks  name

  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;
                };
        };
};

######################################################################
然后修改大小
空间的总大小是7E00000  126M
我把最后的预留改为了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" image  PACKAGES="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界面直接刷入固件,重启以后分区信息还是原来的

请问我编译的步骤是哪里做错了吗?
为什么我修改了分区没生效
发表于 2024-3-19 22:57 | 显示全部楼层
breed,要选 mtk sdk刷入
发表于 2024-3-19 22:58 | 显示全部楼层
btw, mt7621就放过它吧,跑不动docker的
 楼主| 发表于 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的时候要手动指定?(怎么手动指定)
发表于 2024-3-20 05:25 来自手机 | 显示全部楼层
本帖最后由 ysc3839 于 2024-3-20 05:29 编辑

最后执行的是make image?不应该是make menuconfig,然后make吗?这个流程看的是什么文档?
没记错的话make image是ImageBuilder的流程,是从官方源里下载软件包下来组合成新的镜像,不会重新编译内核,你需要用编译的流程。
发表于 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
 楼主| 发表于 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以后报了很多错误
用docker输入make menuconfig以后有很多错误.png

进入的menu界面选项也很少
为什么我用sdk编译的时候menuconfig里面的内容很少.png


这个是什么原因

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

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

步骤是哪里错了
还是说我yunxingdocker的命令少了什么参数?
发表于 2024-3-20 18:33 | 显示全部楼层
https://openwrt.org/toh/netgear/ ... ed_60_mib_partition
OpenWRT 官方有教程,不用重新编译固件
 楼主| 发表于 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空间挂载到一个目录下

我想把这个空间合并到用户/目录
发表于 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-u ... troot_configuration
发表于 2024-3-21 07:44 | 显示全部楼层
要刷factory固件,sysupgrade固件不会重写分区。
发表于 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容器编译固件 没法回答.......
发表于 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
 楼主| 发表于 2024-3-23 00:06 | 显示全部楼层
ysc3839 发表于 2024-3-22 23:29
./scripts/feeds update -a之后要执行./scripts/feeds install -a

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

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

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

不折腾了
发表于 2024-3-23 10:29 | 显示全部楼层
chainofhonor 发表于 2024-3-23 00:06
嗯  op论坛的版主也这样回复的

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

找不到型号应该是你没有去官网下载对应架构的 config.buildinfo,默认选的不是你路由器的架构,所以找不到
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

Archiver|手机版|小黑屋|Chiphell ( 沪ICP备12027953号-5 )沪公网备310112100042806 上海市互联网违法与不良信息举报中心

GMT+8, 2024-6-16 09:19 , Processed in 0.012506 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2007-2024 Chiphell.com All rights reserved.

快速回复 返回顶部 返回列表