[RISCV]2, qemu引导riscv linux--摆脱busybear

首先,在看这篇文章的时候,默认你已经可以成功地用qemu启动你的busybear-linux, 下面将会介绍一种不需要用busybear的方式,也就是说你可以用自己的rootfs了,除bbl一切可控(bbl还在研究中,想法是以后可以换成uboot),很棒吧,好啦,下面开始…


1, 先启动一次riscv-linux,教程见下链接

[RISCV]1, 用QEMU模拟器跑一个RISC-V上的Linux

Running 64- and 32-bit RISC-V Linux on QEMU

2, 现在我们即将要脱离busybear的控制

2.1, 首先复制busybear的.config到自己的linux根目录里,内容如下:
CONFIG_DEFAULT_HOSTNAME="busybear"
CONFIG_SYSVIPC=y
CONFIG_POSIX_MQUEUE=y
CONFIG_IKCONFIG=y
CONFIG_IKCONFIG_PROC=y
CONFIG_CGROUPS=y
CONFIG_CGROUP_SCHED=y
CONFIG_CFS_BANDWIDTH=y
CONFIG_CGROUP_BPF=y
CONFIG_NAMESPACES=y
CONFIG_USER_NS=y
CONFIG_CHECKPOINT_RESTORE=y
CONFIG_BLK_DEV_INITRD=y
CONFIG_EXPERT=y
CONFIG_BPF_SYSCALL=y
CONFIG_SMP=y
CONFIG_MODULES=y
CONFIG_NET=y
CONFIG_PACKET=y
CONFIG_PACKET_DIAG=y
CONFIG_UNIX=y
CONFIG_INET=y
CONFIG_NETLINK_DIAG=y
# CONFIG_WIRELESS is not set
CONFIG_PCI=y
CONFIG_DEVTMPFS=y
CONFIG_BLK_DEV_LOOP=y
CONFIG_VIRTIO_BLK=y
CONFIG_NETDEVICES=y
CONFIG_VIRTIO_NET=y
# CONFIG_ETHERNET is not set
# CONFIG_WLAN is not set
CONFIG_SERIAL_8250=y
CONFIG_SERIAL_8250_CONSOLE=y
CONFIG_SERIAL_OF_PLATFORM=y
CONFIG_HVC_RISCV_SBI=y
# CONFIG_HW_RANDOM is not set
# CONFIG_USB_SUPPORT is not set
CONFIG_VIRTIO_MMIO=y
CONFIG_SIFIVE_PLIC=y
CONFIG_RAS=y
CONFIG_EXT2_FS=y
CONFIG_EXT3_FS=y
CONFIG_EXT4_FS_POSIX_ACL=y
CONFIG_AUTOFS4_FS=y
CONFIG_MSDOS_FS=y
CONFIG_VFAT_FS=y
CONFIG_TMPFS=y
# CONFIG_CRYPTO_ECHAINIV is not set
# CONFIG_CRYPTO_HW is not set
CONFIG_PRINTK_TIME=y

这里只是借用了一下busybear的defconfig,如果你愿意参考这个自己裁剪内核也是可以的。

2.2, 另存一个在arch/riscv/configs/目录下,假设名字为riscv_busybear_defconfig
2.3, 开始根据defconfig配置linux

make riscv_busybear_defconfig

2.4, 开始编译linux,有错排错,直至vmlinux正常生成

make all -j8

3, 准备自己的rootfs,可以参考我的另一个教程

[Linux]用Busybox做一个ROOTFS(根文件系统)
但是这里要注意有一个地方要改一下,就是make all的时候,

make ARCH=riscv CROSS_COMPILE=riscv64-unknown-linux-gnu- all

4, 在本地建立一个rootfs

4.1 建立一个qemu-img镜像
qemu-img create qemu_rootfs.img  200m

这里qemu_rootfs.img是文件名,200M是磁盘大小,根据需要修改。

4.2 格式化上面镜像为ext4
mkfs.ext4 qemu_rootfs.img
4.3 挂载img文件到宿主系统
sudo mount -o loop qemu_rootfs.img  qemu_rootfs
4.4 将上面 步骤3 中的rootfs拷贝到qemu_rootfs
4.5 卸载上面的挂载
sudo umount qemu_rootfs

5, 启动

sudo qemu-system-riscv64 -nographic -machine virt -bios riscv-pk/build/bbl  -smp 4 \
-kernel linux/arch/riscv/boot/Image  \
-append "root=/dev/vda rootfstype=ext4 rw console=ttyS0" \
-drive file=qemu_rootfs.img,format=raw,id=hd1 \
-device virtio-blk-device,drive=hd1

大功告成
在这里插入图片描述
有时会遇到poweroff以后不能退出qemu的情况,这时可以先按ctrl+a,松开以后再按x,就可以退出qemu了。

后续还会尝试将bbl替换为uboot,欢迎大家持续关注本教程。
To be continue…

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

山猫Show

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值