When I recently reviewed the Beelink J45 (aka Beelink Gemini J), a mini PC that uses the slightly older Intel Apollo Lake Pentium J4205 processor, whilst Windows 10 Pro ran fine it was unsuitable for Ubuntu because after installation the system became unstable and problems were encountered when running anything that loaded the system. The main issue was that when connected via wired-ethernet performing a command like ‘sudo apt upgrade’ would cause the ethernet to drop after which only a reboot would restore the connection. At the time it, was unclear what the cause was however a solution to the issue was posted by ‘gambetta’ on the Beelink forum. Basically it consists of installing the r8168 module which is the Linux device driver released for RealTek RTL8168B/8111B, RTL8168C/8111C, RTL8168CP/8111CP, RTL8168D/8111D, RTL8168DP/8111DP and RTL8168E/8111E Gigabit Ethernet controllers with PCI-Express interface. To paraphrase the ‘README.Debian’ file, you use ‘r8168-dkms because the in-kernel r8169 does not support your NIC or is not working properly’. So the commands to install this driver are:
1 2 3 |
sudo apt update sudo apt install r8168-dkms sudo reboot |
You will notice that this includes an ‘apt update’ command that may cause the ethernet to drop so you might need to reboot and re-enter the commands until successful. Alternatively, you can use my “isorespin.sh” script to respin an Ubuntu ISO (e.g. Ubuntu 18.04.3) with the options --boot GRUB-64 --package r8168-dkms
and use the resulting ISO to install Ubuntu.
As a reminder here is the performance of the mini PC under Windows when compared with other Intel mini PCs:
As usual, I shrunk the Windows partition and created a new partition so I could then install and dual boot Ubuntu using my respun Ubuntu 18.04.3 ISO.
After installation, a brief check showed everything was now working including Ethernet together with WiFi, Bluetooth, and audio. I then ran some basic commands to look at the hardware in more detail:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 |
linuxium@J45:~$ lsb_release -a Distributor ID: Ubuntu Description: Ubuntu 18.04.3 LTS Release: 18.04 Codename: bionic linuxium@J45:~$ linuxium@J45:~$ uname -a Linux J45 5.0.0-37-generic #40~18.04.1-Ubuntu SMP Thu Nov 14 12:06:39 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux linuxium@J45:~$ linuxium@J45:~$ inxi -Fc0 System: Host: J45 Kernel: 5.0.0-37-generic x86_64 bits: 64 Console: tty 0 Distro: Ubuntu 18.04.3 LTS Machine: Device: desktop System: AZW product: Gemini J45 serial: N/A Mobo: N/A model: N/A serial: N/A UEFI: American Megatrends v: 0.08 date: 03/15/2019 Battery hidpp__8: charge: N/A condition: NA/NA Wh hidpp__9: charge: N/A condition: NA/NA Wh CPU: Quad core Intel Pentium J4205 (-MCP-) cache: 1024 KB clock speeds: max: 2600 MHz 1: 2496 MHz 2: 2400 MHz 3: 2561 MHz 4: 2407 MHz Graphics: Card: Intel Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller Display Server: X.Org 1.20.4 driver: i915 Resolution: 1920x1080@60.00hz OpenGL: renderer: Mesa DRI Intel HD Graphics 505 (Broxton) version: 4.5 Mesa 19.0.8 Audio: Card Intel Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster driver: snd_hda_intel Sound: Advanced Linux Sound Architecture v: k5.0.0-37-generic Network: Card-1: Realtek RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller driver: r8168 IF: enp1s0 state: up speed: 1000 Mbps duplex: full mac: 84:39:be:18:04:cc Card-2: Intel Wireless 3165 driver: iwlwifi IF: wlp2s0 state: down mac: dc:8b:28:34:5c:8d Drives: HDD Total Size: 512.1GB (2.4% used) ID-1: /dev/sda model: AZW size: 512.1GB Partition: ID-1: / size: 98G used: 12G (13%) fs: ext4 dev: /dev/sda5 RAID: No RAID devices: /proc/mdstat, md_mod kernel module present Sensors: System Temperatures: cpu: 48.0C mobo: N/A Fan Speeds (in rpm): cpu: N/A Info: Processes: 253 Uptime: 1:24 Memory: 1116.6/7803.0MB Client: Shell (review-tests.sh) inxi: 2.3.56 linuxium@J45:~$ linuxium@J45:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 3.8G 0 3.8G 0% /dev tmpfs 781M 1.9M 779M 1% /run /dev/sda5 98G 12G 82G 13% / tmpfs 3.9G 0 3.9G 0% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/loop0 43M 43M 0 100% /snap/gtk-common-themes/1313 /dev/loop2 55M 55M 0 100% /snap/core18/1066 /dev/loop3 15M 15M 0 100% /snap/gnome-characters/367 /dev/loop1 157M 157M 0 100% /snap/gnome-3-28-1804/110 /dev/loop4 89M 89M 0 100% /snap/core/7270 /dev/loop6 3.8M 3.8M 0 100% /snap/gnome-system-monitor/100 /dev/loop5 55M 55M 0 100% /snap/core18/1279 /dev/loop7 4.3M 4.3M 0 100% /snap/gnome-calculator/544 /dev/loop9 45M 45M 0 100% /snap/gtk-common-themes/1353 /dev/loop10 4.2M 4.2M 0 100% /snap/gnome-calculator/406 /dev/loop8 150M 150M 0 100% /snap/gnome-3-28-1804/67 /dev/loop11 90M 90M 0 100% /snap/core/8213 /dev/loop12 3.8M 3.8M 0 100% /snap/gnome-system-monitor/111 /dev/loop13 1.0M 1.0M 0 100% /snap/gnome-logs/81 /dev/loop14 15M 15M 0 100% /snap/gnome-characters/296 /dev/loop15 1.0M 1.0M 0 100% /snap/gnome-logs/61 /dev/sda1 96M 73M 24M 77% /boot/efi tmpfs 781M 20K 781M 1% /run/user/121 tmpfs 781M 40K 781M 1% /run/user/1000 tmpfs 781M 0 781M 0% /run/user/0 linuxium@J45:~$ linuxium@J45:~$ lsblk -a NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop0 7:0 0 42.8M 1 loop /snap/gtk-common-themes/1313 loop1 7:1 0 156.7M 1 loop /snap/gnome-3-28-1804/110 loop2 7:2 0 54.4M 1 loop /snap/core18/1066 loop3 7:3 0 14.8M 1 loop /snap/gnome-characters/367 loop4 7:4 0 88.5M 1 loop /snap/core/7270 loop5 7:5 0 54.6M 1 loop /snap/core18/1279 loop6 7:6 0 3.7M 1 loop /snap/gnome-system-monitor/100 loop7 7:7 0 4.2M 1 loop /snap/gnome-calculator/544 loop8 7:8 0 149.9M 1 loop /snap/gnome-3-28-1804/67 loop9 7:9 0 44.2M 1 loop /snap/gtk-common-themes/1353 loop10 7:10 0 4M 1 loop /snap/gnome-calculator/406 loop11 7:11 0 89.1M 1 loop /snap/core/8213 loop12 7:12 0 3.7M 1 loop /snap/gnome-system-monitor/111 loop13 7:13 0 956K 1 loop /snap/gnome-logs/81 loop14 7:14 0 14.8M 1 loop /snap/gnome-characters/296 loop15 7:15 0 1008K 1 loop /snap/gnome-logs/61 loop16 7:16 0 0 loop sda 8:0 0 477G 0 disk ├─sda1 8:1 0 100M 0 part /boot/efi ├─sda2 8:2 0 16M 0 part ├─sda3 8:3 0 376G 0 part ├─sda4 8:4 0 801M 0 part └─sda5 8:5 0 100G 0 part / linuxium@J45:~$ linuxium@J45:~$ sudo lshw -C cpu *-cpu description: CPU product: Intel(R) Pentium(R) CPU J4205 @ 1.50GHz vendor: Intel Corp. physical id: 30 bus info: cpu@0 version: Intel(R) Pentium(R) CPU J4205 @ 1.50GHz slot: SOCKET 0 size: 2501MHz capacity: 2600MHz width: 64 bits clock: 100MHz capabilities: x86-64 fpu fpu_exception wp vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology tsc_reliable nonstop_tsc cpuid aperfmperf tsc_known_freq pni pclmulqdq dtes64 monitor ds_cpl vmx est tm2 ssse3 sdbg cx16 xtpr pdcm sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave rdrand lahf_lm 3dnowprefetch cpuid_fault cat_l2 ibrs ibpb stibp tpr_shadow vnmi flexpriority ept vpid ept_ad fsgsbase tsc_adjust smep erms mpx rdt_a rdseed smap clflushopt intel_pt sha_ni xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts md_clear arch_capabilities cpufreq configuration: cores=4 enabledcores=4 threads=4 linuxium@J45:~$ linuxium@J45:~$ sudo lshw -C memory *-firmware description: BIOS vendor: American Megatrends Inc. physical id: 0 version: 0.08 date: 03/15/2019 size: 64KiB capacity: 5056KiB capabilities: pci upgrade shadowing cdboot bootselect socketedrom edd int13floppy1200 int13floppy720 int13floppy2880 int5printscreen int14serial int17printer acpi usb biosbootspecification uefi *-memory description: System Memory physical id: 28 slot: System board or motherboard size: 8GiB *-bank:0 description: DIMM LPDDR4 Synchronous 2133 MHz (0.5 ns) product: 123456789012345678 vendor: ABCD physical id: 0 serial: 1234 slot: ChannelA-DIMM0 size: 2GiB width: 16 bits clock: 2133MHz (0.5ns) *-bank:1 description: DIMM LPDDR4 Synchronous 2133 MHz (0.5 ns) product: 123456789012345678 vendor: ABCD physical id: 1 serial: 1234 slot: ChannelB-DIMM0 size: 2GiB width: 16 bits clock: 2133MHz (0.5ns) *-bank:2 description: DIMM LPDDR4 Synchronous 2133 MHz (0.5 ns) product: 123456789012345678 vendor: ABCD physical id: 2 serial: 1234 slot: ChannelC-DIMM0 size: 2GiB width: 16 bits clock: 2133MHz (0.5ns) *-bank:3 description: DIMM LPDDR4 Synchronous 2133 MHz (0.5 ns) product: 123456789012345678 vendor: ABCD physical id: 3 serial: 1234 slot: ChannelD-DIMM0 size: 2GiB width: 16 bits clock: 2133MHz (0.5ns) *-cache:0 description: L1 cache physical id: 2e slot: CPU Internal L1 size: 224KiB capacity: 224KiB capabilities: synchronous internal write-back configuration: level=1 *-cache:1 description: L2 cache physical id: 2f slot: CPU Internal L2 size: 2MiB capacity: 2MiB capabilities: synchronous internal write-back unified configuration: level=2 linuxium@J45:~$ linuxium@J45:~$ free -mh total used free shared buff/cache available Mem: 7.6G 990M 5.0G 276M 1.6G 6.1G Swap: 2.0G 0B 2.0G linuxium@J45:~$ linuxium@J45:~$ sudo lshw -C network *-network description: Ethernet interface product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller vendor: Realtek Semiconductor Co., Ltd. physical id: 0 bus info: pci@0000:01:00.0 logical name: enp1s0 version: 15 serial: 84:39:be:18:04:cc size: 1Gbit/s capacity: 1Gbit/s width: 64 bits clock: 33MHz capabilities: pm msi pciexpress msix bus_master cap_list ethernet physical tp 10bt 10bt-fd 100bt 100bt-fd 1000bt-fd autonegotiation configuration: autonegotiation=on broadcast=yes driver=r8168 driverversion=8.045.08-NAPI duplex=full ip=xxx.xxx.xxx.xxx latency=0 link=yes multicast=yes port=twisted pair speed=1Gbit/s resources: irq:123 ioport:e000(size=256) memory:92204000-92204fff memory:92200000-92203fff *-network description: Wireless interface product: Wireless 3165 vendor: Intel Corporation physical id: 0 bus info: pci@0000:02:00.0 logical name: wlp2s0 version: 81 serial: dc:8b:28:34:5c:8d width: 64 bits clock: 33MHz capabilities: pm msi pciexpress bus_master cap_list ethernet physical wireless configuration: broadcast=yes driver=iwlwifi driverversion=5.0.0-37-generic firmware=29.1044073957.0 latency=0 link=no multicast=yes wireless=IEEE 802.11 resources: irq:126 memory:92100000-92101fff linuxium@J45:~$ linuxium@J45:~$ dmesg | grep "MMC card" linuxium@J45:~$ linuxium@J45:~$ lsusb Bus 002 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub Bus 001 Device 004: ID 8087:0a2a Intel Corp. Bus 001 Device 017: ID 046d:c52b Logitech, Inc. Unifying Receiver Bus 001 Device 018: ID 10d5:55a4 Uni Class Technology Co., Ltd Bus 001 Device 016: ID 1a40:0101 Terminus Technology Inc. Hub Bus 001 Device 002: ID 0bda:0129 Realtek Semiconductor Corp. RTS5129 Card Reader Controller Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub linuxium@J45:~$ linuxium@J45:~$ lspci 00:00.0 Host bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Host Bridge (rev 0b) 00:00.1 Signal processing controller: Intel Corporation Device 5a8c (rev 0b) 00:02.0 VGA compatible controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Integrated Graphics Controller (rev 0b) 00:03.0 Multimedia controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Imaging Unit (rev 0b) 00:0e.0 Audio device: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Audio Cluster (rev 0b) 00:0f.0 Communication controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Trusted Execution Engine (rev 0b) 00:12.0 SATA controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SATA AHCI Controller (rev 0b) 00:13.0 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port A #1 (rev fb) 00:14.0 PCI bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series PCI Express Port B #2 (rev fb) 00:15.0 USB controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series USB xHCI (rev 0b) 00:1c.0 SD Host controller: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series eMMC Controller (rev 0b) 00:1f.0 ISA bridge: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series Low Pin Count Interface (rev 0b) 00:1f.1 SMBus: Intel Corporation Celeron N3350/Pentium N4200/Atom E3900 Series SMBus Controller (rev 0b) 01:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller (rev 15) 02:00.0 Network controller: Intel Corporation Wireless 3165 (rev 81) linuxium@J45:~$ |
I next ran my standard Phoronix Test Suite benchmarks and the results can be compared with those from the previous testing on other mini PCs:
As the full results might be a little confusing because for some tests, higher is better, whereas for others, lower is better, the following bar chart may be easier to understand:
I’ve then run ‘sbc-bench’ which is a small set of different CPU performance tests focusing on server performance, ‘glmark2’ from the standard repositories which is a benchmark for OpenGL (ES) 2.0, some real-world timing tests for the compilation, zipping and unzipping of the Linux mainline v5.2 kernel, ‘iozone’ also from the standard repositories which is a filesystem benchmark tool and finally ‘Octane 2’ which is a JavaScript benchmark and was run in Chrome.
A summary of the results from each of the above benchmark tests was compared with previously tested mini PCs as follows:
The performance is as expected compared to the slightly more powerful Gemini Lake mini PCs.
I also tested Geekbench 4:
and ran the UNIGINE Heaven benchmark:
For real-world testing, I played videos in Firefox, Chrome and Kodi in Ubuntu. The results were very similar with other mini PCs and the following tables summarise the tests and results for each of web browsing, Kodi in general and Kodi playing specific videos:
Overall the device performance is as expected in Ubuntu once the RealTek Linux device driver is loaded. Again I’d like to thank Beelink for providing the Gemini J45 for review. It currently retails at around $250 for the tested configuration (8GB RAM, 512GB SSD) on Aliexpress.
Ian is interested in mini PCs and helps with reviews of mini PCs running Windows, Ubuntu and other Linux operating systems. You can follow him on Facebook or Twitter.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
Thank you for providing the fix (and also benchmarks and
isorespin.sh
in general)!Can you please also provide output from
ethtool -i enp1s0
to maybe get a clue why this NIC doesn’t work with Ubuntu’s default drivers?Thanks. Here’s the output you requested. Booting a ‘dist-upgrade’ Ubuntu 18.04.3 ISO with only ‘ethtool’ installed means that the default r8169 ethernet driver was used: ubuntu@ubuntu:~$ lsmod | grep r81 r8169 86016 0 ubuntu@ubuntu:~$ ethtool -i enp1s0 driver: r8169 version: firmware-version: rtl8168h-2_0.0.2 02/26/15 expansion-rom-version: bus-info: 0000:01:00.0 supports-statistics: yes supports-test: no supports-eeprom-access: no supports-register-dump: yes supports-priv-flags: no ubuntu@ubuntu:~$ whereas booting a ‘dist-upgrade’ Ubuntu 18.04.3 ISO with ‘r8168-dkms’ and ‘ethtool’ installed uses the RealTek r8168 ethernet driver: ubuntu@ubuntu:~$ lsmod | grep r81 r8168 524288 0 ubuntu@ubuntu:~$ ethtool -i enp1s0 driver: r8168 version: 8.045.08-NAPI firmware-version: expansion-rom-version: bus-info: 0000:01:00.0 supports-statistics: yes supports-test: no supports-eeprom-access:… Read more »
So basically it’s mainline with firmware vs firmware-less out-of-tree. I’ve had a look at changes to the r8169 driver between 5.0 and 5.4, and there are indeed a number of fixes for the 8168 (failures after resume, EEE registers, MSI, issues with HW csum, power saving etc). It would be interesting to know if 5.4-stable fixes the issue or not.
Also, Ian, please do not forget to pass “-nn” to lspci so that it displays the PCI IDs in addition to the description. That allows to spot relevant changes in drivers.
I respun the Ubuntu 18.03.4 ISO with the v5.4.3 kernel (from https://kernel.ubuntu.com/~kernel-ppa/mainline) and this did seem to fix the problem as booting the standard Ubuntu 18.03.4 ISO with its default kernel (5.0.0-23-generic) still replicated the problem. My testing wasn’t extensive though as it merely consisted of booting the v5.4.3 ISO and successfully performing an ‘apt update && apt upgrade’ then booting the standard ISO and watching the ‘apt upgrade’ fail and then repeating both boots to confirm the results. The ‘ethtool’ output using the v5.4.3 kernel doesn’t change: ubuntu@ubuntu:~$ uname -a Linux ubuntu 5.4.3-050403-generic #201912130841 SMP Fri Dec 13 08:43:59… Read more »
> driver: r8169
> version:
> firmware-version: rtl8168h-2_0.0.2 02/26/15
I was comparing with ODROID H2 where it looked like this:
Still wondering why some modern RTL8111 variants work out of the box and some need RealTek’s r8168 driver…
Yours uses a different MAC. According to the driver, Ian’s is RTL_GIGA_MAC_VER_46 while yours seems to be RTL_GIGA_MAC_VER_40. There’s a significant list of different code paths in the driver for them in 5.4 so this indeed explains the problems with earlier versions and why 5.4 fixes them.
It is commit a7a92cf81589 (r8169: sync PCIe PHY init with vendor driver 8.047.01) that fixes the problem for the Beelink J45 and in particular the following change: - { 0x04, 0xffff, 0x154a }, + { 0x04, 0xffff, 0x854a }, In fact this is all that is needed as I recompiled the Ubuntu HWE kernel 5.0.0-23-generic (Ubuntu-hwe-5.0.0-23.24_18.04.1) which is the kernel used in the Ubuntu 18.04.3 ISO and only changed ‘0x154a’ to ‘0x854a’ and then respun the ISO with the new kernel and was able to boot and successfully perform an ‘apt update && apt upgrade’ which I couldn’t do when… Read more »
Great, now you just have to file a report to ubuntu so that they include this in their kernel 🙂
Just for completeness I had a look at the source for ‘r8168-dkms’ and the Beelink J45 uses CFG_METHOD_30 which has the same updated value:
rtl8168_ephy_write(ioaddr, 0x04, 0x854A);
So using this r8168 module and then upgrading to Ubuntu 20.04 (Focal Fossa) which is slated to use the v5.5 kernel will probably be quicker than me raising any bug in Launchpad!