最近使用RT5350的板子運行openwrt,需要將該SOC的兩個UART均運行起來,
默認情況下只開啓了uartlite,當做console口了,另外一個uartf與gpio複用。
在查找資料的過程中,發現在新的內核中使用到了設備樹(device tree)的概念,
使用dts文件描述SOC的所有資源。
涉及到以下幾個文件:
linux-3.10.49/arch/mips/ralink/rt305x.c
linux-3.10.49/drivers/pinctrl/pinctrl-rt2880.c
target/linux/ramips/dts/rt5350.dtsi
target/linux/ramips/dts/MPRA2.dts
兩個.c文件與dts文件密切相關,添加調試信息做了跟蹤,並不需要修改。
關鍵的修改在兩個dts文件。
MPRA2.dts中將state_default從以下內容
gpio {
ralink,group = "i2c", "jtag", "rgmii", "mdio", "uartf";
ralink,function = "gpio";
};
修改成
gpio {
ralink,group = "i2c", "jtag", "rgmii", "mdio";
ralink,function = "gpio";
};
uartf {
ralink,group = "uartf";
ralink,function = "gpio uartf";
};
並且需要註釋掉該文件最後gpio_export的所有內容。
開啓uartf之前,uartlite爲ttyS0作爲console的,開啓uartf之後,uartf成爲ttyS0,uartlite變爲ttyS1,
rt5350.dtsi需要修改bootargs以使uartlite仍然作爲console
chosen {
bootargs = "console=ttyS1,57600";
};
並註釋掉uart@500中的status = “disabled”;
// status = "disabled";
關於設備樹,也是剛剛接觸,也還有很多不太理解。做如上修改後兩個UART均能使用。