[RISCV]2, qemu引導riscv linux--擺脫busybear

首先,在看這篇文章的時候,默認你已經可以成功地用qemu啓動你的busybear-linux, 下面將會介紹一種不需要用busybear的方式,也就是說你可以用自己的rootfs了,除bbl一切可控(bbl還在研究中,想法是以後可以換成uboot),很棒吧,好啦,下面開始…


1, 先啓動一次riscv-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 \
        -kernel riscv-pk/build/bbl \
        -drive file=linux/vmlinux,format=raw,id=hd0 \
        -drive file=qemu_rootfs.img,format=raw,id=hd1\
        -append "root=/dev/vda rootfstype=ext4 rw console=ttyS0" \
        -device virtio-blk-device,drive=hd1

大功告成
在這裏插入圖片描述
有時會遇到poweroff以後不能退出qemu的情況,這時可以先按ctrl+a,鬆開以後再按x,就可以退出qemu了。

後續還會嘗試將bbl替換爲uboot,歡迎大家持續關注本教程。
To be continue…

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章