This is a port of Linux kernel for the RISC-V
instruction set architecture.
Development is currently based on the
4.6 longterm branch.

Obtaining kernel sources


Overlay the riscv architecture-specific subtree onto an upstream release:

    $ curl -L | tar -xJ
    $ cd linux-4.6.2
    $ git init
    $ git remote add -t master origin
    $ git fetch
    $ git checkout -f -t origin/master

Note that the -t <branch> option minimizes the history fetched.
To add another branch:

    $ git remote set-branches --add origin <branch>
    $ git fetch

Full kernel source trees

For convenience, full kernel source trees are maintained on separate
branches tracking

  • linux-4.6.y-riscv
  • linux-3.14.y-riscv (historical)

Building the kernel image

  1. Create kernel configuration based on architecture defaults:

    $ make ARCH=riscv defconfig
  2. Optionally edit the configuration via an ncurses interface:

    $ make ARCH=riscv menuconfig
  3. Build the uncompressed kernel image:

    $ make -j4 ARCH=riscv vmlinux
  4. Boot the kernel in the functional simulator, optionally specifying a
    raw disk image for the root filesystem:

    $ spike +disk=path/to/root.img bbl vmlinux

    bbl (the Berkeley Boot Loader) is available from the
    riscv-pk repository.

Exporting kernel headers

The riscv-gnu-toolchain repository includes a copy of the kernel header files.
If the userspace API has changed, export the updated headers to the
riscv-gnu-toolchain source directory:

$ make ARCH=riscv headers_check
$ make ARCH=riscv INSTALL_HDR_PATH=path/to/riscv-gnu-toolchain/linux-headers headers_install

Rebuild riscv64-unknown-linux-gnu-gcc with the linux target:

$ cd path/to/riscv-gnu-toolchain
$ make linux