We are happy to announce that it appears that LattePanda owners can install Ubuntu operating systems using Linuxium and some associated programs which make it possible to actually use these operating systems and fix any problems which you may encounter!
This post is originally from DFRobot Community User pATAq's forum post, and serves only as an English translation of what he wrote. When reposting or referencing, please give credit to the original author~
Latest Linux Distributions on LattePanda and Kernel Customization
For original articles and reprinted references, please be sure to indicate the link....
Sometimes, when I buy something I like, I especially look forward to an early arrival, so I take a moment to open a mobile client to refresh and check the express delivery information. After a long enough time, though, I felt like I was wasting my time, so I wanted to use the computer to help me check for updates.
Software and Hardware Environment
LattePanda, Python3.8, Arduino 18.12, Lubuntu 20.04
This project is divided into three parts:
This project is expected to achieve the following functions and features:
- Latest Linux Distributions on LattePanda and Kernel Customization
- Core Code to Track the Packages
- Additional Features like Tracking People with Wifi Using Kismet
After this projects' completion, preparation will be underway to add the following functions and features:
- Add information to be monitored regarding deliveries on the front end of the web page
- Show a record of all deliveries being tracked
- A feature to customize the search frequency
- Send notifications to WeChat in the event of a change in the delivery's information
- Use extra LED's, speakers, or Dashboards to send out reminders when people are at home
The knowledge that will be gained after undertaking this project includes:
- Add intofmation to be monitored or small programs that report delivery information on WeChat or other apps
- Add Chinese voice broadcast
- Integrate all information into the Home Assistant Dashboard
This article is the first part. Seeing the community activities, I found them very interesting, and there was also an event jointly organized by Intel and DFRobot which had use of an Intel CPU listed as one of the requirements. Mine is an AMD CPU, and I don’t have a nerve development or nerve computation stick. Then, I took out the LattePanda (hereafter referred to as "fatty") and used it as my feasibility test. The LattePanda v1 board was prepared for use as the basis [for determining whether these functions work or not], and the system was ready to be converted to Linux for easier development. However, some problems were found in the process of installing Linux. This article shares relevant experience related to this issue. In addition, the LattePanda Alpha / Delta's architecture is similar, so some of this content is also of value as reference material for these products.
- Install and setup latest Ubuntu for LattePanda
- Interaction between MPU and MCU on LattePanda with Firmata protocol
- Python GUI Programming with remi
- Usage of TinyDB——a lightweight database
- Wechat notification via ServerChan
- Tracking people with wifi using kismet
- Using Kismet REST-like API
- Text To Speech with Python
- Home Assistant
1.1 Current SituationWhy do we prefer to use Linux?
Linux operating systems' customizability is greater, and offers a greater feeling of familiarity to people who use it for developing purposes.
Ubuntu of Mint: which one to choose?
The latest version of Mint is based on Ubuntu 18.04, which passes the test of meeting most people's standards. And yet, I don't like Ubuntu's Unity desktop, and the performance of the LattePanda is overburdened when using it, so we chose to use the relatively lightweight LXQt desktop's (previously LXDE, now rewritten as Qt) Lubuntu. This operating system is based on openbox, and we can see the legacy. Those who are interested can also check out some introductions from the developer of LXQt, Dr. Hong Renyu: particularly parts one and two.
When surfing the internet, we can discover the following information about running Linux on the LattePanda:
- Linux Ubuntu 16.04 LTS
- OpenSUSE Leap 15.0, an instructional guide by J.S. Evans
The above three have a common feature: they are all OUTDATED. We need better software and hardware compatibility and mainstream Linux versions and kernel support. Of course, some valuable information can be obtained from the above, and holds the very problem we need to solve.
- The official document says "Official Supported Version: S70CR200 Version," but actually my S70CR110 can also use this version
- Mop talks about changing the settings in the South Bridge in BIOS, but there's no real need to change it in the new version of ubuntu
1.2 The Problems We Are Facing
- rtl8723bs wifi & bluetooth driver
- HDMI audio output issue
- Goodix touch panel dirver
- PWM? (At this moment, I still don't know what problems it has)
Why does the LattePanda have the aforementioned problems that need to be solved? It is mainly related to the Intel Atom x5 z8350 CPU orocessor used by fatty. The specifications of this processor are as follows:
Intel Atom x5 z8350, (Code Name: Cherry Tail, Original Target: Lightweight tablets / High-end Smartphones. Microarchitectures: Airmont——the 14 nm die shrink of Silvermont, more info, Source), remember that there is no avx instruction set supported, therefore, recompile is need to run newer version of Tensorflow.
Even though the default maximum only supports 2GB of memory, [units bought in this country can be changed to ones that] support 4GB, but it is said that the memory bandwidth is also halved
- Wireless and Bluetooth functions: used the RTL8723BS module, SDIO interface, 2.4GHz 802.11bgn, bt4.0, RealTek official website only provides Windows drivers
- Touch screen: used a Goodix gt911 solution
When using Linux Kernel versions preceding v4.12, you need to manually install the driver of the RTL8723BS module, but since Linux 4.12, rtl8723bs has been merged, this is very similar to using the Xiaomi portable wifi (mt7601u chip) on the Raspberry Pi a few years ago. Initially, you needed to compile and install it yourself, but this was later incorporated into the kernel and could be used right out of the box, instead. You can see that the mop kernel is still 4.11.
There are many devices using the z8350 Intel Atom processor, such as the Lenovo Miix 310 and Chuwi Hi10 Pro, among which Lenovo's miix310 is a notebook, which is closer to the scenario that fatty might be used for.
- The Intel Celeron N4100 used by the LattePanda Delta also does not support the avx instruction set, so if you want to run the new version of Tensorflow, you need to compile it yourself. Refer to "Tensorflow-Intel-Atom-CPU"
- intel-atom-iso | *Important
- miix310 | *Important
Between the lines, we found two things of import: Ian Morrison's isorespin.sh and kernel_gcc_patch
The project's main page and the project's introduction
In short, devices using Intel Bay Trail and Cherry Trail processors will encounter some compatibility problems when installing Linux on devices, especially when using the HDMI output, system suspension and wireless drivers. Linux 4.11 solves the problem of HDMI audio output and system suspension, and Linux 4.12 solves the problem with the wireless driver. Additionally, Ian Morrison (Linuxium) went a step further and developed the isorespin.sh tool, which can make a new version of an Ubuntu ISO installation disc image file with the Linux Mainline kernel suitable for the above CPU. In addition, Ian is also one of the authors of the cnx-software website. --Source
We used this guide to customize the Linux system, and the author has some of the latest system disc image files ready for download. Currently there is support for custom versions of 64bit Ubuntu, Ubuntu Flavoured, LinuxMint, etc.
This very script has made the following improvements for Intel Atom processors:
--atom include the flags, packages, scripts and commands that I recommend when respinning an ISO for a device with an Intel Atom (Bay Trail or Cherry Trail) processor and mirrors the manual invocations of '-l rtl8723bX_4.12.0_amd64.deb -f linuxium-install-UCM-files.sh -f wrapper-linuxium-install-UCM-files.sh -f linuxium-install-broadcom-drivers.sh -f wrapper-linuxium-install-broadcom-drivers.sh -c wrapper-linuxium-install-UCM-files.sh -c wrapper-linuxium-install-broadcom-drivers.sh'.
- Add a GRUB 32-bit bootloader to allow ISOs to boot on the many Intel Atom devices limited by their BIOS.
- Add functionality to boot ISOs on any Intel Apollo device regardless of the BIOS settings.
- Upgrade the kernel to the latest mainline version or to a specific version to benefit from recent patch functionality e.g. for audio and wifi/bluetooth or to use a rolling (HWE) kernel.
- Add (or remove) repositories, software packages, scripts and files to allow the installation of firmware and favourite programs.
- Preseed or perform set-up commands and scripts and also change system defaults and kernel boot parameters.
- Add persistence so that the ISO can retain data, installed software packages and settings across reboots.
- Create a server ISO that works on both 32-bit and 64-bit bootloaders found on various low cost Intel Atom mini PCs or one that works on the more recent Apollo and Gemini Lake mini PCs.
Concerning the HWE kernel, please refer to "Installing HWE for Ubuntu LTS to get updated kernel and graphics support"
After encountering this treasure, it seems that our problems can be solved in one package. Can we really sit back and relax? Download Lunbutu 20.04 LTS Atom here
Project Main Page | Kernel patch enables gcc optimizations for additional CPUs.
Due to the relatively low performance of the Atom x5-8350 and Celeron N4100, the operating system will use the generic kernel by default, focusing on compatibility and universality. That is, most of the hardware can be run after installation. So, we can recompile the kernel in a targeted manner in order to obtain higher performance. In addition, this project also supports Celeron N4100 (Intel Goldmont Plus family of low-power Atom processors-Gemini Lake).
2. ReorganizePlease understand that I have mistakenly understood this part. "Generic" is a real-time thing. Please see the reference link for more details.
2.1 Install Lubuntu Customized for Cherry Trail CPU
Customize Installation Media USB
Hard Disk Partition
- I used balenaEtcher to burn the author’s ISO installation disc image file to a USB flash drive, and then plugged in the newly-made USB flash drive (as booting up from an mSD card is not supported). *Make sure to continuously* press the ESC or Del button when booting to enter the bios, where you can change the boot settings. Here, I forgot to see if the default USB disk boot sequence is the highest *in boot priority*, but you can try it *and see if you can boot from the live USB installer withouth changing any settings*.
- You can download the original mirror's disc image file from the Tsinghua mirror site for customization.
Plug it in! Start it up!
- esp partition | Must have, 100MB is fine, flag: boot
- root partition, xfs file system, but ext4 is not the best solution for emmc, and the default scheduling mode will be changed later
- Swap, according to the memory size, such as selecting 1:1 for 2-4G. Here, I am using 4G
I connected the monitor via HDMI instead of the MIPI interface display (hereinafter referred to as "IGD", built-In Graphics Display), which only led to wallpapers on the monitor without icons and taskbars, because, as it turns out, the main output went to the unconnected IGD. It really was just. . . blindly turning on the terminal, then entering sudo poweroff to turn off the machine first, and then plugging in the display and touch panel, and then finding out that the touch panel does not respond.
#### 2.2 Post-Installation Setup
Okay, we need to test ways to solve the problems mentioned above and solve the problems with the HDMI output and touch panel. First plug in the dedicated IPS screen, set the HDMI as the main output, and then install OpenSSH. We'll connect to the LP through the MobaXterm program. For more details, please refer to my article "Forget VNC/RDP--Pick up MobaXterm and easily use its remote desktop!".
- The Openbox desktop is one choice for the graphical interface, but please note that MobaXterm currently does not support the default LXQt, and only LXDE is supported.
- The Interactive shell is the traditional choice for the terminal interface.
Install the necessary software:
2.2.1 Test the wireless connection, Bluetooth, and audio output settings
Code: Select all
sudo apt install openssh-server tmux
What we download is the disc image file made by the author for the atom processor, and made in accordance with the introduction of isorespin.sh instructions:
Now let's test it:--atom include the flags, packages, scripts and commands that I recommend when respinning an ISO for a device with an Intel Atom (Bay Trail or Cherry Trail) processor and mirrors the manual invocations of '-l rtl8723bX_4.12.0_amd64.deb -f linuxium-install-UCM-files.sh -f wrapper-linuxium-install-UCM-files.sh -f linuxium-install-broadcom-drivers.sh -f wrapper-linuxium-install-broadcom-drivers.sh -c wrapper-linuxium-install-UCM-files.sh -c wrapper-linuxium-install-broadcom-drivers.sh'.
That is, the wireless Bluetooth firmware of rtl8723bs is installed. Note that some of these are systems equipped with drivers but without the correct firmware, which cannot be used properly. I added a UCM file for audio output.
The Bluetooth part uses bluetoothctl. Please refer to https://wiki.archlinux.org/index.php/Bluetooth#Console for more information. Successfully connected to my mobile phone *using this Bluetooth connection*.
For the wireless part, you can use commands such as iwconfig, iw list, etc. to see that the wireless network card supports the ``monitor mode, which provides a hardware basis for us to use kismet for sniffing out wireless signals below. For the introduction of wireless network cards, please refer to my article: UP Board USB wireless network card purchase guide.
Connect to wireless network CLI
After some understanding, I found that the networkmanager is used, which is easy to use graphically. The CLI is nmcli:
The above command is enough. Make sure to change the wireless network name SSID and password in the above command to your computer's SSID and password, respectively. For more details, please refer to the nm operation guide.
For sound output, the lower right corner of the task bar that comes with the LXQt desktop does not support the adjustment widget, so Pavucontrol was used to control the settings, and the graphics menu bar also has Pavucontrol. The measured HDMI audio output and 3.5mm jack output are normal.
Other related commands:
2.2.2 Setting the Default Output to HDMI
Code: Select all
dmesg | grep XXX lsmod | grep XXX lshw lsusb lspci
This was a headache to set up. I first used a dedicated screen to connect to the wireless network and install the ssh server, and then temporarily use it from SSH. Although it can be used normally after entering the desktop and manually changing the primary/secondary output, it then returns to the same situation after restarting, so I simply turned off the IGD output.
Check out How to Disable Internal Display from BIOS? The means that the official site prescribed: BIOS->"Chipset"->"North Bridge"->"IGD-LCD Control"->"Force Lid Status"->"Off" did not work, so I finally had to resort to the last reference: K3dAR's reply to the solution: add kernel parameter: video=DSI-1:d
How did it do it? Check out the Kernel parameters page of archwiki:
This becomes effective after restarting. If you want to enable IGD, follow the same steps as above and delete the sentence you added. If we want to generate an image with IGD disabled by default, refer to the introduction of isorespin.sh, add grub content, and generate iso image parameters as isorespin.sh -i xxx.iso --atom -g "video=DSI-1:d"
Code: Select all
sudo nano /etc/default/grub # Add video=DSI-1:d before "GRUB_CMDLINE_LINUX_DEFAULT" # For example GRUB_CMDLINE_LINUX_DEFAULT="quiet splash resume=UUID=cb38daad-4618-4b36-98de-1915abb168cf video=DSI-1:d" # Regenerate the grub.cfg file sudo grub-mkconfig -o /boot/grub/grub.cfg # TODO: Use sed to make changes
2.2.3 Solve the touch panel drive problem
After the installation, the main functions worked as normal, but the touch screen was not working. I thought it was because I didn't plug it in. I tried it several times and it was always the same. I didn't see it when I used the xinput list command. Using dmesg | grep Goodix, I could see that a device was, in fact, recognized, but did not have the proper drivers; It is also loaded when using lsmod goodix into the system. It is suspected that the problem is an incorrect driver.
You can see that the main control chip of the touch panel is Goodix GT911Refer to the following content, you can find that the Goodix driver does have a problem. And I can see GT911 related content in the Linux kernel, which is very confusing.
Code: Select all
dmesg | grep goodix # The device can be identified, but an error is reported lsmod # I don’t remember what the output is, you can take a look at it yourself xinput list # Cannot recognize Goodix Capacitive TouchScreen
*I used Google to search it*, and found this: Goodix Touchscreen Linux Driver, *and when used it appears to work*.
- Beta Ubuntu Image for LattePanda - Official version
- Goodix Touchscreen and Stylus share device
- Showing posts sorted by relevance for query goodixYou can use this after restarting your computer.
Code: Select all
# Compile the driver git clone https://gitlab.com/AdyaAdya/goodix-touchscreen-linux-driver cd goodix-touchscreen-linux-driver make # Test drive (delete the original driver and load the newly compiled driver), I am successful here sudo su rmmod goodix insmod goodix.ko # install driver xz goodix.ko mv goodix.ko.xz /lib/modules/$(uname -r)/kernel/drivers/input/touchscreen/goodix.ko.xz
Complete set of debug commands:2.3 Recompile kernel to increase performance
Code: Select all
$ dmesg | grep -i goodix $ cat /proc/bus/input/devices | grep -B 1 -A 8 -i goodix # libinput list-devices | grep -A 17 -i goodix # libinput debug-events $ xinput list
As mentioned earlier, recompiling the kernel for Atom X5 z8350 can improve performance a bit, so let’s do it now.
Code: Select all
sjqlwy@LattePanda:~$ uname -a Linux LattePanda 5.6.8 #1 SMP Sat May 2 23:36:54 CST 2020 x86_64 x86_64 x86_64 GNU/Linux sjqlwy@LattePanda:~$ cat /proc/version Linux version 5.6.8 (sjqlwy@LattePanda) (gcc version 9.3.0 (Ubuntu 9.3.0-10ubuntu2)) #1 SMP Sat May 2 23:36:54 CST 2020
This is the kernel I compiled for the LattePanda itself, *and does not carry the genetic type*. It took more than an hour to compile? It is recommended to compile on other computers with higher performance.
2.3.1 Download the source code and apply the patch
Open the Linux Kernel website and you can see that the latest Stable version is 5.6.x. *Download it for later use.* It is recommended to read Linux Kernels Versions' Introduction and Queries. The kernel that comes with Ubuntu emphasizes versatility, so we will use the patch to recompile the kernel for z8350 in order to get better performance. Fortunately, someone has already done it and performed daily maintenance on it, *and can be found here*: kernel_gcc_patch.
This tutorial uses silvermont. Why don't we see the Cherry Trail we need? What do these codes mean? Find the answers in the related Wiki for the Intel Atom and learn the following.
2.3.2 Compile the kernel
- Cherry Trail, Apollo Lake, Gemini Lake, etc. are Code Name development codes
- Silvermont, Goldmont, Airmont, etc. are CPU microarchitectures
- There are sub-sets under these micro-architectures, for example, Airmont is a subset of Silvermont, and Goldmont Plus is a subset
- Goldmont Plus--Gemini Lake--Celeron N4100 (Mobile processors)
- Airmont——Cherry Trail——Atom X5 z8350(consumer SoCs aimed at tablets)
- Airmont is the 14 nm die shrink of Silvermont(22 nm)
- Here we download enable_additional_cpu_optimizations_for_gcc_v9.1+_kernel_v5.5+.patch (5.6) and put it in the folder where the Linux source code is located.
- This patch works with gcc versions 9.1+ and with kernel version 5.5+ and should
NOT be applied when compiling on older versions of gcc due to key name changes
of the march flags introduced with the version 4.9 release of gcc
- If you use Ubuntu 20.04, the gcc version and kernel version of the compilation environment are both satisfied, otherwise you need to enter the settings
- patch -p1 <PATCH_NAME.patch will report an errorAt this point, you can select "Intel Silvermont family of low-power Atom processors (Silvermont)" in "Processor type and features -> Processor family".
Code: Select all
sudo apt-get install gcc make libncurses5-dev libssl-dev bison flex libelf-dev patch -Np1 -i /path/to/patch make menuconfig
Restart to see that the new kernel has been enabled.
Code: Select all
make -j4 bindeb-pkg # Compile the kernel, it takes about 20m-2h depending on the machine performance sudo dpkg -i linux*.deb # Install the compiled kernel, and the grub will be set automatically
As mentioned above, gcc 9.1 or above is required to use this patch, but I can see that gcc 7.5 is installed by default on my other machines (Ubuntu 18.04 LTS), which will cause the installation to fail.After trying ubuntu-make, backports *sources* and other methods, I referred to the PPA source methods for how to install multiple versions of the GCC compiler on the Ubuntu 18.04 LTS operating system, which was just what I needed.
Code: Select all
ubuntu@VM-126-41-ubuntu:~$ gcc --version gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
You're likely running the stable version of Debian because you prefer to choose the stable branch of Debian. It works very well, but there is only one problem: its software is a bit outdated compared to other distributions. This is why backports appeared.2.3.4 Extra Topic 2: Prevent apt from changing the kernel
Code: Select all
root@build-server:~# gcc --version gcc (Ubuntu 9.3.0-11ubuntu0~18.04.1) 9.3.0 # Ubuntu 20.04 does not have this problem sjqlwy@LattePanda:~$ gcc --version gcc (Ubuntu 9.3.0-10ubuntu2) 9.3.0
It will remind you to install the generic kernel when we run apt upgrade. We use the apt-mark command to prevent this behavior from occurring.References:
Code: Select all
apt list --installed dpkg-query -l # The output is clearer apt-mark hold <pkg> # Change <pkg> to all kernel-related packages suggested in apt upgrade apt-mark unhold <pkg> apt-mark showhold
Refer to the DIY NAS Project (2) Docker and ownCloud, as well as the settings of Miix 310 above to configure the kernel compilation parameters
- Refer to Compiling your own kernel using isorespin.sh, where you can use Ubuntu's kernel source code and patches and have them integrated into our performance patches
- Change the default IO scheduling, increase file system support, and improve emmc performance and lifespan
In the end, we installed Lunbutu 20.04 perfectly on the LattePanda, which solved the problems of the BT/Wifi/Audio Output/Touch Panel and IGD, and used the optimized kernel to improve the performance of the LP. If you have time, you can customize the ISO disc image file to be suitable for the LP, including:
- Turning off the defauult built-in output, and utilizing the HDMI output signal instead
- Give Docker support to and get better performance out of our optimized kernel
- Make a pre-installed touch screen driver
- Change io scheduling and add more file system support
- Pre-install the SSH Server
- Usage of the English dash, and Usage of the English comma *Chinese
- RTL8723BS Wifi and BT firmware package for Ubuntu mainline v4.12 kernels | sudo systemctl start rtl8723bsbt.service
- New features in isorespin.sh
- --debug | show more information
- --interactive | Enter root shell, customize changes. For example, modify the mirrorlist
- --dist-upgrade | More thorough upgrade, can be used with --debug
- Why choose a low latency kernel over a generic or realtime one?
- If you do not require low latency for your system then please use the -generic kernel.
- If you need a low latency system (e.g. for recording audio) then please use the -preempt kernel as a first choice. This reduces latency but doesn't sacrifice power saving features. It is available only for 64 bit systems (also called amd64).
- If the -preempt kernel does not provide enough low latency for your needs (or you have an 32 bit system) then you should try the -lowlatency kernel.
- If the -lowlatency kernel isn't enough then you should try the -rt kernel
- If the -rt kernel isn't enough stable for you then you should try the -realtime kernel
- -generic——>preempt——>lowlatency——>rt——>realtime, [the fewer the delays, the higher the power consumption]
- Introducing 'isorespin.sh' templates | Important
- Resize EFI partition
- Latest improvements to isorespin.sh | rclone copy GDrive:rclone/ ~/downloads
- Fixing broken HDMI audio (again)
- Fixing broken HDMI audio
- Respinning ISOs with rEFInd
- ISO respin script now handles SourceForge outages
- Adding and deleting kernel boot parameters with isorespin.sh | Important
- Compiling your own kernel using isorespin.sh | Important