cvw/linux
David Harris d801916d97 Merge pull request #383 from ross144/main
Adds Zicbom support for D-cache only.  I-cache not yet supported.  Tests 32 and 64 bit versions.  Please rebuild regressions wally32 and wally64.  To save rebuild time edit lines 11-12 of tests/riscof/Makefile
2023-08-21 13:32:00 -07:00
..
buildroot-config-src Updated linux config. Works in QEMU now. 2023-08-02 18:59:42 -05:00
buildroot-packages Linux makefile now copies the package contents with the correct package source. 2023-08-02 14:56:23 -05:00
buildroot-scripts
devicetree Merge branch 'main' of github.com:ross144/cvw 2023-08-02 16:51:42 -05:00
sdcard flash-sd.sh fixed. GPT table is now destroyed before re-partioning, thus avoiding backup table collisions. 2023-08-04 17:28:22 -05:00
testvector-generation
bootmem.txt
Makefile Cleaned up some things. 2023-08-11 16:22:12 -05:00
README.MD Added a table of contents to the linux readme. 2023-08-11 15:48:49 -05:00

Linux for core-v-wally

Table of Contents

  1. Setting up Buildroot
  2. Generating Device Tree Binaries
  3. Disassembling the Binaries for Debugging
  4. Creating a Bootable SD Card

Setting up Buildroot

In order to generate the Linux and boot stage binaries compatible with Wally, Buildroot is used for cross-compilation. To set up a Buildroot directory, configuration files for Buildroot, Linux, and Busybox must be copied into the correct locations inside the main Buildroot directory. This can be done automatically using the Makefile inside Wally's Linux subdirectory (this one). To install and patch a fresh Buildroot directory, type:

$ make install BUILDROOT=path/to/buildroot

You can override the BUILDROOT variable to place buildroot where you want it. By default it will be placed at /opt/riscv/buildroot. In addition to copying the configuration files, it will install the buildroot package needed to build the SD card driver for Linux.

To install a new buildroot directory, build the binaries, and generate the device tree binaries in one command, use:

$ make BUILDROOT=path/to/buildroot

Or simply use the default buildroot location in /opt/riscv:

$ make

Note that the $RISCV variable cannot be set prior to building in buildroot or the build will fail. It is best to run source ./setup.sh to alter your $PATH and set the $RISCV variable after buildroot has succesfully built the binaries. If you're new to buildroot, you can find the binaries in <BUILDROOT>/output/images.

Generating Device Tree Binaries

The device tree files for the various FPGA's Wally supports, as well as QEMU's device tree for the virt machine, are located in the ./devicetree subdirectory. These device tree files are necessary for the boot process. In order to build the device tree binaries (.dtb) from the device tree sources (.dts), we can build all of them at once using:

$ make generate BUILDROOT=path/to/buildroot

Or for the default buildroot location:

$ make generate 

The .dts files will end up in the <BUILDROOT>/output/images folder of your chosen buildroot directory.

Disassembling the Binaries for Debugging

By using the riscv64-unknown-elf-objdump utility, we can disassemble the binaries in <BUILDROOT>/output/images so that we can explore the resulting machine code instructions and see what assembly or C code the instructions came from, along with the corresponding addresses. This is useful during debugging in order to trace how code is being executed.

To create the disassembled binaries, run:

$ make disassemble BUILDROOT=path/to/buildroot

You'll find the resulting disassembled files in <BUILDROOT>/output/images/disassembly.

Creating a Bootable SD Card