{"id":15172919,"url":"https://github.com/xshellinc/iotit","last_synced_at":"2025-10-26T04:31:05.999Z","repository":{"id":57594860,"uuid":"81157911","full_name":"xshellinc/iotit","owner":"xshellinc","description":"Flashing Tool for SBCs","archived":false,"fork":false,"pushed_at":"2018-07-23T07:06:34.000Z","size":3355,"stargazers_count":25,"open_issues_count":10,"forks_count":1,"subscribers_count":7,"default_branch":"master","last_synced_at":"2025-01-31T14:22:15.758Z","etag":null,"topics":["beaglebone","edison","golang","iot","raspberrypi"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/xshellinc.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2017-02-07T02:40:32.000Z","updated_at":"2023-01-03T20:24:20.000Z","dependencies_parsed_at":"2022-09-26T19:52:39.083Z","dependency_job_id":null,"html_url":"https://github.com/xshellinc/iotit","commit_stats":null,"previous_names":[],"tags_count":17,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xshellinc%2Fiotit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xshellinc%2Fiotit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xshellinc%2Fiotit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/xshellinc%2Fiotit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/xshellinc","download_url":"https://codeload.github.com/xshellinc/iotit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238259007,"owners_count":19442511,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["beaglebone","edison","golang","iot","raspberrypi"],"created_at":"2024-09-27T10:23:43.631Z","updated_at":"2025-10-26T04:30:57.674Z","avatar_url":"https://github.com/xshellinc.png","language":"Go","readme":"[![CircleCI](https://circleci.com/gh/xshellinc/iotit.svg?style=svg)](https://circleci.com/gh/xshellinc/iotit)\n# IoTit Flashing tool\n\n\n**IoTit** (written in Golang) is an open source command-line utility for flashing (initializing) IoT devices.\n\nThe easiest way to get `IoTit` is to go to the [Releases](https://github.com/xshellinc/iotit/releases) tab in this repository and download a precompiled binary that matches your OS and architecture.\n\nIf you are not sure about your computer details, take a look at this [article](https://www.chiefarchitect.com/support/article/KB-01230/determining-if-your-computer-is-32-bit-or-64-bit.html)\n\nFor other intallation methods see the installation section below.\n\n`IoTit` contains a VirtualBox wrapper [go-virtualbox](https://github.com/riobard/go-virtualbox), so it can only run on an OS that allows installation of VirtualBox.\n\n## SUPPORTED DEVICES\n\n* [BeagleBone](http://beagleboard.org/bone)\n* [Intel Edison](https://software.intel.com/en-us/iot/hardware/edison)\n* [NanoPi NEO](http://nanopi.io/nanopi-neo.html)\n* [Raspberry Pi](https://www.raspberrypi.org/)\n* [Toradex Colibri iMX6](https://www.toradex.com/computer-on-modules/colibri-arm-family/nxp-freescale-imx6)\n* [ASUS Tinker Board](https://www.asus.com/uk/Single-Board-Computer/Tinker-Board/)\n* [ESP-32](http://esp32.net/)\n* [ESP-8266](http://esp8266.net/)\n\n### REQUIREMENTS\ngolang \u003e= 1.8\n\nvirtualbox \u003e= 5.0\n\n### INSTALLATION\n\n#### OSX HOMEBREW\nOn macOS you can install `IoTit` from homebrew:\n\n```\nbrew tap xshellinc/iotit \u0026\u0026 brew install iotit\n```\n\n*Note:* `IoTit` requires [VM VirtualBox](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html) and [Extension Pack](http://www.oracle.com/technetwork/server-storage/virtualbox/downloads/index.html#extpack) to be installed on your machine.\n\n#### WINDOWS\n\n**NOTE Windows build is still experimental and you may experience problems flashing on windows 7**\n\n**At this point we officaily do not support 32 bit windows (all versions)**\n\nYou will need to install [git-for-windows](https://git-for-windows.github.io/)\n\nUpon installing, you will need to add both git and Unix tools to the system PATH [example screenshot](https://raw.githubusercontent.com/xshellinc/iotit/master/static/img/git-win.png)\n\nWindows PowerShell or CMD should be run as `Administrator` for `IoTit` to be able to write on external drives.\n\n**When flashing `Intel® Edison` make sure to provide external power supply.**\nFlashing `Intel® Edison` under Windows will render it's usb-ethernet adapter unusable under macOS and vice versa [source](https://communities.intel.com/message/430384).\n\n#### USB-to-Serial drivers\n\n- Espressif ESP8266 Lolin/NodeMCU [CH340](https://wiki.wemos.cc/downloads) [[for macOS 10.12 take it here](https://github.com/adrianmihalko/ch340g-ch34g-ch34x-mac-os-x-driver)]\n- Espressif ESP32 [CP210x](https://www.silabs.com/products/development-tools/software/usb-to-uart-bridge-vcp-drivers)\n\n#### Building from source\n\nIf you want to build binaries yourself, then follow the regular recommendations for [go build](https://golang.org/pkg/go/build/)\n\n*Note:* Install all requirements before trying to build it on your local workstation:\n\n```\ngo get ./...\n```\n\n*Note:* Although it is not required we recommend to install `ssh-copy-id` for flashing edison.\n\n#### DEVELOPMENT ENVIRONMENT\n\nTo build and run with debug log use:\n\n```\n./build.sh \u0026\u0026 ./iotit\n```\n\n### COMMANDS\n\nTo see available commands launch `iotit help`\n\n```\nNAME:\n   iotit - Flashing Tool for IoT devices used by Isaax Cloud\n\nUSAGE:\n   iotit [global options] command [command options] [arguments...]\n\nCOMMANDS:\n     flash, f       Flash image to the device\n     install, i     Install to global app environment\n     uninstall, rm  Uninstall iotit\n     update, u      Self-update\n     log, l         Show log file location\n     help, h        Shows a list of commands or help for one command\n\nGLOBAL OPTIONS:\n   --help, -h     show help\n   --version, -v  print the version\n```\n\nFor example here are the flash command flags:\n```\n$ iotit flash --help\nNAME:\n   iotit flash - Flash image to the device\n\nUSAGE:\n   iotit flash [command options] [device image]\n\nOPTIONS:\n   --quiet, --unattended, -q  Suppress questions and assume default answers\n   --disk value, -d value     External disk or usb device\n   --port value, -p value     Serial port for connected device. If set to 'auto' first port will be used.\n```\n\n### VIRTUALBOX\nDuring installation user can choose `default` virtualbox specs\n\nAlternatively user can create their own vbox spec by choosing `Create new virtual machine`.\nThis will create a spec file with a name of virtualbox and specs such as memory, cpu, vram etc,\nwhich is applied to `iotit-box`\n\nTo delete a custom virtual box preset, go to the iotit folder on your machine on macOS it is at`/Users/{user}/.iotit`. Open the file iotit-vbox.json in a text editor and delete the entry of the preset you want to remove. Entries are in the following form:\n\n```\n{\n  \"name\": \"test_vbox\",\n  \"uuid\": \"c1fd7bca-4532-4796-b862-7c16be2d07f4\",\n  \"template\": \"iotit-box\",\n  \"device\": \"raspberry-pi\",\n  \"description\": \"it is a test vbox\",\n  \"option\": {\n    \"cpu\": 1,\n    \"memory\": 512,\n    \"usb\": {\n      \"vc\": false,\n      \"type\": {\n        \"2.0\": false,\n        \"3.0\": false\n      }\n    }\n  },\n  \"SSH\": {\n    \"SSH\": {\n      \"User\": \"root\",\n      \"Server\": \"localhost\",\n      \"Key\": \"\",\n      \"Port\": \"2222\",\n      \"Password\": \"\"\n    },\n    \"Sudo\": false,\n    \"SudoPass\": \"\"\n  }\n}\n```\n\n### INTERNALS\n`$HOME/.iotit` - a directory containing iotit related files\n\n`$HOME/.iotit/mapping.json` - a file containing different device types and urls of images to be downloaded\n\n`$HOME/.iotit/virtualbox/{version}/iotit-box.zip` - a packed virtual box image\n\n`$HOME/.iotit/images/{device}/{image_pack}` - packed images grouped by device names\n\n`IoTit` uses x64 virtualbox in order to flash and configure devices,\nbecause it allows to work with linux partitions and reduces installation requirements\nacross different OSes\n\nCurrently 4 workflows are supported:\n\n#### 1 Edison:\n- copy installation files into virtualbox\n- run flashall.sh - to reflash edison\n- run edison_configure - to configure\n\n#### 2 SD:\n- copy installation files into virtualbox\n- mount the image partition into loop via `losetup` and `mount`\n- write configuration files into the image\n- write image into sd-card via `dd` or `diskutil` on macos\n\n#### 3 ESP-32/8266:\n- upload firmware and bootloader binaries over serial connection\n- configure module parameters using serial connection\n\n#### 4 Toradex Colibri\n- copy installation files into virtualbox\n- run update.sh and create img files\n- copy image files to SD card\n- connect to colibri module via serial\n- run update to flash linux to internal eMMC\n\nVirtualBox uses alpine virtualbox image with additional software installed\n```\nbash\nlibusb-dev\nxz\nutil-linux\ndfu-util\n```\nand for Toradex:\n```\ndosfstools\nparted\nsudo\ne2fsprogs-extra\ncoreutils\nlibattr\nzip\n```\n\nEdison device is additionally mapped to the usb ports\n```\nIntel Edison [0310]\nIntel USB download gadget [9999]\n```\n\n### CUSTOM BOARDS FLASHING:\nProvide image url or path to flash it on SD card.\n\n\n### STRUCTURE OF `mapping.json`:\n\n#### Example:\n```\n\"Devices\":\n\t[\n\t  {\n\t    \"Name\":\"device_name_or_category\",\n        \"Alias\":\"short_name\",\n\t    \"Sub\":[\n\t      {\n\t        \"Name\":\"device_name_or_sub_category\",\n            \"Alias\":\"short_name\"\n\t        \"Sub\":[],\n\t        \"Images:[]\n\t      }\n\t    ],\n\t    \"Images\":[\n\t      {\n\t        \"Url\":\"url\",\n            \"Title\":\"url_title\",\n            \"Alias\":\"short_name\"\n\t      }\n\t    ]\n\t  }\n\t]\n```\n\nIf you do not specify any images for sub categeory it will choose whatever you have specified in the global image section. If you have more than one image in any image section you will be presented with a list when flashing.\n\n#### Structure:\n```\nDeviceMapping struct {\n    Name      string\n\tAlias     string\n    Sub       []DeviceMapping\n    []Images  struct {\n        Url    url\n        Title  string\n    }\n}\n```\n\n#### Algorithm:\nhas a tree like structure -\ndevices are listed using `Name` field, then devices are listed within `Sub` array and etc.\n\nIf a `Sub` device doesn't have any image, then parent's images are used instead.\n","funding_links":[],"categories":["Library"],"sub_categories":["Low Level"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxshellinc%2Fiotit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fxshellinc%2Fiotit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fxshellinc%2Fiotit/lists"}