LinkIt Smart 7688 fw on Omega2+ hardware



  • Warning, proceed at own risk and only if you're comfortable with advanced O2+ tinkering.

    Just for $h1tz and giggl3$ I decided to dump the LinkIt Smart 7688 fw v0.9.4 onto a USB stick and burn it to an O2+.

    Everything looked like it worked ok.

       ____       _             ____
      / __ \___  (_)__  ___    / __ \__ _  ___ ___ ____ _
     / /_/ / _ \/ / _ \/ _ \  / /_/ /  ' \/ -_) _ `/ _ `/
     \____/_//_/_/\___/_//_/  \____/_/_/_/\__/\_, /\_,_/
     W H A T  W I L L  Y O U  I N V E N T ? /___/"
    
    Board: Onion Omega2 APSoC DRAM:  128 MB
    relocate_code Pointer at: 87f60000
    flash manufacture id: c2, device id 20 19
    find flash: MX25L25635E
    *** Warning - bad CRC, using default environment
    
    ============================================
    Onion Omega2 UBoot Version: 4.3.0.3
    --------------------------------------------
    ASIC 7628_MP (Port5<->None)
    DRAM component: 1024 Mbits DDR, width 16
    DRAM bus: 16 bit
    Total memory: 128 MBytes
    Flash component: SPI Flash
    Date:Oct 18 2016  Time:17:29:05
    ============================================
    icache: sets:512, ways:4, linesz:32 ,total:65536
    dcache: sets:256, ways:4, linesz:32 ,total:32768
    CPU freq = 575 MHZ
    Estimated memory size = 128 Mbytes
    Resetting MT7628 PHY.
    Initializing MT7688 GPIO system.
    
    
    **************************************
    * Hold Reset button for more options *
    **************************************
    
    
    You have 40 seconds left to select a menu option...
    
    
    Please select option:
       [ Enter ]: Boot Omega2.
       [ 0 ]: Start Web recovery mode.
       [ 1 ]: Start command line mode.
       [ 2 ]: Flash firmware from USB storage.
    
    Option [2] selected.
    System Load Linux then write to Flash via USB Storage.
    Looking for a USB Storage.
    If suitable image is found on USB Storage writing to Flash will be attempted.
    U-Boot will look for a FAT file system.
    (Re)start USB...
    LOW LEVEL INIT USB0:
    Scanning bus 0 for devices...
    New Device 0
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x100 index 0x0 length 0x8
    usb_control_msg: status = success?
    
     INSIDE USB INIT
    
     INSIDE USB INIT: Device responded.
    set address 1
    usb_control_msg: request: 0x5, requesttype: 0x0
    value 0x1 index 0x0 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x100 index 0x0 length 0x12
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x200 index 0x0 length 0x9
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x200 index 0x0 length 0x19
    usb_control_msg: status = success?
    get_conf_no 0 Result 25, wLength 25
    if 0, ep 0
    ##EP epmaxpacketin[1] = 2
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0
    value 0x1 index 0x0 length 0x0
    usb_control_msg: status = success?
    new device strings: Mfr=0, Product=1, SerialNumber=0
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x300 index 0x0 length 0xFF
    usb_control_msg: status = success?
    USB device number 1 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x301 index 0x409 length 0xFF
    usb_control_msg: status = success?
    Manufacturer
    Product      OHCI Root Hub
    SerialNumber
    Device is a hub?
    usb_control_msg: request: 0x6, requesttype: 0xA0
    value 0x2900 index 0x0 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0xA0
    value 0x2900 index 0x0 length 0x9
    usb_control_msg: status = success?
    usb_control_msg: request: 0x0, requesttype: 0xA0
    value 0x0 index 0x0 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x1, requesttype: 0x23
    value 0x8 index 0x1 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x0, requesttype: 0xA3
    value 0x0 index 0x1 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x3, requesttype: 0x23
    value 0x8 index 0x1 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x0, requesttype: 0xA3
    value 0x0 index 0x1 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x0, requesttype: 0xA3
    value 0x0 index 0x1 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x1, requesttype: 0x23
    value 0x10 index 0x1 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x3, requesttype: 0x23
    value 0x4 index 0x1 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x0, requesttype: 0xA3
    value 0x0 index 0x1 length 0x4
    usb_control_msg: status = success?
    usb_control_msg: request: 0x1, requesttype: 0x23
    value 0x14 index 0x1 length 0x0
    usb_control_msg: status = success?
    New Device 1
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x100 index 0x0 length 0x8
    usb_control_msg: status = success?
    
     INSIDE USB INIT
    
     INSIDE USB INIT: Device responded.
    set address 2
    usb_control_msg: request: 0x5, requesttype: 0x0
    value 0x2 index 0x0 length 0x0
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x100 index 0x0 length 0x12
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x200 index 0x0 length 0x9
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x200 index 0x0 length 0x20
    usb_control_msg: status = success?
    get_conf_no 0 Result 32, wLength 32
    if 0, ep 0
    if 0, ep 1
    ##EP epmaxpacketin[1] = 64
    ##EP epmaxpacketout[2] = 64
    set configuration 1
    usb_control_msg: request: 0x9, requesttype: 0x0
    value 0x1 index 0x0 length 0x0
    usb_control_msg: status = success?
    new device strings: Mfr=1, Product=2, SerialNumber=3
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x300 index 0x0 length 0xFF
    usb_control_msg: status = success?
    USB device number 2 default language ID 0x409
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x301 index 0x409 length 0xFF
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x302 index 0x409 length 0xFF
    usb_control_msg: status = success?
    usb_control_msg: request: 0x6, requesttype: 0x80
    value 0x303 index 0x409 length 0xFF
    usb_control_msg: status = success?
    Manufacturer SanDisk
    Product      Cruzer Blade
    SerialNumber 4C530001140707110013
    Device is a hub?
    2 USB Device(s) found
    scan end
           Scanning bus for storage devices...
    
    =================================================
    1: Hub,  USB Revision 1.10
     -  OHCI Root Hub
     - Class: Hub
     - PacketSize: 8  Configurations: 1
     - Vendor: 0x0000  Product 0x0000 Version 0.0
    
    =================================================
    2: Mass Storage,  USB Revision 2.10
     - SanDisk Cruzer Blade 4C530001140707110013
     - Class: (from Interface) Mass Storage
     - PacketSize: 64  Configurations: 1
     - Vendor: 0x0781  Product 0x5567 Version 1.0
    Testing BULK mode...Identifying a storage device...*
    USB_STORAGE: 1 Storage Device(s) found
    
    
    ***************************************
    * [!] This will take several minutes  *
    * please do not power off your Omega2 *
    ***************************************
    
    
    *
    *
    Reading file "omega2.bin"
    *
    ********************************
    ********************************
    ********************************
    ********************************
    ********************************
    ********************************
    ********************************
    ******
    ******
    ******
    *******************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************************
    *
    FAT: 22282244 Bytes read
    ....................................................................................................................................................................................................................................................................................................................................................
    ....................................................................................................................................................................................................................................................................................................................................................
    .
    .
    Done!
    
    
       ____       _             ____
      / __ \___  (_)__  ___    / __ \__ _  ___ ___ ____ _
     / /_/ / _ \/ / _ \/ _ \  / /_/ /  ' \/ -_) _ `/ _ `/
     \____/_//_/_/\___/_//_/  \____/_/_/_/\__/\_, /\_,_/
     W H A T  W I L L  Y O U  I N V E N T ? /___/"
    
    Board: Onion Omega2 APSoC DRAM:  128 MB
    relocate_code Pointer at: 87f60000
    ******************************
    Software System Reset Occurred
    ******************************
    flash manufacture id: c2, device id 20 19
    find flash: MX25L25635E
    *** Warning - bad CRC, using default environment
    
    ============================================
    Onion Omega2 UBoot Version: 4.3.0.3
    --------------------------------------------
    ASIC 7628_MP (Port5<->None)
    DRAM component: 1024 Mbits DDR, width 16
    DRAM bus: 16 bit
    Total memory: 128 MBytes
    Flash component: SPI Flash
    Date:Oct 18 2016  Time:17:29:05
    ============================================
    icache: sets:512, ways:4, linesz:32 ,total:65536
    dcache: sets:256, ways:4, linesz:32 ,total:32768
    CPU freq = 575 MHZ
    Estimated memory size = 128 Mbytes
    Resetting MT7628 PHY.
    Initializing MT7688 GPIO system.
    
    
    **************************************
    * Hold Reset button for more options *
    **************************************
    
    
    
    Boot Linux from Flash NO RESET PRESSED.
    ## Booting image at bc050000 ...
       Image Name:   MIPS OpenWrt Linux-3.18.23
       Image Type:   MIPS Linux Kernel Image (lzma compressed)
       Data Size:    1194147 Bytes =  1.1 MB
       Load Address: 80000000
       Entry Point:  80000000
       Verifying Checksum ... OK
       Uncompressing Kernel Image ... OK
    No initrd
    ## Transferring control to Linux (at address 80000000) ...
    ## Giving linux memsize in MB, 128
    
    Starting kernel ...
    
    [    0.000000] Linux version 3.18.23 (blogic@debian) (gcc version 4.8.3 (OpenWrt/Linaro GCC 4.8-2014.04 r49203) ) #5 Tue Sep 27 11:48:57 CEST 2016
    [    0.000000] Board has DDR2
    [    0.000000] Analog PMU set to hw control
    [    0.000000] Digital PMU set to hw control
    [    0.000000] SoC Type: MediaTek MT7688 ver:1 eco:2
    [    0.000000] bootconsole [early0] enabled
    [    0.000000] CPU0 revision is: 00019655 (MIPS 24KEc)
    [    0.000000] MIPS: machine is MediaTek LinkIt Smart 7688
    [    0.000000] Determined physical RAM map:
    [    0.000000]  memory: 08000000 @ 00000000 (usable)
    [    0.000000] Initrd not found or empty - disabling initrd
    [    0.000000] Zone ranges:
    [    0.000000]   Normal   [mem 0x00000000-0x07ffffff]
    [    0.000000] Movable zone start for each node
    [    0.000000] Early memory node ranges
    [    0.000000]   node   0: [mem 0x00000000-0x07ffffff]
    [    0.000000] Initmem setup node 0 [mem 0x00000000-0x07ffffff]
    [    0.000000] Primary instruction cache 64kB, VIPT, 4-way, linesize 32 bytes.
    [    0.000000] Primary data cache 32kB, 4-way, PIPT, no aliases, linesize 32 bytes
    [    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 32512
    [    0.000000] Kernel command line: console=ttyS2,57600 rootfstype=squashfs,jffs2
    [    0.000000] PID hash table entries: 512 (order: -1, 2048 bytes)
    [    0.000000] Dentry cache hash table entries: 16384 (order: 4, 65536 bytes)
    [    0.000000] Inode-cache hash table entries: 8192 (order: 3, 32768 bytes)
    [    0.000000] Writing ErrCtl register=00000000
    [    0.000000] Readback ErrCtl register=00000000
    [    0.000000] Memory: 126140K/131072K available (2658K kernel code, 129K rwdata, 532K rodata, 192K init, 190K bss, 4932K reserved)
    [    0.000000] SLUB: HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
    [    0.000000] NR_IRQS:256
    [    0.000000] intc: using register map from devicetree
    [    0.000000] CPU Clock: 580MHz
    [    0.000000] clocksource_of_init: no matching clocksources found
    [    0.000000] Calibrating delay loop... 385.84 BogoMIPS (lpj=1929216)
    [    0.060000] pid_max: default: 32768 minimum: 301
    [    0.060000] Mount-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.070000] Mountpoint-cache hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.070000] pinctrl core: initialized pinctrl subsystem
    [    0.080000] NET: Registered protocol family 16
    [    0.090000] mt7621_gpio 10000600.gpio: registering 32 gpios
    [    0.100000] mt7621_gpio 10000600.gpio: registering 32 gpios
    [    0.100000] mt7621_gpio 10000600.gpio: registering 32 gpios
    [    0.110000] Switched to clocksource MIPS
    [    0.110000] NET: Registered protocol family 2
    [    0.120000] TCP established hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.120000] TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
    [    0.130000] TCP: Hash tables configured (established 1024 bind 1024)
    [    0.130000] TCP: reno registered
    [    0.140000] UDP hash table entries: 256 (order: 0, 4096 bytes)
    [    0.140000] UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
    [    0.150000] NET: Registered protocol family 1
    [    0.160000] futex hash table entries: 256 (order: -1, 3072 bytes)
    [    0.190000] squashfs: version 4.0 (2009/01/31) Phillip Lougher
    [    0.190000] jffs2: version 2.2 (NAND) (SUMMARY) (LZMA) (RTIME) (CMODE_PRIORITY) (c) 2001-2006 Red Hat, Inc.
    [    0.200000] msgmni has been set to 246
    [    0.210000] io scheduler noop registered
    [    0.210000] io scheduler deadline registered (default)
    [    0.220000] Serial: 8250/16550 driver, 16 ports, IRQ sharing enabled
    [    0.230000] 10000c00.uartlite: ttyS0 at MMIO 0x10000c00 (irq = 28, base_baud = 2500000) is a 16550A
    [    0.240000] 10000d00.uart1: ttyS1 at MMIO 0x10000d00 (irq = 29, base_baud = 2500000) is a 16550A
    [    0.250000] console [ttyS2] disabled
    [    0.250000] 10000e00.uart2: ttyS2 at MMIO 0x10000e00 (irq = 30, base_baud = 2500000) is a 16550A
    [    0.260000] console [ttyS2] enabled
    [    0.270000] bootconsole [early0] disabled
    

    That's where the boot up sequence terminated. After a little while the O2+ LED turned off. I thought I'd bricked it.

    Then looking at the available wireless networks, I discovered an unsecured WLAN: LinkIt_Smart_7688_xxxxxx where the xxxxxx corresponds to the last 6 digits of my O2+ MAC addr. Curious...
    A quick connect (and my O2+ LED starts flashing), followed by an ssh to 192.168.100.1 and I get a login prompt. Can't log in, but some google fu later lead me to LinkIt Smart 7688 which explains how to set the root password and lo and behold I'm in.

    Perhaps this is old hat to everyone, but I think it's quite cool.
    Maybe there are some solutions to our existing O2 issues in the source code used here.[edit]After spending a little while reading the recent forum posts at the MediaTek site, it seems the same problems are present there. If the chip manufacturer is doing such a poor job of supporting their own development board, I can't help but wonder if there's any point in going further with this chipset. Or maybe we just wait for the O3+? Oh, well...<sigh>[/edit]

    Haven't experimented all that much with it yet and YMMV.



  • @cas well there some things the omega2[+] can do and it is sorta easy to setup some projects. but, yeah, it does have limitations that for the most part became known as a result of the omega2 kickstarter putting several thousand units out in the wild. onion was probably the best to happen for 7688 & mediatek. i have a couple rpi zero and also had a couple particle electron until i fried them by changing the antenna cable with the unit on. i shorted some caps around antenna jack. those puppies are 0402 and i'm trying to get the nerve built up to do a fix.
    i'm not gonna toss the omegas but there is also new stuff all the time i get interested in. thanks for this post, i will probably give it a go on one of mine just out of curiosity. i find that many manufacturers expect "the community" to be a big factor in the development of their products. kinda like, hey, we just make them, you figure out how to use it.



  • Hasn't the Omega2+ much better firmware/Eco system?
    If MediaTek would make the drivers better the MT7688 would be a great IoT soc.



  • @cas said in LinkIt Smart 7688 fw on Omega2+ hw:

    That's where the boot up sequence terminated. After a little while the O2+ LED turned off. I thought I'd bricked it.

    You've perhaps run into the fact that the Linkit and Omega2 use different serial ports and baud rates for their consoles. Your boot log stopped right at the point where Linux switches from the inherited serial configuration to its own.

    An odd thing about the Linkit kernel is that it decides which serial port to use based on which on-chip hardware it finds configured (and does this in a way that gets easily confused if you enabled more than one in uboot).

    Best guess: it's still on the port you are connected to but now at 57600 baud.



  • It has been an year since I've done the same move. And the reason behind was because I wanted to have my own built kernel AND some good wifi drivers. So Linkit comes with pre-compiled wifi drivers, so you can build your own image. Omega2 does not, unless you want to use the open source drivers, which, at that point in time, it was really crappy. And I guess it's still is.


  • administrators

    @Cezane Our wifi warp core is a pre-compiled wifi driver that you can use to build your own image. We released it in March, see this post for more details.

    Our build system is available on GitHub and we have a Docker image on DockerHub with the environment setup and ready to go.
    Happy hacking!



Looks like your connection to Community was lost, please wait while we try to reconnect.