iT邦幫忙

2021 iThome 鐵人賽

DAY 27
2
Software Development

Port Alpine Linux to open source RISC-V platform系列 第 27

Alpine Linux Porting (2)

一樣開頭先上成果~
https://ithelp.ithome.com.tw/upload/images/20211006/20140421QrvmoICHdE.png
完整影片可見:
https://twitter.com/Ruinland_Mask/status/1445487285529501707

之前的問題在於,LiteX-UART的chardev沒有出現在新的rootfs的dev底下,kernel自己可以存取liteuart沒差,但是getty要存取,那對應的chardev就要存在。

然而...... LiteX-UART的major跟minor都是0

static struct uart_driver liteuart_driver = {
	.owner = THIS_MODULE,
	.driver_name = "liteuart",
	.dev_name = "ttyLXU",
	.major = 0,
	.minor = 0,
	.nr = CONFIG_SERIAL_LITEUART_MAX_PORTS,
#ifdef CONFIG_SERIAL_LITEUART_CONSOLE
	.cons = &liteuart_console,
#endif
};

簡單說這不是想讓你自己去mknod出來的東西。

解法有很多,改code是種方式,但是,RISC-V Linux有招祖傳甕底小東西 — — SBI。
在過去,因為RISC-V CPU的開發都在FPGA或模擬器上,一些peripheral可能都還在半殘狀態,所以SBI層的legacy版本留著console的getchar跟putchar SBI call、可以讓程式有個簡單暴力的文字界面可以互動;而Linux原本在過去Xen虛擬機時代時,留有HVC (Hypervisor Virtual Console)的界面。兩者一拍即合,叫做RISCV_SBI_HVC。

在懶得改code下,火速修了一下 Alpine Init的邏輯,叫它不要去折騰其他tty,就大功告成了,不會再狂噴找不到 /dev/liteuart 給getty去attach。


上一篇
Alpine Linux Porting (1.9999)
下一篇
Alpine Linux Porting (2.1) clock is _not_ ticking
系列文
Port Alpine Linux to open source RISC-V platform30

尚未有邦友留言

立即登入留言