I received Khadas Edge Developer Package with Khadas Edge RK3399 module, Khadas Captain carrier board, and several accessories a few weeks ago, and after checking the hardware in the first part of the review, I’ve now taken the time to review software support, specially Ubuntu 18.04 on the board.
Khadas Edge / Captain Firmware
There are currently four main choices of firmware for Khadas Edge / Khadas Captain:
- Ubuntu 18.04 OS with LXDE desktop environment @ https://dl.khadas.com/Firmware/Edge/Ubuntu/
- Android ROM @ https://dl.khadas.com/Firmware/Edge/Android/ with Android Nougat being a proper release, Android Oreo (available now) a temporary version that will not be supported, and Android P that will be released and supported by Rockchip later on in 2019
- Armbian RK3399 for Khadas Edge looks to be work-in-progress right now
- LibreELEC for playing videos on the platform
I decided to focus on Ubuntu 18.04 for this review, and Karl who has his own sample will review the stable Android Nougat firmware that has been released a few days ago.
Khadas Captain First Boot to Android, and Firmware Update to Ubuntu 18.04
Let’s connect the board to an HDMI TV, Ethernet, and the USB Type-C power supply, to see if it boots just fine.
After applying power, Android OS will boot within a few seconds.
But we want to upgrade the firmware, and it’s possible to do so with SDcard or USB type-C cable method. I went with the USB method in Ubuntu 18.04:
1 2 3 4 |
sudo apt-get install libusb-dev git parted ccache p7zip-full git clone https://github.com/khadas/utils cd util git pull |
But initially there was just a small problem:
1 2 3 4 5 6 7 8 9 10 11 |
./INSTALL Installing Amlogic flash-tool... =============================================== Host PC: Ubuntu 18.04 =============================================== Installing USB rules... Error: Ubuntu 18.04 haven't been verified! |
Oops, so this would only work with Ubuntu 16.04, so I tried with docker:
1 2 |
sudo snap install docker sudo docker run -ti ubuntu:16.04 |
But the installation would not complete, and then tried to modify the script to force it to work in Ubuntu 18.04, but it turned out not to be such a good idea with carefully reading the code, as bad things happened with my file system on my laptop switching to read-only, and after rebooting to “solve the issue”, my computer would not boot anymore. It took me 6 hours to solve… Oh well.
I finally switched to an Ubuntu 16.04 laptop with I picked to fix my main laptop.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
./INSTALL Installing Amlogic flash-tool… =============================================== Host PC: Ubuntu 16.04 =============================================== Installing USB rules… Installing flash-tool… Done! Installing Rockchip flash-tool… =============================================== Host PC: Ubuntu 16.04 =============================================== Installing USB rules… Installing flash-tool… Installing configuration… Done! Installing Khadas burn-tool… Done |
But luckily, if you run the latest LTS version of Ubuntu, you don’t have to through the pain I experienced, as the company reacted, and eventually added support for Ubuntu 18.04:
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 |
./INSTALL Installing Amlogic flash-tool... =============================================== Host PC: Ubuntu 18.04 =============================================== Installing USB rules... Installing flash-tool... Done! Installing Rockchip flash-tool... =============================================== Host PC: Ubuntu 18.04 =============================================== Installing USB rules... Installing flash-tool... Installing configuration... Done! Installing ToneBoard burn-tool... =============================================== Host PC: Ubuntu 18.04 =============================================== Installing USB rules... Installing toneboard-burn-tool... Done! Installing Khadas burn-tool... Done! |
The new step is to download the firmware, extract it:
1 2 |
wget https://dl.khadas.com/Firmware/Edge/Ubuntu/EMMC/Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20181115.7z 7z x Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20181115.7z |
But before flashing the firmware, you’ll need to enter Upgrade Mode with one of five methods. If you don’t, the flash tool will return an error:
1 |
ERROR: You should put your board enter upgrade mode! |
I used to TST (Terry’s Smart Tweezers) method to enter firmware upgrade mode, and connected relevant cables as shown below.
It does not matter which USB type-C port is used for power and data connection. To enter firmware upgrade mode, I pressed the functions key three times within 2 seconds, and the Blue LED started to blink to indicate upgrade mode is activate. We can now run the command to flash the firmware:
1 2 3 4 5 6 7 8 9 |
rk-burn-tool -i Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20181115/Edge_Ubuntu-lxde-bionic_Linux-4.4_arm64_EMMC_V20181115.img Burn to eMMC... Rockchip Android image (or linux image compatible with AndroidTool one image burning) found! Try to burn Rockchip image... Loading firmware... Support Type:RK330C FW Ver:6.0.41 FW Time:2018-11-15 10:05:44 Loader ver:1.15 Loader Time:2018-11-15 10:01:03 Upgrade firmware ok. Done! |
The board will automatically reboot, and boot to Ubuntu 18.04 with LXDE.
Khadas Captain & Edge System Information
Use khadas /khadas username and password to login. I also connected more peripherals include a USB hard drive, and a USB RF dongle for my keyboard and mouse.
I also connected through SSH from my laptop since it’s easier to copy/paste terminal output that way:
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 |
ssh khadas@khadas.local khadas@khadas.local's password: Welcome to Fenix 0.4 Ubuntu 18.04.1 LTS Linux 4.4.154 _ ___ _ ____ _ _ | |/ / |__ __ _ __| | __ _ ___ / ___|__ _ _ __ | |_ __ _(_)_ __ | ' /| '_ \ / _` |/ _` |/ _` / __| | | / _` | '_ \| __/ _` | | '_ \ | . \| | | | (_| | (_| | (_| \__ \ | |__| (_| | |_) | || (_| | | | | | |_|\_\_| |_|\__,_|\__,_|\__,_|___/ \____\__,_| .__/ \__\__,_|_|_| |_| |_| * Website: https://www.khadas.com * Documentation: https://docs.khadas.com * Forum: https://forum.khadas.com Last login: Mon Dec 17 14:31:35 2018 from 192.168.1.22 khadas@Khadas:~$ uname -a Linux Khadas 4.4.154 #11 SMP Wed Nov 14 11:01:05 CST 2018 aarch64 aarch64 aarch64 GNU/Linux khadas@Khadas:~$ df -h Filesystem Size Used Avail Use% Mounted on udev 946M 0 946M 0% /dev tmpfs 190M 656K 190M 1% /run /dev/mmcblk1p7 15G 2.7G 12G 20% / tmpfs 950M 12M 938M 2% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 950M 0 950M 0% /sys/fs/cgroup tmpfs 190M 16K 190M 1% /run/user/1000 /dev/sda2 241G 181G 48G 80% /media/khadas/USB3_EXT4 /dev/sda1 245G 182G 63G 75% /media/khadas/USB3_NTFS khadas@Khadas:~$ free -mh total used free shared buff/cache available Mem: 1.9G 711M 256M 23M 932M 1.1G Swap: 949M 1.3M 948M khadas@Khadas:~$ zramctl NAME ALGORITHM DISKSIZE DATA COMPR TOTAL STREAMS MOUNTPOINT /dev/zram4 lzo 237.4M 352K 155K 420K 1 [SWAP] /dev/zram3 lzo 237.4M 344K 146.2K 440K 1 [SWAP] /dev/zram2 lzo 237.4M 344K 141.6K 464K 1 [SWAP] /dev/zram1 lzo 237.4M 348K 140.4K 432K 1 [SWAP] |
The board run Ubuntu 18.04 with Linux 4.4.154, and since I have Khadas Edge Basic board fitted into Khadas Captain carrier board there’s 1.9GB RAM, and a 15 GB rootfs partition. Khadas team also decided to enable ZRAM by default which is not a bad idea.
1 2 3 4 5 6 7 8 9 |
lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 931.5G 0 disk ├─sda1 8:1 0 244.1G 0 part /media/khadas/USB3_NTFS ├─sda2 8:2 0 244.1G 0 part /media/khadas/USB3_EXT4 ├─sda3 8:3 0 244.1G 0 part └─sda4 8:4 0 199.1G 0 part mmcblk1 179:0 0 14.6G 0 disk ... |
All the four partitions in my hard drive are detected, but only EXT4 and NTFS partitions could be mounted, since BTRFS and exFAT are not enabled in the kernel. That should be something easy enough to do on your own.
1 2 3 4 5 6 |
lsmod Module Size Used by zram 32768 4 lz4_compress 16384 1 zram bcmdhd 1249280 0 lzo_compress 16384 1 zram |
Load kernel modules are mostly for ZRAM support, except for bcmdhd WiFi driver.
GPIO are enabled like in other RK3399 boards:
1 2 |
ls /sys/class/gpio/ export gpiochip0 gpiochip128 gpiochip32 gpiochip64 gpiochip96 unexport |
The GPIO definitions are a little different, and it does not look like all are enabled in the current Ubuntu image:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
sudo cat /sys/kernel/debug/gpio GPIOs 0-31, platform/pinctrl, gpio0: gpio-1 ( |vcc_sd ) out hi gpio-4 ( |bt_default_wake_host) out hi gpio-5 ( |GPIO Key Power ) in hi gpio-6 ( |? ) out lo GPIOs 32-63, platform/pinctrl, gpio1: gpio-34 ( |int-n ) in hi gpio-45 ( |vsel ) out lo GPIOs 64-95, platform/pinctrl, gpio2: gpio-83 ( |bt_default_rts ) out lo gpio-90 ( |bt_default_wake ) out hi gpio-91 ( |bt_default_reset ) out hi gpio-92 ( |reset ) out hi GPIOs 96-127, platform/pinctrl, gpio3: gpio-111 ( |mdio-reset ) out hi GPIOs 128-159, platform/pinctrl, gpio4: gpio-153 ( |vcc5v0_host ) out hi gpio-154 ( |vbus-5v ) out lo gpio-158 ( |int-n ) in hi |
3D Graphics Acceleration on Khadas Edge with Ubuntu 18.04
es2_info and es2gears are already installed.
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 |
es2_info EGL_VERSION: 1.4 Midgard-"r14p0-01rel0" EGL_VENDOR: ARM EGL_EXTENSIONS: EGL_KHR_image_pixmap, EGL_KHR_partial_update, EGL_KHR_config_attribs, EGL_KHR_image, EGL_KHR_image_base, EGL_KHR_fence_sync, EGL_KHR_wait_sync, EGL_KHR_gl_colorspace, EGL_KHR_get_all_proc_addresses, EGL_IMG_context_priority, EGL_ARM_pixmap_multisample_discard, EGL_KHR_gl_texture_2D_image, EGL_KHR_gl_renderbuffer_image, EGL_KHR_create_context, EGL_KHR_surfaceless_context, EGL_KHR_gl_texture_cubemap_image, EGL_EXT_create_context_robustness, EGL_KHR_cl_event2 EGL_CLIENT_APIS: OpenGL_ES GL_VERSION: OpenGL ES 3.2 v1.r14p0-01rel0-git(966ed26).f44c85cb3d2ceb87e8be88e7592755c3 GL_RENDERER: Mali-T860 GL_EXTENSIONS: GL_ARM_rgba8, GL_ARM_mali_shader_binary, GL_OES_depth24, GL_OES_depth_texture, GL_OES_depth_texture_cube_map, GL_OES_packed_depth_stencil, GL_OES_rgb8_rgba8, GL_EXT_read_format_bgra, GL_OES_compressed_paletted_texture, GL_OES_compressed_ETC1_RGB8_texture, GL_OES_standard_derivatives, GL_OES_EGL_image, GL_OES_EGL_image_external, GL_OES_EGL_image_external_essl3, GL_OES_EGL_sync, GL_OES_texture_npot, GL_OES_vertex_half_float, GL_OES_required_internalformat, GL_OES_vertex_array_object, GL_OES_mapbuffer, GL_EXT_texture_format_BGRA8888, GL_EXT_texture_rg, GL_EXT_texture_type_2_10_10_10_REV, GL_OES_fbo_render_mipmap, GL_OES_element_index_uint, GL_EXT_shadow_samplers, GL_OES_texture_compression_astc, GL_KHR_texture_compression_astc_ldr, GL_KHR_texture_compression_astc_hdr, GL_KHR_texture_compression_astc_sliced_3d, GL_KHR_debug, GL_EXT_occlusion_query_boolean, GL_EXT_disjoint_timer_query, GL_EXT_blend_minmax, GL_EXT_discard_framebuffer, GL_OES_get_program_binary, GL_OES_texture_3D, GL_EXT_texture_storage, GL_EXT_multisampled_render_to_texture, GL_OES_surfaceless_context, GL_OES_texture_stencil8, GL_EXT_shader_pixel_local_storage, GL_ARM_shader_framebuffer_fetch, GL_ARM_shader_framebuffer_fetch_depth_stencil, GL_ARM_mali_program_binary, GL_EXT_sRGB, GL_EXT_sRGB_write_control, GL_EXT_texture_sRGB_decode, GL_KHR_blend_equation_advanced, GL_KHR_blend_equation_advanced_coherent, GL_OES_texture_storage_multisample_2d_array, GL_OES_shader_image_atomic, GL_EXT_robustness, GL_EXT_draw_buffers_indexed, GL_OES_draw_buffers_indexed, GL_EXT_texture_border_clamp, GL_OES_texture_border_clamp, GL_EXT_texture_cube_map_array, GL_OES_texture_cube_map_array, GL_OES_sample_variables, GL_OES_sample_shading, GL_OES_shader_multisample_interpolation, GL_EXT_shader_io_blocks, GL_OES_shader_io_blocks, GL_EXT_tessellation_shader, GL_OES_tessellation_shader, GL_EXT_primitive_bounding_box, GL_OES_primitive_bounding_box, GL_EXT_geometry_shader, GL_OES_geometry_shader, GL_ANDROID_extension_pack_es31a, GL_EXT_gpu_shader5, GL_OES_gpu_shader5, GL_EXT_texture_buffer, GL_OES_texture_buffer, GL_EXT_copy_image, GL_OES_copy_image, GL_EXT_color_buffer_half_float, GL_EXT_color_buffer_float, GL_EXT_YUV_target, GL_OVR_multiview, GL_OVR_multiview2, GL_OVR_multiview_multisampled_render_to_texture, GL_KHR_robustness, GL_KHR_robust_buffer_access_behavior, GL_EXT_draw_elements_base_vertex, GL_OES_draw_elements_base_vertex |
es2gears works OK, but the framerate is a little on the low side.
I could run glmark2-es2 after installing it:
1 |
apt install glmark2-es2 |
The score was 42 with some of the benchmark maxing out at 50 fps because video output was 720p50. But then I wanted to repeat glmark2-es2 benchmark in offscreen mode, and I decided to install gimp as well. After a while, the system logged out automatically, and 3D GPU drivers did not work any more:
1 2 3 4 |
khadas@Khadas:~$ glmark2-es2 Error: eglInitialize() failed with error: 0x3001 Error: eglInitialize() failed with error: 0x3001 Error: main: Could not initialize canvas |
I first through gimp may have messed with the GPU drivers somehow, and reinstalled the firmware with rk-flash-tool, but the resulting remained the same, and Khadas was unable to provide a solution in time for this review. So I somehow permanently lost accelerated 3D graphics on the board for the rest of the review.
Khadas Edge Video Playback
When trying to play videos from the NTFS partition of the USB drive, or copy files from the USB to the eMMC flash the connection would often fail, interrupting video playback or file copy. That’s what it would look like in the kernel log:
1 2 3 4 5 6 7 8 9 |
[ 3224.443270] usb 5-1: USB disconnect, device number 5 [ 3224.445235] sd 3:0:0:0: [sda] tag#0 uas_zap_pending 0 uas-tag 1 inflight: CMD [ 3224.445255] sd 3:0:0:0: [sda] tag#0 CDB: opcode=0x28 28 00 3d 09 07 80 00 00 08 00 [ 3224.445385] sd 3:0:0:0: [sda] tag#0 UNKNOWN(0x2003) Result: hostbyte=0x01 driverbyte=0x00 [ 3224.445394] sd 3:0:0:0: [sda] tag#0 CDB: opcode=0x28 28 00 3d 09 07 80 00 00 08 00 [ 3224.445402] blk_update_request: I/O error, dev sda, sector 1024001920 [ 3224.456266] sd 3:0:0:0: [sda] Synchronizing SCSI cache [ 3224.531000] sd 3:0:0:0: [sda] Synchronize Cache(10) failed: Result: hostbyte=0x07 driverbyte=0x00 [ 3224.964000] usb 5-1: new high-speed USB device number 6 using ehci-platform |
At some point, I finally managed to play a 1080p60 video with mpv, but it relies on software decoding at this point, and the video was very choppy.
It’s unclear how to play 1080p or 4K videos smoothly in Ubuntu 18.04, so instead you may have to use LibreELEC image instead if that’s something you need. So far, I’ve been unable to play videos in any of the RK3399 boards I tested with Ubuntu Desktop firmware.
Web browsing in Khadas Captain
The Ubuntu 18.04 images comes with Chromium pre-installed.
However, Thai fonts are missing, so characters will show as blocks with this language when accessing Google and Facebook from my location, so I installed Thai fonts:
1 |
sudo apt install fonts-thai-tlwg |
I wanted to install Thai language support and the corresponding keyboard, but it failed due to permissions issues:
1 |
rg.freedesktop.PolicyKit.Error.Failed: ('system-bus-name', {'name': ':1.78'}): org.debian.apt.install-or-remove-packages |
Followed by more error messages:
You are not allowed to perform this action You don’t have the required privileges to perform this action.
That’s a minor issue that should be easy to fix.
Overall “standard” web browsing worked well, just like on other RK3399 boards and I edited a lot of this review on the board itself. However, I could not play Candy Crush Saga in Facebook as flash player is missing:
No Flash Player found. 11.0.0 version required.
YouTube videos can play at 720p with very few dropped frames, but some tearing is clearly visible. 3D graphics acceleration is broken on my board, but I went to visit WelGL Quake demo anyway, and unsurpringsly was greeted with an error message:
Sorry, but your browser does not support WebGL or does not have it enabled.
eMMC flash and USB Storage Performance
Let’s run the usual iozone benchmark in the eMMC flash:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
khadas@Khadas:~$ iozone iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.429 $ Compiled for 64 bit mode. Build: linux Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 11828 13354 15267 13684 17186 21738 102400 16 46154 47429 67887 68979 72140 45976 102400 512 49017 48523 252322 254329 223441 48436 102400 1024 48760 49352 267336 267311 254040 48286 102400 16384 49149 49470 285466 298166 274397 49097 iozone test complete. |
Up to 300MB/s sequential read speed, up to around 50MB/s sequential write speed, and random I/O values also look pretty good here.
But then I switched to USB storage performance, and the NTFS test performance would not complete:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
khadas@Khadas:/media/khadas/USB3_NTFS$ iozone iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.429 $ Compiled for 64 bit mode. Build: linux Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 14294 16520 26406 26594 Error reading block at 364781568 read: Input/output error |
After two more tries, I switched to EXT-4 and that was OK, so maybe I really do have a hardware issue on the NTFS partition…
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 |
khadas@Khadas:/media/khadas/USB3_EXT4$ iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.429 $ Compiled for 64 bit mode. Build: linux Contributors:William Norcott, Don Capps, Isom Crawford, Kirby Collins Al Slater, Scott Rhine, Mike Wisner, Ken Goss Steve Landherr, Brad Smith, Mark Kelly, Dr. Alain CYR, Randy Dunlap, Mark Montague, Dan Million, Gavin Brebner, Jean-Marc Zucconi, Jeff Blomberg, Benny Halevy, Dave Boone, Erik Habbinga, Kris Strecker, Walter Wong, Joshua Root, Fabrice Bacchella, Zhenghua Xue, Qin Li, Darren Sawyer, Vangel Bojaxhi, Ben England, Vikentsi Lapa. Run began: Sat Dec 22 09:53:40 2018 Include fsync in write timing O_DIRECT feature enabled Auto Mode File size set to 1024000 kB Record Size 4 kB Record Size 16 kB Record Size 512 kB Record Size 1024 kB Record Size 16384 kB Command line used: iozone -e -I -a -s 1000M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 iozone Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 1024000 4 5852 6369 7682 7613 407 267 1024000 16 14726 15352 18142 17968 1490 988 1024000 512 27818 28583 32034 32104 9939 18701 1024000 1024 30065 30320 32038 32272 19148 29809 1024000 16384 32128 32242 33187 33223 32581 32148 |
The values are really low at about 33MB/s for read and write, and then I realized oops… The USB port on one of the edges of the board is USB 2.0, so I moved the drive to the USB 3.0 port, and results were inline with expectations for a mechanical drive:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
khadas@Khadas:/media/khadas/USB3_EXT4$ iozone iozone -e -I -a -s 100M -r 4k -r 16k -r 512k -r 1024k -r 16384k -i 0 -i 1 -i 2 Iozone: Performance Test of File I/O Version $Revision: 3.429 $ Compiled for 64 bit mode. Build: linux Output is in kBytes/sec Time Resolution = 0.000001 seconds. Processor cache size set to 1024 kBytes. Processor cache line size set to 32 bytes. File stride size set to 17 * record size. random random bkwd record stride kB reclen write rewrite read reread read write read rewrite read fwrite frewrite fread freread 102400 4 14857 19350 22412 18319 329 595 102400 16 50996 62250 59027 68382 2106 7009 102400 512 90509 89635 94827 96983 34258 51358 102400 1024 90524 89672 95280 97579 49900 60626 102400 16384 90892 90758 93144 95004 89712 86382 iozone test complete. |
Around 93MB/s sequential read speed, and 91 MB/s sequential write speed.
As a side note, since the tests take time on the hard drive I tried to do some debugging/monitoring, first by checking syslog but it’s filled with message related to IR remote control:
1 2 3 4 5 6 7 8 9 |
tail -f /var/log/syslog Dec 23 07:06:44 localhost lircd[889]: lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:44 localhost lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:45 localhost lircd[889]: lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:45 localhost lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:46 localhost lircd[889]: lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:46 localhost lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:47 localhost lircd[889]: lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* Dec 23 07:06:47 localhost lircd-0.10.0[889]: Error: Cannot glob /sys/class/rc/rc0/input[0-9]*/event[0-9]* |
and iotop – used to see whether any I/O occured – did not work either:
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 |
sudo iotop Traceback (most recent call last): File "/usr/sbin/iotop", line 17, in <module> main() File "/usr/lib/python3/dist-packages/iotop/ui.py", line 620, in main main_loop() File "/usr/lib/python3/dist-packages/iotop/ui.py", line 610, in <lambda> main_loop = lambda: run_iotop(options) File "/usr/lib/python3/dist-packages/iotop/ui.py", line 508, in run_iotop return curses.wrapper(run_iotop_window, options) File "/usr/lib/python3.6/curses/__init__.py", line 94, in wrapper return func(stdscr, *args, **kwds) File "/usr/lib/python3/dist-packages/iotop/ui.py", line 501, in run_iotop_window ui.run() File "/usr/lib/python3/dist-packages/iotop/ui.py", line 155, in run self.process_list.duration) File "/usr/lib/python3/dist-packages/iotop/ui.py", line 434, in refresh_display lines = self.get_data() File "/usr/lib/python3/dist-packages/iotop/ui.py", line 415, in get_data return list(map(format, processes)) File "/usr/lib/python3/dist-packages/iotop/ui.py", line 388, in format cmdline = p.get_cmdline() File "/usr/lib/python3/dist-packages/iotop/data.py", line 292, in get_cmdline proc_status = parse_proc_pid_status(self.pid) File "/usr/lib/python3/dist-packages/iotop/data.py", line 196, in parse_proc_pid_status key, value = line.split(':\t', 1) ValueError: not enough values to unpack (expected 2, got 1) Error in sys.excepthook: |
But this one seems to be a bug with iotop while using the latest version of Python. One way might have been to downgrade Python version, but instead I used:
1 |
watch -n1 iostat -hm |
in order to monitor I/Os to partitions.
Network performance – Gigabit Ethernet & 802.11ac WiFi
Let’s test Gigabit Ethernet performance with iperf starting with a full duplex data transfer:
1 2 3 4 5 6 7 8 |
------------------------------------------------------------ Client connecting to 192.168.1.52, TCP port 5001 TCP window size: 332 KByte (default) ------------------------------------------------------------ [ 6] local 192.168.1.22 port 57042 connected with 192.168.1.52 port 5001 [ ID] Interval Transfer Bandwidth [ 6] 0.0-60.0 sec 3.24 GBytes 464 Mbits/sec [ 4] 0.0-60.0 sec 5.46 GBytes 781 Mbits/sec |
That’s fairly typical for a Rockchip RK3399 platform. Upload only result looks fine…
1 2 |
[ 4] local 192.168.1.22 port 5001 connected with 192.168.1.52 port 59110 [ 4] 0.0-60.0 sec 5.75 GBytes 822 Mbits/sec |
and download only is even closer to the limit:
1 2 3 |
[ 3] local 192.168.1.22 port 57168 connected with 192.168.1.52 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-60.0 sec 6.57 GBytes 940 Mbits/sec |
So Gigabit Ethernet is working just as expected.
Time to test WiFi 5 (802.11ac) performance. Please note that I have the Khadas Edge Basic board with AP6356S module, while Edge Pro and Max boards come with AP6398S that support RSDB (Real Simulataneous Dual Band) , and should offer even better performance.
802.11ac WiFi upload result:
1 2 3 |
[ 4] local 192.168.1.22 port 5001 connected with 192.168.1.87 port 34252 [ ID] Interval Transfer Bandwidth [ 4] 0.0-60.0 sec 1.55 GBytes 222 Mbits/sec |
802.11ac WiFi download result:
1 2 3 4 |
------------------------------------------------------------ [ 3] local 192.168.1.22 port 39176 connected with 192.168.1.87 port 5001 [ ID] Interval Transfer Bandwidth [ 3] 0.0-60.0 sec 746 MBytes 104 Mbits/sec |
I’ve frequently found asymmetries between upload and download, but usually that’s at the benefit of the download part. That’s somehow the opposite with Khadas Edge, and I had to double check it to confirm. 222 Mbps upload is very good with the router I use, but 104 Mbps download could be better, as some other platforms could achieve a little over 250 Mbps.
USB-C DisplayPort Alternate Mode on Khadas Captain
When I connected MINIX NEO-C plus USB-C adapter to RockPro64 RK3399 board in order to make use of USB-C DisplayPort Alternate mode over HDMI it did not work quite as expected (although it may be fixed now), but I did not have such an issue with Khadas Edge.
I just move the HDMI cable that I had connected to the HDMI port of Khadas Edge to the HDMI port in the MINIX USB-C adapter, and within a few seconds, the image was up and running. I only have access to one TV right now, so I was not able to test dual monitor setups and things like extended desktop.
Conclusion
The hardware design looks solid with a fast eMMC flash, excellent Gigabit Ethernet performance, and acceptable WiFi AC performance, dual video output, and more.
But while Ubuntu 18.04 LXDE image is mostly usable, there were several issues such as accelerated 3D graphics support breaking after a while, even after reinstalling the firmware, and the lack of hardware video decoding is a recurring issues on RK3399 platforms at least on desktop Linux images, as LibreELEC is another story. I also encountered several less important software only issues like failure to install language packs, as well as some potential (power?) issues when connecting the USB hard drive that would disconnect from time to time when connected to the USB 2.0 port.
But bear in mind Khadas Edge and Captain boards are not shipping yet, so what I did here was really beta testing, and I’m pretty sure Shenzhen Wesion will look into the issues and fix many of them before the rewards ship to backers later in January.
Khadas Edge crowdfunding campaign is still ongoing, and you can back the project on Indiegogo if you are interested.
Jean-Luc started CNX Software in 2010 as a part-time endeavor, before quitting his job as a software engineering manager, and starting to write daily news, and reviews full time later in 2011.
Support CNX Software! Donate via cryptocurrencies, become a Patron on Patreon, or purchase goods on Amazon or Aliexpress
Framebuffer presentation layer seems botched (ergo the low glgears fps), but at least the GLES stack is 3.2 and the revision quite recent. Now they need to fix eglSwapBuffers() and they’re in GLES business! : )
Thanks for your review.
About some issues in this review:
1. there were several issues such as accelerated 3D graphics support breaking after a while, even after reinstalling the firmware
How does this happend? When you reinstall the firmware it still not working?
2. How to play 1080p or 4K videos?
You can use gstreamer to play videos. And I added a simple command to use.
E.g., play_video /path/to/video
And for latest version you can use QT5 player, Sound & Video->QT5 Media Player
3. WebGL not working
WebGL is enabled. If 3D graphics acceleration not working, it will not work.
4. but only EXT4 and NTFS partitions could be mounted, since BTRFS and exFAT are not enabled in the kernel.
BTRFS & exFAT are enabled, they are built in kernel, not as modules.
5. After two more tries, I switched to EXT-4 and that was OK, so maybe I really do have a hardware issue on the NTFS partition…
I’ll check this issue..
About 1. I’ve sent an email about that issue several days ago. Basically, install gimp while running glmark2-es2 offscreen mode, suddenly log out after a while. Login again the error show, reboot the error still show, reinstalling Ubuntu with rk-flash-tool and the issue is still there.