GL MV1000W from GL iNet AKA Brume

Wiki.TerraBase.info
Jump to navigation Jump to search

...a great little device that doesn't seem to be made anymore: GL-iNet GL-MV1000W

  • Dual 1 GHz CPUs
  • 1 GB of RAM
  • micro SD Card Slot
  • PLUS
    • Small Form Factor
    • USB C Power
    • 3 Port Switch
    • Antennas can be removed and replaced with RP-SMA Connectors fairly easily
    • 8 GB MMC Storage Built in (but it has to be "earned")
  • MINUS
    • USB 2.0 Only
    • No PCIe Bus, wireless is USB too
    • Wireless has to be "earned" too

https://openwrt.org/toh/gl.inet/gl-mv1000

Installing OpenWRT

Perquisites

GL-iNet GL-MV1000W Brume SystemBoard with TTL-Serial Pin Headers (courtesy of OpenWRT.org).jpg
GL-iNet GL-MV1000W Brume SystemBoard with TTL-Serial Pin Headers (courtesy of OpenWRT.org).jpg
  • Connect Serial / TTL Port (optional, requires 'disassembly' (see Disassembly Section), but it's way more fun to see what's going on);
    • The Serial / TTL Header is just there. 3 Pins, already on the System Board (near bottom of image to the right of the grayish rectangle (Ethernet Ports) and just to the left of the silver rectangle(s) (USB A and USB C Ports)) with the 'PIN Legend' printed on the SystemBoard (GND nearest the closest edge, then RX (Receive), and TX (Transmit)).
    • Serial Port Settings for PuTTY, SecureCRT, etc: 115200, 8, None, 1, No (That's Baud Rate, Data Bits, Parity, Stop Bits, Flow Control).
    • Hook it up, plug it in, and OpenWRT is ready to go. Job done! Nope (but it really is OpenWRT that it boots to, just a special custom 'flavor' from GL-iNet)
  • Configure Computer with IP Address of 192.168.1.2 (should be able to do anything on the 192.168.1.X subnet). The Device's IP Address will be 192.168.1.1
  • "Official Instructions" state: WAN port cannot be connected (turns out that's not accurate, tested, and it can be connected)

Installing a New Install of OpenWRT from Command Prompt of the Device's OEM Version of OpenWRT is not Possible

...but to try it out and see;

After connecting to the TTL / Serial Port, plug a cable into the Internet Ethernet Port.

opkg install wget (the BusyBox version of wget won't work with modern TLS / SSL)

wget https://downloads.openwrt.org/releases/23.05.0/targets/mvebu/cortexa53/openwrt-23.05.0-mvebu-cortexa53-glinet_gl-mv1000-ext4-sdcard.img.gz, or whatever the latest version of OpenWRT is. And no, the "SD Card" version doesn't have to be installed on an SD Card (funny thing is that the large internal storage on this device is based on an MMC (Multi-Media Card) that is soldered to the SystemBoard. The important part about which version (EXT4, InitRAMFS, or SquashFS) is that it uses the EXT4 file system which will be important later (part of the "earning" the 8 GB of storage thing). There is also not going to be a debate as to which file system is 'kinder' to Solid State Storage as only EXT 4 will be able to take FULL advantage of the 8 GB of storage (in a non-convoluted way).

gunzip WhatEverFileName.gz > WhatEverImageName.img

sysupgrade /WhatEverImageName.img See, it won't work as GL-iNet decided they weren't going to allow it (odd, since they seem so OpenWRT friendly compared to most manufacturers).

This was included as a long, passive agressive, 'Implicitish' (#Implicitish, come on, only 5 other instance of this word on the internet according to Google as of mid TwentyTwoFour) commentary for the person that decided to include the rather useless Upgrading OpenWrt Section for this device on the OpenWRT.org website.

Installing a New / Fresh Install of OpenWRT from the Built in Boot Loader GUI

The timing on this one is a bit tough. Confirmation can be seen if you have a TTL / Serial connection to the device via the Pin Header where it will show on the screen;

Reset button is pressed for: "6 or 7"* HTTP Server is starting at IP: 192.168.1.1

* "6 or 7": Usually 7 will be displayed even if the Reset Button is released at 6 (as it should be)
  • GL-iNet GL-MV1000W Brume - Firmware Update Web Page
    GL-iNet GL-MV1000W Brume - Firmware Update Web Page
    Plug the device in AND Hold the reset Button (firmly), just watch for the practice the first time;
    • All three lights on the front light up (Power, WiFi, and VPN)
    • All three lights on the front turn off
    • The Power Light turns on
    • The WiFi Light turns on
    • Let go of the Reset Button
GL-iNet GL-MV1000W Brume - Successful Upgrade
GL-iNet GL-MV1000W Brume - Successful Upgrade

At this point use a web browser to navigate to 192.168.1.1 where the "Firmware update" Page should be seen. Also, the official documentation on the OpenWRT.org website uses the incorrect title for one of the lights on the installation instructions.

If connected with a Serial / TTL device: Watch the "count-up", 1, 2, 3, 4, 5, 6, and before 7, let go of the Reset Button

Installing a New Install of OpenWRT from U-Boot (plus a Tirade)

After connecting to the TTL / Serial Port, plug a cable into the Internet Ethernet Port (again), get ready to press the 'gl' key. Wait! What? The actual message you will see is;

  • Hit "gl" key to stop booting in X seconds. (no kidding, that's the actual message)
    • First that's gl, as in g+lowercase"L" (l as in Larry, thank English Language and modern computer for making l I and 1 (That's a lower case l, Upper Case I (as in Insulting), and the number One) so wonderfully, perfectly, exactly the same. Seriously!?!?!?
    • Can the extra storage space for a Capital G and L be sacraficed? Oh, wait, same amount of storage for a lowercase l and g.
    • OK, gl key, let's see, f1, f2, ..., f12... Hmmm. Crap, no g1, no, gl.
    • Hit? Did you mean Press?
    • G and L are two "keys", not one "key"
    • Stop Booting? No! I need a Boot Loader command prompt. Boot to that.
    • It is absolutely stupefying a sentence that is less than 10 characters long have so many issues. Here's the right way gentlement;
      • Press the G Key and then the L Key to enter the U-Boot Command Interface. (was that so difficult?)

OK, tirade over.

"Upgrading" / Expanding the 'Disk Drive' (built in MMC (Multi-Media Card), not the SD Card Slot)

Start off with this, so you can see what's going on;

  • opkg update
  • opkg install lsblk blkid
  • Type: lsblk
    GL-iNet GL-MV1000W Brume - 8 GB MMC
    GL-iNet GL-MV1000W Brume - 8 GB MMC
    See that very last item?: mmcblk1, 7.3 GB in size A router with 8 GB of built in storage? Ever see that? Well, it has to be "earned" Go ahead, look and see the available space in the LuCI GUI. 7 some odd GB available? Nope. 100.xx MiB? WTF?!?! Why didn't they make that space available by default? The answer is unknown. Is there a way to take advantage of it? Sure there is. There's even instructions on the OpenWRT.org webpage for this device. But don't follow them (even if you can understand what the heck is written) as it is a complete kludge that doesn't do justice to the device.

Below is the rough draft as there isn't time today to check and edit it and add commentary, but it is fairly accurate;

  • opkg install blkid block-mount cfdisk dosfstools dumpe2fs e2fsprogs f2fs-tools f2fsck fdisk file fstools gdisk hdparm kmod-fs-exfat kmod-fs-ext4 kmod-fs-f2fs kmod-fs-vfat kmod-usb-storage kmod-usb2 kmod-usb3 lsblk mkf2fs mtd ntfs-3g ntfs-3g-utils sfdisk tune2fs usbutils wipefs nano htop
  • Reboot
  • Insert USB Flash Drive
  • LuCI GUI;
    • System, Mount Points, Generate Config
    • For the Device that was found (usually /dev/sda)
      • Edit
      • Enable
      • Mount point: root filesystem (/)
      • Follow the "Root Preparation" instructions
      • REBOOT
  • System, Mount Points, Mount Points: ...and it should show that the root ( / ) Directory is on /dev/sda1 (the USB Flash Drive)
  • opkg "all the same Packages as above"
  • Reboot. After rebooting, full access to do all that is necessary on the built in MMC device will be possible (not so if the router was booted to the MMC device)
  • lsblk (just to see everything)
  • umount /rom (isn't needed right now, or ever really after booting)
  • No No, just kidding, don't do it: wipefs -a /dev/mmcblk1 (if deleted, OpenWRT will need to be installed again, with the same small size partition)
  • cfdisk /dev/mmcblk1 (for now, just to see the layout of things and confirm that 7.2 G of space is waiting there to be used)
  • And now: Highlight the /dev/mmcblk1p2 Partition, select Resize and either max it out or set it to 6.0 GB, leaving space for a Swap Partition (recommended, but not covered here), Write it (confirming with "yes"), Exit. This only resizes the partition. Next step is to resize the File System to take advantage of the new Partition size (and now it is understood why EXT4 was used as the file system, not SquashFS, etc.)
  • umount /rom (yes, again, but a reboot occured so it remounted)
  • resize2fs /dev/mmcblk1p2 (didn't work, but it does give you the 'CHKDSK' command that must be run first, so it can be copied and pasted without typing or e2fsck -f /dev/mmcblk1p2)
  • e2fsck -f /dev/mmcblk1p2 (one more time after resize, just to make sure everything is good to go)
  • lsblk (yummy, now 7GB or whatever size was decided upon, much larger than the ~102 MiB size that left all that tantalizing space unused)
  • Remove the USB Flash Drive, Reboot (actually probably Reboot first, then yank the USB device really quick)
  • Good to go! Now booted from the internal MMC, using all (or as much as was wanted) the space available
  • lsblk (to check it)

Expanding the drive where OpenWRT was installed was the key. If the MMC was wiped and the partition size was increased, OpenWRT would have to be reinstalled which would take it down to the smaller size. Of course one could copy all the files back from the USB Flash Drive to the MMC after its size was increased (as that's the way the USB Flash drive was created).

Wireless

This has to be installed manually;

  • opkg update
  • opkg install kmod-rtl8xxxu rtl8192eu-firmware kmod-rtlwifi-usb wpad wpa-supplicant
  • Reboot (give it a minute or so as this reboot will take a few extra seconds the first time after installing the wireless software)
  • Erase the contents of: /etc/config/wireless (IE, make sure it is a blank / empty file, devoid of all configuration), then run this command: wifi config
  • Possibly another reboot
  • Wireless is now available.

...and it turns out the above is hopelessly busted and doesn't work. Worse yet, it seems to work, but no wireless device will be able to connect.

Hope Crushed Again

There's a repository (old as it is) from gl-inet with source code (sort of): https://github.com/gl-inet/openwrt/tree/openwrt-19.07.7/package/kernel/rtl8192eu But good luck modifying that for version 23.x (or later).

Wait! More hope: https://community.toradex.com/t/how-to-cross-compile-rtl8192eu-driver-for-imx8mp/20023#post_6

https://github.com/Mange/rtl8192eu-linux-driver (tried but ran into serious issues on one of the modules that contained the IPX protocol among other things, it was swiss cheese on fixing issues, just one after another in an endless stream of compile errors)

Disassembly

Remove the two rubber feet closest to the front. Unscrew the two screws that are now visible. Start at the back, above the USB Ports, and gently pry up, working around to the front on both sides.


Alternate Solution

Use the GL.iNet v19.07.08 version of OpenWRT. And then use updated packages (except for kernel stuff, so bluetooth would be hopeless for say btrtl.ko). But it allows for newer versions of Pulse Audio, etc.

UHTTPD (Nope, they switched LuCI to LigHTTPD)

Modify the /etc/opkg/customfeeds.conf file;

# add your custom package feeds here
#
# src/gz example_feed_name http://www.example.com/path/to/files
src/gz Optional_Base https://downloads.openwrt.org/releases/23.05.3/packages/aarch64_cortex-a53/base
src/gz Optional_Packages https://downloads.openwrt.org/releases/23.05.3/packages/aarch64_cortex-a53/packages

ALSA

...in the famous words of Corneal Henry Blake: "...but first";

kmod-sound-core

kmod-input-core

Check and make sure the above items are coming from the 19.07.8 feed by downloading before installing (just a test)

Disk Tools

Install these from the 19.07.8 sources or they won't work.

SAMBA4

Install from the 19.07.8 sources

Also, if you install from the GL.iNet interface, Samba 3.6 will be installed (woof).

Doing it all Manually

And just use OPKG as usual. The URLs in /etc/opkg/customfeeds.conf will take precedence over items in /etc/opkg/distfeeds.conf But use with caution and do NOT enable any feeds from core or routing.

This idea was tested by manually downloading .ipk files from OpenWRT, then installing them using the OPKG command (see below) The result was a successful version of Python3 running on OpenWRT 19.07.8 (which comes with Python2). Installation order is important as older versions of libffi, etc will be installed;

opkg install libbz2-1.0_1.0.8-1_aarch64_cortex-a53.ipk
opkg install python3-openssl_3.11.7-1_aarch64_cortex-a53.ipk
opkg install libffi_3.4.2-2_aarch64_cortex-a53.ipk
opkg install liblzma_5.4.6-1_aarch64_cortex-a53.ipk



opkg install python3-base_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-light_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-email_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-urllib_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-pydoc_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-cgi_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-cgitb_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-decimal_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-uuid_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-xml_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-ncurses_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-distutils_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-codecs_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-multiprocessing_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-asyncio_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-ctypes_3.11.7-1_aarch64_cortex-a53.ipk
opkg install libgdbm_1.21-2_aarch64_cortex-a53.ipk
opkg install python3-dbm_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-logging_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-lzma_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-multiprocessing_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-ncurses_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-openssl_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-readline_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-sqlite3_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3-unittest_3.11.7-1_aarch64_cortex-a53.ipk
opkg install python3_3.11.7-1_aarch64_cortex-a53.ipk

Got the above list by installing Python3 on an MV1000W with OpenWRT 23.05.03, and using that information for the above;

opkg install python3
Installing python3 (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3_3.11.7-1_aarch64_generic.ipk
Installing libpython3-3.11 (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/libpython3-3.11_3.11.7-1_aarch64_generic.ipk
Installing python3-base (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-base_3.11.7-1_aarch64_generic.ipk
Installing python3-light (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-light_3.11.7-1_aarch64_generic.ipk
Installing python3-asyncio (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-asyncio_3.11.7-1_aarch64_generic.ipk
Installing python3-email (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-email_3.11.7-1_aarch64_generic.ipk
Installing python3-cgi (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-cgi_3.11.7-1_aarch64_generic.ipk
Installing python3-pydoc (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-pydoc_3.11.7-1_aarch64_generic.ipk
Installing python3-cgitb (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-cgitb_3.11.7-1_aarch64_generic.ipk
Installing python3-codecs (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-codecs_3.11.7-1_aarch64_generic.ipk
Installing python3-ctypes (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-ctypes_3.11.7-1_aarch64_generic.ipk
Installing libgdbm (1.21-2) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/libgdbm_1.21-2_aarch64_generic.ipk
Installing python3-dbm (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-dbm_3.11.7-1_aarch64_generic.ipk
Installing python3-decimal (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-decimal_3.11.7-1_aarch64_generic.ipk
Installing python3-distutils (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-distutils_3.11.7-1_aarch64_generic.ipk
Installing python3-logging (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-logging_3.11.7-1_aarch64_generic.ipk
Installing python3-lzma (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-lzma_3.11.7-1_aarch64_generic.ipk
Installing python3-multiprocessing (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-multiprocessing_3.11.7-1_aarch64_generic.ipk
Installing python3-ncurses (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-ncurses_3.11.7-1_aarch64_generic.ipk
Installing python3-openssl (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-openssl_3.11.7-1_aarch64_generic.ipk
Installing python3-readline (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-readline_3.11.7-1_aarch64_generic.ipk
Installing python3-sqlite3 (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-sqlite3_3.11.7-1_aarch64_generic.ipk
Installing python3-unittest (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-unittest_3.11.7-1_aarch64_generic.ipk
Installing python3-urllib (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-urllib_3.11.7-1_aarch64_generic.ipk
Installing python3-uuid (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-uuid_3.11.7-1_aarch64_generic.ipk
Installing python3-xml (3.11.7-1) to root...
Downloading https://mirrors.cloud.tencent.com/openwrt/releases/23.05.2/packages/aarch64_generic/packages/python3-xml_3.11.7-1_aarch64_generic.ipk
Configuring libpython3-3.11.
Configuring python3-base.
Configuring python3-light.
Configuring python3-email.
Configuring python3-urllib.
Configuring python3-pydoc.
Configuring python3-cgi.
Configuring python3-cgitb.
Configuring python3-decimal.
Configuring python3-uuid.
Configuring python3-xml.
Configuring python3-ncurses.
Configuring python3-distutils.
Configuring python3-codecs.
Configuring python3-multiprocessing.
Configuring python3-asyncio.
Configuring python3-ctypes.
Configuring libgdbm.
Configuring python3-dbm.
Configuring python3-logging.
Configuring python3-lzma.
Configuring python3-openssl.
Configuring python3-readline.
Configuring python3-sqlite3.
Configuring python3-unittest.
Configuring python3.