Linux Port
Pages: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Chris Gransden (337) 1207 posts |
Latest linux rom is now working RPi 4. Thanks. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Tristan M. (2946) 1039 posts |
ARMv8 patch only works for me if I do a fresh clone. No idea what’s up with that. I had to add DBUS_FATAL_WARNINGS=0 to work around some form of D-BUS error bug during kernel startup. OpenGL mouse is inverted on the Y axis. OpenGL screen looks like Win3.1 Hotdog Stand theme. Probably just due to default 8 bit colour depth. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
andym (447) 473 posts |
Is there an SD image for RISC OS Linux on a Raspberry Pi 4 available anywhere to download? |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
Download the Linux Binary and extract. Open folder Get the Debian dependencies listed on the site above.
It does start on the Raspberry Pi 4 but does not last long, it slows up then seizes up completely. OTOH no one else has reported anything of the sort. I will try another Pi. P.S. It looks as if the Pi’s default VNC server is a problem. I am editing this with the Linux port on the RPi4, something not possible previously. P.P.S Except that it seized up after that post. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
If you are trying to build the source, did you update the binary submodule using “git submodule update” or equivalent?
There is no reference to dbus in this project so it must be somewhere in SDL (or OpenGL if you tried that frontend). It does start on the Raspberry Pi 4 but does not last long, it slows up then seizes up completely. OTOH no one else has reported anything of the sort. I will try another Pi. I have observed the same when trying to use X over SSH over WiFi. The SDL event queue was being filled with requests to redraw the the RISC OS screen which was being done before send input to RISC OS. Fix uploaded. It is rather dumb and just updates the window every 50ms. I’ve tried using OS_ChangedBox to track screen changes but this does not work with NetSurf or Zap (see the ChangedBox branch). |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Tristan M. (2946) 1039 posts |
I think the D-BUS issue is an SDL bug. I tried git clean -f and git reset —hard Re above: The RISC OS VNC server works in the Linux port. I know I said a while back but I have a setup where it runs RO Linux with networking and its VNC server, and no frontend on the host. Ie no sdl or opengl. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
Thanks for that pointer. Using the latest binary build, 22-Aug-19, and not using NetSurf there have been no further freezes. Using the Raspberry Pi’s default VNC server was not part of the problem, the Linux port on the headless RPi4 is fine. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
nemo (145) 2546 posts |
You could add a PostRectangle filter that does a Easiest is to manipulate the changed box direct – ChangedBox returns the address of the block. It’s in internal coordinates. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
For high vector builds, memory is currently laid out as:
For low vector builds:
For the Linux port it is significantly rearranged:
Any reason not reorder the memory layout of other RISC OS builds to match the Linux port? It would save some conditionals in the source. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Rick Murray (539) 13840 posts |
Three reasons come to mind… Firstly, the location of zero page (&00000000 or &FFFF0000) is defined by hardware and is set up as one of the first things in the system startup. It’s where the processor vectors go, so it’s only up to the OS in as far as “here or here”. And secondly, our memory locations have evolved since early 32 bit RISC OS and work on a large number of existing ARM boards. I don’t see any justification for changing all of that to support the peculiarities of one specific port, especially considering that… In your memory layout, what exists between &C0000000 and &FFFFFFF? An entirely different operating system is what. It’s something that doesn’t exist on any native version of RISC OS. So in effect you’re asking if it’s okay for us to mask off a gigabyte (of a 4GiB address range)? Uh, no. Plus, it conflicts with the first point… |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeffrey Lee (213) 6048 posts |
As I mentioned in the other thread, moving the ROM and other fixed/kernel areas down low would make it difficult to dynamically support larger wimpslots in the future (e.g. CMOS setting for 512MB, 1GB, or 2GB wimpslot max size). Why don’t you retain the current ordering of areas, and just shift the high bits a bit lower down so they’re clear of the Linux areas? That should result in less conditionals, especially if KernelWS is changed to specify the addresses of the high areas as being relative to one another (e.g. using # directives).
The Security Extensions allow the processor vectors to be placed at any 32 byte aligned logical address. It might also be fairly straightforward to decouple the processor vectors from the zero page workspace – allowing e.g. zero page to be hardcoded to &21900000, but decide the processor vectors location at runtime depending on the capabilities of the CPU.
I’d assume that with Timothy’s proposal, in non-Linux builds we’d allow dynamic areas to use that spare space (plus the IO region, which isn’t listed at all). |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Tristan M. (2946) 1039 posts |
Just removing the y inversion in the mouse function in opengl.cpp fixed my problem. The OpenGL version now seems to work fine. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
The location of ZeroPage was an oversight in the question, my concern was with the ordering of Dynamic Areas < Static workspace < ROM versus Static workspace < ROM versus < Dynamic Areas.
Yes, that was what I meant.
That’s a good reason for it to stay as is.
|
||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeffrey Lee (213) 6048 posts |
But you’d be able to keep all the dynamic areas below the ROM/etc., right? DAs from &20000000 to &B9000000, fixed areas + ROM from &B9000000 to &C0000000, Linux+atomics from &C0000000 to &FFFFFFFF
Spaghetti assembler – yum.
Do you know how much space the Linux areas are going to take at compile time? If so, it sounds like it’s only the VDU 5 plotting that’s stopping you from shuffling the high bits down. And I think the nastyness could be removed from there by changing it to something like the following:
LDRB charbyte, [charptr], charmask, LSR #31 ADD charmask, charmask, charmask, LSL #8 That should cause bit 31 of charmask to toggle on & off for alternating scanlines when plotting double-height text, allowing it to be used to advance charptr. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
No. I have compressed the address space it bit, but the order will stay. Another problem is that the Wimp assumes that that RISC OS 5 ROM Images are 16MBytes long so if I put the RMA just above the ROM Task Manger fails to shut down the Desktop. I also found there is at least one crash triggered by placing the the RMA above 2GB. Microsoft Windows restricts 32-bit programs to 2GB unless flagged to avoid similar bugs, 2GB wimp slots could pose many problems. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Rick Murray (539) 13840 posts |
Could you not apply some restrictions? Just because a wimp slot could be 2GiB doesn’t mean that it can be. My Pi, for instance, only has 1GiB onboard… The original Pi and many RiscPC are rather less endowed. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Jeffrey Lee (213) 6048 posts |
Do you know how much space the Linux areas are going to take at compile time? Ah, that’s a shame. So the best compromise is likely to be to place the ROM+etc at 2GB, with dynamic areas on either side.
Yes, there’s at least one known issue related to that (FileCore storing flags in pointers, I think?). Bugs like that are one reason why the larger wimpslot would be an opt-in thing (the other reason being that, as Rick points out, not all devices have enough memory for the larger size to be useful) |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
I have just tracked down a bug that was causing the Wimp to crash with “SWI &A01005 not known” errors after certain lengthy sequences of wimp mode changes. Whilst I tried debugging, the bug vanished at the tick of midnight. Setting the previous days date in the !Alarm clock format restored the bug. I searched the ROM for “SWI &A01005” but didn’t find it, so I instrumented the SWI signal handler, the offending instruction was apparently at 208FA748:
Which has the right SWI number, but is not a SWI instruction. I modified the seccomp BPF filter to kill RISC OS on a SWI at 208FA748, that did not fire, however after careful examination I noticed that the return address had the wrong address, but the si_call_addr field had the corret address and the save r0 value was -ERESTARTSYS. Linux sets the saved program counter value to point to the SWI instruction if r0 = -ERESTARTNOINTR (-513) or if the SA_RESTART flag is set and r0 = -ERESTARTSYS (-512). This is contrary to the documentation:
I have uploaded a workaround, and will file a bug report against Linux. Let this be a lesson that extending SWIs with magic numbers risks creating hard to find bugs. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
There appears to be a snag. Try a desktop drag. The previous version, 22Aug19, was OK. This is on a Raspberry Pi 4. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
I as far I know it’s always been broken in 256 colour modes. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
Thanks, that was it. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
And it is because the InverseTable module was missing, I have uploaded fixed source. |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
Unfortunately I have never been able to build from source. git clone https://github.com/TimothyEBaldwin/RISC_OS_Dev.git cd RISC_OS_Dev git checkout Linux make The build hangs in the terminal. Obey: X /Apps.!WinEdit.!Boot Obey: Obey: /Env.ROOL.Linux Error: Syntax: *Type [-File] <filename> [-TabExpand] (Error number &DC) ^Z [2]+ Stopped make That was resolved by removing the trailing ,feb from the Linux component file. But then :- 84 331AA514 20020B14 RamFS Obey: srcbuild -s export_hdrs export_libs resources rom install_rom join Error: File 'srcbuild' not found (Error number &D6) This is where I got stuck previously. The allegedly missing file is available twice at |
||||||||||||||||||||||||||||||||||||||||||||||||||||
Timothy Baldwin (184) 242 posts |
It would appear that filetype extensions are not being recognised, of which they are many.
That is an old version from December 2017, I suggest you upgrade it:
Also what filing system and Linux version are you trying? |
||||||||||||||||||||||||||||||||||||||||||||||||||||
David Pitt (3386) 1248 posts |
I have updated to the latest git commands. git fetch git checkout Linux2 git pull --rebase git submodule init git submodule update A build has resulted in the same filetype extension and ‘srcbuild’ not found errors.
This is on a Raspberry Pi 4 running on a micro SD card, where gparted reports the root partition as ext4. One oddity found earlier was that some filetyping had been lost on copying, under Raspbian, a working HardDrive4 folder to a new binary build. Odd indeed! |
Pages: 1 ... 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20