This is a port of Linux kernel for the RISC-V instruction set architecture. Development is currently based on the 4.6 longterm branch.
Overlay the riscv
architecture-specific subtree onto an upstream release:
$ curl -L https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.6.2.tar.xz | tar -xJ
$ cd linux-4.6.2
$ git init
$ git remote add -t master origin https://github.com/riscv/riscv-linux.git
$ 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
For convenience, full kernel source trees are maintained on separate branches tracking linux-stable:
linux-4.6.y-riscv
linux-3.14.y-riscv
(historical)
-
Create kernel configuration based on architecture defaults:
$ make ARCH=riscv defconfig
-
Optionally edit the configuration via an ncurses interface:
$ make ARCH=riscv menuconfig
-
Build the uncompressed kernel image:
$ make -j4 ARCH=riscv vmlinux
-
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.
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