1.quard_star.h 修改
2.quard_star.c 修改
static void quard_star_rtc_create(MachineState *machine) { QuardStarState *s = RISCV_VIRT_MACHINE(machine); sysbus_create_simple("goldfish_rtc", quard_star_memmap[QUARD_STAR_RTC].base, qdev_get_gpio_in(DEVICE(s->plic[0]), QUARD_STAR_RTC_IRQ)); }
|
static void quard_star_serial_create(MachineState *machine) { MemoryRegion *system_memory = get_system_memory(); QuardStarState *s = RISCV_VIRT_MACHINE(machine); serial_mm_init(system_memory, quard_star_memmap[QUARD_STAR_UART0].base, 0, qdev_get_gpio_in(DEVICE(s->plic[0]), QUARD_STAR_UART0_IRQ), 399193, serial_hd(0), DEVICE_LITTLE_ENDIAN); serial_mm_init(system_memory, quard_star_memmap[QUARD_STAR_UART1].base, 0, qdev_get_gpio_in(DEVICE(s->plic[0]), QUARD_STAR_UART1_IRQ), 399193, serial_hd(1), DEVICE_LITTLE_ENDIAN); serial_mm_init(system_memory, quard_star_memmap[QUARD_STAR_UART2].base, 0, qdev_get_gpio_in(DEVICE(s->plic[0]), QUARD_STAR_UART2_IRQ), 399193, serial_hd(2), DEVICE_LITTLE_ENDIAN); }
|
3. Kconfig修改
选中了RTC
config QUARD_STAR bool select SERIAL select PFLASH_CFI01 select RISCV_ACLINT select RISCV_APLIC select SIFIVE_PLIC select GOLDFISH_RTC
|
4. 测试
在进行测试时,我们需要在qemu
的monitor
中使用info qtree
来查看设备树信息,但是由于qemu
无法滚屏,所以不能查看完整的设备树,这里修改了一下run.sh
,将monitor映射到了控制台。run.sh
修改如下:
SHELL_FOLDER=$(cd "$(dirname "$0")";pwd)
$SHELL_FOLDER/output/qemu/bin/qemu-system-riscv64 \ -M quard-star \ -m 1G \ -smp 8 \ -bios none \ -monitor stdio \
|
执行脚本测试:
timer@DESKTOP-JI9EVEH:~/quard-star$ ./build.sh timer@DESKTOP-JI9EVEH:~/quard-star$ ./run.sh
|
可以看到monitor
中输出的内容被映射到控制台中了,且RTC
和UART
都挂载成功了。
代码地址:yanglianoo/quard-star: 从零基于qemu创建riscv嵌入式开发板,并移植操作系统 (github.com)
有问题请与我联系:wechat:13699648817