site  contact  subhomenews

Linux kernel 4.18.8 compiled

September 17, 2018 — BarryK

I have compiled this kernel in EasyOS x86_64 "Easy Beaver" version, which is EasyOS built from Ubuntu Bionic Beaver (18.04.1 LTS) DEB packages. This is an in-house version, the next official release is likely to be 0.9.3.

The kernel source, patches and build scripts are here:

The intention is to use this kernel for the next official releases of Easy Beaver (EasyOS) and Quirky Beaver (Quirky). Might release them simultaneously.

Tags: easy, quirky

Locator map and satellite viewer

September 12, 2018 — BarryK

Puppy Forum member Geoffrey has created this great frontend for Google Maps:

It only needs 'yad' and 'gtkdialog', so is a tiny PET package, and will work in all pups.

There was a problem with recent versions of librsvg, now fixed. The fixed PET, with a few small tweaks, is here (9.4KB):

My tweaks are tiny: it was in the Utility menu, and looked out-of-place, so I moved it to Network -> utility, which is a tad better, but also the Network category in the menu is very under-populated.

I also changed the 'pet.specs' file to show the deps "+yad,+gtkdialog".

The dep 'yad' can be found in the PPM (Package Manager), if not already installed (type "which yad" in a terminal to find out).

Locator will be in next release of EasyOS and Quirky.

Tags: easy, quirky

EasyOS 64-bit on Raspberry Pi

September 05, 2018 — BarryK

Yep, EasyOS has been compiled for ARM aarch64 and is now running on the Raspberry Pi3. This is the "Pyro" series, compiled from source in 'oe-qky-src', my fork of OpenEmbedded (OE). The binary packages are then used in woofQ, to build EasyOS.

First, I built Quirky Linux in OE and created SD-cards for both RPI3 and Rock64 boards. Quirky is the same binary packages as used to build EasyOS, the difference is that Quirky is designed as a conventional "full" installation.

As the Rock64 has 4GB RAM and a USB3 socket, it is more suitable as a compiling platform. I compiled the kernel for the Pi -- I had to compile my own kernel, as it requires aufs patch, and aufs and squashfs drivers to be builtin.

I also compiled SeaMonkey, Scribus, and some other apps.

The aarch64 compile in OE is generic, without any particular optimization for video hardware acceleration. Therefore, we cannot expect stellar performance when playing videos.

Version is the first build for the Pi, and has had cursory testing. I checked the main apps, and they are OK. Well, mostly. Going to with SeaMonkey is not a good experience -- it can't play much more than 360p, and I locked the browser a few times.

Interesting to contrast with the Rock64, which played up to 720p, but it looked like some frames were getting dropped.

If anyone takes a liking to EasyOS on the Pi, you are welcome to have a go at tweaking it. Just click the "sfsget" icon at top of screen to download the "devx" file, which will turn Easy into a complete compiling environment. There is also a kernel source SFS file, if you want to compile a kernel module.

There are some features of EasyOS that are works-in-progress, especially EasyShare and EasyContainers. On the desktop, there is an icon labeled "desk", which is a complete desktop in a container -- this works, though playing with it on the Pi I did manage to crash the file manager.

Read more about EasyOS here:

Also tagged posts in my blog:

Download the image file for SD-card:

The image file is gzipped, which Windows apps such as Etch understand. Here is information how to write the file to a SD-card:

The file is only 641MB when uncompressed, and at first bootup will expand to fill the entire SD-card. Any card from 2GB up will work, though 8GB or more is recommended for ongoing usage.

If you want to directly download the SFS files, they are here:

Kernel source, patches and build scripts are here:

I intend to start a Forum thread for feedback, and post the link here. That's if anyone is interested!

Tags: easy

LittlevGL evaluation part 3

August 23, 2018 — BarryK

Progress! Parts 1 and 2 are here:

I didn't know how to get the mouse working without X, so posted a question to the developer's site:

Now have a window with buttons, and a mouse! Furthermore, it is compiled statically with uClibc and the executable is 217KB -- bigger than it needs to be as have included more modules than actually used.

I used my fork of Landley's uClibc-based Aboriginal chrootable filesystem:

...follow the instructions, and you will end up with a filesystem folder that you can chroot into.

LittlevGL is the pc-simulator tarball, as explained in the earlier posts. But first, the exciting part... I excited from X and executed 'demo":


The "mouse pointer" is that little power-button symbol, don't yet know how to create a proper image. I can move the pointer over a button, click, and get output on the screen. Yay!

My changes to 'lv_conf.h':

#define LV_COLOR_DEPTH     24                     /* BKColor depth: 1/8/16/24*/

Changes to 'lv_drv_conf.h':

#define USE_FBDEV           1
#define USE_EVDEV 1

Here is my 'Makefile':

# Makefile
CC = gcc
#CFLAGS = -Wall -Wshadow -Wundef -Wmaybe-uninitialized
CFLAGS = -Wall -Wshadow -Wundef
CFLAGS += -O3 -g3 -I./
#LDFLAGS += -lSDL2 -lm
BIN = demo
LDFLAGS = -static

LVGL_DIR = ${shell pwd}

MAINSRC = main.c

include ./lvgl/lv_core/
include ./lvgl/lv_hal/
include ./lvgl/lv_objx/
include ./lvgl/lv_misc/lv_fonts/
include ./lvgl/lv_misc/
include ./lvgl/lv_themes/
include ./lvgl/lv_draw/

include ./lv_drivers/display/
include ./lv_drivers/indev/

OBJEXT ?= .o





all: clean default

%.o: %.c
@$(CC) $(CFLAGS) -c $< -o $@
@echo "CC $<"

default: $(AOBJS) $(COBJS) $(MAINOBJ)

rm -f $(BIN) $(AOBJS) $(COBJS) $(MAINOBJ)
Here is my 'main.c':
#include "lvgl/lvgl.h"
#include "lv_drivers/display/fbdev.h"
#include "lv_drivers/indev/evdev.h"
#include <unistd.h>
#include <stdio.h>

//Add a display for the LittlevGL using the frame buffer driver
void register_display(void)
lv_disp_drv_t disp_drv;
disp_drv.disp_flush = fbdev_flush; //It flushes the internal graphical buffer to the frame buffer

static lv_res_t btn_click_action(lv_obj_t * btn)
uint8_t id = lv_obj_get_free_num(btn);

printf("Button %d is released\n", id);

/* The button is released.
* Make something here */

return LV_RES_OK; /*Return OK if the button is not deleted*/

int main(void)
/*LittlevGL init*/

/*Linux frame buffer device init*/

// get a display

// enable event input

// get an input device like mouse
lv_indev_drv_t indev_drv;
indev_drv.type = LV_INDEV_TYPE_POINTER; = evdev_read;
// lv_indev_drv_register(&indev_drv);

lv_indev_t * mouse_indev = lv_indev_drv_register(&indev_drv);

lv_obj_t * cursor_obj = lv_img_create(lv_scr_act(), NULL); /*Create an image for the cursor */
lv_img_set_src(cursor_obj, SYMBOL_POWER); /*For simlicity add a built in symbol not an image*/
lv_indev_set_cursor(mouse_indev, cursor_obj); /* connect the object to the driver*/

/*Create a title label*/
lv_obj_t * label = lv_label_create(lv_scr_act(), NULL);
lv_label_set_text(label, "Default buttons");
lv_obj_align(label, NULL, LV_ALIGN_IN_TOP_MID, 0, 5);

/*Create a normal button*/
lv_obj_t * btn1 = lv_btn_create(lv_scr_act(), NULL);
lv_cont_set_fit(btn1, true, true); /*Enable resizing horizontally and vertically*/
lv_obj_align(btn1, label, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
lv_obj_set_free_num(btn1, 1); /*Set a unique number for the button*/
lv_btn_set_action(btn1, LV_BTN_ACTION_CLICK, btn_click_action);

/*Add a label to the button*/
label = lv_label_create(btn1, NULL);
lv_label_set_text(label, "Normal");

/*Copy the button and set toggled state. (The release action is copied too)*/
lv_obj_t * btn2 = lv_btn_create(lv_scr_act(), btn1);
lv_obj_align(btn2, btn1, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
lv_btn_set_state(btn2, LV_BTN_STATE_TGL_REL); /*Set toggled state*/
lv_obj_set_free_num(btn2, 2); /*Set a unique number for the button*/

/*Add a label to the toggled button*/
label = lv_label_create(btn2, NULL);
lv_label_set_text(label, "Toggled");

/*Copy the button and set inactive state.*/
lv_obj_t * btn3 = lv_btn_create(lv_scr_act(), btn1);
lv_obj_align(btn3, btn2, LV_ALIGN_OUT_BOTTOM_MID, 0, 10);
lv_btn_set_state(btn3, LV_BTN_STATE_INA); /*Set inactive state*/
lv_obj_set_free_num(btn3, 3); /*Set a unique number for the button*/

/*Add a label to the inactive button*/
label = lv_label_create(btn3, NULL);
lv_label_set_text(label, "Inactive");

/*Handle LitlevGL tasks (tickless mode)*/

return 0;
What we have now is a great jumping-off point for creating useful apps.

Tags: linux, easy

EasyOS 32-bit version 0.9.6

August 22, 2018 — BarryK

A couple of people have recently asked me whether I will be releasing a 32-bit EasyOS. I wasn't going to, as have been attempting to be more focused in the development. However, a 32-bit, i686, build does not take much extra effort, a couple of days.

Most of the packages are compiled automatically in my fork of OpenEmbedded. Some, such as SeaMonkey and the kernel, I still have to compile manually. Have not ported all the Qt5 apps into OE either.

I have left Qt5 and the Qt5-apps out of this build. The two main ones are Scribus desktop publishing and Symhytum simple database, both of which are in the 64-bit 0.9.6 release.

If there are any peculiarities to it, specific to being 32-bit, I can't give that much attention. I just did a quick run through the apps and utilities, they seem to be functional. I get a nice desktop, looks good. Still on the "green" theme.

Bootup is not UEFI-aware, it is for legacy booting, intended for ye olde computers prior to 2012. Though, with 4.14.65 kernel, should boot up on recent PCs. 4GB RAM limit!

Though, it might be 32-bit UEFI-aware, if you have one of those.

So, if you want a i686 EasyOS, here it is:

There are some release notes at the 64-bit 0.9.6 announcement:

Forum feedback will be in the same thread: 

Tags: easy

EasyShare supports Android phone via USB

August 13, 2018 — BarryK

I posted recently about Android utilities being included in future EasyOS and Quirky releases:

EasyShare is now using these utilities and supports file sharing via an Android phone connected by USB cable.

The main GUI now has a checkbox "Android USB", and it is very simple to use. Here is a snapshot:


The only slight difficulty, very slight, is that Developer mode and USB debugging have to be turned-on on the phone. The phone is automatically discovered, and it is just a matter of clicking the "Mount" button. 

I have updated the EasyShare tutorial page:   

Tags: easy, quirky

adb connection to phone over wifi

August 09, 2018 — BarryK

I posted yesterday about using 'adb' and 'adbfs' over usb to browse files on my Android phone:

Briefly mentioned that it could be done over wifi as well. Yes, this site has a nice explanation:

It does require a one-time usb connection to enable the phone to listen on port 5555. With usb-debugging enabled on the phone and usb cable connected to PC, on the PC:

# adb devices
...this will confirm the connection
# adb shell "ip route" dev wlan0  proto kernel  scope link  src
... is the ip-address of the phone.
# adb tcpip 5555
...starts the phone listening on port 5555

Then unplug the usb cable, and on the PC:

# adb connect
# adb shell "ls /sdcard"
...will list folders and files on phone
# adbfs /mnt/phone
...can browse the files
# fusermount -u /mnt/phone

Yeah it works, but not very secure. Port 5555 stays open until the phone is rebooted. adbfs is a simple method, but reckon will restrict to only doing it via usb cable.

Tags: easy, quirky, linux

EasyShare now using fakeidentd

August 07, 2018 — BarryK

I posted about the rewrite of EasyShare a few days ago:

Which appeared in EasyOS 0.9.6 released a couple of days ago.

Then yesterday, examined using fakeidentd server for network discovery:

Puppy Forum member 'step', a longtime contributor on the forum, sent me a pm about another way to query fakeidentd, using 'telnet'. Like this:

# { printf \\n; sleep 1; } | telnet 113

Busybox has a telnet applet, though my current configuration of busybox does not have it.

Very nice, thanks very much for that info. As I have the '' perl script working, staying with that for now. EasyShare is now modified to use fakeidentd, and I have tested, works great.

Running 'easyshare' from a terminal, noticed an error message, although the sshfs connection worked:

do_known_hosts: hostkeys_foreach failed: No such file or directory

It was a one-off message, I discovered because folder /root/.ssh did not exist. Fixed.

Tags: easy, quirky