Miyoo
如何將XBoot的輸出訊息轉到UART1
由於司徒在移植UBoot時遇到一些問題,因此,上網找尋是否有替代的Tiny Bootloader時,意外發現另一套開源系統XBoot,這套系統很像Realtime OS且專門針對比較低階的CPU製作,果然人外有人,天外有天,高手在民間,最後因緣際會下,認識XBoot作者,經由該作者介紹,認識更多曾經參與F1C100S開發的高手,因此,當司徒遇到問題時,都是詢問這些高手,最終才讓司徒成功移植i80介面,司徒真心感謝他們,而當初為了驗證一些硬體,因此移植XBoot到Miyoo上,不過由於Miyoo的UART是接到UART1;而XBoot的輸出則是UART0,因此,司徒順便把當初移植的過程說明下,希望可以當作日後參考文件。
--- src/arch/arm32/mach-f1c100s/sys-uart_orig.c 2018-12-30 21:13:22.415507314 +0800
+++ src/arch/arm32/mach-f1c100s/sys-uart.c 2018-12-30 22:00:43.613937647 +0800
@@ -29,32 +29,32 @@
virtual_addr_t addr;
u32_t val;
- /* Config GPIOF4 and GPIOF2 to txd0 and rxd0 */
- addr = 0x01c208b4 + 0x00;
+ /* Config GPIOA2 and GPIOA3 to txd0 and rxd0 */
+ addr = 0x01c20800 + 0x00;
val = read32(addr);
- val &= ~(0xf << ((4 & 0x7) << 2));
- val |= ((0x3 & 0x7) << ((4 & 0x7) << 2));
+ val &= ~(0xf << ((3 & 0x7) << 2));
+ val |= ((0x5 & 0x7) << ((3 & 0x7) << 2));
write32(addr, val);
val = read32(addr);
val &= ~(0xf << ((2 & 0x7) << 2));
- val |= ((0x3 & 0x7) << ((2 & 0x7) << 2));
+ val |= ((0x5 & 0x7) << ((2 & 0x7) << 2));
write32(addr, val);
- /* Open the clock gate for uart0 */
+ /* Open the clock gate for uart1 */
addr = 0x01c20068;
val = read32(addr);
- val |= 1 << 20;
+ val |= 1 << 21;
write32(addr, val);
- /* Deassert uart0 reset */
+ /* Deassert uart1 reset */
addr = 0x01c202d0;
val = read32(addr);
- val |= 1 << 20;
+ val |= 1 << 21;
write32(addr, val);
- /* Config uart0 to 115200-8-1-0 */
- addr = 0x01c25000;
+ /* Config uart1 to 115200-8-1-0 */
+ addr = 0x01c25400;
write32(addr + 0x04, 0x0);
write32(addr + 0x08, 0xf7);
write32(addr + 0x10, 0x0);
@@ -74,8 +74,9 @@
void sys_uart_putc(char c)
{
- virtual_addr_t addr = 0x01c25000;
+ virtual_addr_t addr = 0x01c25400;
while((read32(addr + 0x7c) & (0x1 << 1)) == 0);
write32(addr + 0x00, c);
}
--- src/arch/arm32/mach-f1c100s/sast-kk131_orig.c 2018-12-31 20:22:30.760634199 +0800
+++ src/arch/arm32/mach-f1c100s/sast-kk131.c 2018-12-30 21:35:58.190732433 +0800
@@ -60,7 +60,7 @@
static void mach_logger(struct machine_t * mach, const char * buf, int count)
{
- virtual_addr_t virt = phys_to_virt(0x01c25000);
+ virtual_addr_t virt = phys_to_virt(0x01c25400);
--- ./src/arch/arm32/mach-f1c100s/romdisk/boot/sast-kk131_orig.json 2018-12-31 20:24:32.134506413 +0800
+++ ./src/arch/arm32/mach-f1c100s/romdisk/boot/sast-kk131.json 2018-12-31 11:19:48.077490340 +0800
@@ -377,7 +377,7 @@
"backlight": "led-pwm-bl.0"
},
- "console-uart@0": {
- "uart-bus": "uart-16550.0"
+ "console-uart@1": {
+ "uart-bus": "uart-16550.1"
開訊訊息(115200 bps)
_ _
_ _ | |___ _____ _____ _| |_
\ \/ /| _ | _ | _ |_ _| (C) 2007-2018
) ( | |_| | |_| | |_| | | |____JIANJUN.JIANG__
/_/\_\|_____|_____|_____| |_____________________|
V2.0.2 (Dec 31 2018 - 19:42:20) - [sast-kk131][SAST KK131 Digital Player Based On Allwinner F1C100S]
[ 0.000000] Probe device 'romdisk.0' with romdisk
[ 0.000010] Probe device 'hosc' with clk-fixed
[ 0.000020] Probe device 'losc' with clk-fixed
[ 0.000030] Probe device 'pll-cpu' with clk-f1c100s-pll
[ 0.000040] Probe device 'pll-audio' with clk-f1c100s-pll
[ 0.000050] Probe device 'pll-video' with clk-f1c100s-pll
[ 0.000060] Probe device 'pll-ve' with clk-f1c100s-pll
[ 0.000070] Probe device 'pll-ddr' with clk-f1c100s-pll
[ 0.000080] Probe device 'pll-periph' with clk-f1c100s-pll
[ 0.000090] Probe device 'cpu' with clk-mux
[ 0.000100] Probe device 'hclk' with clk-divider
[ 0.000110] Probe device 'ahb1-pre-div' with clk-divider
[ 0.000120] Probe device 'mux-ahb1' with clk-mux
[ 0.000130] Probe device 'ahb1' with clk-ratio
[ 0.000140] Probe device 'apb1' with clk-ratio
[ 0.000150] Probe device 'gate-bus-uart0' with clk-gate
[ 0.000160] Probe device 'gate-bus-uart1' with clk-gate
[ 0.000170] Probe device 'gate-bus-uart2' with clk-gate
[ 0.000180] Probe device 'link-uart0' with clk-link
[ 0.000190] Probe device 'link-uart1' with clk-link
[ 0.000200] Probe device 'link-uart2' with clk-link
[ 0.000210] Probe device 'gate-bus-i2c0' with clk-gate
[ 0.000220] Probe device 'gate-bus-i2c1' with clk-gate
[ 0.000230] Probe device 'gate-bus-i2c2' with clk-gate
[ 0.000240] Probe device 'link-i2c0' with clk-link
[ 0.000250] Probe device 'link-i2c1' with clk-link
[ 0.000260] Probe device 'link-i2c2' with clk-link
[ 0.000270] Probe device 'gate-bus-spi0' with clk-gate
[ 0.000280] Probe device 'gate-bus-spi1' with clk-gate
[ 0.000290] Probe device 'link-spi0' with clk-link
[ 0.000300] Probe device 'link-spi1' with clk-link
[ 0.000310] Probe device 'mux-timer0' with clk-mux
[ 0.000320] Probe device 'ratio-timer0' with clk-ratio
[ 0.000330] Probe device 'link-timer0' with clk-link
[ 0.000340] Probe device 'mux-timer1' with clk-mux
[ 0.000350] Probe device 'ratio-timer1' with clk-ratio
[ 0.000360] Probe device 'link-timer1' with clk-link
[ 0.000370] Probe device 'mux-timer2' with clk-mux
[ 0.000380] Probe device 'ratio-timer2' with clk-ratio
[ 0.000390] Probe device 'link-timer2' with clk-link
[ 0.000400] Probe device 'link-pwm' with clk-link
[ 0.000410] Probe device 'link-wdt' with clk-link
[ 0.000420] Probe device 'mux-defe' with clk-mux
[ 0.000430] Probe device 'div-defe' with clk-divider
[ 0.000440] Probe device 'gate-defe' with clk-gate
[ 0.000450] Probe device 'gate-bus-defe' with clk-gate
[ 0.000460] Probe device 'link-defe' with clk-link
[ 0.000470] Probe device 'mux-debe' with clk-mux
[ 0.000480] Probe device 'div-debe' with clk-divider
[ 0.000490] Probe device 'gate-debe' with clk-gate
[ 0.000500] Probe device 'gate-bus-debe' with clk-gate
[ 0.000510] Probe device 'link-debe' with clk-link
[ 0.000520] Probe device 'mux-tcon' with clk-mux
[ 0.000530] Probe device 'gate-tcon' with clk-gate
[ 0.000540] Probe device 'gate-bus-tcon' with clk-gate
[ 0.000550] Probe device 'link-tcon' with clk-link
[ 0.000560] Probe device 'reset-f1c100s.0' with reset-f1c100s
[ 0.000570] Probe device 'reset-f1c100s.1' with reset-f1c100s
[ 0.000580] Probe device 'reset-f1c100s.2' with reset-f1c100s
[ 0.000590] Probe device 'irq-f1c100s.0' with irq-f1c100s
[ 0.000600] Probe device 'irq-f1c100s-gpio.0' with irq-f1c100s-gpio
[ 0.000610] Probe device 'irq-f1c100s-gpio.1' with irq-f1c100s-gpio
[ 0.000620] Probe device 'irq-f1c100s-gpio.2' with irq-f1c100s-gpio
[ 0.000630] Probe device 'gpio-f1c100s.0' with gpio-f1c100s
[ 0.000640] Probe device 'gpio-f1c100s.1' with gpio-f1c100s
[ 0.000650] Probe device 'gpio-f1c100s.2' with gpio-f1c100s
[ 0.000660] Probe device 'gpio-f1c100s.3' with gpio-f1c100s
[ 0.000670] Probe device 'gpio-f1c100s.4' with gpio-f1c100s
[ 0.000680] Probe device 'pwm-f1c100s.0' with pwm-f1c100s
[ 0.000690] Probe device 'pwm-f1c100s.1' with pwm-f1c100s
[ 0.000700] Probe device 'ce-f1c100s-timer.0' with ce-f1c100s-timer
[ 0.000050] Probe device 'cs-f1c100s-timer.0' with cs-f1c100s-timer
[ 0.006447] Probe device 'i2c-f1c100s.0' with i2c-f1c100s
[ 0.011954] Probe device 'i2c-f1c100s.1' with i2c-f1c100s
[ 0.017461] Probe device 'i2c-f1c100s.2' with i2c-f1c100s
[ 0.022858] Probe device 'uart-16550.0' with uart-16550
[ 0.028072] Probe device 'uart-16550.1' with uart-16550
[ 0.033346] Probe device 'uart-16550.2' with uart-16550
[ 0.038536] Probe device 'spi-f1c100s.0' with spi-f1c100s
[ 0.043891] Probe device 'spi-f1c100s.1' with spi-f1c100s
[ 0.049310] Probe device 'spi-flash.0' with spi-flash
[ 0.054308] Probe device 'wdog-f1c100s.0' with wdog-f1c100s
[ 0.059852] Probe device 'key-f1c100s-lradc.0' with key-f1c100s-lradc
[ 0.066237] Probe device 'led-gpio.0' with led-gpio
[ 0.071072] Probe device 'ledtrig-heartbeat.0' with ledtrig-heartbeat
[ 0.077473] Probe device 'led-pwm-bl.0' with led-pwm-bl
[ 0.302363] Probe device 'fb-f1c100s.0' with fb-f1c100s
[ 0.307560] Probe device 'console-uart.1' with console-uart
Press any key to stop autoboot: 0.000
xboot: /$