<?xml version="1.0"?>
<rss version="2.0"><channel><title>Reviews / Tutorials Latest Topics</title><link>https://forum.armbian.com/forum/191-reviews-tutorials/</link><description>Reviews / Tutorials Latest Topics</description><language>en</language><item><title>Install openVFD for LCD display on recent (6.12) kernels - Tutorial</title><link>https://forum.armbian.com/topic/55312-install-openvfd-for-lcd-display-on-recent-612-kernels-tutorial/</link><description><![CDATA[<p>
	This was originally meant as a reply to a user having problems enabling openVFD on a Tannix T3-Mini, a device I happen to own. I have recently been through this journey myself, and having searched the forums, I cannot find a recent topic on how to build this for Armbian, so have decided to make a new post that may be of use to some.
</p>

<p>
	 
</p>

<p>
	Hold on to your hat, because this is going to be long.
</p>

<p>
	 
</p>

<p>
	<u><strong>Caveats</strong></u>
</p>

<ul>
	<li>
		These instructions are, specifically, for the Tannix TX3-Mini. However, with a bit of fiddling, the general approach should work for any supported TV Box. I have added notes where you will need to look to edit a different file for your specific device
	</li>
	<li>
		There are many, many variants of the TX3-Mini out there. What works for me, may not work for you. Do not expect any help or support from me, I am just posting this as a courtesy for how I got this working... your mileage may vary. I am not going to troubleshoot anyone's issues
	</li>
	<li>
		These instructions are quite verbose, as they may also help users of other TV Boxes to get their displays working. It also may not. Like I say, I am not here to be tech support, but we can all agree not having a display stuck on "boot" is a nice thing to have
	</li>
	<li>
		As this is a kernel module it will most likely stop working after each kernel update. You will probably want to create a DKMS to rebuild the module whenever you download a new kernel. This is outside of scope here. Use Google.
	</li>
	<li>
		At the end of this, if all goes well, you will have a display showing the current time. If you want to do more with the display then this is outside of scope and you will need to look elsewhere. However, this link is useful for how to trigger the icons: <a href="https://github.com/arthur-liberman/linux_openvfd/blob/master/led_control.txt" rel="external nofollow">https://github.com/arthur-liberman/linux_openvfd/blob/master/led_control.txt</a> (note: only items 1 to 6 are valid for the tx3-mini)
	</li>
	<li>
		A lot of this can be done in a chroot, but the actual building of the kernel module itself must be done on the target device. To simplify things all of these instructions are to be executed on the device itself. If you want to do this in a chroot, then knock yourself out, but you are on your own.
	</li>
</ul>

<p>
	 
</p>

<p>
	<u><strong>My setup</strong></u>
</p>

<p>
	At the time of writing, these instructions are confirmed working for the 7 Segment display and all icons on:
</p>

<ul>
	<li>
		Tannix T3-Mini S905w with 2GB RAM
	</li>
	<li>
		Armbian 25.11
	</li>
	<li>
		Kernel 6.12.48-current-meson64
	</li>
	<li>
		Debian stable (trixie) (13)
	</li>
</ul>

<p>
	 
</p>

<p>
	<u><strong>Instructions</strong></u>
</p>

<p>
	<strong>Note: Every code block here is meant to be pasted and executed in one go, even the multi-line blocks</strong>
</p>

<p>
	We will work from the home folder to keep things simple. Don't worry, there will be no clutter as we will remove files we no longer require as we go
</p>

<pre class="ipsCode">cd ~</pre>

<p>
	<strong>Device Tree Blob</strong><br />
	The first thing we are going to want to do is enable kernel support for openvfd in our <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr>. Normally I'd do this with an overlay, but this does not appear to be enabled on the <em>aml-s9xx-box</em> image, so we will apply an overlay to the <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> directly:
</p>

<ul>
	<li>
		Install the device tree compiler:
		<pre class="ipsCode">sudo apt install -y device-tree-compiler --no-install-recommends</pre>
	</li>
	<li>
		Back up the existing <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> (if anything goes wrong you can always just restore the backed up <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr>) <span>:</span><br />
		<strong>Note: If your device is not a Tanix T3-Mini, then you will want to amend the following to point to the actual <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> you are using (you can find this in <em>'/boot/extlinux/extlinux.conf</em>')</strong>
		<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">sudo cp /boot/dtb/amlogic/meson-gxl-s905w-tx3-mini.dtb /boot/dtb/amlogic/meson-gxl-s905w-tx3-mini.dtb.orig</span></pre>

		<p>
			 
		</p>
	</li>
	<li>
		Create the overlay source code:
		<pre class="ipsCode">cat &lt;&lt; EOF &gt; ~/openvfd.dts
/dts-v1/;
/plugin/;

/ {
    fragment@0 {
        target-path = "/";
        __overlay__ {
            openvfd {
                compatible = "open,vfd";
                dev_name = "openvfd";
                status = "okay";
            };
        };
    };
};
EOF</pre>
	</li>
	<li>
		Compile the overlay:
		<pre class="ipsCode">dtc -@ -I dts -O dtb -o ~/openvfd.dtbo ~/openvfd.dts</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Merge the overlay into your <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr><strong><span>:</span><br />
		Note: If your device is not a Tanix T3-Mini, then you will want to amend the following to point to the actual <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> you are using</strong>
		<pre class="ipsCode">sudo fdtoverlay -i /boot/dtb/amlogic/meson-gxl-s905w-tx3-mini.dtb -o /boot/dtb/amlogic/meson-gxl-s905w-tx3-mini.dtb ~/openvfd.dtbo</pre>
	</li>
	<li>
		Delete the overlay source:
		<pre class="ipsCode">rm ~/openvfd.dts</pre>
	</li>
	<li>
		[Optional] Delete the compiled overlay:<br />
		If your build is static (that is, you will never pull an updated <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> through apt) then you can also delete the compiled .dtbo overlay file. I prefer to keep this around, as you can just re-patch the new <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> with the "sudo fdtoverlay ..." command above. It is also possible to automate the update of a newly installed <abbr title="Device tree blob"><abbr title="Device tree blob">DTB</abbr></abbr> file by creating a <strong>postinst.d</strong> script, but that is outside of the scope of this document. Google is your friend.
		<pre class="ipsCode">rm ~/openvfd.dtbo</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Reboot so when we load the module later, our device knows what to do with it
		<pre class="ipsCode">sudo reboot now</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Once your device has been rebooted, you can confirm that your change has been applied correctly with the following command:
		<pre class="ipsCode">dtc -I fs -O dts /proc/device-tree | grep -A3 openvfd</pre>
		Again, this will generate a lot of warnings! This is normal. At the end of the warnings you should see the <strong>openvfd</strong> entry that you added to your <abbr title="Device tree source"><abbr title="Device tree source">DTS</abbr></abbr> in the earlier step. If you do not, then you have not edited the file correctly, and you should go back and try again.
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>OpenVFD Config file</strong>
</p>

<p>
	We need to create a configuration file which tells the OpenVFD module which <abbr title="General purpose input/output"><abbr title="General purpose input/output">GPIO</abbr></abbr> pins are connected to the LCD display. We put this in the /etc folder as this is where we should be storing system configuration files for *deb based systems
</p>

<p>
	The contents of this file were extracted from  <a href="https://github.com/arthur-liberman/vfd-configurations" rel="external nofollow">https://github.com/arthur-liberman/vfd-configurations</a>  so if you are using a different device, you <strong>must</strong> replace the following config with the relevant one from the link. If you are having issues with your config not working, direct them to the repo owner, not me. I do not know your device or what may be wrong.
</p>

<p>
	Note: I remove the final <em>functions='usb colon eth wifi'</em> line as whilst the driver works fine with it included, it generates errors/warnings, which I would rather not see, and it appears to serve no purpose for Armbian
</p>

<ul>
	<li>
		Execute the following to generate the config for the TX3-Mini<br />
		<strong>Note: If your device is not a Tanix T3-Mini do not execute the following. Instead, find your config at <a href="https://github.com/arthur-liberman/vfd-configurations" rel="external nofollow">https://github.com/arthur-liberman/vfd-configurations</a> and save it as <em>/etc/openvfd.conf</em></strong>

		<pre class="ipsCode">sudo bash -c "cat &lt;&lt; 'EOF' &gt; /etc/openvfd.conf
vfd_gpio_clk='0,76,0'
vfd_gpio_dat='0,75,0'
vfd_gpio_stb='1,4,0'
vfd_chars='4,3,2,1,0'
vfd_dot_bits='0,1,3,2,4,5,6'
vfd_display_type='0x01,0x00,0x00,0x00'
EOF"</pre>
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Build the Kernel Module</strong>
</p>

<p>
	Now for the nitty gritty, we need to build the kernel module.
</p>

<ul>
	<li>
		The first thing we need is the kernel headers.<br />
		<strong>Note: the headers version must match your installed kernel version exactly. Do not try installing the headers for a different kernel version. You will run into issues</strong><br />
		If you are on a standard image, or your kernel has been upgraded since you built your image, this is straightforward:
		<pre class="ipsCode">sudo apt install linux-headers-$(uname -r)</pre>
		However, if you have built the image yourself, and you have not upgraded your kernel, then most likely the version available from the apt repository will not be compatible and your build may fail or the driver may not work at all. In these instances, you will need to go back to your build system and add the following switch to your <strong>./compile.sh</strong> command:

		<pre class="ipsCode">INSTALL_HEADERS=yes</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Install the required build tools
		</p>

		<pre class="ipsCode">sudo apt install -y git build-essential --no-install-recommends</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Clone the openvfd repo.<br />
			At the time of writing the openvfd repo is not compatible with later Linux kernels. I have raised a PR against the repo to enable support, however it has not yet been accepted. If/when it is accepted I will be deleting my fork of the repo, but in the meantime, you can clone my fork with:
		</p>

		<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">git clone https://github.com/torzdf/linux_openvfd.git ~/linux_openvfd</span></pre>

		<p>
			If the above does not work, it is because I have deleted my fork as the changes have been merged, and I am unable to come back and edit this post. If this is the case then run the following:<br />
			<strong>Note: DO NOT run the next line, if the above git clone worked</strong>
		</p>

		<pre class="ipsCode">git clone https://github.com/arthur-liberman/linux_openvfd.git ~/linux_openvfd</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Enter the driver folder of the cloned repo
		</p>

		<pre class="ipsCode">cd ~/linux_openvfd/driver</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Create a Makefile. The provided Makefile will not work, so we need to replace it with our own:
		</p>

		<pre class="ipsCode prettyprint lang-c prettyprinted"><span class="pln">cat </span><span class="pun">&lt;&lt;</span><span class="pln"> </span><span class="str">'EOF'</span><span class="pln"> </span><span class="pun">&gt;</span><span class="pln"> </span><span class="pun">./</span><span class="typ">Makefile</span><span class="pln">
ifeq </span><span class="pun">(</span><span class="pln">$</span><span class="pun">(</span><span class="pln">KERNELRELEASE</span><span class="pun">),)</span><span class="pln">
		PWD </span><span class="pun">=</span><span class="pln"> $</span><span class="pun">(</span><span class="pln">shell pwd</span><span class="pun">)</span><span class="pln">
	        KERNELDIR </span><span class="pun">=</span><span class="pln"> </span><span class="pun">/</span><span class="pln">lib</span><span class="pun">/</span><span class="pln">modules</span><span class="pun">/`</span><span class="pln">uname </span><span class="pun">-</span><span class="pln">r</span><span class="pun">`/</span><span class="pln">build
modules</span><span class="pun">:</span><span class="pln">
	        $</span><span class="pun">(</span><span class="pln">MAKE</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">C $</span><span class="pun">(</span><span class="pln">KERNELDIR</span><span class="pun">)</span><span class="pln"> M</span><span class="pun">=</span><span class="pln">$</span><span class="pun">(</span><span class="pln">PWD</span><span class="pun">)</span><span class="pln"> modules
modules_install</span><span class="pun">:</span><span class="pln">
	        $</span><span class="pun">(</span><span class="pln">MAKE</span><span class="pun">)</span><span class="pln"> </span><span class="pun">-</span><span class="pln">C $</span><span class="pun">(</span><span class="pln">KERNELDIR</span><span class="pun">)</span><span class="pln"> M</span><span class="pun">=</span><span class="pln">$</span><span class="pun">(</span><span class="pln">PWD</span><span class="pun">)</span><span class="pln"> modules_install
clean</span><span class="pun">:</span><span class="pln">
	        rm </span><span class="pun">-</span><span class="pln">rf  </span><span class="pun">*.</span><span class="pln">o </span><span class="pun">*.</span><span class="pln">ko </span><span class="pun">.</span><span class="pln">tmp_versions </span><span class="pun">*.</span><span class="pln">mod</span><span class="pun">.</span><span class="pln">c modules</span><span class="pun">.</span><span class="pln">order  </span><span class="typ">Module</span><span class="pun">.</span><span class="pln">symvers ssd253x</span><span class="pun">-</span><span class="pln">ts</span><span class="pun">.*</span><span class="pln">
</span><span class="kwd">else</span><span class="pln">
		obj</span><span class="pun">-</span><span class="pln">m </span><span class="pun">:=</span><span class="pln"> openvfd</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> protocols</span><span class="pun">/</span><span class="pln">i2c_sw</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> protocols</span><span class="pun">/</span><span class="pln">i2c_hw</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> protocols</span><span class="pun">/</span><span class="pln">spi_sw</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">dummy</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">seg7_ctrl</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">fd628</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">fd650</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">hd44780</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">gfx_mono_ctrl</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">ssd1306</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">pcd8544</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> controllers</span><span class="pun">/</span><span class="pln">il3829</span><span class="pun">.</span><span class="pln">o
		openvfd</span><span class="pun">-</span><span class="pln">objs </span><span class="pun">+=</span><span class="pln"> openvfd_drv</span><span class="pun">.</span><span class="pln">o
endif
EOF</span></pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Compile the kernel module:
		</p>

		<pre class="ipsCode">make -j$(nproc)</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Install the kernel module:
		</p>

		<pre class="ipsCode">sudo make modules_install</pre>

		<p>
			 
		</p>
	</li>
	<li>
		<p>
			Update the kernel modules:
		</p>

		<pre class="ipsCode">sudo depmod -a</pre>

		<p>
			 
		</p>
	</li>
</ul>

<p>
	<strong>Create the helper service</strong>
</p>

<p>
	Next we need to compile and install the helper service
</p>

<ul>
	<li>
		Enter the folder that contains the source code for the helper service:
		<pre class="ipsCode">cd ~/linux_openvfd</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Build the helper service:
		<pre class="ipsCode">make OpenVFDService</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Make the helper service executable:
		<pre class="ipsCode">chmod +x OpenVFDService</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Install the helper service:
		<pre class="ipsCode">sudo cp OpenVFDService /usr/bin/</pre>
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Clean up</strong>
</p>

<p>
	We have built everything we need from the OpenVFD repo, so we can get rid of the source code
</p>

<ul>
	<li>
		Go back to our home folder and delete the source code
		<pre class="ipsCode">cd ~ &amp;&amp; sudo rm -r linux_openvfd</pre>

		<p>
			 
		</p>
	</li>
</ul>

<p>
	<strong>systemd Service file</strong>
</p>

<p>
	The final step. We need to create a service file that will load the kernel module, launch the helper service, and enable it on boot
</p>

<ul>
	<li>
		Create the systemd service file:<br />
		<strong>note: If you prefer a 12 hour clock rather than a 24 hour clock, edit the '<em>Environment="OPTS=-24h"</em>' line to '<em>Environment="OPTS=-12h"</em>'</strong>

		<pre class="ipsCode">sudo bash -c 'cat &lt;&lt; '\''EOF'\'' &gt; /etc/systemd/system/openvfd.service
[Unit]
Description=openvfd
Wants=network-online.target

[Service]
Type=simple
Environment="OPTS=-24h"
ExecStartPre=/usr/bin/sh -c ". /etc/openvfd.conf; /usr/sbin/modprobe openvfd vfd_gpio_clk=$vfd_gpio_clk vfd_gpio_dat=$vfd_gpio_dat vfd_gpio_stb=$vfd_gpio_stb vfd_chars=$vfd_chars vfd_dot_bits=$vfd_dot_bits vfd_display_type=$vfd_display_type;"
ExecStart=/usr/bin/OpenVFDService $OPTS &amp;
ExecStop=/usr/bin/killall OpenVFDService
ExecStopPost=-/usr/sbin/rmmod openvfd

[Install]
WantedBy=multi-user.target
EOF'</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Reload the systemd daemon:
		<pre class="ipsCode">sudo systemctl daemon-reload</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Start the openvfd service:
		<pre class="ipsCode prettyprint lang-html prettyprinted"><span class="pln">sudo systemctl start openvfd.service</span></pre>
		At this point your LCD should now be showing the time. If it is not, you can check for errors with:

		<pre class="ipsCode">sudo systemctl status openvfd.service</pre>

		<p>
			 
		</p>
	</li>
	<li>
		Enable the service at boot:
		<pre class="ipsCode">sudo systemctl enable openvfd.service</pre>

		<p>
			 
		</p>
	</li>
</ul>

<p>
	 
</p>

<p>
	And that's it. If all has gone well, you now have a working LCD Display for your TV Box running a recent Armbian build
</p>

<p>
	<br />
	 
</p>
]]></description><guid isPermaLink="false">55312</guid><pubDate>Thu, 25 Sep 2025 01:27:33 +0000</pubDate></item><item><title>Enable audio output/input with USB sound card dongle on Amlogic Tv Boxes</title><link>https://forum.armbian.com/topic/53378-enable-audio-outputinput-with-usb-sound-card-dongle-on-amlogic-tv-boxes/</link><description><![CDATA[<p>
	I have installed <a href="https://github.com/armbian/community" rel="external nofollow">Armbian community</a> images several times on different tv boxes that have an Amlogic S905x3, and usually there was <u>no</u> sound ♫. I wanted to get sound out of the tv box. So, I purchased a generic USB sound card audio dongle from Aliexpress for about $2 to $3 USD. (see attached photo). The USB audio device is described in Linux as a Texas Instruments PCM2902 Audio Codec (USB PnP Sound Device device 0 USB Audio), and when you run the command <em>lsusb</em> you will see the id numbers 08bb:2902.  However, the specific hardware chip in the device that you receive may be different. I updated the databases for repositories by running <em>sudo apt update -y</em> and installed necessary packages to support the USB audio device and to use a graphical desktop such as XFCE4, for example:
</p>

<p>
	 
</p>

<p>
	<em>sudo apt install -y smplayer alsa-base alsa-oss alsa-tools alsa-utils alsamixergui pulseaudio pavucontrol pavumeter</em>
</p>

<p>
	 
</p>

<p>
	You can use smplayer or vlc or another as long as it is modern media player or audio player. Now make a backup copy of these two text files <em>/etc/modules</em> and <em>/etc/modprobe.d/alsa-base.conf</em> and save the backup copies in your home directory.
</p>

<p>
	 
</p>

<p>
	Without quotes, edit the text file <em>/etc/modules</em> and write “snd-usb-audio” at the end of the file. Also, edit the text file <em>/etc/modprobe.d/alsa-base.conf</em> and change a few things.
</p>

<p>
	 
</p>

<p>
	Put a hash # symbol in front of every “options snd-usb-audio index=-2” that you see in the file <em>/etc/modprobe.d/alsa-base.conf</em> . I found two of them. Add these two lines of text to the bottom of /etc/modprobe.d/alsa-base.conf without quotes.
</p>

<p>
	"alias snd-card-0 snd-usb-audio"
</p>

<p>
	"options snd-usb-audio index=0"
</p>

<p>
	 
</p>

<p>
	Make sure that your user is in the 'audio' group. Run the <em>usermod</em> command against a regular user (not root) that you want to use often. And reboot.
</p>

<p>
	<em>sudo usermod -a G audio {username here}</em>
</p>

<p>
	<em>sudo reboot </em>
</p>

<p>
	 
</p>

<p>
	Login to the graphical desktop, open the volume control program by clicking on the panel Applications, Multimedia, PulseAudio Volume Control. Click the Configuration tab at the far right of the volume control program and change the profile to Analog Stereo. * Important – now connect a headset, earphone, or amplifier to the 3.5mm (⅛’’) <span class="ipsEmoji">🎧</span> headphone receptacle on the USB audio dongle and play some sounds, music or youtube. You can use wav audio files in the directory <em>/usr/share/sounds/alsa/ </em>if you don't have an internet connection.
</p>

<p>
	 
</p>

<p>
	<img alt="usb-dongle-audio-adapter-sound-card-3d_transp.jpg.4de59863f2844ce9823c9107a4b4debe.jpg" class="ipsImage ipsImage_thumbnailed" data-fileid="14717" data-ratio="74.17" title="" width="600" src="https://forum.armbian.com/uploads/monthly_2025_06/usb-dongle-audio-adapter-sound-card-3d_transp.jpg.4de59863f2844ce9823c9107a4b4debe.jpg" />
</p>

<p>
	 
</p>

<p>
	<img alt="Screenshot_2024-10-28_12-37-54.png" class="ipsImage" data-fileid="13403" data-ratio="56.30" height="563" title="" width="1000" src="https://forum.armbian.com/uploads/monthly_2024_10/Screenshot_2024-10-28_12-37-54.thumb.png.67d4e001f04486d9d49da4f96d86b17b.png" />
</p>
]]></description><guid isPermaLink="false">53378</guid><pubDate>Sun, 29 Jun 2025 16:39:12 +0000</pubDate></item><item><title>Unbrick Amlogic S905x3  T95 Max + (plus) TV box after install Armbian - Tutorial</title><link>https://forum.armbian.com/topic/46910-unbrick-amlogic-s905x3-t95-max-plus-tv-box-after-install-armbian-tutorial/</link><description><![CDATA[<p>
	After initially and successfully booting Armbian 23 jammy from an SD memory card in the TF slot or from a USB flash device in the blue 3.0 port, I had installed Armbian using the /root/install-aml.sh, removed the SD card/USB flash and rebooted Armbian easy peasy. It worked fine for a while. My thread about it is <a href="https://forum.armbian.com/topic/46772-t95-max-plus-s905x3-4gb-ram-32b-rom/?do=findComment&amp;comment=205242" rel="">here at this link</a>.  But it got bricked, seemingly by itself after a power failure in the home. I managed to recover it with an image of Android, however, all of Armbian was deleted (and no backup either haha <span class="ipsEmoji">😉</span>).
</p>

<p>
	 
</p>

<p>
	Here is a tutorial to recover this box and the steps may also work for other tv boxes that have the S905x / S905x2 / S905x3 chip.
</p>

<p>
	 
</p>

<p>
	Download Amlogic Burn Card Maker v2.0.3 (not other versions) from <a href="https://download.djjproject.com/amlogic/Burn_Card_Maker_V2.0.3.zip" rel="external nofollow">Here</a> or <a href="https://www.mediafire.com/file/plb4omnh3yr91e2/Burn_Card_Maker_V2.0.3.zip/file" rel="external nofollow">Here</a>.
</p>

<p>
	 
</p>

<p>
	Download stock android firmware T95MAXplus-X3-9.0-2GB4GB-6330-0720-20200616-Android.rar from <a href="https://my.hidrive.com/share/sn0kw35prr" rel="external nofollow">Here</a> or the same firmware but as img a file from <a href="https://mega.nz/file/SlEyhC7Z#Lh-NdoFbpyCOziBAYwcyg2T29FTvjpM4B0VNrzNAvyY" rel="external nofollow">MEGA</a>
</p>

<p>
	 
</p>

<p>
	Unpack the archive file in 7zip, if you have the rar file. But there is no unpacking to do if you have the img file.
</p>

<p>
	 
</p>

<p>
	Insert a new good micro-SD memory card into the SD card adapter, and plug it into your PC<br />
	- be sure there is only one single partition on the SD memory card formatted as FAT32
</p>

<p>
	 
</p>

<p>
	Run the 'Burn_Card_Maker.exe' executable file. Make sure it is version 2.0.3
</p>

<p>
	 
</p>

<p>
	Change language to English if it is not already in that:
</p>

<p>
	 - Click on the Chinese menu (or garbled text menu) in the upper-left corner, and choose the second option.
</p>

<p>
	 - Dialog screen appears and now simply select 'English Version' and click OK button.
</p>

<p>
	 
</p>

<p>
	Select your SD memory card drive letter under 'Choose Disk:'<br />
	 - you may need to use Disk Management in Windows and apply a drive a letter to the SD memory card.
</p>

<p>
	 
</p>

<p>
	Check mark the Yes box on under 'To Partition and Format' or tick the box 'Formatting SD card'<br />
	- a new menu pane will popup. follow through and format the SD memory card.
</p>

<p>
	 
</p>

<p>
	Check mark the Yes box on under the Normal SD bootloader for Erase Bootlooader
</p>

<p>
	 
</p>

<p>
	Check mark the Yes box on under the Erase Flash for Normal Flashing
</p>

<p>
	 
</p>

<p>
	Do NOT check mark the Yes on (click to Uncheck it) under 'reboot'.
</p>

<p>
	 
</p>

<p>
	Click 'Open' button under 'Select Burn Package f:' and select the factory stock Android file T95MAXplus-X3-9.0-2GB4GB-6330-0720-20200616.img<br />
	- make sure there are no spaces in the file name of the img
</p>

<p>
	 
</p>

<p>
	Last step in Burn_Card_Maker: Press 'Make' button and wait to finish.
</p>

<p>
	 
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13430" data-ratio="91.29" width="528" alt="UnbrickAmlogicT95MaxPluss905x3withBurnCardMaker203-screenshot.png.670f3483256217c99b5636400818f027.png" src="https://forum.armbian.com/uploads/monthly_2024_11/UnbrickAmlogicT95MaxPluss905x3withBurnCardMaker203-screenshot.png.670f3483256217c99b5636400818f027.png" />
</p>

<p>
	 
</p>

<p>
	Go to the TV box. Disconnect the power cable from the tv box device. Then insert the micro SD memory card in your tv box device and power on the device. If it didn't boot at all, the you may need to use the toothpick method. Disconnect power cable again. Put a toothpick into the audio jack, press and hold the reset button while you insert the power cable. The tv box will enter into recovery and the firmware will be flashed automatically. Be patient and wait up to 10 minutes. After the TV BOX fully starts, remove the micro SD Card. and the update will completed. The T95 Max (whatever it is) graphic logo will appear and stock Android 9 will start.
</p>

<p>
	 
</p>

<p>
	<img class="ipsImage ipsImage_thumbnailed" data-fileid="13431" data-ratio="86.79" width="424" alt="image.png.04c026c71ce276c6420f43670faa7975.png" src="https://forum.armbian.com/uploads/monthly_2024_11/image.png.04c026c71ce276c6420f43670faa7975.png" />
</p>
]]></description><guid isPermaLink="false">46910</guid><pubDate>Tue, 05 Nov 2024 10:20:44 +0000</pubDate></item><item><title>Quick Guide - Amlogic TV Boxes</title><link>https://forum.armbian.com/topic/32632-quick-guide-amlogic-tv-boxes/</link><description><![CDATA[<p>
	The guide was created in response to the outdated or non-functional nature of much of the software provided by armbian-config-&gt;Software-&gt;Softy, particularly for TV boxes. It is tailored for advanced users who are adept at using commands, prefer manual installation, and favor the convenience of copying and pasting commands rather than searching for them on the armbian forum. While detailed explanations of each command's function won't be provided, I will include source links for each section, enabling you to conduct your own research. In this guide, I am using the latest ubuntu-based Armbian build: Armbian_23.11.1_Aml-s9xx-box_jammy_current_6.1.63_xfce_desktop.img.xz.
</p>

<p>
	 
</p>

<p>
	<strong>Table of Contents</strong>
</p>

<ol>
	<li>
		check <abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr>
	</li>
	<li>
		burn Armbian to SD card
	</li>
	<li>
		configure boot partition
	</li>
	<li>
		install Armbian on SD card
	</li>
	<li>
		flashing
		<ol>
			<li>
				install-aml.sh script
			</li>
			<li>
				Amlogic USB Burning Tool
			</li>
			<li>
				Amlogic Burn Card Maker Tool
			</li>
			<li>
				SHORT PIN method
			</li>
			<li>
				Team Win Recovery Project
			</li>
		</ol>
	</li>
	<li>
		software
		<ol>
			<li>
				install docker
			</li>
			<li>
				install openWRT
			</li>
			<li>
				install pi-hole
			</li>
			<li>
				install portainer
			</li>
			<li>
				install <abbr title="Raspberry Pi"><abbr title="Raspberry Pi">RPi</abbr></abbr> monitor
			</li>
			<li>
				install xfce
			</li>
			<li>
				install midori browser
			</li>
			<li>
				install full armbian firmware
			</li>
			<li>
				install USB LTE dongle
			</li>
		</ol>
	</li>
	<li>
		backup SD card
	</li>
	<li>
		armbian commands
	</li>
	<li>
		android stock firmware
	</li>
</ol>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">check <abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr></span>
</p>

<ol>
	<li>
		Install <a href="https://apkpure.com/device-info-hw/ru.andr7e.deviceinfohw" rel="external nofollow">Device Info HW</a> and open the app
	</li>
	<li>
		In the "SYSTEM" tab, you can find the "<abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr>" information for your box. This information is crucial for configuring the boot partition correctly. Please keep a note of your "<abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr>" (device tree blob) information for future boot partition configuration.
	</li>
</ol>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">burn Armbian to SD card</span>
</p>

<ol>
	<li>
		Mare sure to use good, reliable and fast SD card from <a href="https://docs.armbian.com/User-Guide_Getting-Started/#how-to-prepare-a-sd-card" rel="external nofollow">SandDisk, class 10, A1</a>
	</li>
	<li>
		Choose between ubuntu (jammy) and debian (bookworm) and download .xz file compressed image from the official <a href="https://imola.armbian.com/dl/aml-s9xx-box/archive/" rel="external nofollow">Armbian archive</a>. For advanced linux users who want a clean server (not even includes armbian-config), the "minimal" variant is recommended.
	</li>
	<li>
		Download burning tool <a href="https://etcher.balena.io/" rel="external nofollow">balenaEtcher</a> or <a href="https://gitlab.com/bztsrc/usbimager" rel="external nofollow">USBImager</a> and burn the compressed image to your SD card.
	</li>
</ol>

<p>
	<a href="https://docs.armbian.com/User-Guide_Getting-Started/" rel="external nofollow">https://docs.armbian.com/User-Guide_Getting-Started/</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">configure boot partition</span>
</p>

<ol>
	<li>
		Open extlinux/extlinux.conf and uncomment the correct <abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr> for your box. If you make a mistake here, you will fail to boot. Make sure only one line is uncommented (check your <abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr>, for s912 <abbr title="System On a Chip"><abbr title="System On a Chip">SoC</abbr></abbr> its q200 or q201).
	</li>
	<li>
		Go back to armbi_boot partition, copy the correct u-boot file according to your <abbr title="System On a Chip"><abbr title="System On a Chip">SoC</abbr></abbr> and rename it to u-boot.ext. If you dont know your <abbr title="System On a Chip"><abbr title="System On a Chip">SoC</abbr></abbr>, boot into Android, install/open <a href="https://apkpure.com/device-info-hw/ru.andr7e.deviceinfohw" rel="external nofollow">Device Info HW</a> app and go to <abbr title="System On a Chip"><abbr title="System On a Chip">SOC</abbr></abbr> tab. The app may need root access to read device specs.
	</li>
</ol>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="12900" data-embedcontent="" data-embedid="embed1947840006" src="https://forum.armbian.com/topic/17106-installation-instructions-for-tv-boxes-with-amlogic-cpus/?do=embed" style="height:240px;max-width:502px;"></iframe>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install Armbian on SD card</span>
</p>

<p>
	To boot the system for the first time you have to use one from the following - sometimes only one way of doing this works! If your box is installed with libreElec/coreElec, then you can't boot into Armbian, because you have to flash stock Android firmware first.
</p>

<ul>
	<li>
		<strong>Toothpick method:</strong> disconnect the power supply, insert card/drive, push reset button and connect the power while holding the button. Wait until Armbian logo appears and release the button.
	</li>
	<li>
		<strong>Terminal method:</strong> boot to Android, insert SD card with Armbian, install Terminal Emulator app (either from Google Play or <a href="https://www.apkmirror.com/apk/jack-palevich/terminal-emulator/terminal-emulator-1-0-70-release/" rel="external nofollow">APKMirror</a>), run it and type reboot update. Your box should reboot to Armbian.
	</li>
	<li>
		<strong>Update&amp;Backup:</strong> somewhere in the Android interface, perhaps the applications folder, you will find a program called Update OR Update&amp;Backup, open it if you have "Update" app pre-installed, insert SD card with Armbian, select "Local" and choose ZIP file (aml_autoscript.zip) from the SD card; select "Update" and your box should reboot to Armbian.
	</li>
	<li>
		<strong>Recovery method:</strong> boot into Android, insert card/thumb drive and choose Reboot to recovery. Your box should boot into Armbian.
	</li>
	<li>
		<strong>ADB method:</strong> enable ADB (Google it) and run the following command in a terminal window: adb reboot update
	</li>
	<li>
		<strong>Menu button method</strong> (works with very few devices): disconnect the power supply, insert card/drive, push menu button on your remote control and connect the power while holding the button. Wait until Armbian boot script appears and release the button.
	</li>
</ul>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install-aml.sh script</span>
</p>

<p>
	<em><span style="font-size:8px;"><span style="color:#c0392b;">NOTE: This will overwrite the Android ROM on the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> flash and attempt to install Armbian on the internal <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> storage. Before beginning, make sure you have a backup of the stock Android ROM in the event the installation fails or you want to revert back to Android in the future. Proceed at your own risk.</span></span></em>
</p>

<p>
	You can copy the working Armbian environment from SD card to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> using the install-aml.sh script. This file does a physical copy of whole system to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr>. You can install Armbian to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> by running the shell script in the /root directory. Run the following commands in a terminal window:
</p>

<pre class="ipsCode">sudo su
cd /root/
sudo ./install-aml.sh </pre>

<p>
	Once the Armbian finishes copying to the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr>, shutdown Armbian, unplug power from the box, remove the SD card from the box, power the box back on to boot from the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> storage, if everything worked as expected, Armbian should boot from the internal <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> storage and no longer require the SD/microSD card.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">Amlogic USB Burning Tool</span>
</p>

<p>
	If you have a box with an Amlogic processor and need to update its firmware, install a custom ROM, or unbrick the box, the Amlogic USB Burning Tool is the recommended solution. It provides an easy-to-use interface for flashing firmware onto Amlogic-based devices. To use the Amlogic USB Burning Tool, follow these steps:
</p>

<ol>
	<li>
		Download the Amlogic USB tool zip file and extract it to the PC.
	</li>
	<li>
		In the folder, you have the InstallDriver.exe. This will install the required drivers for Amlogic TV boxes.
	</li>
	<li>
		Download the firmware file compatible with your box.
	</li>
	<li>
		Launch the Amlogic USB Burning Tool, change language and click “File” &gt; “Import Image” to load the firmware file.
	</li>
	<li>
		Connect your box to your PC using a USB cable, ensuring the box is in recovery mode (toothpick method) or bootloader mode.
	</li>
	<li>
		The tool should detect your box, and you can click the “Start” button to begin the flashing process.
	</li>
	<li>
		Wait for the process to complete, and your box will reboot with the new firmware installed.
	</li>
</ol>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">Amlogic Burn Card Maker Tool</span>
</p>

<p>
	With this method you can recover the device from a brick if you have no way to connect it to a PC. In this tutorial, we will guide you on using the burn card maker tool to create a bootable SD card for reinstalling Android Stock Firmware (ROM) on your box. You just need the correct firmware (ROM) for your specific box.
</p>

<ol>
	<li>
		Download Burn_Card_Maker v2.0.2 (3.96 MB).
	</li>
	<li>
		Extract the archive and run Burn_Card_Maker.exe file to run the tool.
	</li>
	<li>
		Click on upper left chinese menu and choose second option, check ‘English Version’ and restart the application.
	</li>
	<li>
		Choose disk then ‘Choose your image files’ to open image and select your specific .img firmware for your box.
	</li>
	<li>
		Press ‘Make’ button and wait to finish. Now insert the micro SD card in your box and power on while holding the reset AV button. You will be able to enter into recovery and the firmware will be flashed automatically. When the TV BOX reboots, remove the micro SD Card, this step is very important, wait 4-5 minutes and the update will completed.
	</li>
	<li>
		If your device fails to boot, your last option is to use the SHORT PIN method.
	</li>
</ol>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">SHORT PIN method</span>
</p>

<p>
	Follow the steps outlined in the guide Amlogic Burn Card Maker Tool. If pressing the AV reset button doesn't work, it is likely that your device is unresponsive or "dead". In this case, you can try shorting out the PINS. Please note that at this point, you have little to lose in terms of further damage to the device. The SHORT PIN method can be used when other recovery methods and the Amlogic USB Burning Tool are not responsive. Please note that this method should only be attempted by those who fully understand the risks involved in handling electronics and take full responsibility for any potential issues that may arise.
</p>

<ol>
	<li>
		<strong>Dismantle:</strong> to proceed with the SHORT PIN method, you will need to dismantle your device. Remove the rubber placeholders on the back of the device to reveal screws. Unscrew these screws and carefully separate the device. Be cautious when removing the top part of the device, as the WIFI antenna is usually attached to it. Removing it too quickly may cause damage to the WIFI cable.
	</li>
	<li>
		<strong><abbr title="A type of flash memory"><abbr title="A type of flash memory">NAND</abbr></abbr> flash:</strong> locate the <abbr title="A type of flash memory"><abbr title="A type of flash memory">NAND</abbr></abbr> flash chip, which is where the operating system is stored. Look closely at the PINS on the chip, as they are quite small. Identify two pins that are next to each other, and using a screwdriver, short them out by making them touch each other.
	</li>
	<li>
		<strong>Recovery menu:</strong> ensure that your SD card is inserted with the firmware image using the Burn Card Maker tool. Have your power supply and HDMI cable ready to be inserted. Now, slowly try different combinations of the PINS while applying power to the device. Eventually, you will find a combination that initiates the hardware and communicates with the SD card. This will initiate the boot sequence, and you should see a recovery menu on the screen. From there, the installation of Android will begin. Essentially, shorting out these two PINS is similar to holding the AV reset button.
	</li>
	<li>
		<strong>Again:</strong> Before applying power, hold down the two PINS and then apply power. Repeat this process until you see results or something on the screen. Sometimes, the screen may flash green or red, indicating that you have found the correct PINS but have the wrong firmware. In this case, return to your PC and find a different firmware image specific to your <abbr title="System On a Chip"><abbr title="System On a Chip">SoC</abbr></abbr>. If you are unable to find the original stock ROM for your box, it is possible that your box is a clone of another well-known box. In this case, find the firmware for the box that is most closely related to yours.
	</li>
</ol>

<p>
	You need to make your box boot once into recovery/update mode to reinstall firmware from SD card. The SHORT PIN method modifies normal boot procedure to make your box look for kernel and <abbr title="Device tree blob"><abbr title="Device tree blob">dtb</abbr></abbr> on SD card before booting from internal memory.<br />
	<a href="https://inv.vern.cc/watch?v=CUfKNNgxb9E" rel="external nofollow">https://inv.vern.cc/watch?v=CUfKNNgxb9E</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">Team Win Recovery Project</span>
</p>

<p>
	TWRP, short for Team Win Recovery Project, is a community-driven project that provides a custom recovery solution for Android devices. It supports backups, restoration, and custom ROM installation.<br />
	<a href="https://twrp.me/Devices/" rel="external nofollow">https://twrp.me/Devices/</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install docker</span>
</p>

<p>
	<strong>ubuntu</strong>
</p>

<p>
	Add the GPG key:
</p>

<pre class="ipsCode">curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - </pre>

<p>
	Add repository to APT sources:
</p>

<pre class="ipsCode">sudo add-apt-repository "deb [arch=$(dpkg --print-architecture)] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
apt-get update</pre>

<p>
	Install Docker:
</p>

<pre class="ipsCode">apt-get install docker-ce docker-ce-cli containerd.io </pre>

<p>
	Test the installation:
</p>

<pre class="ipsCode">docker --version </pre>

<p>
	Install Docker Compose:
</p>

<pre class="ipsCode">sudo curl -L "https://github.com/ubiquiti/docker-compose-aarch64/releases/download/1.22.0/docker-compose-Linux-aarch64" -o /usr/local/bin/docker-compose&lt;br&gt;
sudo chmod +x /usr/local/bin/docker-compose</pre>

<p>
	Test Docker Compose installation:
</p>

<pre class="ipsCode">docker-compose --version </pre>

<p>
	<strong>debian </strong>
</p>

<pre class="ipsCode">apt-get remove docker docker-engine docker.io containerd runc
apt-get install ca-certificates curl gnupg lsb-release
mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/debian $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list &gt; /dev/null
apt update
apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin </pre>

<p>
	If you would like to use Docker as a non-root user, you should now consider adding your user to the docker group with something like:
</p>

<pre class="ipsCode">sudo usermod -aG docker $USER </pre>

<p>
	<a href="https://docs.armbian.com/User-Guide_Advanced-Features/#how-to-run-docker" rel="external nofollow">https://docs.armbian.com/User-Guide_Advanced-Features/#how-to-run-docker</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install openWRT</span>
</p>

<p>
	On the host system, the full armbian firmware should be installed so you can use it on AP mode:
</p>

<pre class="ipsCode">wget https://imola.armbian.com/apt/pool/main/a/armbian-firmware-full/armbian-firmware-full_21.08.6_all.deb
sudo dpkg -i armbian-firmware-full_21.08.6_all.deb </pre>

<p>
	Make sure your USB WIFI adapter supports AP mode:
</p>

<pre class="ipsCode">iw list </pre>

<p>
	Set country regulations, for example, to Spain set:
</p>

<pre class="ipsCode">iw reg set ES </pre>

<p>
	Make sure you are not runing wpa_supplicant on your host machine or docker container will tell messages like wlan0: Could not connect to kernel driver.
</p>

<pre class="ipsCode">sudo systemctl stop wpa_supplicant
sudo systemctl disable wpa_supplicant </pre>

<p>
	Install dependencies:
</p>

<pre class="ipsCode">sudo apt install iw iproute2 gettext dhcpcd5 </pre>

<p>
	Initial configuration is performed using a config file, openwrt.conf. You can use the included openwrt.conf.example as a baseline, which explains the values. At the very least you’ll need to change the values of LAN_PARENT and WIFI_IFACE. Commands to download the repo and configure openwrt.conf
</p>

<pre class="ipsCode">git clone https://github.com/oofnikj/docker-openwrt.git
cd docker-openwrt
cp openwrt.conf.example openwrt.conf
nano openwrt.conf </pre>

<p>
	Build the image:
</p>

<pre class="ipsCode">make build </pre>

<p>
	Create the openwrt container:
</p>

<pre class="ipsCode">make run </pre>

<p>
	If you arrive at * Ready, point your browser to LAN_DOMAIN and you should be presented with the login page. The default login is root with the password set as ROOT_PW. Any settings you configured or additional packages you installed will persist until you run:
</p>

<pre class="ipsCode">make clean </pre>

<p>
	This will delete the container and all associated Docker networks so you can start fresh if you screw something up.
</p>

<p>
	Installing will create and enable a service pointing to wherever you cloned this directory and execute run.sh on boot.
</p>

<pre class="ipsCode">make install</pre>

<p>
	 
</p>

<p>
	<a href="https://forum.openwrt.org/t/running-openwrt-in-a-docker-container/56049" rel="external nofollow">https://forum.openwrt.org/t/running-openwrt-in-a-docker-container/56049</a><br />
	<a href="https://badgateway.qc.to/contain-your-router/" rel="external nofollow">https://badgateway.qc.to/contain-your-router/</a><br />
	<a href="https://github.com/oofnikj/docker-openwrt" rel="external nofollow">https://github.com/oofnikj/docker-openwrt</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install pi-hole</span>
</p>

<p>
	Start by creating a directory where you will store the configuration file for the Pi-Hole docker container:
</p>

<pre class="ipsCode">mkdir pihole
cd pihole
nano docker-compose.yml</pre>

<p>
	Enter the following lines:
</p>

<pre class="ipsCode">services:
  pihole:
    container_name: pihole
    image: pihole/pihole:latest
    ports:
      - "53:53/tcp"
      - "53:53/udp"
      - "67:67/udp"
      - "80:80/tcp"
    environment:
      TZ: 'Europe/Berlin'
      WEBPASSWORD: '1234'
    networks:
      internal:
        ipv4_address: 192.168.16.10  # Assign a static IP within your router's subnet
    volumes:
      - './etc-pihole:/etc/pihole'
      - './etc-dnsmasq.d:/etc/dnsmasq.d'
    cap_add:
      - NET_ADMIN
    restart: unless-stopped
    networks:
      openwrt-lan:
        ipv4_address: 192.168.16.10  # Assign a static IP within your LAN subnet
networks:
  openwrt-lan: </pre>

<p>
	If you are using ubuntu to run the pi-hole docker container, you may need to disable the systemd-resolve service:
</p>

<pre class="ipsCode">systemctl disable systemd-resolved.service
systemctl stop systemd-resolved</pre>

<p>
	Then, you can bring your pi-hole up:
</p>

<pre class="ipsCode">docker-compose up -d</pre>

<p>
	As we managed our own router firmware using OpenWrt, you need to tell your router to send pi-hole IP as DNS server to client. Go to Interfaces -&gt; Lan -&gt; DHCP Server -&gt; Advanced Settings, inside DHCP-Options enter value: 6,192.168.16.10. Apply changes and restart the LAN interface.
</p>

<p>
	<a href="https://pimylifeup.com/pi-hole-docker/" rel="external nofollow">https://pimylifeup.com/pi-hole-docker/</a>
</p>

<p>
	<a href="https://firebog.net/" rel="external nofollow">https://firebog.net/</a>
</p>

<p>
	<a href="https://arstech.net/pi-hole-blocking-lists-2023/" rel="external nofollow">https://arstech.net/pi-hole-blocking-lists-2023/</a>
</p>

<p>
	<a href="https://avoidthehack.com/best-pihole-blocklists#3moreisnotalwaysbetter" rel="external nofollow">https://avoidthehack.com/best-pihole-blocklists</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install portainer</span>
</p>

<pre class="ipsCode">docker volume create portainer_data
docker run -d -p 8000:8000 -p 9000:9000 --name=portainer --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v portainer_data:/data --network=openwrt-lan portainer/portainer-ce </pre>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install xfce</span>
</p>

<pre class="ipsCode">sudo apt-get -y install xorg lightdm xfce4 tango-icon-theme gnome-icon-theme dbus-x11
sudo startxfce4 </pre>

<p>
	To disable the desktop environment and return to tty1 after installing xfce on Armbian, you can follow these steps:
</p>

<ol>
	<li>
		Press Ctrl + Alt + F1 to switch to tty1.
	</li>
	<li>
		Log in with your username and password.
	</li>
	<li>
		Stop the display manager service by running the following command:
		<pre class="ipsCode">sudo service lightdm stop</pre>

		<p>
			This will stop the graphical interface and return you to the command line interface. To prevent the display manager from starting automatically on boot, run the following command:
		</p>

		<pre class="ipsCode">sudo systemctl disable lightdm</pre>

		<p>
			 
		</p>
	</li>
</ol>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="5333" data-embedcontent="" data-embedid="embed424241404" src="https://forum.armbian.com/topic/6320-installing-xfce4-desktop-help/?do=embed" style="height:214px;max-width:502px;"></iframe>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install midori browser</span>
</p>

<pre class="ipsCode">sudo apt install midori </pre>
<iframe allowfullscreen="" data-controller="core.front.core.autosizeiframe" data-embedauthorid="7" data-embedcontent="" data-embedid="embed2334701714" src="https://forum.armbian.com/topic/4285-changing-to-chromium/?do=embed" style="height:214px;max-width:502px;"></iframe>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install <abbr title="Raspberry Pi"><abbr title="Raspberry Pi">RPi</abbr></abbr> monitor</span>
</p>

<p>
	The <abbr title="Raspberry Pi"><abbr title="Raspberry Pi">RPi</abbr></abbr> monitor on port 8888 can also be installed for AMLOGIC boxes with the following command:
</p>

<pre class="ipsCode">sudo armbianmonitor -r</pre>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install full armbian firmware</span>
</p>

<p>
	By default, the Armbian builds only include a limited set of firmwares out of the box. To address certain driver issues, you may need to install the complete Armbian firmware. There are two ways to do this: either through armbian-config -&gt; software -&gt; Full, or by manually installing the firmware via a USB device if you don't have internet connectivity on your box. To manually install the firmware, download it from the following link: <a href="https://imola.armbian.com/apt/pool/main/a/armbian-firmware-full/." rel="external nofollow">https://imola.armbian.com/apt/pool/main/a/armbian-firmware-full/.</a> Once downloaded, copy the firmware to your USB device. Then, insert the USB device into the Armbian box and navigate to your home folder.
</p>

<pre class="ipsCode">cd ~ </pre>

<p>
	Check device identifier of your USB device:
</p>

<pre class="ipsCode">lsblk </pre>

<p>
	Mount USB device at ./usbstick and install the package:
</p>

<pre class="ipsCode">mkdir usbstick
sudo mount /dev/sdX1 ./usbstick
cd usbstick
dpkg --install armbian-firmware-full_*.deb</pre>

<p>
	Replace sdX1 with your device identifier.
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">install USB LTE dongle</span>
</p>

<p>
	Armbian has a default setting that treats USB LTE Dongles as mass storage devices. However, in order for the dongle to be recognized as an Ethernet device, it needs to be switched from mass storage mode to network mode. To achieve this, we will need to install and configure usb-modeswitch.
</p>

<pre class="ipsCode">sudo nano /etc/usb_modeswitch.conf </pre>

<p>
	Paste the following:
</p>

<pre class="ipsCode"># Huawei E353 (3.se) and others
TargetVendor=0x12d1
TargetProductList="14db,14dc"
HuaweiNewMode=1
NoDriverLoading=1 </pre>

<p>
	Install usb-modeswitch:
</p>

<pre class="ipsCode">sudo apt-get update
sudo apt-get install usb-modeswitch </pre>

<p>
	Switch dongle to network mode:
</p>

<pre class="ipsCode">sudo usb_modeswitch -v 12d1 -p 1f01 -c /etc/usb_modeswitch.conf </pre>

<p>
	You can now check if mass storage is removed:
</p>

<pre class="ipsCode">lsusb </pre>

<p>
	<a href="https://askubuntu.com/questions/757638/can-not-connect-huawei-e3372-modem-on-ubuntu-15-10-please-help" rel="external nofollow">https://askubuntu.com/questions/757638/can-not-connect-huawei-e3372-modem-on-ubuntu-15-10-please-help</a><br />
	<a href="https://installati.one/install-usb-modeswitch-ubuntu-20-04/" rel="external nofollow">https://installati.one/install-usb-modeswitch-ubuntu-20-04/</a>
</p>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">armbian commands</span>
</p>

<p>
	Configure system, network, timezone, language, hostname, keyboard, etc:
</p>

<pre class="ipsCode">armbian-config </pre>

<p>
	Check temperature of <abbr title="System On a Chip"><abbr title="System On a Chip">SoC</abbr></abbr>:
</p>

<pre class="ipsCode">armbianmonitor -m </pre>

<p>
	Get boot logs for inspection and automatically upload it to an online pasteboard service:
</p>

<pre class="ipsCode">armbianmonitor -u</pre>

<p>
	 
</p>

<p>
	<span style="font-size:20px;">backup SD card</span>
</p>

<ol>
	<li>
		<strong>Identify the SD Card:</strong> First, you need to identify the device name of your SD card. You can use the lsblk or fdisk -l command to list all storage devices and identify the SD card.
	</li>
	<li>
		<strong>Backup with dd:</strong> Use the dd command to create a raw image of the SD card. Here's an example command:
		<pre class="ipsCode">sudo dd if=/dev/sdX of=/path/to/backup.img bs=4M status=progress</pre>
		Replace /dev/sdX with the actual device name of your SD card and /path/to/backup.img with the desired backup location and filename.
	</li>
	<li>
		<strong>Restoring from Backup:</strong> To restore the backup to a new SD card, you can use either balenaEtcher or a similar command in reverse:
		<pre class="ipsCode">sudo dd if=/path/to/backup.img of=/dev/sdX bs=4M status=progress</pre>

		<p>
			 
		</p>
	</li>
</ol>

<p>
	<span style="font-size:20px;">android stock firmware</span>
</p>

<p>
	<a href="https://x96mini.com/pages/download" rel="external nofollow">x96</a>
</p>

<p>
	<a href="https://www.tanix-box.com/downloads/" rel="external nofollow">Tanix</a>
</p>

<p>
	<a href="https://ugoos.com/downloads" rel="external nofollow">Ugoos</a>
</p>

<p>
	<a href="https://www.vontar.cn/pages/download" rel="external nofollow">Vontar</a>
</p>

<p>
	<a href="https://androidpctv.com/?s=mecool+firmware" rel="external nofollow">Mecool</a>
</p>
]]></description><guid isPermaLink="false">32632</guid><pubDate>Mon, 18 Dec 2023 07:18:38 +0000</pubDate></item><item><title>Install Armbian on the internal eMMC storage - Tutorial</title><link>https://forum.armbian.com/topic/32520-install-armbian-on-the-internal-emmc-storage-tutorial/</link><description><![CDATA[<p>
	<span style="font-size:10px;"><span style="color:#d35400;"><strong>NOTE: This will overwrite the Android ROM on the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> flash and attempt to install Armbian. Before beginning, make sure you have a backup of the stock Android ROM in the event the installation fails or you want to revert back to Android in the future. Proceed at your own risk.</strong></span></span>
</p>

<p>
	 
</p>

<p>
	You can copy the working Armbian environment from SD card/USB drive to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> using the install-aml.sh script. This file does a physical copy of whole system to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr>. You can install Armbian to <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> by running the shell script in the /root directory. Run the following commands in a terminal window:
</p>

<p>
	 
</p>

<pre class="ipsCode">sudo su
cd /root/
sudo ./install-aml.sh</pre>

<p>
	 
</p>

<p>
	Once the Armbian finishes copying to the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr>, shutdown Armbian, unplug power from the box, remove the SD card/USB drive from the box, power the box back on to boot from the <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> storage, if everything worked as expected, Armbian should boot from the internal <abbr title="embedded MultiMediaCard"><abbr title="embedded MultiMediaCard">eMMC</abbr></abbr> storage and no longer require the SD/microSD card.
</p>
]]></description><guid isPermaLink="false">32520</guid><pubDate>Wed, 13 Dec 2023 20:30:42 +0000</pubDate></item><item><title>PI-Hole on X96 mini - Tutorial</title><link>https://forum.armbian.com/topic/15864-pi-hole-on-x96-mini-tutorial/</link><description><![CDATA[<p>
	I wrote a full guide for X96 Mini. It is available there.
</p>

<p>
	 
</p>

<p>
	<strong><a href="https://github.com/kdrapel/x96mini_linux/blob/main/README.md" rel="external nofollow">https://github.com/kdrapel/x96mini_linux/blob/main/README.md</a></strong>
</p>

<p>
	 
</p>

<p>
	----
</p>

<p>
	 
</p>

<p>
	<span style="font-size:22px;"><strong>Installing Linux on X96 Mini</strong></span>
</p>

<p>
	Goal is to install a Linux on a X96 Mini that I did not use anymore as a TV box and wanted to recycle as a DNS server for ads-blocking (https://pi-hole.net/) and other experiments.
</p>

<p>
	 
</p>

<p>
	<strong><span style="color:#c0392b;">Important: I will not give any support or answer questions related to issues happening with your own X96</span></strong>
</p>

<p>
	 
</p>

<p>
	<strong>Prerequisites</strong>
</p>

<p>
	Instructions are covering steps on a Windows machine. Should be similar for Linux. Based upon (messy) instructions found at https://forum.armbian.com/topic/12162-single-armbian-image-for-<abbr title="Rockchip">rk</abbr>-aml-aw-aarch64-armv8/
</p>

<p>
	 
</p>

<p>
	<strong>Hardware</strong>
</p>

<ul>
	<li>
		X96 Mini 2GB CPU is S905X. Label behind say "X96 mini RAM 2GB, ROM 16 GB".
	</li>
	<li>
		SD card, 16 GB. Smaller will be ok too (needs at least 8GB)
	</li>
	<li>
		Toothpick or small stick (reset button inside AV jack)
	</li>
</ul>

<p>
	<strong>Software</strong>
</p>

<ul>
	<li>
		Rufus 3.12
	</li>
	<li>
		7Z
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Preparation</strong>
</p>

<ul>
	<li>
		Download https://users.armbian.com/balbes150/arm-64/Armbian_20.10_Arm-64_focal_current_5.9.0.img.xz
	</li>
	<li>
		Unzip this file to get Armbian_20.10_Arm-64_focal_current_5.9.0.img
	</li>
	<li>
		Launch Rufus, select the img. Click on 'Start'. SD card will be formatted and content will be written.
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Configuration of u-boot</strong>
</p>

<p>
	In Windows Explorer, navigate to your SD card. You should see a structure a 'extlinux' folder, '<abbr title="Device tree blob">dtb</abbr>', etc.
</p>

<p>
	Rename the file 'u-boot-s905x-s912' to 'u-boot.ext'
</p>

<p>
	 
</p>

<p>
	<strong>Configuration of device tree block</strong>
</p>

<p>
	A Device Tree Block (<abbr title="Device tree blob">DTB</abbr>) is a file that contains important information about the target hardware (more info http://junyelee.blogspot.com/2015/07/a-tutorial-on-device-tree.html). So it is necessary to use the proper one. This is a tricky part and if an improper <abbr title="Device tree blob">DTB</abbr> is used, your target system will fail loading or the kernel will panic.
</p>

<p>
	 
</p>

<ul>
	<li>
		Edit the file /extlinux/extlinux.conf
	</li>
	<li>
		Comment out all lines starting with FDT and APPEND (we don't want <abbr title="Rockchip">RK</abbr> or AW configuration, we are only interested in AML s9xxx section).
	</li>
	<li>
		Uncomment 'FDT /<abbr title="Device tree blob">dtb</abbr>/amlogic/meson-gxl-s905x-p212.<abbr title="Device tree blob">dtb</abbr>' and 'APPEND ....'. See example below
	</li>
</ul>

<pre class="ipsCode prettyprint lang-php prettyprinted">
<span class="pln">LABEL </span><span class="typ">Armbian</span><span class="pln">
LINUX </span><span class="pun">/</span><span class="pln">zImage
INITRD </span><span class="pun">/</span><span class="pln">uInitrd

</span><span class="com"># rk-3399</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3399-rock-pi-4.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3399-nanopc-t4.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3399-roc-pc-mezzanine.dtb</span><span class="pln">
</span><span class="com">#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff1a0000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0</span><span class="pln">

</span><span class="com"># rk-3328</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3328-roc-pc.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3328-box-trn9.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/rockchip/rk3328-box.dtb</span><span class="pln">
</span><span class="com">#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=uart8250,mmio32,0xff130000 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0</span><span class="pln">

</span><span class="com"># aw h6</span><span class="pln">
</span><span class="com">#FDT /dtb/allwinner/sun50i-h6-tanix-tx6.dtb</span><span class="pln">
</span><span class="com">#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 video=HDMI-A-1:e</span><span class="pln">
</span><span class="com">#APPEND root=LABEL=ROOTFS rootflags=data=writeback rw console=ttyS0,115200 console=tty0 no_console_suspend consoleblank=0 fsck.fix=yes fsck.repair=yes net.ifnames=0 mem=2048M video=HDMI-A-1:e</span><span class="pln">

</span><span class="com"># aml s9xxx</span><span class="pln">
</span><span class="com">#FDT /dtb/amlogic/meson-gxbb-p200.dtb</span><span class="pln">
FDT </span><span class="pun">/</span><span class="pln">dtb</span><span class="pun">/</span><span class="pln">amlogic</span><span class="pun">/</span><span class="pln">meson</span><span class="pun">-</span><span class="pln">gxl</span><span class="pun">-</span><span class="pln">s905x</span><span class="pun">-</span><span class="pln">p212</span><span class="pun">.</span><span class="pln">dtb
</span><span class="com">#FDT /dtb/amlogic/meson-gxm-q200.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/amlogic/meson-g12a-x96-max.dtb</span><span class="pln">
</span><span class="com">#FDT /dtb/amlogic/meson-g12b-odroid-n2.dtb</span><span class="pln">
APPEND root</span><span class="pun">=</span><span class="pln">LABEL</span><span class="pun">=</span><span class="pln">ROOTFS rootflags</span><span class="pun">=</span><span class="pln">data</span><span class="pun">=</span><span class="pln">writeback rw console</span><span class="pun">=</span><span class="pln">ttyAML0</span><span class="pun">,</span><span class="lit">115200n8</span><span class="pln"> console</span><span class="pun">=</span><span class="pln">tty0 no_console_suspend consoleblank</span><span class="pun">=</span><span class="lit">0</span><span class="pln"> fsck</span><span class="pun">.</span><span class="pln">fix</span><span class="pun">=</span><span class="pln">yes fsck</span><span class="pun">.</span><span class="pln">repair</span><span class="pun">=</span><span class="pln">yes net</span><span class="pun">.</span><span class="pln">ifnames</span><span class="pun">=</span><span class="lit">0</span></pre>

<p>
	 
</p>

<p>
	<strong>Launching</strong>
</p>

<ul>
	<li>
		Unplug the X96 Mini
	</li>
	<li>
		Insert the SD card
	</li>
	<li>
		Using a toothpick, small stick or whatever suitable, press on the 'reset' switch which is located inside the AV jack. You don't need to press too hard.
	</li>
	<li>
		While the reset switch is maintained pressed, plug the power. The X96 Mini screen will appear and normally after a few seconds, it should switch to the Linux boot.
	</li>
	<li>
		You can release the reset switch. Linux should run if everything is properly configured.
	</li>
	<li>
		I access it through SSH on port 22. It is of course recommended to change the default root password (root / 1234)
	</li>
</ul>

<p>
	 
</p>

<p>
	 
</p>

<p>
	<img alt="shell1.png" class="ipsImage" data-ratio="50.00" height="252" width="504" src="https://github.com/kdrapel/x96mini_linux/raw/main/shell1.png" />
</p>

<p>
	 
</p>

<p>
	<span style="font-size:22px;"><strong>Installing Pi-Hole on the X96</strong></span>
</p>

<p>
	 
</p>

<p>
	<strong>Upgrading system</strong>
</p>

<p>
	 
</p>

<ul>
	<li>
		First upgrade your system with "apt-get upgrade"
	</li>
	<li>
		About 50 packages or so are upgraded.
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Install Pi-Hole</strong>
</p>

<p>
	 
</p>

<p>
	It may fail by saying that your OS is not supported, just follow the instructions they provide in the error message in this case. I will not detail the complete installation, I used the default configuration step without doing any tweaking except giving the target IP address of my X96 on my network.
</p>

<p>
	 
</p>

<pre class="ipsCode prettyprint lang-html prettyprinted">
<span class="pln">curl -sSL https://install.pi-hole.net | PIHOLE_SKIP_OS_CHECK=true sudo -E bash</span></pre>

<p>
	 
</p>

<p>
	<img alt="pihole1.png" class="ipsImage" data-ratio="52.00" height="416" width="800" src="https://github.com/kdrapel/x96mini_linux/raw/main/pihole1.png" />
</p>

<p>
	 
</p>

<p>
	<strong>Configuration of router</strong>
</p>

<ul>
	<li>
		Assign a static IP to the MAC address of your X96. This must match what you defined in the PI-hole configuration.
	</li>
	<li>
		Switch the router to your new DNS server (as the primary). I left the secondary DNS server to my ISP default, just in case the X96 crashes or fails for whatever reason.
	</li>
</ul>

<p>
	 
</p>

<p>
	<strong>Smoke testing</strong>
</p>

<ul>
	<li>
		Disable ad-blocking in your browser and navigate to some heavy websites 
	</li>
	<li>
		Additional lists may be useful for Youtube adblocking, here is my configuration. 
	</li>
</ul>

<p>
	 
</p>

<p>
	<img alt="pihole4.png" class="ipsImage" data-ratio="39.30" height="391" width="1000" src="https://github.com/kdrapel/x96mini_linux/raw/main/pihole4.png" />
</p>

<p>
	 
</p>

<p>
	<strong>Known issues</strong>
</p>

<p>
	Wifi is not working. I did not investigate more as I don't need it right now. Probably some (proprietary) Realtek drivers are needed from what I have read on the web.
</p>

<p>
	 
</p>

<p>
	<strong>Troubleshootings</strong>
</p>

<p>
	You can attach a keyboard and mouse to the USB ports. The Logitech receiver is also working such that I could use my keyboard.
</p>
]]></description><guid isPermaLink="false">15864</guid><pubDate>Sun, 08 Nov 2020 11:37:11 +0000</pubDate></item><item><title>Video : Tanix TX6 review + How to install Armbian</title><link>https://forum.armbian.com/topic/15384-video-tanix-tx6-review-how-to-install-armbian/</link><description><![CDATA[<p>
	Here my review video of the Tanix TX6 TV-Box. I show Android and how to install Armbian onto it.
</p>

<div class="ipsEmbeddedVideo">
	<div>
		<iframe allowfullscreen="" frameborder="0" height="270" width="480" data-embed-src="https://www.youtube.com/embed/XCNBPoVE_m4?feature=oembed"></iframe>
	</div>
</div>

<p>
	Greetings,<br />
	NicoD
</p>
]]></description><guid isPermaLink="false">15384</guid><pubDate>Wed, 30 Sep 2020 16:49:49 +0000</pubDate></item></channel></rss>
