I'm currently investigating the linux-mips port and I have come
across some trouble:
1) I have begun to work on the R3000 adaptation. I'm having lots
of trouble with virtual memory mapping, because the format of the
MMU register is different than for the R4000 and I dont understand
very well the way page tables are mapped in kernel state.
My current state is that the boot process hangs in buffer_init, which
is the first routine to use VM in kernel mode.
If I trace the execution, I see that buffer_init causes a tlbs exception,
when it first writes into vmalloced memory.
This exception then causes a tlbl, because the page table isn't in the TLB.
The tlbl handler faults in its turn for the same reason and the system hangs.
I'd greatly appreciate some information about the way TLBMAP, TLB_ROOT and
the like are working, and about how kernel page tables are implemented.
(I couldn't find any routing setting up a kernel page table, like on other
We have had a lot of trouble trying to compile the linux c library from
the fnet server, even after the patches. We were using the
mips-linuxelf-gcc , also from fnet. The makefiles keep calling the
wrong tools, some files seem to be missing, etc...
Do you have any hints on how to fix the situation ?
Finally, maybe you will be interested in some information we have gathered
during our first 10 days of work:
- The method used to discriminate between MIPS ISA levels using
the preprocessor is buggy. if you write:
#if __MIPS_ISA_LEVEL == __MIPS_ISA_LEVEL2
The test will always succeed if __MIPS__ISA_LEVEL2 is not defined to
some value. We've had to modify the gcc specs file to define arbitrary
numeric values for the mips isa symbols.
- There was a bug in the 1.3.98 ld.script: the _end symbol is before
the .sbss data, which will cause variables to be overwritten at
- The R3000 cli/sti functions need nops to prevent coprocessor
Thanks in advance for any input,