Archive for the 'Software' Category

Resist NVidia, especially for Linux

Friday, September 7th, 2018

So I do Linux kernel, driver, libraries, gcc, development since 1998. A little bit everywhere, all over the place. X86, ARM, PowerPC, SPARC you name it. I contributed to the Linux distribution ROCK Linux, later became stable release maintainer, and still run the fork #t2sde for embedded and special custom Linux distributions. My company ExactCODE was involved in many embedded projects and development like that, and in 2008 a customer wanted to base a product on the Nvidia Tega SoC, so I wrote Nvidia if they could release us any register level spec, even under NDA, to work on such a project. To my surprise I got an answer, but it was a simple one-liner, and not really what we needed to hear:

How is your Windows CE experience? We are not supporting Linux on Tegra.

Received: from (Not Verified[]) by
id ; Tue, 22 Jul 2008 12:56:40 -0700
Subject: RE: NVidia SoC SPECs for Embedded Linux systems
Date: Tue, 22 Jul 2008 12:57:03 -0700

How is your Windows CE experience? We are not supporting Linux on Tegra.

—–Original Message—–

For the currently engaging projects we need solid 3D support in
our portfolio we would kindly ask for the possibility to sign an NDA
to receive register level specs support NVidia’s latest integrated
embedded SoC’s in our boards support offerings.

Just for those why I can not, and will never recommend chips without register level data sheets available to developer, ..!

20 years, and over 400 scanner drivers

Friday, August 24th, 2018

Quite exactly 20 years ago I purchased my first scanner, after saving for years for my first computer: A Pentium 120, at first even running with our old ISA VGA card from my farther’s ageing 386sx25. Lafter, after saving more for my first VGA card, an ELSA Victory 3D w/ S3/Virge3D, it was also time for the first peripherals and of course to get analog material into the digital world I needed a scanner: a c’t mgazine well rated AVision AV630CS. But as Windows crashed too often than not on me, it was also time to migrate to Linux. Remember that was 1998 when few actually heard about it. And of course I had to write my own SANE scanner driver - and the rest is history:

[self note:@”gdb”];

Saturday, August 11th, 2018

set solib-search-path ./lib64
# or: set solib-absolute-prefix ./lib64
file usr/bin/something
core-file core

Bluetooth apt-X finally works w/ OpenSource!

Wednesday, June 6th, 2018

I also finally hcidump’ed which codecs my Sennheiser Momentum 2.0 supports, as the marketing material is often not that detailed and trustworthy. So besides the standard SBC; only apt-X:

# hcidump | grep -i codec
Media Codec - non-A2DP (aptX)
Media Codec - SBC
Media Codec - non-A2DP (aptX)

CLI, manual Bluez connection

Monday, June 4th, 2018

# bluetoothctl

power on
agent on
scan on
pair xx:…
connect xx:…

Notes. installing Irix, Octane, O2

Saturday, April 21st, 2018

Empty HD:

boot -f dksc(1,3,8)sash64
# boot -f dksc(1,3,8)sashARCS

boot -f dksc(1,3,7)stand/fx.64 –x
# boot -f dksc(1,3,7)stand/fx.ARCS –x

Install System Software

2 to open media
# insert all CDs

then to install:

keep *
install standard

in case of conflicts:

conflict 1a 2a .. .. ..

Obviously, more detailed tips at the usual:, …

AT command notes

Thursday, March 15th, 2018

so it is that time of the decade again, that you need to poke with some AT modem commands, e.g. for 3G / LTE networks, …

Does the SIM card need a PIN?

Enter the PIN if required:

Current network:

Update: special service numbers, e.g. balance:

GCC becomes slower and slower

Thursday, January 18th, 2018

As visible on my other posts, also on twitter and instagram I’m working on some vintage machines with our #t2sde the other weeks. Now only did the new GCC versions feel slower and slower, where even EPYC datacenter servers took like twice as long to bootstrap some $sysroot, … I did a quick mips64 build and install to the R10000 mips64 Sgi Octane. A hello-world.c compile is like 20% slower from 4.9.4 to 7.2.0 (N32 user-land):

# gcc –version
gcc (GCC) 4.9.4
# time gcc hello.c
user 0m1.080s


# gcc –version
gcc (GCC) 7.2.0
# gcc hello.c
user 0m1.290s

glibc minimum linux kernel version

Sunday, December 31st, 2017

Note to self:

glibc-2.13: at least 2.6.12… ok (mips64)
glibc-2.19: minimum kernel version reset to 2.6.16 (mips64)
glibc-2.21: at least 2.6.32 (mips64)

to be extended.

Also, turns out the FP NAN representation was recently changed for IEEE 754-2008 on MIPS around Linux kernel version 4.5.0, and glibc 2.23.

Update: On a similar note: GCC 4.4 now supports the MIPS R10K, R12K, R14K and R16K processors.

Update 2: i386 removed with Linux kernel 3.8, last glibc without NPTL for i386 LinuxThreads: 2.3.6?

Update 3: sparc32/sun4c removed with Linux kernel 3.5.

Resetting Sun idprom nvram

Thursday, December 21st, 2017

Note to self. Before it disappears from the interwebs. When your Sun idprom nvram battery dies.

The following was tested on a Sun SPARCstation 2 (sun4c) and Ultra 5 (sun4u):

Hit `n’ to get the new openboot prompt (it probably tries network booting):

f idprom@ 1 xor f mkp # this will invalidate the checkum
8 0 20 13 de ad c0ffee mkpl

Hit ctrl-D then ctrl-R, if you do NOT see a Sun Copyright notice, it worked, otherwise it failed.
You can check with:


You probably want to set some sane defaults, and disable the diag mode, to skip the excessively long memory test each time you boot:

setenv diag-switch? false

#sun #ultrasparc #idprom #refresh #openfirmware #exactcode#t2sde #berlin

A post shared by RenéRebe™ (@renerebe) on

Update: A new clock chip also needs to be started. From what I read the old SunOS might have code in the kernel clock driver to do that, but AFAICS the Linux kernel does not. This (untested) OpenFirmware code sequence supposedly starts a new clock chip on sun4c:

2000000 obio 0 map-page # map NVRAM to page 0
80 7f8 c! # set write bit
0 7f9 c! # reset stop bit
80 7fb c! # set kick start
0 7f8 c! # reset write bit

#wait for two seconds
80 7f8 c! # set write bit
0 7fb c! # reset kick start

0 7f9 c! # set dummy time and date
0 7fa c! # (if necessary)
0 7fb c!
4 7fc c!
11 7fd c!
1 7fe c!
96 7ff c!

0 7f8 c! # reset write bit