Realtime Kernel (full preemptive) for aarch64 on C2

Post Reply
chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

Image

Kernel sources are from HK git. Patches as usual from https://www.kernel.org/pub/linux/kernel/projects/rt/
Quae volumus, credimus libenter.

Tpimp
Posts: 355
Joined: Thu Jul 16, 2015 5:57 am
languages_spoken: english
ODROIDs: U3, C1+, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by Tpimp »

Awesome!

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

Tpimp wrote:Awesome!
Like your Qt5 image for C1. Thanx.
Will do some testing today with the rt kernel. If tests are o.k. the procedure to build your own kernel will be published here soon. I'm not having plans yet to publish any binaries or images. As far as I know some guys from ArchLinux have adapted my older rt sources (https://github.com/chlorisdroid/linux-r ... 10.80-rt88) for the C1+ to build their images.

Patching the sources took me about half an hour. Getting a nice and working kernel config file took a little more time. More info in some hours, I hope.

First test were successful. Kernel is running stable. Tested so far:
Audio software (midi: Yoshimi, Zynaddsubfx, audio: Ardour4). Audio playback works. Audio recording still tested.
First test with arecord and Zoom H4 was not successful. Audacity and USB audio dongle works fine.

But: The hardware is running smoothly. Some more software tweaks will give us a perfect little audio daw with midi support.
HK did a really good job with the Odroid-C2. This is more than I expected to get working in this early days keeping in mind that the C2 has still beta status. Thanks.
Quae volumus, credimus libenter.

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

Enabled some more debug messaging in the kernel:

Code: Select all

...
[  103.532983] ALSA sound/core/pcm_lib.c:352 BUG: pcmC1D0p:0, pos = 1073414144,4
[  103.537865] ALSA sound/core/pcm_lib.c:352 BUG: pcmC1D0p:0, pos = 1073414368,4
[  103.548215] ALSA sound/core/pcm_lib.c:352 BUG: pcmC1D0p:0, pos = 1073414816,4
...
Starting jackd gives always->

Code: Select all

[  297.174277] Unhandled fault: alignment fault (0x92000021) at 0x0000007fb20d4e
Starting jackd with

Code: Select all

jackd -v -T -d dummy
gives me

Code: Select all

Bus error
So I'll have to dig here what's going wrong.
Quae volumus, credimus libenter.

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

Midi support works after some heavy tweaks ->
https://blog.georgmill.de/2016/02/11/od ... i-support/ :D
Quae volumus, credimus libenter.

User avatar
odroid
Site Admin
Posts: 34947
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 960 times
Been thanked: 775 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by odroid »

Great job.
The MIDI sound from the HiFi-Shield seems to be very nice.
BTW, did you solved the jackd issue on ALSA? How did you that?

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

The sound is GREAT! As you can see in the video, only a very cheap 10 EUR speaker is attached to it and that even sounds good. If you attach it to a high quality amp the sound is perfect ;-)

Yesterday I contacted one of the core developers of the jack dev team. He sent me a patch which I applied but that didn't help. So I just gave it up for now because it's too time consuming for me.
The zynaddsubfx also runs on alsa, with a lot of restrictions for connecting audio devices (or to be exact: it is very frustrating to make all the desired connections by writing config files for all this.)

So, the G-Piano is for children and children like the sounds, not a pro audio system. I saw that you updated the sources and fixed some issues with the i2c bus. Will test that as soon as possible.
Thanks.
Quae volumus, credimus libenter.

User avatar
odroid
Site Admin
Posts: 34947
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 960 times
Been thanked: 775 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by odroid »

Yes, we slightly polished the I2C driver.

Let's look into the jackd issue together when we have spare time.
Please post a link of the patch as a reminder. ;)

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

the patch does simply test the architecture jackd is build on. It adds

Code: Select all

defined(__aarch64__) 
to

Code: Select all

common/jack/systemdeps.h
But as I said already, this doesn't help to get jack runming.
Quae volumus, credimus libenter.

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

Is there some procedure to build this RT kernel for C2 available somewhere? I’d like to give it a try.

Thx

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

@chlorisdroid could you share you odroidc2_defconfig for RT kernel for testing.

User avatar
odroid
Site Admin
Posts: 34947
Joined: Fri Feb 22, 2013 11:14 pm
languages_spoken: English, Korean, Japanese
ODROIDs: ODROID
Has thanked: 960 times
Been thanked: 775 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by odroid »

We also need to test the preemptive feature.
Please share the kernel config file you used.

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Very little support for arm64 bit, some patches need to be updated. But still not success.

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

So far here is what I’ve done:
1- download a clean 3.14.y kernel (looking at the main Makefile it seems to be the 3.14.29 kernel)
2- download the PREEMPT_RT patches patches-3.14.29-rt26
3- apply the patches
4- manually apply patches in error
todo: i’ll prepare asap a list of the patches I had to apply manually
5- patch arch/arm64/Kconfig

Code: Select all

	after line 58 add
		select IRQ_FORCED_THREADING
6- copy the odroidc2_rt_defconfig to .config in the kernel sources repository
Some features enabled in odroidc2_defconfig have been disabled because of
compiling error (I didn’t make note of everything so I don’t remember all
the disabled features. I remember that I had to disable netfilter, BTW I get the same error when I compile the “stock” kernel)
7- my compile error fixes:

Code: Select all

	drivers/amlogic/amports/tsdemux.c:1075
	  spinlock_t name __cacheline_aligned_in_smp = __SPIN_LOCK_UNLOCKED(name)
        	          ^^^^^^^^^^ ILLEGAL FOR A LOCAL VARIABLE
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);
               	^^^^^^^^^^ IDEM DEFINE_SPINLOCK() BUT WITHOUT aligned attribute

	drivers/amlogic/amports/tsdemux.c:1101
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);

	drivers/amlogic/amports/psparser.c:1061
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);

	drivers/amlogic/amports/psparser.c:1089
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);

	drivers/amlogic/amports/esparser.c:469
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);

	drivers/amlogic/amports/esparser.c:700
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);

	drivers/amlogic/amports/rmparser.c:310
		DEFINE_SPINLOCK(lock);
	->	__DEFINE_SPINLOCK(lock);
7- make -j2 Image dtbs modules

The compile logs show some warnings such as “passing argument from incompatible pointer type”, “discards const qualifier”, “initialization from incompatible pointer type”, “cast to pointer from integer of different size” (typical of a porting from 32bits to 64bits…)

The compile ends up with a vmlinux link error:

Code: Select all

kernel/built-in.o: In function `arch_irq_work_raise':
/mnt/hgfs/Linux/Linux-ODROID-C2/linux-3.14.y-rt26/kernel/irq_work.c:63: multiple definition of `arch_irq_work_raise'
arch/arm64/kernel/built-in.o:/mnt/hgfs/Linux/Linux-ODROID-C2/linux-3.14.y-rt26/arch/arm64/kernel/smp.c:461: first defined here
make: *** [vmlinux] Error 1
`arch_irq_work_raise' is defined twice with a different body. Using the non rt defconfig the function is qualified with the keyword __weak in irq_work.c. This qualifier is not used when the option PREEMPT_RT_FULL is set, hence the doubly defined error (2 “strong” functions with identical signatures). At this point I don’t know what should be the fix, I mean which version of `arch_irq_work_raise' to use. I’d tend to choose the arch/arm64/kernel/smp.c version but not sure at all.
Last edited by philw38 on Thu Mar 31, 2016 9:01 pm, edited 1 time in total.

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

Oooops, sorry, attached the rt config I use (.zip file, the forum doesn’t accept a file with no extension).
Attachments
odroidc2_rt_defconfig.zip
(24.83 KiB) Downloaded 134 times

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

@philw38.
Thanks you very much I got my Odroid C2 to boot with these inputs.
I have some more changes, I will share it.

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Hi All,
Here are the steps I followed to build rt kernel.
After downloading the patch file for RT kernel https://www.kernel.org/pub/linux/kernel ... t26.tar.gz
After extracting the patch, their is series file which contained the list of patches.
series-git is the list of patches that get applied with no issues.

So I append this file to apply these patches. As pointed by @philw38 there were few conflicts with these patches.
Initially I blocked the changes and later on replied few of the patches manually. Attach is the script for this.

Code: Select all

$ git clone --depth 1 https://github.com/hardkernel/linux.git -b odroidc2-3.14.y 
$ cd linux
$ git branch odroidc2-3.14.y-rt
$ git checkout odroidc2-3.14.y-rt
Now apply the original RT patches for the kernel using the series-git

$linux# ./series-git

Code: Select all

Applying: rt,sched,numa: Move task_numa_free() to __put_task_struct(), which -rt offloads
Applying: sched: Init idle->on_rq in init_idle()
Applying: sched: Add better debug output for might_sleep()
Applying: sched: Adjust p->sched_reset_on_fork when nothing else changes
Applying: sched: Queue RT tasks to head when prio drops
Applying: sched: Consider pi boosting in setscheduler()
Applying: sched: Fix broken setscheduler()
Applying: early-printk-consolidate.patch
Applying: sparc: provide EARLY_PRINTK for SPARC
Applying: sparc64: use generic rwsem spinlocks rt
Applying: kernel/SRCU: provide a static initializer
Applying: block: Shorten interrupt disabled regions
Applying: timekeeping-split-jiffies-lock.patch
Applying: vtime-split-lock-and-seqcount.patch
Applying: mips-enable-interrupts-in-signal.patch
Applying: tracing: Account for preempt off in preempt_schedule()
Applying: signal-revert-ptrace-preempt-magic.patch
Applying: ptrace: fix ptrace vs tasklist_lock race
Applying: preempt-rt: Convert arm boot_lock to raw
Applying: posix-timers: Prevent broadcast signals
Applying: signals: Allow rt tasks to cache one sigqueue struct
Applying: signal/x86: Delay calling signals in atomic
Applying: drivers: random: Reduce preempt disabled region
Applying: ARM: AT91: PIT: Remove irq handler when clock event is unused
Applying: clocksource: TCLIB: Allow higher clock rates for clock events
Applying: drivers/net: Use disable_irq_nosync() in 8139too
Applying: mm: Prepare decoupling the page fault disabling logic
Applying: mm: raw_pagefault_disable
Applying: mm: Remove preempt count from pagefault disable/enable
Applying: suspend: Prevent might sleep splats
Applying: mm-page-alloc-use-list-last-entry.patch
Applying: rwsem-inlcude-fix.patch
Applying: sysctl-include-fix.patch
Applying: net-flip-lock-dep-thingy.patch
Applying: net: sched: dev_deactivate_many(): use msleep(1) instead of yield() to wait for outstanding qdisc_run calls
Applying: softirq-thread-do-softirq.patch
Applying: softirq-split-out-code.patch
Applying: x86: Do not unmask io_apic when interrupt is in progress
Applying: x86: Do not disable preemption in int3 on 32bit
Applying: pci: Use __wake_up_all_locked pci_unblock_user_cfg_access()
Applying: latency-hist.patch
Applying: hwlatdetect.patch
Applying: hwlat-detector: Update hwlat_detector to add outer loop detection
Applying: hwlat-detector: Use trace_clock_local if available
Applying: hwlat-detector: Use thread instead of stop machine
Applying: hwlat-detector: Don't ignore threshold module parameter
Applying: rt-preempt-base-config.patch
Applying: kconfig-disable-a-few-options-rt.patch
Applying: kconfig-preempt-rt-full.patch
Applying: bug: BUG_ON/WARN_ON variants dependend on RT/!RT
Applying: rt: local_irq_* variants depending on RT/!RT
Applying: preempt: Provide preempt_*_(no)rt variants
Applying: ata: Do not disable interrupts in ide code for preempt-rt
Applying: ide: Do not disable interrupts for PREEMPT-RT
Applying: infiniband: Mellanox IB driver patch use _nort() primitives
Applying: input: gameport: Do not disable interrupts on PREEMPT_RT
Applying: core: Do not disable interrupts on RT in kernel/users.c
Applying: core: Do not disable interrupts on RT in res_counter.c
Applying: mm: scatterlist dont disable irqs on RT
Applying: signal-fix-up-rcu-wreckage.patch
Applying: net-wireless-warn-nort.patch
Applying: mm: Replace cgroup_page bit spinlock
Applying: buffer_head: Replace bh_uptodate_lock for -rt
Applying: fs: jbd/jbd2: Make state lock and journal head lock rt safe
Applying: list_bl.h: make list head locking RT safe
Applying: genirq: Disable DEBUG_SHIRQ for rt
Applying: genirq: disable irqpoll on -rt
Applying: genirq-force-threading.patch
Applying: genirq: do not invoke the affinity callback via a workqueue
Applying: drivers/net: fix livelock issues
Applying: drivers/net: vortex fix locking issues
Applying: drivers: net: gianfar: Make RT aware
Applying: net: gianfar: do not disable interrupts
Applying: net: gianfar: do not try to cleanup TX packets if they are not done
Applying: USB: Fix the mouse problem when copying large amounts of data
Applying: local-var.patch
Applying: rt-local-irq-lock.patch
Applying: use local spin_locks in local_lock
Applying: cpu-rt-variants.patch
Applying: mm-page-alloc-fix.patch
Applying: mm: convert swap to percpu locked
Applying: mm: make vmstat -rt aware
Applying: ARM: Initialize ptl->lock for vector page
Applying: mm: bounce: Use local_irq_save_nort
Applying: mm: Allow only slub on RT
Applying: mm: Enable SLUB for RT
Applying: slub: Enable irqs for __GFP_WAIT
Applying: slub: delay ctor until the object is requested
Applying: mm/memcontrol: Don't call schedule_work_on in preemption disabled context
Applying: radix-tree-rt-aware.patch
Applying: panic: skip get_random_bytes for RT_FULL in init_oops_id
Applying: ipc: Make the ipc code -rt aware
Applying: ipc/mqueue: Add a critical section to avoid a deadlock
Applying: relay: fix timer madness
Applying: timers: prepare for full preemption
Applying: timers: prepare for full preemption improve
Applying: timers: preempt-rt support
Applying: timer: delay waking softirqs from the jiffy tick
Applying: timers: Avoid the switch timers base set to NULL trick on RT
Applying: hrtimers: prepare full preemption
Applying: hrtimer: fixup hrtimer callback changes for preempt-rt
Applying: timer-fd: Prevent live lock
Applying: hrtimer: Raise softirq if hrtimer irq stalled
Applying: hrtimer: Move schedule_work call to helper thread
Applying: posix-timers: thread posix-cpu-timers on -rt
Applying: posix-timers: Shorten posix_cpu_timers/<CPU> kernel thread names
Applying: posix-timers: Avoid wakeups when no timers are active
Applying: sched-limit-nr-migrate.patch
Applying: sched-mmdrop-delayed.patch
Applying: sched-rt-mutex-wakeup.patch
Applying: sched-might-sleep-do-not-account-rcu-depth.patch
Applying: sched-cond-resched.patch
Applying: cond-resched-softirq-fix.patch
Applying: cond-resched-lock-rt-tweak.patch
Applying: sched-disable-ttwu-queue.patch
Applying: sched: Disable CONFIG_RT_GROUP_SCHED on RT
Applying: sched: ttwu: Return success when only changing the saved_state value
Applying: sched/workqueue: Only wake up idle workers if not blocked on sleeping spin lock
Applying: stop_machine: convert stop_machine_run() to PREEMPT_RT
Applying: stomp-machine-raw-lock.patch
Applying: hotplug: Lightweight get online cpus
Applying: hotplug: sync_unplug: No " " in task name
Applying: hotplug: Reread hotplug_pcp on pin_current_cpu() retry
Applying: sched-migrate-disable.patch
Applying: hotplug-use-migrate-disable.patch
Applying: ftrace-migrate-disable-tracing.patch
Applying: tracing: Show padding as unsigned short
Applying: migrate-disable-rt-variant.patch
Applying: sched: Optimize migrate_disable
Applying: sched: Generic migrate_disable
Applying: sched, rt: Fix migrate_enable() thinko
Applying: sched: teach migrate_disable about atomic contexts
Applying: sched: Postpone actual migration disalbe to schedule
Applying: allow preemption in recursive migrate_disable call
Applying: sched: Do not compare cpu masks in scheduler
Applying: sched: Have migrate_disable ignore bounded threads
Applying: sched: dont calculate hweight in update_migrate_disable()
Applying: sched-clear-pf-thread-bound-on-fallback-rq.patch
Applying: tracing: use migrate_disable() to prevent beeing pushed off the cpu
Applying: net-netif_rx_ni-migrate-disable.patch
Applying: softirq: Sanitize softirq pending for NOHZ/RT
Applying: lockdep-rt.patch
Applying: mutex-no-spin-on-rt.patch
Applying: local-vars-migrate-disable.patch
Applying: md: raid5: Make raid5_percpu handling RT aware
Applying: rtmutex-futex-prepare-rt.patch
Applying: futex: Fix bug on when a requeued RT task times out
Applying: futex: Ensure lock/unlock symetry versus pi_lock and hash bucket lock
Applying: rtmutex-lock-killable.patch
Applying: rt-mutex-add-sleeping-spinlocks-support.patch
Applying: spinlock-types-separate-raw.patch
Applying: rtmutex-avoid-include-hell.patch
Applying: rt-add-rt-spinlocks.patch
Applying: rt-add-rt-to-mutex-headers.patch
Applying: rwsem-add-rt-variant.patch
Applying: rt: Add the preempt-rt lock replacement APIs
Applying: rwsem-rt: Do not allow readers to nest
Applying: condition migration_disable on lock acquisition
Applying: migrate_disable pushd down in atomic_dec_and_spin_lock
Applying: Revert "migrate_disable pushd down in atomic_dec_and_spin_lock"
Applying: migrate_disable pushd down in rt_spin_trylock_irqsave
Applying: migrate_disable pushd down in rt_write_trylock_irqsave
Applying: write_lock migrate_disable pushdown to rt_write_lock
Applying: read_lock migrate_disable pushdown to rt_read_lock
Applying: rwlock: disable migration before taking a lock
Applying: rt: Cleanup of unnecessary do while 0 in read/write _lock()
Applying: percpu-rwsem: compile fix
Applying: rtmutex: add a first shot of ww_mutex
Applying: bad return value in __mutex_lock_check_stamp
Applying: rwlocks: Fix section mismatch
Applying: timer-handle-idle-trylock-in-get-next-timer-irq.patch
Applying: timers: do not raise softirq unconditionally
Applying: timer: Raise softirq if there's irq_work
Applying: timer/rt: Always raise the softirq if there's irq_work to be done
Applying: rtmutex: use a trylock for waiter lock in trylock
Applying: timer: do not spin_trylock() on UP
Applying: rcu: Frob softirq test
Applying: rcu: Merge RCU-bh into RCU-preempt
Applying: rcu-more-fallout.patch
Applying: lglocks-rt.patch
Applying: stomp-machine: create lg_global_trylock_relax() primitive
Applying: stomp-machine: use lg_global_trylock_relax() to dead with stop_cpus_lock lglock
Applying: serial: 8250: Clean up the locking for -rt
Applying: drivers-tty-fix-omap-lock-crap.patch
Applying: drivers-tty-pl011-irq-disable-madness.patch
Applying: rt: Improve the serial console PASS_LIMIT
Applying: fs: namespace preemption fix
Applying: mm: Protect activate_mm() by preempt_[disable&enable]_rt()
Applying: fs-block-rt-support.patch
Applying: fs: ntfs: disable interrupt only on !RT
Applying: fs, jbd: pull your plug when waiting for space
Applying: fs: jbd2: pull your plug when waiting for space
Applying: x86: Convert mce timer to hrtimer
Applying: x86/mce: Defer mce wakeups to threads for PREEMPT_RT
Applying: x86: stackprotector: Avoid random pool on rt
Applying: x86: Use generic rwsem_spinlocks on -rt
Applying: epoll.patch
Applying: mm-vmalloc.patch
Applying: block: mq: use cpu_light()
Applying: rt: Introduce cpu_chill()
Applying: rt: Make cpu_chill() use hrtimer instead of msleep()
Applying: kernel/hrtimer: be non-freezeable in cpu_chill()
Applying: cpu_chill: Add a UNINTERRUPTIBLE hrtimer_nanosleep
Applying: blk-mq: revert raw locks, post pone notifier to POST_DEAD
Applying: block: Use cpu_chill() for retry loops
Applying: fs: dcache: Use cpu_chill() in trylock loops
Applying: net: Use cpu_chill() instead of cpu_relax()
Applying: workqueue: Use normal rcu
Applying: Use local irq lock instead of irq disable regions
Applying: workqueue vs ata-piix livelock fixup
Applying: sched: Distangle worker accounting from rqlock
Applying: idr: Use local lock instead of preempt enable/disable
Applying: percpu_ida: use locklocks
Applying: debugobjects-rt.patch
Applying: jump-label-rt.patch
Applying: use skbufhead with raw lock
Applying: x86-no-perf-irq-work-rt.patch
Applying: irq_work: allow certain work in hard irq context
Applying: printk-rt-aware.patch
Applying: HACK: printk: drop the logbuf_lock more often
Applying: Powerpc: Use generic rwsem on RT
Applying: power-disable-highmem-on-rt.patch
Applying: arm-disable-highmem-on-rt.patch
Applying: ARM: at91: tclib: Default to tclib timer for RT
Applying: arm/unwind: use a raw_spin_lock
Applying: mips-disable-highmem-on-rt.patch
Applying: net: Avoid livelock in net_tx_action() on RT
Applying: net: sysrq via icmp
Applying: kgdb/serial: Short term workaround
Applying: add /sys/kernel/realtime entry
Applying: arm/highmem: flush tlb on unmap
Applying: arm-enable-highmem-for-rt.patch
Applying: ipc/sem: Rework semaphore wakeups
Applying: x86-kvm-require-const-tsc-for-rt.patch
Applying: scsi-fcoe-rt-aware.patch
Applying: x86: crypto: Reduce preempt disabled regions
Applying: crypto: Reduce preempt disabled regions, more algos
Applying: dm: Make rt aware
Applying: acpi/rt: Convert acpi_gbl_hardware lock back to a raw_spinlock_t
Applying: cpumask: Disable CONFIG_CPUMASK_OFFSTACK for RT
Applying: random: Make it work on rt
Applying: seqlock: Prevent rt starvation
Applying: seqlock: consolidate spin_lock/unlock waiting with spin_unlock_wait
Applying: cpu: Make hotplug.lock a "sleeping" spinlock on RT
Applying: cpu/rt: Rework cpu down for PREEMPT_RT
Applying: cpu hotplug: Document why PREEMPT_RT uses a spinlock
Applying: kernel/cpu: fix cpu down problem if kthread's cpu is going down
Applying: kernel/hotplug: restore original cpu mask oncpu/down
Applying: cpu_down: move migrate_enable() back
Applying: scsi: qla2xxx: Use local_irq_save_nort() in qla2x00_poll
Applying: net,RT:REmove preemption disabling in netif_rx()
Applying: net: Use get_cpu_light() in ip_send_unicast_reply()
Applying: net: ip_send_unicast_reply: add missing local serialization
Applying: net: netfilter: Serialize xt_write_recseq sections on RT
Applying: net: Use local_bh_disable in netif_rx_ni()
Applying: net: Add a mutex around devnet_rename_seq
Applying: crypto: Convert crypto notifier chain to SRCU
Applying: lockdep: Selftest: Only do hardirq context test for raw spinlock
Applying: rt: rwsem/rwlock: lockdep annotations
Applying: perf: Make swevent hrtimer run in irq instead of softirq
Applying: softirq: Check preemption after reenabling interrupts
Applying: rcu: Disable RCU_FAST_NO_HZ on RT
Applying: rcu: Eliminate softirq processing from rcutree
Applying: rcu: make RCU_BOOST default on RT
Applying: x86-preempt-lazy.patch
Applying: arm-preempt-lazy-support.patch
Applying: powerpc-preempt-lazy-support.patch
Applying: leds: trigger: disable CPU trigger on -RT
Applying: i2c/omap: drop the lock hard irq context
Applying: mmci: Remove bogus local_irq_save()
Applying: gpu/i915: don't open code these things
Applying: drm/i915: drop trace_i915_gem_ring_dispatch on rt
Applying: wait.h: include atomic.h
Applying: wait-simple: Simple waitqueue implementation
Applying: wait-simple: Rework for use with completions
Applying: simple-wait: rename and export the equivalent of waitqueue_active()
Applying: kernel/treercu: use a simple waitqueue
Applying: rcu-more-swait-conversions.patch
Applying: completion: Use simple wait queues
Applying: a few open coded completions
Applying: rt,ntp: Move call to schedule_delayed_work() to helper thread
Applying: md: disable bcache
Applying: disable preempt lazy on x86-64
Applying: sched: Do not clear PF_NO_SETAFFINITY flag in select_fallback_rq()
Applying: workqueue: Prevent deadlock/stall on RT
Applying: Linux 3.14.29-rt26 REBASE
After this series is downloaded you need the apply the manually applied patches from the rtpatches.tar.gz
Note Please double check if the applied patches matches the original series.

After this you can build the kernel and install the kernel. using odroidc2rt_defconfig

Code: Select all

make odroidc2rt_defconfig
make -j2 dtbs Image modules
Install the kernel.

Code: Select all

cp -v arch/arm64/boot/dts/meson64_odroidc2.dtb /media/boot/meson64_odroidc2.dtb
cp -v arch/arm64/boot/Image /media/boot/Image
If their is some better approach please let me know. I feel the Arm64 support is minimal for this -rt kernel
Attachments
rtpatches.tar.gz
rtpatches manually applied.
(66.84 KiB) Downloaded 150 times
series-git.zip
series.git
(6.12 KiB) Downloaded 123 times
Last edited by moon.linux on Mon Apr 04, 2016 5:19 pm, edited 1 time in total.

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

@moon.linux

Thanks a lot for sharing this work.

I have 2 questions:
1- what are the git command “b” and “o”? I suppose that “b” is a shortcut for “branch”, but not sure. And no idea of what is the command “o”.
2- you are using “odroidc2rt_defconfig”. Is it your own config file? Or is it a renaming of my “odroidc2_rt_defconfig”?

Thanks

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Opps: -b -o these are shortcut for creating branch and checkouts. I have edited the above.
I usually update git shortcut in ~/.gitconfig file.
odroidc2rt_defconfig config option just like your config file missing AUFS_FS and AM_DVB.

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

Thank you, I’ll give a try to this procedure asap.

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

When I am trying to compile kernel on RT kernel their is a panic.
Attach is the logs, has any body observed the issue on Odroid C2 RT kernel.
Attachments
rt-kernalpanic.txt
rt-kernelpanic
(7.54 KiB) Downloaded 145 times

philw38
Posts: 32
Joined: Thu Mar 10, 2016 4:53 am
languages_spoken: english
ODROIDs: C2, XU4
Has thanked: 0
Been thanked: 0
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by philw38 »

@moon.linux

I cannot test this RT kernel because I’m waiting for the next C2 batch to get my hand on this board :(

I’ve run your procedure to compile the RT kernel and I get some compile errors that you don’t mention in your posts. I’ve attached the compiler logs if you have the time to look at it. The errors are more or less the same than those I get after my original attempt to compile the RT kernel.

I’ve found a geek command on the web that I used to apply all the manual patches in one go:

http://stackoverflow.com/questions/2460 ... nux-kernel

I reproduce it here if it can help.

Code: Select all

for p in `ls -v ../moonlinux_rtpatches/*.patch`; do patch -p1 < $p; done
The patches are in the folder “moonlinux_rtpatches” which is located at the same level than the folder “linux” which is where the sources have been cloned.
Attachments
compile-odroidc2-moonlinux-rt26.log.zip
(27.85 KiB) Downloaded 130 times

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Thanks for you input. But some time on patch merge failure we get .rej file which is become tedious to mapped.
Any way you can follow any process as long as you get all the patches merger in correct order. :D

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

arm64 support is minimal for full feature working of RT kernel.

From the following patch : 0294-arm-preempt-lazy-support.patch.patch
After comparing the arm and arm64 I came to conclusion that we need to enable following config.

HAVE_PREEMPT_LAZY and CONFIG_PREEMPT_LAZY. Core of the preempt is missing in arm64.
CONFIG_RCU_BOOST

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Some more patches were missing into the RT kernel, attach are the relevant patches to FIX the Real time kernel.
Once the rt patches are applied , try to resolve the .rej changes before build.

https://www.kernel.org/pub/linux/kernel ... 8.patch.gz

root@odroid64:/usr/src/arm64rt# uname -a
Linux odroid64 3.14.65-rt68-xhkc2rt #1 SMP Wed Aug 10 08:16:13 EDT 2016 aarch64 aarch64 aarch64 GNU/Linux
root@odroid64:/usr/src/arm64rt#


Edited: Updated the config option with CONFIG_PREEMPT_RT_FULL.

Small patch to fix the compilation error.

Code: Select all

odroid@odroid64:/usr/src/odroidc2-kr-devel-rt$ git diff drivers/amlogic/
diff --git a/drivers/amlogic/amports/esparser.c b/drivers/amlogic/amports/esparser.c
index f3933ad..4368e6e 100644
--- a/drivers/amlogic/amports/esparser.c
+++ b/drivers/amlogic/amports/esparser.c
@@ -466,7 +466,7 @@ Err_1:
 void esparser_audio_reset(struct stream_buf_s *buf)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);

        spin_lock_irqsave(&lock, flags);

@@ -697,7 +697,7 @@ ssize_t esparser_write(struct file *file,
 void esparser_sub_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);
        u32 parser_sub_start_ptr;
        u32 parser_sub_end_ptr;

diff --git a/drivers/amlogic/amports/psparser.c b/drivers/amlogic/amports/psparser.c
index a794706..d536322 100644
--- a/drivers/amlogic/amports/psparser.c
+++ b/drivers/amlogic/amports/psparser.c
@@ -1058,7 +1058,7 @@ void psparser_change_sid(unsigned int sid)
 void psparser_audio_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);

        spin_lock_irqsave(&lock, flags);

@@ -1086,7 +1086,7 @@ void psparser_audio_reset(void)
 void psparser_sub_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);
        u32 parser_sub_start_ptr;
        u32 parser_sub_end_ptr;

diff --git a/drivers/amlogic/amports/rmparser.c b/drivers/amlogic/amports/rmparser.c
index 1ed65e5..0ea0800 100644
--- a/drivers/amlogic/amports/rmparser.c
+++ b/drivers/amlogic/amports/rmparser.c
@@ -307,7 +307,7 @@ void rm_set_vasid(u32 vid, u32 aid)
 void rm_audio_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);

        spin_lock_irqsave(&lock, flags);

diff --git a/drivers/amlogic/amports/tsdemux.c b/drivers/amlogic/amports/tsdemux.c
index deaf7e4..3cf9d9b 100644
--- a/drivers/amlogic/amports/tsdemux.c
+++ b/drivers/amlogic/amports/tsdemux.c
@@ -67,7 +67,7 @@ static int demux_skipbyte;
 static struct tsdemux_ops *demux_ops;
 static irq_handler_t demux_handler;
 static void *demux_data;
-static DEFINE_SPINLOCK(demux_ops_lock);
+static __DEFINE_SPINLOCK(demux_ops_lock);

 void tsdemux_set_ops(struct tsdemux_ops *ops)
 {
@@ -1072,7 +1072,7 @@ void tsdemux_change_sid(unsigned int sid)
 void tsdemux_audio_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);

        spin_lock_irqsave(&lock, flags);

@@ -1098,7 +1098,7 @@ void tsdemux_audio_reset(void)
 void tsdemux_sub_reset(void)
 {
        ulong flags;
-       DEFINE_SPINLOCK(lock);
+       __DEFINE_SPINLOCK(lock);
        u32 parser_sub_start_ptr;
        u32 parser_sub_end_ptr;
Attachments
odroidc2rt_defconfig.txt
Odroid C2 (full preemptive) for aarch64 on C2
(107.08 KiB) Downloaded 132 times
arm64rt.tar.gz
arm64 rt patch.
(3.88 KiB) Downloaded 135 times

brad
Posts: 1176
Joined: Tue Mar 29, 2016 1:22 pm
languages_spoken: english
ODROIDs: C2 N1 N2 N2+ H2 H2+ (64 bit ftw)
Location: Australia
Has thanked: 60 times
Been thanked: 108 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by brad »

I Have just compiled up a kernel 3.14.77-rt82 using the method on the wiki in conjunction with this thread.

I applied the main patch and then the next 3 arm patches, the last one was already applied but everything seem to go well and I fixed up all the rej's

I am now attempting to boot and are seeing at various stages of boot around when it initiates the USB or memory card.

Did anyone else encounter this problem?

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

Can you try the patches from this http://forum.odroid.com/viewtopic.php?f=136&t=23052

I will re-organize the patches soon.

brad
Posts: 1176
Joined: Tue Mar 29, 2016 1:22 pm
languages_spoken: english
ODROIDs: C2 N1 N2 N2+ H2 H2+ (64 bit ftw)
Location: Australia
Has thanked: 60 times
Been thanked: 108 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by brad »

moon.linux wrote:Can you try the patches from this http://forum.odroid.com/viewtopic.php?f=136&t=23052

I will re-organize the patches soon.
Hi moon.linux,
thanks for the information I missed that thread, I will try to repatch the 77 kernel and then apply your rt patchset for arm64/ almogic. Or do you think it would be more wise to patch an older 3.14.65 version?

Thanks!

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

I thinks you can give this core rt patches a try https://www.kernel.org/pub/linux/kernel ... t82.tar.gz

Only thing you need to update the Amlogic drivers to make this work correctly.

brad
Posts: 1176
Joined: Tue Mar 29, 2016 1:22 pm
languages_spoken: english
ODROIDs: C2 N1 N2 N2+ H2 H2+ (64 bit ftw)
Location: Australia
Has thanked: 60 times
Been thanked: 108 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by brad »

Thanks that did the trick all up and running now! :)

Going to to see if I can tune down the realtime latency now, looking at seeing if I can get linuxcnc working at a reasonable rate on the c2

moon.linux
Posts: 1189
Joined: Thu Oct 02, 2014 11:42 pm
languages_spoken: english
ODROIDs: U3, XU3. XU4, C1+...
Has thanked: 0
Been thanked: 13 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by moon.linux »

I have created a branch in my github account for Odroid C2.

You can checkout the using below command and user odroidc2_rt_defconfig to build the kernel

Code: Select all

git clone -b odroidc2-3.14.y-rt https://github.com/moonlinux/linux/tree/odroidc2-3.14.y-rt
If you have any input on this please share them.

chlorisdroid
Posts: 143
Joined: Wed Feb 11, 2015 4:14 am
languages_spoken: english,german,netherlands
ODROIDs: c1,c1+, c2, hifi-shield
Location: Düsseldorf, Germany
Has thanked: 0
Been thanked: 1 time
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by chlorisdroid »

Sometimes I belive that linux is already on mars :-)
Quae volumus, credimus libenter.

brad
Posts: 1176
Joined: Tue Mar 29, 2016 1:22 pm
languages_spoken: english
ODROIDs: C2 N1 N2 N2+ H2 H2+ (64 bit ftw)
Location: Australia
Has thanked: 60 times
Been thanked: 108 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by brad »

chlorisdroid wrote:Sometimes I belive that linux is already on mars :-)
Maybe not linux but definitely some traces of unix has crashed on or passed mars quiet closely. Most software which crashed onto the planet was written in assembly language.

User avatar
rooted
Posts: 7911
Joined: Fri Dec 19, 2014 9:12 am
languages_spoken: english
Location: Gulf of Mexico, US
Has thanked: 724 times
Been thanked: 233 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by rooted »

brad wrote:
chlorisdroid wrote:Sometimes I belive that linux is already on mars :-)
Maybe not linux but definitely some traces of unix has crashed on or passed mars quiet closely. Most software which crashed onto the planet was written in assembly language.
It wouldn't surprise me if lots of linux code found it's way into the Mars rover.

elatllat
Posts: 1779
Joined: Tue Sep 01, 2015 8:54 am
languages_spoken: english
ODROIDs: XU4, N1, N2, C4, N2+
Has thanked: 47 times
Been thanked: 114 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by elatllat »

https://en.wikipedia.org/wiki/Mars_Helicopter_Ingenuity
Linux on an Snapdragon 801 will launch next week for Mars.
The expensive version of this;
https://www.intrinsyc.com/qualcomm-flight/

mad_ady
Posts: 8338
Joined: Wed Jul 15, 2015 5:00 pm
languages_spoken: english
ODROIDs: XU4, C1+, C2, C4, N1, N2, H2, Go, Go Advance
Location: Bucharest, Romania
Has thanked: 574 times
Been thanked: 439 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by mad_ady »

And has zigbee for a radio... I expected that they go with VxWorks instead...

elatllat
Posts: 1779
Joined: Tue Sep 01, 2015 8:54 am
languages_spoken: english
ODROIDs: XU4, N1, N2, C4, N2+
Has thanked: 47 times
Been thanked: 114 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by elatllat »

VxWorks would be hard to implement/customize, unlike Linux which has a massive feature set and talent pool.
They boosted the Zigbee range from 20 meters to 1km, not sure what other off the shelf mesh system would do that.

mad_ady
Posts: 8338
Joined: Wed Jul 15, 2015 5:00 pm
languages_spoken: english
ODROIDs: XU4, C1+, C2, C4, N1, N2, H2, Go, Go Advance
Location: Bucharest, Romania
Has thanked: 574 times
Been thanked: 439 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by mad_ady »

Most likely the purity of the radio spectrum helps as well... Even 2.4GHz wifi sounds good on Mars. :D

elatllat
Posts: 1779
Joined: Tue Sep 01, 2015 8:54 am
languages_spoken: english
ODROIDs: XU4, N1, N2, C4, N2+
Has thanked: 47 times
Been thanked: 114 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by elatllat »

I'm not sure the SNR would be better or worse because I'd expect some noise due to the reduced atmosphere and magnetic shielding, no idea what type of noise, but RF people in the north post Aurora Borealis noise on youtube;
https://youtu.be/HIhiNcXLvxE

Some looks like MHz range;
http://www.dartmouth.edu/~spacephy/exp/waves/waves.html
Last edited by elatllat on Wed Jul 22, 2020 3:33 am, edited 1 time in total.

mad_ady
Posts: 8338
Joined: Wed Jul 15, 2015 5:00 pm
languages_spoken: english
ODROIDs: XU4, C1+, C2, C4, N1, N2, H2, Go, Go Advance
Location: Bucharest, Romania
Has thanked: 574 times
Been thanked: 439 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by mad_ady »

Sounds really spooky! :)

User avatar
rooted
Posts: 7911
Joined: Fri Dec 19, 2014 9:12 am
languages_spoken: english
Location: Gulf of Mexico, US
Has thanked: 724 times
Been thanked: 233 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by rooted »

elatllat wrote:https://en.wikipedia.org/wiki/Mars_Helicopter_Ingenuity
Linux on an Snapdragon 801 will launch next week for Mars.
The expensive version of this;
https://www.intrinsyc.com/qualcomm-flight/
My name along with my son I lost will be on Mars with this launch.

https://mars.nasa.gov/participate/send- ... /mars2020/

elatllat
Posts: 1779
Joined: Tue Sep 01, 2015 8:54 am
languages_spoken: english
ODROIDs: XU4, N1, N2, C4, N2+
Has thanked: 47 times
Been thanked: 114 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by elatllat »

Awesomely bittersweet (like your avatar).

User avatar
rooted
Posts: 7911
Joined: Fri Dec 19, 2014 9:12 am
languages_spoken: english
Location: Gulf of Mexico, US
Has thanked: 724 times
Been thanked: 233 times
Contact:

Re: Realtime Kernel (full preemptive) for aarch64 on C2

Post by rooted »

Thanks

Post Reply

Return to “Other OS”

Who is online

Users browsing this forum: No registered users and 1 guest