{"id":19381447,"url":"https://github.com/theremote/legendary-orangepi-i96","last_synced_at":"2026-02-27T03:34:56.163Z","repository":{"id":57831106,"uuid":"528195550","full_name":"TheRemote/Legendary-OrangePi-i96","owner":"TheRemote","description":"Image containing fixes for the Orange Pi i96 from the community for USB, WiFi, spidev, and others as well as a OS version upgrade all the way to Debian Bullseye","archived":false,"fork":false,"pushed_at":"2023-03-22T20:13:40.000Z","size":527,"stargazers_count":73,"open_issues_count":0,"forks_count":17,"subscribers_count":11,"default_branch":"main","last_synced_at":"2025-04-23T20:47:31.542Z","etag":null,"topics":["orange-pi","orangepi","orangepi-i96"],"latest_commit_sha":null,"homepage":"https://jamesachambers.com/orange-pi-i96-getting-started-guide/","language":"C","has_issues":false,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/TheRemote.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":["TheRemote"]}},"created_at":"2022-08-23T23:28:01.000Z","updated_at":"2025-03-31T05:09:54.000Z","dependencies_parsed_at":"2025-04-23T20:42:57.588Z","dependency_job_id":null,"html_url":"https://github.com/TheRemote/Legendary-OrangePi-i96","commit_stats":null,"previous_names":[],"tags_count":38,"template":false,"template_full_name":null,"purl":"pkg:github/TheRemote/Legendary-OrangePi-i96","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRemote%2FLegendary-OrangePi-i96","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRemote%2FLegendary-OrangePi-i96/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRemote%2FLegendary-OrangePi-i96/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRemote%2FLegendary-OrangePi-i96/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/TheRemote","download_url":"https://codeload.github.com/TheRemote/Legendary-OrangePi-i96/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/TheRemote%2FLegendary-OrangePi-i96/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29883810,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-26T23:51:21.483Z","status":"online","status_checked_at":"2026-02-27T02:00:06.759Z","response_time":57,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["orange-pi","orangepi","orangepi-i96"],"created_at":"2024-11-10T09:17:11.791Z","updated_at":"2026-02-27T03:34:56.138Z","avatar_url":"https://github.com/TheRemote.png","language":"C","funding_links":["https://github.com/sponsors/TheRemote"],"categories":[],"sub_categories":[],"readme":"# Legendary-OrangePi-i96\nAn image for the Orange Pi i96 made from fixes around the internet as well as a set of build system modifications (to the official OrangePi_Build tool) to be able to build it yourself if desired.  Debian Bullseye (11) is available.\u003cbr\u003e\n\u003cbr\u003e\n\u003cstrong\u003eYou do not have to build this yourself.\u003c/strong\u003e  Images are available \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/releases\"\u003ehere in the releases section\u003c/a\u003e.\u003cbr\u003e\n\u003cbr\u003e\nMy blog post that birthed this image is located \u003ca href=\"https://jamesachambers.com/orange-pi-i96-getting-started-guide/\"\u003ehere on jamesachambers.com\u003c/a\u003e.\u003cbr\u003e\n\u003cbr\u003e\n\u003ch2\u003eFixes\u003c/h2\u003e\n\u003col\u003e\n  \u003cli\u003eAdds fixed version of WiringPi tool as well as an altenative tool \"opio\" and fixes GPIO pin assignments\u003c/li\u003e\n  \u003cli\u003eAdds spidev interface to access SPI over the GPIO pins\u003c/li\u003e\n  \u003cli\u003eAdds OPi.GPIO library (able to drive SPI devices such as the Waveshare e-ink display)\u003c/li\u003e\n  \u003cli\u003eAdds ntp to assist with fixing time on first startup -- use \"sudo ntpd -gq\" to force a time sync once you've set your correct timezone (sudo dpkg-reconfigure tzdata)\u003c/li\u003e\n  \u003cli\u003eAdds ability to use the i96 as a HID device (mouse/keyboard emulation)\u003c/li\u003e\n  \u003cli\u003eAdd CAN module support (MCP251x tested so far)\u003c/li\u003e\n  \u003cli\u003eFixed SD card port to support \"High Speed\" timing mode (can be seen with sudo cat /sys/kernel/debug/mmc0/ios)\u003c/li\u003e\n  \u003cli\u003eFixed Docker support (see Docker section below)\u003c/li\u003e\n  \u003cli\u003eFixed TRIM support (sudo fstrim -av)\u003c/li\u003e\n  \u003cli\u003eFixed notorious WiFi issues caused by missing crda package and no regulatory domain set (see first startup instructions to set REGDOMAIN)\u003c/li\u003e\n  \u003cli\u003eFixed Bluetooth and set it up to work at startup using bluetooth patchram utility\u003c/li\u003e\n  \u003cli\u003eFixed wireless and bluetooth MAC addresses changing each startup\u003c/li\u003e\n  \u003cli\u003eFixed USB port to allow \"High Speed\" USB devices instead of locking them to \"Full Speed\"\u003c/li\u003e\n  \u003cli\u003eFixed buggy UART not resetting properly which often breaks copying/pasting through a serial terminal\u003c/li\u003e\n  \u003cli\u003eFixed sound issues that would prevent rebooting the system successfully after first startup\u003c/li\u003e\n  \u003cli\u003eFixed GPIO permissions errors on startup\u003c/li\u003e\n  \u003cli\u003eFixed low entropy (random numb er) issues by installing haveged service\u003c/li\u003e\n  \u003cli\u003eFixed orangepi user missing group membership for audio, bluetooth, netdev, gpio\u003c/li\u003e\n\u003c/ol\u003e\n\n\u003ch2\u003eFirst Startup Instructions\u003c/h2\u003e\nSet correct timezone:\n\u003cpre\u003esudo dpkg-reconfigure tzdata\u003c/pre\u003e\nSync time:\n\u003cpre\u003esudo ntpd -gq\u003c/pre\u003e\nSet correct locale:\n\u003cpre\u003esudo apt install locales -y \u0026\u0026 sudo dpkg-reconfigure locales\u003c/pre\u003e\nSet wireless regulatory country:\n\u003cpre\u003esudo nano /etc/default/crda\u003c/pre\u003e\nAdd your two letter country code (mine is US) to the end of the bottom line (after the equals sign) that says REGDOMAIN=\u003cbr\u003e\nPress Ctrl+X then Y to save the file.\n\n\u003ch2\u003eDocker Instructions\u003c/h2\u003e\nDocker will run on the image as of V1.36.  It requires the following change so that you don't get a service startup error:\n\u003cpre\u003esudo update-alternatives --set iptables /usr/bin/iptables-legacy\u003c/pre\u003e\nNow try starting the Docker service.  If it still won't start then clear everything out (warning: will clear all Docker containers and data so only do this if you are installing for the first time):\n\u003cpre\u003esudo rm -rf /var/lib/docker/*\nsudo systemctl restart docker\u003c/pre\u003e\nThis will remove all of Docker's existing cache and regenerate it.  It should start but it will be slow the first startup since it will rebuild the cache we just cleared.\n\n\u003ch2\u003eBuild Instructions\u003c/h2\u003e\nYou should first clone the OrangePi_Build repository:\u003cbr\u003e\n\u003cpre\u003egit clone https://github.com/orangepi-xunlong/OrangePi_Build.git --depth=1\ncd OrangePi_Build\n./Build_OrangePi.sh\u003c/pre\u003e\u003cbr\u003e\nChoose the \"Orange Pi i96\" option which will create the \"OrangePiRDA\" folder.\u003cbr\u003e\n\u003cbr\u003e\nThe files in this repository are meant to replace the stock OrangePiRDA ones that are generated (specifically in the scripts folder).  You simply copy them over the top of your generated folder like this:\u003cbr\u003e\n\u003cpre\u003ecd ..\ngit clone https://github.com/TheRemote/Legendary-OrangePi-i96.git\ncp -R Legendary-OrangePi-i96/OrangePiRDA/* OrangePiRDA/\u003c/pre\u003e\nYou may now build the image the same way I did!\u003cbr\u003e\nUbuntu is not building correctly yet.\u003cbr\u003e\n\u003cbr\u003e\n\n\u003ch2\u003eVersion History\u003c/h2\u003e\n\u003col\u003e\n  \u003cli\u003eMarch 22nd 2023 - V1.37 - Update packages, add fixed version of serial adapter driver (thanks Nyanna, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/6\"\u003ePR #6\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eOctober 24th 2022 - V1.36 - Fix USB audio kernel parameter, add more kernel parameters required by Docker\u003c/li\u003e\n  \u003cli\u003eOctober 23rd 2022 - V1.35 - Enable thin provisioning and bridge kernel modules\u003c/li\u003e\n  \u003cli\u003eOctober 14th 2022 - V1.34 - Enable USB audio devices and USB ethernet devices kernel modules\u003c/li\u003e\n  \u003cli\u003eOctober 13th 2022 - V1.33 - More spidev and CAN module improvements (thanks MZA)\u003c/li\u003e\n  \u003cli\u003eOctober 12th 2022 - V1.32 - Restore gpio_fixup service\u003c/li\u003e\n  \u003cli\u003eOctober 12th 2022 - V1.31 - Add USB Bluetooth driver support\u003c/li\u003e\n  \u003cli\u003eOctober 12th 2022 - V1.30 - Add CAN module support for native SPI without kernel rebuild (thanks MZA, \u003ca href=\"https://github.com/MehdiZAABAR/OrangePi-I96-Work/\"\u003eOrangePi-I96-Work\u003c/a\u003e), Add libarchive-tools dependency to builder, remove gpio_fixup.sh as the board configuration has been corrected\u003c/li\u003e\n  \u003cli\u003eSeptember 28th 2022 - V1.29 - Adjust lower bound of txpower curve to improve WiFi stability -- you can increase WiFi debugging verbosity with echo 4 \u003e /sys/kernel/debug/rdawfmac/mmc*/dbglevel.  You can use 5 for the highest level of verbosity to help debug the driver (still lots of problems to find / solve and this will help see what the driver is doing)\u003c/li\u003e\n  \u003cli\u003eSeptember 27th 2022 - V1.28 - Restore some WiFi regulatory settings such as country code '99' which has a special meaning in the cfg80211 driver\u003c/li\u003e\n  \u003cli\u003eSeptember 27th 2022 - V1.27 - Fixed WiFi txpower driver settings (can be set between 10-20dBm with iwconfig wlan0 txpower 20 or iw dev wlan0 set txpower fixed 2000)\u003c/li\u003e\n  \u003cli\u003eSeptember 27th 2022 - V1.26 - Add CAN module support for MCP251x (thanks MZA, \u003ca href=\"https://github.com/MehdiZAABAR/OrangePi-I96-Work/\"\u003eOrangePi-I96-Work\u003c/a\u003e), add can-utils package\u003c/li\u003e\n  \u003cli\u003eSeptember 26th 2022 - V1.25 - Removed deprecated default ssh options, more WiFi driver cleanup\u003c/li\u003e\n  \u003cli\u003eSeptember 25th 2022 - V1.24 - Disable some WiFi crda / regulatory overrides hardcoded in drivers (there is now some regulatory activity in dmesg!).  There's more work to do on it but it's definitely better than it was\u003c/li\u003e\n  \u003cli\u003eSeptember 25th 2022 - V1.23 - Fixed many dmesg errors related to WiFi, rda-mmc, and others\u003c/li\u003e\n  \u003cli\u003eSeptember 25th 2022 - V1.22 - Ported wireless fixes to source instead of binary driver, more distributions.sh organization into functions, add packages wireless-tools/lshw/haveged/libnl-3-dev/libnl-genl-3-dev, use rootfs caching more efficiently for rebuilding\u003c/li\u003e\n  \u003cli\u003eSeptember 24th 2022 - V1.21 - Fixed \"unrecognized mount option 'hidepid=invisible' or missing value\" error\u003c/li\u003e\n  \u003cli\u003eSeptember 24th 2022 - V1.20 - Fixed SD card driver to correctly support high-speed mode, fixed TRIM support, decreased boot time by about 10 seconds by reducing rda-backlight timeout, cleaned up distributions.sh into organized functions\u003c/li\u003e\n  \u003cli\u003eSeptember 23rd 2022 - V1.19 - Add OPi.GPIO library (supports devices such as the Waveshare e-paper display (thanks Michael, \u003ca href=\"https://github.com/Farnsworth9qc/OPi.GPIO\"\u003eOPi.GPIO fork\u003c/a\u003e), add orangepi user to gpio group, general cleanup/removal of script portions related to other platforms than RDA\u003c/li\u003e\n  \u003cli\u003eSeptember 22nd 2022 - V1.18 - Enable CONFIG_SND_USB to allow for USB soundcard use\u003c/li\u003e\n  \u003cli\u003eSeptember 20th 2022 - V1.17 - Add further spidev fixes (thanks MZA, \u003ca href=\"https://github.com/MehdiZAABAR/OrangePi-I96-Work/\"\u003eOrangePi-I96-Work\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 19th 2022 - V1.16 - Add cpufrequtils package (thanks Marco, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/5\"\u003ePR #5\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 18th 2022 - V1.15 - Fix Bluetooth to have fixed MAC address stored in /data/misc/bluetooth (thanks Marco, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/4\"\u003ePR #4\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 16th 2022 - V1.14 - Add bluez-tools package\u003c/li\u003e\n  \u003cli\u003eSeptember 16th 2022 - V1.13 - Add Bluetooth patchram to enable bluetooth (thanks Marco, \u003ca href=\"https://github.com/well0nez/RDA5991g_patchram\"\u003eBluetooth patchram fix\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 14th 2022 - V1.12 - Add fixed WiringPi library (thanks MZA, \u003ca href=\"https://github.com/MehdiZAABAR/WiringPi\"\u003eWiringPi Fork\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 10th 2022 - V1.11 - Fix USB gadget conflict (thanks SteveGotthardt, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/3\"\u003ePR #2\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 10th 2022 - V1.10 - Adds USB serial connection. Set ACL to remove warnings from log files (thanks SteveGotthardt, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/2\"\u003ePR #2\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 4th 2022 - V1.9 - Adds ability to use the i96 as a HID device (thanks jakeau, \u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/1\"\u003ePR #1\u003c/a\u003e)\u003c/li\u003e\n  \u003cli\u003eSeptember 3rd 2022 - V1.8 - Add crda package and instructions to configure regulatory domain (REGDOMAIN)\u003c/li\u003e\n  \u003cli\u003eSeptember 2nd 2022 - V1.7 - Enable systemd-resolved service to help with DNS over WiFi, remove crashing hostapd service, fix e2scrub_all service, add orangepi user to audio, bluetooth, netdev\u003c/li\u003e\n  \u003cli\u003eSeptember 2nd 2022 - V1.6 - Fix spidev\u003c/li\u003e\n  \u003cli\u003eSeptember 1st 2022 - V1.5 - Adds spidev interface to access SPI over the GPIO pins\u003c/li\u003e\n  \u003cli\u003eAugust 31th 2022 - V1.4 - remove applying default locale due to breaking serial console on some systems (see first startup instructions to apply your correct locale instead of me applying mine which was causing problems), fix startup permissions errors related to GPIO\u003c/li\u003e\n  \u003cli\u003eAugust 30th 2022 - V1.3 - Add patb's gpio_fixup.sh script to fix GPIO pins on startup / gpio tool replacement / wireless LAN MAC address fix\u003c/li\u003e\n  \u003cli\u003eAugust 26th 2022 - V1.2 - Added ntp package to help with time issues (use \"sudo ntpd -gq\" on first startup), fixed locales issue\u003c/li\u003e\n  \u003cli\u003eAugust 24th 2022 - V1.1 - Added sound fix and UART fix from official OrangePi repository pull requests\u003c/li\u003e\n  \u003cli\u003eAugust 23rd 2022 - V1.0 - Initial Release\u003c/li\u003e\n\u003c/ol\u003e\n\u003ch2\u003eCredits\u003c/h2\u003e\nThe drama surrounding this board is ridiculous.  Is it a great board?  Not really.  It also \u003ca href=\"https://amzn.to/3QaYDeY\"\u003ecosts like $7 on Amazon\u003c/a\u003e.  Is it a good board for $7?  Yes it is, especially in 2022 when Pis are routinely over $100.\u003cbr\u003e\u003cbr\u003e\nThis board honestly isn't more broken than any other boards were at release.  It just never got support and it was almost right from the start.  It never received support from Armbian and Orange Pi has never supported it either (I mean most of the fixes in this were submitted to their official repository years ago with no response).  There are much more popular and widely used boards with much more serious hardware defects that are supported by both Armbian and Orange Pi (as they're well aware).\u003cbr\u003e\u003cbr\u003e \nIt's hard to say why everyone's jimmies were so rustled but from what I can tell it's mostly groupthink and political nonsense that has nothing to do with how defective the board actually is.  There were only 2 Pull Requests to even integrate from Orange Pi's repository as well as the USB issue.  Those are pretty much the only known issues with the board other than the flaky WiFI.  That is honestly a better track record than definitely most of Orange Pi's other boards and most boards in general.  Again, as someone who has been working with SBCs for nearly a decade and still has their Raspberry Pi 1 Model B's to prove it, what are you guys talking about?  This board is too toxic to touch with a flaky WiFI and some easily resolved kernel driver issues?  What?\u003cbr\u003e\u003cbr\u003e\nThe lack of support is real though and has real consequences.  What hope is there then?  The community basically.  This image is just a compilation of fixes from people who dreamed of something better for the board and submitted PRs or fixes around the internet as well as patching Orange Pi's imaging tool to produce images that aren't literally 5 years outdated (although the kernel still is).\u003cbr\u003e\u003cbr\u003e\nIs it enough?  You'll have to judge for yourself if it's enough but it is enough to make this a decent headless Bullseye board with one working high speed USB 2.0 port.  The original ones really weren't which is why this was born.\u003cbr\u003e\u003cbr\u003e\n\u003cbr\u003e\n\u003ca href=\"https://forum.armbian.com/topic/3232-orange-pi-2g-iot/page/6/\"\u003eCredit to Gabor Hidvegi for the patch itself\u003c/a\u003e as I found his patch (which wasn't as effective for the 2G version as he would have liked due to the modem initialization dropping the speed) to be working as-is for the regular i96 without the 2G modem present.\u003cbr\u003e\n\u003ca href=\"https://github.com/orangepi-xunlong/OrangePiRDA_kernel/pull/2\"\u003eCredit to GMMan\u003c/a\u003e for the pull request on the official repository to fix sound playback kernel parameter issues\u003cbr\u003e\n\u003ca href=\"https://github.com/orangepi-xunlong/OrangePiRDA_kernel/pull/3\"\u003eCredit to GMMan again\u003c/a\u003e for the pull request on the official repository to fix UART serial issues fixing copy/pasting\u003cbr\u003e\n\u003ca href=\"https://wiki.pbeirne.com/patb/i96/src/master/gpio_fixup.sh\"\u003eCredit to patb\u003c/a\u003e for gpio_fixup.sh / devmem2.py which fixes the GPIO pins and the \u003ca href=\"https://wiki.pbeirne.com/patb/opio\"\u003egpio tool replacement for WiringPi\u003c/a\u003e\u003cbr\u003e\n\u003ca href=\"https://github.com/MesihK/linux-RDA8810/commit/d7089f4c43bd76082459e6995652b578ce2d10f4?diff=unified\"\u003eCredit to MesihK\u003c/a\u003e for the gpio files permissions fix\u003cbr\u003e\n\u003ca href=\"https://4pda.to/forum/index.php?showtopic=813602\u0026st=280\"\u003eCredit to Yoshie\u003c/a\u003e for enough hints to enable the spidev interface\u003cbr\u003e\n\u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/1\"\u003eCredit to jakeau\u003c/a\u003e for adding the ability to use the i96 as a HID device (PR #1)\u003cbr\u003e\n\u003ca href=\"https://github.com/TheRemote/Legendary-OrangePi-i96/pull/2\"\u003eCredit to SteveGotthardt\u003c/a\u003e for adding the USB serial connection and fixing ACL entries to eliminate warnings (PR #2)\u003cbr\u003e\n\u003ca href=\"https://github.com/MehdiZAABAR/WiringPi\"\u003eCredit to MZA\u003c/a\u003e for fixing the WiringPi library to work with the i96 as well as fixes to the spidev interface\u003cbr\u003e\n\u003ca href=\"https://github.com/well0nez/RDA5991g_patchram\"\u003eCredit to Marco\u003c/a\u003e for fixing the Bluetooth patchram utility to work with the i96 as well as fixing the Bluetooth MAC address (PR #4)\u003cbr\u003e\n\u003ca href=\"https://github.com/Farnsworth9qc/OPi.GPIO\"\u003eCredit to Michael\u003c/a\u003e for adding i96 support to OPi.GPIO library.  Also see his \u003ca href=\"https://github.com/Farnsworth9qc/e-Paper\"\u003eWaveshare e-paper display fork\u003c/a\u003e for getting a Waveshare e-ink screen working with the i96\u003cbr\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheremote%2Flegendary-orangepi-i96","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftheremote%2Flegendary-orangepi-i96","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftheremote%2Flegendary-orangepi-i96/lists"}