该项目的github地址如下:https://github.com/sifive/freedom-u-sdk
首先,先clone该项目,执行make。
git clone https://github.com/sifive/freedom-u-sdk
git submodule update --init --recursive
export PATH=$PATH:/home/hemin/worker/sifive/freedom-u-sdk/work/buildroot_initramfs/host/bin
export RISCV="/home/hemin/worker/sifive/freedom-u-sdk/work/buildroot_initramfs/host"
cd /home/hemin/worker/sifive/freedom-u-sdk
make
make qemu
执行make命令之后,就会自动的下载工具和代码,然后开始自动编译工具,如交叉编译工具链,跟文件系统等。
最后安装的工具,在版本库根目录下的 work/buildroot_initramfs/bost 目录下
编译qemu时,执行configure步骤提示错误
./configure
ERROR: pixman >= 0.21.8 not present
于是,用apt-cache查找了关于pixman的依赖包
apt-cache search pixman
选择安装libpixman-1-dev包
apt-get install libpixman-1-dev
make过程中根文件系统制作需要用到sgdisk命令。gdisk软件包中包含sgdisk命令。 所以需要安装gdisk,
apt-get install gdisk
为了方便后续的调试运行,把两个环境变量的设置放入单独文件sifi.bashrc,放在~/worker目录下面。
在每次执行make qemu之前先source ~/worker/sifive.bashrc。make qemu需要编译相当长时间,请耐心等待!
export PATH=$PATH:/home/hemin/worker/sifive/freedom-u-sdk/work/buildroot_initramfs/host/bin
export RISCV="/home/hemin/worker/sifive/freedom-u-sdk/work/buildroot_initramfs/host"
这里使用的qemu版本是 3.1.50。用官方提供最新的qemu,会启动不了kernel。
hemin@ubuntu1:~/worker/sifive$ /home/hemin/worker/sifive/freedom-u-sdk/work/riscv-qemu/prefix/bin/qemu-system-riscv64 --version
QEMU emulator version 3.1.50
Copyright (c) 2003-2018 Fabrice Bellard and the QEMU Project developers
下图是bbl执行的结果,打印logo,然后启动kernel。
最后出现登录界面,输入用户名和密码即可登录到linux。这里,用户名是root,密码是 sifive。
以上就是在riscv_qemu上,跑riscv linux kernel的流程。最后为了方便调试,提取出来单独的linux运行命令为sifive.runlinux
该命令的内容如下所示:
/home/hemin/worker/sifive/freedom-u-sdk/work/riscv-qemu/prefix/bin/qemu-system-riscv64 -nographic -machine virt -bios /home/hemin/worker/sifive/freedom-u-sdk/work/riscv-pk/bbl -kernel /home/hemin/worker/sifive/freedom-u-sdk/work/linux/vmlinux -initrd /home/hemin/worker/sifive/freedom-u-sdk/work/initramfs.cpio.gz -netdev user,id=net0 -device virtio-net-device,netdev=net0