Igen, ez egy RISC-V alapu rendszer (RV32IMAC_Zicsr, pontosabban szolva), szoval a legegyszerubb RV32-es architektura amire mar lehet ertelmes RTOS-t es/vagy Linuxot huzni. Szoval I/O port nincs (a CSR-ek nem arra valoak), csak MMIO van. Es mivel MMIO van, ezert jo kerdes hogy hogyan a leghatekonyabb 8x1 byte-ot lemappelni. Az "early console" forraskodjaban meg busy wait alapu az MMIO, es annak a forraskodjabol (ld: ./linuxdrivers/tty/serial/8250/8250_early.c) latszik hogy tobbfele I/O modozat kozul lehet valasztani. Ugyanakkor egy nativ 32+32 bites (ILP32-es) hardver a leghatekonyabban ezt nem byte-szinten hanem word-szinten fogja kezelni - szoval az teljesen termeszetes hogy itt lehet egy address space szethuzas. Es mivel van erre boven hely, ezert ez nem gond.
("info devices" vagy valami ilyesmi)
Aha, igen, egy ilyet talaltam:
QEMU 7.2.9 monitor - type 'help' for more information
(qemu) info chardev
serial1: filename=serial
parallel0: filename=null
compat_monitor0: filename=stdio
serial0: filename=serial
Itt megjelenik az a ket chardev amit megadtam:
$ qemu-system-riscv32 -m 512M -nographic -machine virt \
-kernel ./Image2 \
-initrd ./initramfs.cpio.gz \
-device pci-serial-4x \
-serial /dev/tnt0 \
-serial /dev/tnt2 \
-append "console=ttyS0 nr_uarts=4"
A /dev/tnt{0,1} paron ott van a konzol, be tudok lepni a Linuxra, minden oke. De a /dev/ttyS1-et (vagy barmelyik 0< soros portot) nem tudom elerni. Szoval jo lenne valami MMIO mappingot latni :)