It seems that whatever bug or config mistake gave us .got entries back then has
since been resolved. Also add a sanity check to recognize should this happen
again.
- Remove the panic version of the GPIO and UART driver. While they were a neat
idea, it proved tedious to drag them along different tutorials where the
virtual memory situation kept on changing. Actually, not much is lost, since
the benefit was only of theoretical nature until now, since everything is
still single-threaded with NullLocks. It is still possible to re-introduce
them later.
- Refactor driver bringup starting with tutorial 14. Instantiating the drivers
only when we are already capable of using the remapped MMIO address makes the
kernel a lot more robust, and the drivers need not care whether their MMIO
addresses are good to use already or not.
- Use console and irq_manager references from the generic kernel code. This
improves decoupling from the BSP, and is needed as a basis for tutorial 14.
The LLVM assembler apparently causes the .equ directive to create symbols
instead of just a local and temporary variable.
Work around this by using const operands with global_asm!.
* README.ES.md
I added a spanish translation for the README.md file, and modified the README.md to add my github profile and to add the link to README.ES.md file
* Slightly reorganize translation overview
* README.ES.md These changes are in response to PR comments
* Update README.ES.md
* README.ES.md -> 00_before_we_start
* Updating README.ES.md
I corrected a few mistakes in both README.ES.md files.
* README.ES.md for 00 These changes are in response to PR comments
* README.ES.md -> 01_wait_forever
* README.ES.md -> 02_runtime_init
* README.md for 01 & 02 with corrections/improvements
* Update 01_wait_forever/README.ES.md
* Update 02_runtime_init/README.ES.md
* README.ES.md -> 03_hacky_hello_world
* README.md with corrections/improvements
Co-authored-by: zanez <zanez@protonmail.com>
Co-authored-by: Andre Richter <andre-richter@users.noreply.github.com>
Co-authored-by: Diego Barrios Romero <eldruin@gmail.com>
It is too risky to rely on the compiler to not insert any operations using the
stack.
Having a stack-setting call in Rust using the cortex-a crate as the first action
in a Rust-only _start() function does not work if you're subsequently using the
stack, because the compiler often inserts the operations to make room on the
stack to prepare a function call BEFORE the call to set the stack, which crashes
the boot process.
Hence, keep on using a small piece of assembly boot code throughout.
- Don't wildcard-import from arch modules. Make it explicit.
- Put translation table code into its own module.
- Put boot code in boot.rs instead of cpu.rs
- Other minor changes, most memory subsystem.
The GCC versions of `objdump` and `nm` seem to have better out-of-the-box
support (for AArch64). Demangling works better, and instructions in objdump are
presented as 4 bytes instead of 4 * 1 bytes, which helps a lot.
Hence, switch to the GCC versions for now until LLVM has caught up.