Temat: Dodatkowe wolne miejsce na DIR-2150.

Cześć.
Zastanawiałem się czy zakładać nowy temat czy napisać w temacie: "kilka pytań początkującego".

Chciałem zainstalować Adguard na moim OpenWRT i ku mojemu zdziwieniu otrzymałem komunikat, że nie mam miejsca (Adguard wymaga 34)

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

  31        0        512 mtdblock0
  31        1        512 mtdblock1
  31        2        256 mtdblock2
  31        3        256 mtdblock3
  31        4      40960 mtdblock4
  31        5       4096 mtdblock5
  31        6      36864 mtdblock6
  31        7      32768 mtdblock7
  31        8      40960 mtdblock8
  31        9       6144 mtdblock9
  31       10       8704 mtdblock10
 254        0       4092 ubiblock0_0
root@OpenWrt:~# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00080000 00020000 "Bootloader"
mtd1: 00080000 00020000 "config"
mtd2: 00040000 00020000 "factory"
mtd3: 00040000 00020000 "config2"
mtd4: 02800000 00020000 "firmware"
mtd5: 00400000 00020000 "kernel"
mtd6: 02400000 00020000 "ubi"
mtd7: 02000000 00020000 "private"
mtd8: 02800000 00020000 "firmware2"
mtd9: 00600000 00020000 "mydlink"
mtd10: 00880000 00020000 "reserved"

root@OpenWrt:~# df -h
Filesystem                Size      Used Available Use% Mounted on
/dev/root                 4.0M      4.0M         0 100% /rom
tmpfs                    57.9M    292.0K     57.7M   0% /tmp
/dev/ubi0_1              24.1M      1.6M     21.3M   7% /overlay
overlayfs:/overlay       24.1M      1.6M     21.3M   7% /
tmpfs                   512.0K         0    512.0K   0% /dev

Dowiedzialem sie, ze na niektorej (zdaje sie, ze to mydlink) sa jakies ustawienia do chmury dlink i one sa niepotrzebne na OpenWRT. Ten router ma 128MB flash, a realnie dostalem jakieś ochłapy. Chcę zobaczyc czy jak przylutuje do niego USB 3.0 to będzie to działać.
Do tego czasu szukam rozwiązania, idzie tutaj coś z tym zrobić?

2

Odp: Dodatkowe wolne miejsce na DIR-2150.

1. Zmienić dts żeby połączyć te niewykorzystane partycje w jedno, przekompilować system. Jeżeli naprawdę uważasz że one są zbędne
2. Przeformatować te partycję, zamontowąć je w systemie i je używać jako oddzielny katalog.

W praktyce mydlink ma tylko 6M więc gra niewarta świeczki. A masz tam podwójny zestaw partycji, więc dlatego masz tak mało przestrzeni tutaj.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

3

Odp: Dodatkowe wolne miejsce na DIR-2150.

podwójny system partycji to przez to Firmware i Firmware 2?
Opcja nr 2 jest bardzo intuicyjna, ale nie pomoże mi w przypadku instalacji pakietu powyżej 6 MB smile.

Zanim zadałem to pytanie to spędziłem kilka dni żeby wyodrębnić, wyekstrahować coś z tych plików bin:
recovery i factory

Słowa kluczowe jakie się przewijały to: binwalk, ubireader, unsquashfs,
No, ale nie dałem rady ostatecznie, dlatego stwierdziłem, że zapytam tutaj. W sensie wyobrażałem sobie, że jak już wyodrębnię te binarki to znajdę w nich plik Makefile, który opisuje partycje. Zmodyfikuję go i system mi zrobi takie partycje jakie mu w nim zapisze. W każdym razie wyodrębniłem z Recovery.bin na A0 i 400000.ubi.

Zrobiłem kopię wszystkich bloków MTD. Stwierdziłem, ze jak nie zmienię pierwszych trzech - to niezaleznie od tego co zrobię, to zawsze będą mógł je wgrać z powrotem (a już na pewno pięć pierwszych).

Możesz zatem Cezary rozwinąć ten "podwójny zestaw partycji" ?

4

Odp: Dodatkowe wolne miejsce na DIR-2150.

Nazwy config2 i firmaware2 wskazują na to ze masz tam drugą kopię firmware, do przełączenia pewnie jakimiś zmiennymi bootolaodera.

Co ty chcesz wyciągać z binarek? Źródła przecież masz dostępne:

https://github.com/openwrt/openwrt/blob … 150-a1.dts

który dołącza

https://github.com/openwrt/openwrt/blob … _128m.dtsi

I masz partycje ładnie rozpisane.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

5

Odp: Dodatkowe wolne miejsce na DIR-2150.

Czyli edytuję plik DTS (w lokalizacji: openwrt-imagebuilder-ramips-mt7621.Linux-x86_64\target\linux\ramips\dts)  od DIR-2150 A1, a potem kompiluję na nowo obraz.

Mogę po prostu wyciąć fragment z A1 (dokładniej mówiąc z mt7621_dlink_dir_nand_128m.dtsi) i wkleić ten z R1 ?

Fragment z mt7621_dlink_dir_nand_128m.dtsi

 
&nand {
    status = "okay";

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

        partition@0 {
            label = "Bootloader";
            reg = <0x0 0x80000>;
            read-only;
        };

        partition@80000 {
            label = "config";
            reg = <0x80000 0x80000>;
            read-only;
        };

        partition@100000 {
            label = "factory";
            reg = <0x100000 0x40000>;
            read-only;

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

                eeprom_factory_0: eeprom@0 {
                    reg = <0x0 0x4da8>;
                };

                eeprom_factory_8000: eeprom@8000 {
                    reg = <0x8000 0x4da8>;
                };

                macaddr_factory_e000: macaddr@e000 {
                    compatible = "mac-base";
                    reg = <0xe000 0x6>;
                    #nvmem-cell-cells = <1>;
                };
            };
        };

        partition@140000 {
            label = "config2";
            reg = <0x140000 0x40000>;
            read-only;
        };

        partition@180000 {
            label = "firmware";
            compatible = "openwrt,uimage", "denx,uimage";
            openwrt,padding = <96>;
            reg = <0x180000 0x2800000>;
        };

        partition@2980000 {
            label = "private";
            reg = <0x2980000 0x2000000>;
            read-only;
        };

        partition@4980000 {
            label = "firmware2";
            reg = <0x4980000 0x2800000>;
        };

        partition@7180000 {
            label = "mydlink";
            reg = <0x7180000 0x600000>;
            read-only;
        };

        partition@7780000 {
            label = "reserved";
            reg = <0x7780000 0x880000>;
            read-only;
        };
    };
};

I zamiast tego powyżej wklejam z R1:

 
&nand {
    status = "okay";

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

        partition@0 {
            label = "Bootloader";
            reg = <0x0 0x80000>;
            read-only;
        };

        partition@80000 {
            label = "config";
            reg = <0x80000 0x80000>;
            read-only;
        };

        partition@100000 {
            label = "factory";
            reg = <0x100000 0x40000>;
            read-only;

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

                eeprom_factory_0: eeprom@0 {
                    reg = <0x0 0x400>;
                };

                eeprom_factory_8000: eeprom@8000 {
                    reg = <0x8000 0x4da8>;
                };

                macaddr_factory_e006: macaddr@e006 {
                    compatible = "mac-base";
                    reg = <0xe006 0x6>;
                    #nvmem-cell-cells = <1>;
                };
            };
        };
        
        partition@140000 {
            label = "firmware";
            compatible = "denx,uimage";
            reg = <0x140000 0x7E80000>;
        };
    };
};

6

Odp: Dodatkowe wolne miejsce na DIR-2150.

1. Imagebuilder nie kompiluje tylko składa. Więc jak chcesz to zrobić przez imagebuildera to musisz dts skompilować i włożyć plik w odpowiednie miejsce.
2. Przelicz sobie czy adresy rozpoczęcia partycji i ich wielkości się zgadzają. Nawet w excelu możesz to zrobić.
3. na 99% nie, nie możesz wkleić bezpośrednio z R1. Z jakiegoś powodu są tam te podwójne partycje więc jak je zlikwidujesz to pewnie bootloader się nie połapie gdzie co jest i nie uruchomi obrazu.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

7 (edytowany przez groszexxx 2024-10-28 16:54:44)

Odp: Dodatkowe wolne miejsce na DIR-2150.

Fakt, składa, a nie kompiluje, przepraszam za błędne stwierdzenie.

Pierwsze trzy partycje się pokrywają: 1) bootloader; 2) config 3) factory, czwarta zaczyna się z tego samego offsetu. Dalej się rozjeżdża ze względu na różnicę w ilości partycji.
W tym pierwszym układzie (który chce zmienić) ostatnia partycja kończy się trochę dalej niż w tym drugim.

Nie ukrywam, że zamierzam spróbować je wgrać. Chciałem zapytać czy jak mi router nie wstanie to TFTP będzie działać czy wtedy muszę fizycznie wyciągać flash i programować? Zdaje się, że TFTP jest zapisane w pierwszej partycji czyli 1) bootloader

Więc jak ten od R1 będzie niezgodny to łatwo przewidzieć efekty. Można je do siebie jakoś porównać albo zobaczyć co w sobie kryją bez jakiegoś skomplikowanego reverse engineering? smile

Chce jeszcze raz podkreślić, Cezary, że naprawdę doceniam Twoją bezinteresowną pomoc. Nie chciałbym jednak nieświadomie jej nadużywać. Wstyd mi, że mam braki, ostatnio sobie googluje i czytam, probujac je uzupełnić. Czy sklejony obraz można jakoś w ramach testowania odpalić najpierw w ramie?

8

Odp: Dodatkowe wolne miejsce na DIR-2150.

Możesz zrobić zwykłego diffa na plikach (lub np. w notepadzie++) i będziesz widział różnice.

Jeżeli uruchomisz go z bootloadera jako initramfs to odpali się w ramie. Ale to nic nie ma wspólnego z flash, bo czy uboot to będzie widział czy nie to się nie dowiesz bez wgrania.

tftp działa jeżeli uboot działa. A czy uboot będzie działal bez partycji czy z wadliwymi partycjami to już musisz sprawdzić.

Ja się obawiam tego podwójnego zestawu. Bo albo masz tam kopię systemu i można się na niego przełączyć, albo masz tam recovery którym jest nadpisywany obraz jak coś nie uda, np. nie uruchmi się. Jeżeli zlikwidujesz partyje to takie coś może spowodować że będzie w pewnych warunkach próbował uruchomić coś co nie istnieje.

Ale to ty masz dlinka nie ja, więc ty eksperymentuj jak i czy to działa.

Masz niepotrzebny router, uszkodzony czy nie - chętnie przygarnę go.

9

Odp: Dodatkowe wolne miejsce na DIR-2150.

Nie wiedziałem czy będę miał dostęp do mojego poprzedniego R1, więc chciałem bootloader jakoś wyłuskać z binarki. Potem spostrzegłem, że  wciąż R1 mam wpiętego w ZeroTier, więc zrobiłem zrzut.

Także porównałem bootloader A1 do R1.
Użyłem programu Beyond Compare (przy okazji polecam, bo oferuje funkcjonalność w tym przypadku przydatną, potrafi sobie tak poprzesuwać względem siebie pliki, żeby były jak najbardziej podobne. Większość tylko zestawie je ze sobą tak samo i pokazuje różnice. Wrzucam screena, który to prezentuje:
https://i.ibb.co/GPHv6LM/beyondcompare.jpg

Różnić jest sporo, ale może i tak spróbuję. Porównam pozostałe dwie partycje i zobaczę co dalej.