Custom D.E.O.T. V2.0+/Clockwork OS v0.5 image - With customised DEOT interface, Kernel 5.7, Optional 1400MHz OC, Debian 10 Buster, Retroarch 1.9.0, Mupen64+ plus more! (Current build: 200903)

IMPORTANT! If you downloaded the 200318 build earlier today, either redownload it, or edit the file in 07_Clockspeed from 1800 to 1008. See above.

I have uploaded a new version aptly named the same thing, ie build 200318. I didn’t call it anythign else, because according to my click-o-meter, I don’t think anyone downloaded the initial one yet.

I have made another build 200319, with a significantly smaller footprint. I finally got around to setting up a proper linux environment, so did what I should have done a long time ago. I’ve essentially defragmented the image, zeroed the empty space, and shrunk the image size down to half the size. I’ve also applied guu’s autoexpansion script, which means it should behave identically to the official 0.5 image re: filling up all the space. I will continue to provide one with and without, since I recall some users having troubles with the expansion taking up the entirety of their larger capacity SD cards. Consider this a test version to see if I actually applied the above correctly.

Also, haha! It’s 3.14GB. Ah, if only I uploaded this on the 14th of March! It would have been the perfect Pi day contribution!

And now the Mega download link is up, if you want a faster download. It’s in the first post of this thread as usual. And don’t forget - be patient the first time it boots up. I’d almost even consider plugging it into power while doing so. Who knows what could happen if you lost power partway through expanding the partition? Well, not much since you’re basically starting fresh anyway. :slight_smile:

1 Like

And of course I end up doing something new tonight AFTER I upload the above image!

Good news! I got the stock settings page items working.
They’re the ones featured in this promotional material on the top right two panels. (I have no idea where that Loading screen comes from - I’ve never seen it!)

Here are the details.

I was right, regarding referenced fonts not lining up.

Initially, what I tried was substituting the referenced font names with the stock font names of 0.5. The DEOT OS uses the Eurostile font a lot, whereas stock 0.5 doesn’t.
Needless to say, the launcher wouldn’t progress if any changes were made.

I didn’t want to touch the /home/cpi/launcher/sys.py/UI/skin_manager.py, since being within the launcher directory, it would get overwritten with the stock version upon updating, which would cause problems re: the launcher not loading.

But realistically, if the skin_manager.py was going to get updated/replaced with stock, chances are the /home/cpi/launcher/Menu/GameShell/10_Settings/ would also get completely overwritten, preventing the launcher freeze happening.

That and the fact that we haven’t seen a launcher update for a while. So I went ahead and modified the skin_manager.py file like this:

# -*- coding: utf-8 -*-

import pygame
import config
import ConfigParser

from util_funcs  import FileExists

class CaseConfigParser(ConfigParser.SafeConfigParser):
    def optionxform(self, optionstr):
        return optionstr

class SkinManager(object):
    """
    _HighColor = pygame.Color(51,166,255) # #33a6ff
    _TextColor = pygame.Color(83,83,83) # #535353
    _FrontColor = pygame.Color(131,199,219) ## light blue,#83c7db
    _URLColor  = pygame.Color(51,166,255) ## blue more #33a6ff
    _LineColor = pygame.Color(169,169,169)  # #a9a9a9
    _TitleBgColor = pygame.Color(228,228,228)  # #e4e4e4
    _ActiveColor = pygame.Color(175,90,0) ## light brown  #af5a00
    """
    
    _Colors = {}
    _Config = None
    _Fonts = {}
    DefaultSkin = "../skin/default"

    def __init__(self):
        self.Init()

    def ConvertToRGB(self,hexstr):
        
        h = hexstr.lstrip('#')
        return tuple(int(h[i:i+2], 16) for i in (0, 2 ,4))
    
    def Init(self):
        if not SkinManager._Colors:
            self.SetColors()
        if not SkinManager._Fonts:
            self.SetFonts()
    
    def SetFonts(self):
        if not pygame.font.get_init():
            pygame.font.init()
            
        skinpath = config.SKIN+"/truetype"
        fonts_path = {}
        fonts_path["varela"]   = "%s/VarelaRound-Regular.ttf" % skinpath
        print(fonts_path["varela"])
        fonts_path["veramono"] = "%s/VeraMono.ttf" % skinpath
        fonts_path["noto"]     = "%s/NotoSansMono-Regular.ttf" % skinpath
        fonts_path["notocjk"]     = "%s/NotoSansCJK-Regular.ttf" % skinpath
     	fonts_path["Eurostile"] = "%s/EurostileMN-Medium.pfb.ttf" %skinpath
        fonts_path["EurostileBold"] = "%s/EurostileMN-ExtendedBold.pfb.ttf" % skinpath
        
        
        self._Fonts["EurostileBold13"]  = pygame.font.Font(fonts_path["EurostileBold"],13)        
        self._Fonts["EurostileBold30"]  = pygame.font.Font(fonts_path["EurostileBold"],30)
        
        for i in range(10,29):
          self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["Eurostile"],i)
          
        self._Fonts["Eurostile34"] = pygame.font.Font(fonts_path["Eurostile"],34)
        self._Fonts["Eurostile40"] = pygame.font.Font(fonts_path["Eurostile"],40)
        self._Fonts["Eurostile120"] = pygame.font.Font(fonts_path["Eurostile"],120)
        

        for i in range(10,29):
          self._Fonts["varela%d"%i] = pygame.font.Font(fonts_path["varela"],i)
          
        self._Fonts["varela34"] = pygame.font.Font(fonts_path["varela"],34)
        self._Fonts["varela40"] = pygame.font.Font(fonts_path["varela"],40)
        self._Fonts["varela120"] = pygame.font.Font(fonts_path["varela"],120)
        
        for i in range(10,26):
            self._Fonts["veramono%d"%i] = pygame.font.Font(fonts_path["veramono"],i)
        
        for i in range(10,28):
            self._Fonts["notosansmono%d"%i] = pygame.font.Font(fonts_path["noto"],i)

        for i in range(10,28):
            self._Fonts["notosanscjk%d"%i] = pygame.font.Font(fonts_path["notocjk"],i)
    
        self._Fonts["arial"] = pygame.font.SysFont("arial",16)
        
    def SetColors(self):
        Colors = {}
        Colors["High"] = pygame.Color(51, 166, 255)
        Colors["Text"] = pygame.Color(83, 83, 83)
        Colors["ReadOnlyText"] = pygame.Color(130,130,130)
        Colors["Front"] = pygame.Color(131, 199, 219)
        Colors["URL"] = pygame.Color(51, 166, 255)
        Colors["Line"] = pygame.Color(169, 169, 169)
        Colors["TitleBg"] = pygame.Color(228, 228, 228)
        Colors["Active"] = pygame.Color(175, 90, 0)
        Colors["Disabled"] = pygame.Color(204, 204, 204)
        Colors["White"] = pygame.Color(255, 255, 255)
        Colors["Black"] = pygame.Color(0, 0, 0)

        SkinManager._Colors = Colors

        self._Config = CaseConfigParser()

        fname = config.SKIN+"/config.ini"

        try:
            self._Config.read(fname)
        except Exception, e:
            print("read skin config.cfg error %s" % str(e))
            return
        else:
            if "Colors" in self._Config.sections():
                colour_opts = self._Config.options("Colors")
#                print(colour_opts)
                for i in SkinManager._Colors:
                    if i in colour_opts:
                        try:
                            SkinManager._Colors[i] = self.ConvertToRGB(
                                self._Config.get("Colors", i))
                        except Exception, e:
                            print("error in ConvertToRGB %s" % str(e))
                            continue
    
    def GiveFont(self,name):
        return SkinManager._Fonts[name]
        
    def GiveColor(self,name):
        if name in SkinManager._Colors:
            return SkinManager._Colors[name]
        else:
            return  pygame.Color(255,0,0)
    
    def GiveIcon(self,orig_file_or_dir): ## return is string,not Surface
        #doing a wrapper for items under /home/cpi/apps/Menu/*, to be like Menu/GameShell/*
        if orig_file_or_dir.startswith("/home/cpi/apps/Menu"):
            orig_file_or_dir = orig_file_or_dir.replace("/home/cpi/apps/Menu/","../Menu/GameShell/")
    
        if orig_file_or_dir.startswith(".."):
            ret  = orig_file_or_dir.replace("..",config.SKIN)
            if FileExists(ret) == False:
                ret = orig_file_or_dir.replace("..",self.DefaultSkin)
        else:
            ret = config.SKIN+"/sys.py/"+orig_file_or_dir
            if FileExists(ret) == False:
                ret = self.DefaultSkin+"/sys.py/"+orig_file_or_dir
    
        if FileExists( ret ):
            return ret
        else:  ## if not existed both in default or custom skin ,return where it is
            return orig_file_or_dir
            
    def GiveWallpaper(self,png_name):
        #first SKIN/wallpapers/xxxx.png
        #second ../skin/default/wallpapers/xxxx.png
        #finnal gameshell/wallpaper/xxxx.png
        #loading.png,seeyou.png,updating.png,gameover.png,desktopbg.png
        wlp = "/wallpaper/"
        if FileExists(config.SKIN+wlp+png_name):
            return config.SKIN+wlp+png_name
        elif FileExists(self.DefaultSkin+wlp+png_name):
            return self.DefaultSkin+wlp+png_name
        else:
            return "gameshell/wallpaper/"+png_name
            
        
            
##global MySkinManager Handler
MySkinManager = None

def InitMySkinManager():
    global MySkinManager
    if MySkinManager == None:
        MySkinManager = SkinManager()
    

InitMySkinManager()

I simply added more font choices, and reference names to the list, without removing anything.
This allows us to now use these customised settings menu items.

  • Airplane
  • Brightness
  • Sound
  • Storage

While I was at it, I removed LauncherGo entirely.
I removed the directory /home/cpi/launcher/Menu/GameShell/10_Settings/LauncherGo/ , and went ahead and removed /home/cpi/launchergo/
And then I commented out the entry within the settings menu like so:

# -*- coding: utf-8 -*- 

import pygame
import sys

from libs.roundrects import aa_round_rect

## local UI import
from UI.constants import Width,Height
from UI.page   import Page,PageSelector
from UI.label  import Label
from UI.util_funcs import midRect,FileExists
from UI.keys_def   import CurKeys, IsKeyStartOrA, IsKeyMenuOrB
from UI.scroller   import ListScroller
from UI.skin_manager import MySkinManager
from UI.lang_manager import MyLangManager
from UI.info_page_selector import InfoPageSelector

from list_item  import ListItem

import myvars

class ListPage(Page):

    _Icons = {}
    _Selector=None
    
    _FootMsg = ["Nav","","","Back","Enter"]
    _MyList = []
    _ListFontObj = MyLangManager.TrFont("varela15")

    _Scroller = None
    
    def __init__(self):
        Page.__init__(self)
        self._Icons = {}
        self._CanvasHWND = None
        self._MyList = []
        
    def Init(self):
        self._PosX = self._Index * self._Screen._Width
        self._Width = self._Screen._Width
        self._Height = self._Screen._Height

        self._CanvasHWND = self._Screen._CanvasHWND

        ps = InfoPageSelector()
        ps._Parent = self
        ps._PosX = 2
        self._Ps = ps
        self._PsIndex = 0
        
        #                ""   pkgname, label
        alist         = [["","Airplane","Airplane Mode"],
                         ["","PowerOptions","Power Options"],
                         ["","Wifi","Wi-Fi"],
                         ["","Bluetooth","Bluetooth"],
                         ["","Sound","Sound  Volume"],
                         ["","Brightness","BackLight Brightness"],
                         ["","Storage",""],
                         ["","Time","Timezone"],
                         ["","Languages","Languages"],
                         ["","Notification","Notification"],
                         ["","Update", ""],
                         ["","Cores", "Retroarch cores manager"],
                         ["","About",  "About"],
                         ["","PowerOFF","Power OFF"],
                         ["","ButtonsLayout","Buttons Layout"],
                         #["","LauncherGo","Switch to LauncherGo"],
                         ["","Lima","GPU Driver Switch"],
                         ["","GateWay","Network Gateway Switch"]]

        start_x  = 0
        start_y  = 0

        
        sys.path.append(myvars.basepath)# add self as import path
        for i,v in enumerate(alist):
            li = ListItem()
            li._Parent = self
            li._PosX   = start_x
            li._PosY   = start_y + i*ListItem._Height
            li._Width  = Width
            li._Fonts["normal"] = self._ListFontObj

            if v[2] != "":
                li.Init(v[2])
            else:
                li.Init(v[1])
            
            #if v[1] == "Wifi" or v[1] == "Sound" or v[1] == "Brightness" or v[1] == "Storage" or v[1] == "Update" or v[1] == "About" or v[1] == "PowerOFF" or v[1] == "HelloWorld":
            if FileExists(myvars.basepath+"/"+ v[1]):
                li._LinkObj = __import__(v[1])
                init_cb   = getattr(li._LinkObj,"Init",None)
                if init_cb != None:
                    if callable(init_cb):
                        li._LinkObj.Init(self._Screen)
                
                self._MyList.append(li)

        self._Scroller = ListScroller()
        self._Scroller._Parent = self
        self._Scroller._PosX = self._Width - 10
        self._Scroller._PosY = 2
        self._Scroller.Init()

    def Click(self):
        cur_li = self._MyList[self._PsIndex]
        if cur_li._LinkObj != None:
            api_cb = getattr(cur_li._LinkObj,"API",None)
            if api_cb != None:
                if callable(api_cb):
                    cur_li._LinkObj.API(self._Screen)

        
    def KeyDown(self,event):
        if IsKeyMenuOrB(event.key):
            self.ReturnToUpLevelPage()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        
        if event.key == CurKeys["Up"]:
            self.ScrollUp()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        if event.key == CurKeys["Down"]:
            self.ScrollDown()
            self._Screen.Draw()
            self._Screen.SwapAndShow()
        

        if IsKeyStartOrA(event.key):
            self.Click()
            
    def Draw(self):
        self.ClearCanvas()

        if len(self._MyList) * ListItem._Height > self._Height:
            self._Ps._Width = self._Width - 11
            
            self._Ps.Draw()
            
            for i in self._MyList:
                i.Draw()
        
            self._Scroller.UpdateSize( len(self._MyList)*ListItem._Height, self._PsIndex*ListItem._Height)
            self._Scroller.Draw()
        else:
            self._Ps._Width = self._Width
            self._Ps.Draw()
            for i in self._MyList:
                i.Draw()

We’re getting much closer to the DEOT settings! ALMOST. The settings pages for Airplane and Storage still causes the system to freeze. The Sound and Brightness pages however work beautifully!

Other things that were bugging me were the shapes of certain objects, such as the scroll bar, text highlighter and OSD of the volume bars. These are basically all contained in /home/cpi/launcher/sys.py.UI/ . For the most part, I just substituted the files from the DEOT stock image.
The scroller is controlled by scroller.py
I couldn’t work out the text highlighter. I tried slider.py, to no avail.
The OSD of the volume bars is controller by above_all_patch.py, however substituting it in prevents the launcher from progressing.

Anyway, that’s where I’m at. This could prove to be useful information for someone else wanting to modify the interface. I can possibly provide a script to allow people to try installing this. But really, this is just an aesthetic thing that serves no purpose, and something that could later on down the track break detrimentally. I’m going to test it A LOT!
Here’s a link to the files I replaced, along with backups of the original ones in case you want to try things out for yourself. The files with the asterisk next to them are the problematic items.
https://drive.google.com/open?id=1gf97OddpWn9JjSfM7A3UhxtN0tvYnWvQ

For those of you in Europe, good news! @Wizz has just uploaded the two latest builds to his Europe based server. You can find them in the first post of this thread:

And just reiterating, They’re both practically the same. Just the 200319 version is a smaller image, and automatically will expand upon boot. It’s my first time modifying the OS as such, and although I have thoroughly tested it, can’t guarantee there won’t be any issues. There shouldn’t be, but that kind of thinking is a sure shot way to find out you’ve made a mistake.

So it seems that there are at least 3 cases of people experiencing flickering screens with the latest build.
The main things changes are:

  1. Kernel
  2. Debian 10 Buster
  3. Re-installed Lima/Mesa to restore usage on Buster

I’ve tested it on multiple cards, and on two Gameshell systems. Both of them are the R16 variant, but not the R16J.

Here are some discussions about it.

For now, @yong, @Veronica and anyone else on the know, is there anyway do specifically order a gameshell with a known R16J? I would love to have one in order to test things. Also if you have any idea on the proportions of the CPI with the R16 and R16J and I guess any other variants of the board? I would very much love to get my hands on one, specifically for testing features.

Here’s the initial thread.

I just want to replace or reinstall the Lima driver to the stcok image have. May be you can tell me the step, I will try it . My device mainboard is R16J

lima is included into the kernel, but you could reinstall mesa

latest arch got latest mesa & kernel got beta lima 1.1 if you want made a try

1 Like

hey So the scan disk I have is
SanDisk Ultra PLUS 128 GB micro SD XC V10 A1

1 Like

Yes one more here, I’m using a sandisk extreme 128gb :S

1 Like

Exactly my thinking. The kernel was upgraded to 5.4.20, using @shell’s config. That’s the one that’s set as the default kernel. The optional kernel is 5.5.90. Possibly rolling back to the stock 5.3.6 kernel, including the older driver could fix this.

That said, the kernel portion of the Lima driver has been (I believe) standardised since 5.2.
https://linux-sunxi.org/Mali
This makes me believe it’s not from the drivers used in the kernel, but something else.

The Mesa installed was using this method, mainly using your words of advice @r043v.
Does GameShell Actually Use FBTurbo? - #65 by javelinface
It’s using Mesa 20.0, ie this version:
Mesa 20.0 Released With Big Improvements For Intel, AMD Radeon Vulkan/OpenGL - Phoronix
This was installed over an updated Debian 10 Buster build.

I will certainly try downloading and updating to the beta Lima 1.1 drivers, but without a board that exhibits the symptoms, I have no idea if it would be effective or not.
Here’s some resources:

I’m wondering, has the flickering only started since the latest 200318/200319 builds? @guu - I remember talking to you about the reasons for including a uImage.5.4.6 on the stock 0.5 image boot partition, despite using 5.3.6. You said it was to do with incompatibility with some boards. Was this flickering the kind of incompatibility you were talking about?

@shell - while making your latest config for the 5.4.20 kernel (the one that I’m using by default) did you experience any problems re: flickering, going between changes? I’m finding it perfect, but again it sounds like there’s an inconsistency between boards. I believe the variants include either a R16 or R16J. You can check which one you have, looking at the physical board. It is writing on one of the larger chips.

A poll would be a good gauge on how people are experiencing the latest changes.

Describe your experience

  • I’m using a R16 board.
  • I’m using a R16J board.
  • I’m experiencing flickering at startup.
  • The flickering is only during the boot splash screens.
  • The flickering stays indefinitely.
  • The flickering stops after a minute.
  • I’m not experiencing flickering at all.
0 voters

@Larry_Covington - thanks for getting back. You’re using EXACTLY the same card as me. Can I confirm, you said in the other thread that everything worked fine on another card. Was this correct? And if so, what kind of card was it? This is exciting and baffling!

@1115 Thanks for letting me know which bird revision you’ve got. Ahh you have a R16J! Both of mine are just R16! I think we’re getting closer to solving the problem, meaning that I may need to release 2 versions. As mentioned above I don’t think we need to roll back FHD entire Mesa libraries, but just the kernel. Here are some instructions to return to the stock 5.3.6 kernel from a stock clockwork OS 0.5. This means you will lose the splash screen.
Download this: Kernels.zip - Google Drive
From memory there are two directories: one with the stock 0.5 kernel files, and one with the stock deot v1 kernel files.
Copy the contents of the stock 0.5 kernel files to /home/cpi/
Mount the boot partition with sudo mount /dev/mmcblk0p1 /boot
Move the files with

sudo mv uImage /boot
sudo mv sun8i-r16-clockworkpi-cpi3.dtb /boot
sudo mv sun8i-r16-clockworkpi-cpi3-hdmi.dtb /boot

Reboot with sudo reboot
Please let me know if it works! If it does, I will make a new build including this as a kernel option.

Just saying, if anyone wants to swap boards, ie your R16J for my R16, I would be happy to do so, for the furthering of development. You get a working board; I get something to test on to help the community. It’s a win win scenario! Let me know!

According to @Veronica , the R16 and R16J are meant to be the same; just different batches.

Perhaps they aren’t as similar as we thought?

@yong and @Veronica - is there any way you can help me out, specifically checking to see if a gameshell that I acquire from you is a R16J board?

The 5.4.20 kernel works fine for me.As you mentioned,the lima driver stabilized since kernel 5.2,and didn’t change much after that.So there may be some other reasons.
I have only one GameShell which has R16-J board,so I don’t know if R16 boards have issues or not,the shop who’s selling R16 chip told me that there’s no difference between R16 and R16-J processor,so maybe someone in Clockwork can tell is there any other difference between two boards.

1 Like

OK, it’s worked, when I replaced files in /boot with you give me those. But when I change the kernel with the OS builtin kernel change, all of those bug come back agaiin.

2 Likes

the only flicker i experienced was due to bad clock divider in sun4i_tcon.c file,
last kernel externalized divider value depending on hardware, in my kernel i force it to 6 who’s ok for gs

lima driver got some changes in past weeks, manually put it in current kernel source work just fine

1 Like

you may do what i done on arch, write some packages and keep system minimal and clean,
actually release a new os image on each upgrade is not a long term viable option

kernel, mesa, xorg, retroarch, cores, emulators, launcher, … each one could be released as a deb package

system on upgrade will properly and cleanly remove old files and set up new ones
also it could replace original debian packages with your custom one, meaning you will put your system in an update proof state with not any incompatible package installed

optionally to distribute them you could also make a debian ppa server like i was make for first compo, that’s not trivial but it’s not hard to do

for the /boot, just auto mount it, have a look at fstab, in arch it’s auto mounted so the system upgrade the kernel like any other packages without any manual intervention

2 Likes

100% Agreed! I’ve provided instructions on how to do each update I did, and provide a script for how to do it when possible, which although isn’t a simple package to install, is a start.

The problem for me was, knowing exactly what people have done when asking for help. Having things done in a ready made image was just easier, and let me know exactly the place where people started experiencing problems.

I could/should package the files into upgradeable packages, but like you said it’s not trivial, and I’d have to start again from scratch, using the 0.5 image as a base.

Maintaining a server to have current updated files for me is a fair bit of work, since it’s not something I usually do. I’d have to learn to do it essentially. If someone could assist in doing so, that would be great! Physically being able to do it for me as opposed to just providing information on how to do it.

I suppose if I ever have to go into quarantine/lockdown I could dedicate time to do it myself. But as it stands now, I’m just doing this as a pet project of my own to help out people.

Anyway, I’ve put up a link for and earlier build 200313, for people who are having troubles with the flickering screen. It’s in the first post of this thread.

I think you’re right. I might start a DEOT v3+ thread soon, instead focussing on being a package based install process, based on a stock 0.5 image. The only thing I wouldn’t be able to change is the first boot screen. But that isn’t the biggest of problems to deal with. Also the next biggest problem is the time it would take. It’s such a big balancing act between convenience and viability.

On another note, @r043v Thanks for the info re: the sun4i_tcon.c file, and the recent changes to the lima driver. I’ll definitely be trying it out. Again though, there’s no way to tell if what I’ve tested will work for everyone. I’m hoping that the flickering is the same thing that you’ve referenced here: [kernel] mainline support evolution

@1115 - Great to know it worked. It’s a Kernel only problem.
The scripts I included with the OS to change the kernel are just the same things you typed to get it working. By invoking them, you have returned the Kernel to the one that causes your screen to flicker. For now, just keep the old 5.3.6 Kernel. :slight_smile:

@shell - Thanks for getting back to me. Interesting to know that you’re using a R16-J board. I’m using two R-16 boards, and have no problems. It would have been clear cut if one board had problems and another didn’t. Perhaps it’s to do with some other component of the CPI 3.1 board? I’m curious to know what the image works perfectly fine on some boards, but not others. Hopefully I’ll get a reply from someone.

@Veronica - You mentioned previously that there is no difference between the R16 and R16-J boards. Is there possibly some other difference between batches produced of the clockwork 3.1 board that could be taken into account when compiling a kernel, in order for someone to write one that is more universally compatible? We are currently assuming that every gameshell is made equally.

For those experiencing problems with screen flickering, I shall reiterate these instructions provided above.

After doing this, don’t run the kernel changing script, unless you want to experience the flickering again.

For those of you not experiencing the flickering, please disregard this post. It appears to be a problem only affecting 1 in 3 users, according to a recent poll.

2 Likes

the stock image worked perfectly but its just the custom image that isn’t working and is flashing for some reason. it was the same card you have the SanDisk Ultra PLUS 128 GB micro SD XC V10 A1

Right. I think I misread your previous post, thinking you meant that one SD card you flashed the custom image to worked wonders. Could you clarify and confirm this?

I’ll start work on an emergency image update after work today, as well as provide a simple script to apply the fix.

It looks like it’s just the kernel that’s the problem, which is a relief troubleshooting wise.

Can I confirm whether or not this ended up fixing the screen flashing problems?

  • It fixed the flashing.
  • It didn’t fix the flashing.
  • There are other problems.
  • I don’t know how to follow the instructions.
0 voters

Update to resolve the above issues, and a few more changes.

DEOT v2+ Build 200323
23th of March 2020

Current changes:

  1. Resolved screen flicker issue.
  2. Provided updated kernel options.
  3. Changed sources.list to use a standardised location (Index of /debian) pointing to buster.
  4. Performed an apt-get upgrade.
  5. Replaced UI elements to allow DEOT Fonts.
  6. Restored DEOT Style Brightness and Sound volume settings pages.
  7. Removed Launcher Go settings page, and removed Launcher Go.
  8. Removed OP-1 and Canis Minor themes. (for now)
  9. Cleaned up Games directories, and moved DEOT Extras folder closer to utilities.
  10. Moved the xbindkeys scripts to their respective directories.
  11. u-boot-tools and flex installed for self kernel compiling.
More info

Flickering problem resolved. (Hopefully?) I have no way of testing if it’s fixed. If someone could report back regarding it, that would be great.

I’ve included a kernel option to change to 5.3.6. This is the stock kernel included with Clockwork OS 0.5. This will now be the default kernel upon booting up. This is the one that should solve your screen flickering issues.

Since 5.3.6 is @shell’s work, I have also provided 5.4.24 (replacing 5.4.21), which is the progression from their original work.

To avoid problems, I’ve removed the 5.5.90 kernel.

Get the updated utilities here:

08_Kernel.zip - Google Drive

(delete the existing 08_Kernel directory, and give the executable bit to the bash scripts as needed.)

Updated sources.list. The stock tsinghua tuna one doesn’t seem to work anymore. I think I just happened to be trying to use it during maintenance. (Archive-Update-in-Progress-nanomirrors.tuna.tsinghua.edu.cn)

Here is what I changed it to.


deb http://deb.debian.org/debian buster main contrib non-free

deb-src http://deb.debian.org/debian buster main contrib non-free

deb http://deb.debian.org/debian-security/ buster/updates main contrib non-free

deb-src http://deb.debian.org/debian-security/ buster/updates main contrib non-free

deb http://deb.debian.org/debian buster-updates main contrib non-free

deb-src http://deb.debian.org/debian buster-updates main contrib non-free

deb http://deb.debian.org/debian buster-backports main contrib non-free

deb-src http://deb.debian.org/debian buster-backports main contrib non-free

Performed an apt-get upgrade. Checked to make sure graphics drivers are functioning correctly.

Replaced UI elements: scroller.py, skin_manager.py, slider.py with stock DEOT versions.

Replaced Settings menu items: Brightness, Sound with stock DEOT versions, removed Launcher Go list item, and replaced modified list_page.py commenting out Launcher Go. Launcher Go also removed from home directory.

Unfortunately, the OP-1 and Canis Minor themes no longer behave due to the above changes. That’s something I’ll work on for the next update. For now, just use the DEOT theme.

Removed strangely redundant games directories. Eg, the old MAME, MGBA, PCSX etc. They have since changed to ARCADE, GBA, PSX to reflect the console name, as opposed to the emulator name. This was done a while ago, so I have no idea why or how they came back. Also, moved the DEOT Extras directory to be next to the Utils, since it made more sense to have the games together.

Moved the xbindkeys scripts to their respective directories. Just for the sake of cleaning up the user home directory. This applies to Samplerbox and SCUMMVM.

u-boot-tools and flex have been left installed, in case you want to compile your own kernels, and admittedly, so I don’t have to keep reinstalling it every time I flash a new card.

As usual, the links will be uploaded in a few hours to my google drive, then I’ll upload it to mega. When I have a bit of time, I’ll also make a zeroed empty space and auto expanding image.

1 Like

Hi! Thanks, the flikering is out, but, the image is broken :sob:

After the image of the DEOT start, there the announce of the happy hacking, but then it shows:

-bash: /tmp/X.log: Read-only file system

and on and on, and nothing after…then if I restart, just the start image then nothing.

1 Like

Hang on. It shouldn’t actually say happy hacking at all. The boot screen was changed to the DEOT custom splash at kernel compilation.
Was this using the new image I just uploaded, or the instruction to copy the older kernel to the boot partition? If it was the latter, that would explain why it would have the happy hacking screen.

It’s midnight now, so I unfortunately need to sleep. The clean image I uploaded is running fine on my gameshell. I’ll try and write the image to a spare SD to see how it goes tomorrow.

Thanks for letting me know! :slight_smile:

Ah. I think I know what you may have done. There is an extremely old 191122 build in the same google drive directory. It has the Happy Hacking boot splash screen. You may have downloaded this mistakenly. That one has an auto expand script and would be based on the initial stock 0.4 DEOT v1. I kept it there for historical reasons, in case anyone wanted to have an image based on a stock DEOT image. I probably should delete it.
Can you confirm that you have downloaded build 200323, before I check things and re-upload the image?