am335x系统升级之kernel uart
Posted lianghong881018
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了am335x系统升级之kernel uart相关的知识,希望对你有一定的参考价值。
板子上面有4个串口,默认的ttyS0用于系统的console
由于CPU自带的串口驱动默认已选上
需要做的事情就是:
第一:查看原理图,找出对应的uart1,uart2,uart3的引脚,通过cpu的数据手册编写其pin mux
第二:增加uart1 uart2 uart3的dts节点,有了uart0节点的样例,编写出其他结点不是太难的问题。
接下来:
第一步:引脚初始化,编写时一定要细心,有可能会有引脚初始化的冲突
uart1_pins: pinmux_uart1_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x980, PIN_INPUT_PULLUP | MUX_MODE1) /* uart1_rxd.uart1_rxd */
AM33XX_IOPAD(0x984, PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* uart1_txd.uart1_txd */
>;
};
uart2_pins: pinmux_uart2_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x92c, PIN_INPUT_PULLUP | MUX_MODE1) /* mii1_txclk.uart2_rxd */
AM33XX_IOPAD(0x930, PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_rxclk.uart2_txd */
>;
};
uart3_pins: pinmux_uart3_pins {
pinctrl-single,pins = <
AM33XX_IOPAD(0x934, PIN_INPUT_PULLUP | MUX_MODE1) /* mii1_rxd3.uart3_rxd */
AM33XX_IOPAD(0x938, PIN_OUTPUT_PULLDOWN | MUX_MODE1) /* mii1_rxd2.uart3_txd */
>;
};
第二:增加相应的uart结点:
&uart1 {
pinctrl-names = "default";
pinctrl-0 = <&uart1_pins>;
status = "okay";
};
&uart2 {
pinctrl-names = "default";
pinctrl-0 = <&uart2_pins>;
status = "okay";
};
&uart3 {
pinctrl-names = "default";
pinctrl-0 = <&uart3_pins>;
status = "okay";
};
重新编写之后,测试可得如下输出
[ 0.374605] 44e09000.serial: ttyS0 at MMIO 0x44e09000 (irq = 30, base_baud = 3000000) is a 8250
[ 1.033794] console [ttyS0] enabled
[ 1.038629] 48022000.serial: ttyS1 at MMIO 0x48022000 (irq = 31, base_baud = 3000000) is a 8250
[ 1.048685] 48024000.serial: ttyS2 at MMIO 0x48024000 (irq = 32, base_baud = 3000000) is a 8250
[ 1.058651] 481a6000.serial: ttyS3 at MMIO 0x481a6000 (irq = 33, base_baud = 3000000) is a 8250
整个过程很简单。
如果想深入的了解其uart结点可查看,如下,有针对am335x serial的详细说明,
Documentation/devicetree/bindings/serial/omap_serial.txt
几乎所有的驱动的编写方式,在内核的文档当中都有说明,但是需要开发人员本身具备一定的基础。
开发起来,有点儿像nodejs python一样,一切皆API的感觉。
如果想学习内核的uart驱动框图,通过下图可深入了解
以上是关于am335x系统升级之kernel uart的主要内容,如果未能解决你的问题,请参考以下文章