目录

一、修改设备树

1.msm8953.dtsi 中添加code
    2. msm8953-pinctrl.dtsi 中添加代码
    3.在msm8953-nopmi-qrd.dtsi中添加代码

二、在根文件系统中查看设备树

a. /sys/firmware/fdt
    b. /sys/firmware/devicetree
    c. /sys/devices/platform
    d. /proc/device-tree

三、问题
四、查看修改驱动

参考链接:MSM8937-MSM8953 UART配置调试指南

uart驱动是使用内核驱动,无需自己编写,一般只需修改设备树。

一、修改设备树

设备树的配置有三部分:

1.msm8953.dtsi 中添加code

 blsp2_uart2: serial@7af0000 {compatible = "qcom,msm-lsuart-v14";reg = <0x7af0000 0x200>;interrupts = <0 307 0>;status = "disabled";clocks = <&clock_gcc clk_gcc_blsp2_uart2_apps_clk>,<&clock_gcc clk_gcc_blsp2_ahb_clk>;clock-names = "core_clk", "iface_clk";};

2. msm8953-pinctrl.dtsi 中添加代码

     hsuart_active: default {mux {pins = "gpio20", "gpio21";function = "blsp_uart6";};config {pins = "gpio20", "gpio21";drive-strength = <2>;bias-disable;};};hsuart_sleep: sleep {mux {pins = "gpio20", "gpio21";function = "gpio";};config {pins = "gpio20", "gpio21";drive-strength = <2>;bias-disable;};};

3.在msm8953-nopmi-qrd.dtsi中添加代码

&blsp2_uart2 {status = "ok";pinctrl-names = "default";pinctrl-0 = <&hsuart_active>;
};

设备树配置完成后,编译bootimage,刷机,重启。

# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:25]
$ adb reboot bootloader       # user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:30]
$ fastboot flash boot boot.img
target reported max download size of 536870912 bytes
sending 'boot' (24775 KB)...
OKAY [  0.710s]
writing 'boot'...
OKAY [  0.358s]
finished. total time: 1.068s# user2 @ user2-HP-280-Pro-G2-MT-Legacy in ~/work/dujuan/out/target/product/msm8953_64 [14:13:35]
$ fastboot reboot

设备启动后,却没有找到预期的/dev/ttyHSL3的设备节点。
这里想到的是先确认设备树是否修改正确。

二、在根文件系统中查看设备树

参考资料:

设备树学习(十、在根文件系统中查看设备树)
在根文件系统中查看设备树(有助于调试)
以下内核属于转载

a. /sys/firmware/fdt

进入/sys/firmware目录后便可看到二个文件,一个是devicetree文件夹,另一个是fdt(原始dtb文件,可以用hexdump -C fdt 将其打印出来查看就会发现里面的数据和dtb文件是一致的)。

b. /sys/firmware/devicetree

以目录结构呈现的dtb文件。 根节点对应base目录, 每一个节点对应一个目录, 每一个属性对应一个文件

c. /sys/devices/platform

系统中所有的platform_device, 有来自设备树的, 也有来有.c文件中注册的
对于来自设备树的platform_device,可以进入 /sys/devices/platform/<设备名>/of_node 查看它的设备树属性(例如进入/sys/devices/platform/led/后若发现该目录下有of_node节点,就表明该platform_device来自设备树)

d. /proc/device-tree

是链接文件, 指向 /sys/firmware/devicetree/base

查看dump的fdt文件,发现里面是有uart6的配置信息,且配置是正确的。
然后到网络上寻找资料。

三、问题

添加uart设备树配置后,在设备中没有找到对应的设备节点。

四、查看修改驱动

在网络找到参考资料中发现是需要修改驱动文件,在我这里的uart是配置的第4路uart,需要到kernel/msm-3.18/drivers/tty/serial路径下修改msm_serial_hs_lite.c文件。
修改如下,添加一路uart

static struct msm_hsl_port msm_hsl_uart_ports[] = {{.uart = {.iotype = UPIO_MEM,.ops = &msm_hsl_uart_pops,.flags = UPF_BOOT_AUTOCONF,.fifosize = 64,.line = 0,},},{.uart = {.iotype = UPIO_MEM,.ops = &msm_hsl_uart_pops,.flags = UPF_BOOT_AUTOCONF,.fifosize = 64,.line = 1,},},{.uart = {.iotype = UPIO_MEM,.ops = &msm_hsl_uart_pops,.flags = UPF_BOOT_AUTOCONF,.fifosize = 64,.line = 2,},},{.uart = {.iotype = UPIO_MEM,.ops = &msm_hsl_uart_pops,.flags = UPF_BOOT_AUTOCONF,.fifosize = 64,.line = 3,},},
};

查看log,有正确加载驱动会打印出detected port #%d (ttyHSL%d) 的log,分析probe函数。
probe函数代码如下:

static int msm_serial_hsl_probe(struct platform_device *pdev)
{struct msm_hsl_port *msm_hsl_port;struct resource *uart_resource;struct resource *gsbi_resource;struct uart_port *port;struct msm_serial_hslite_platform_data *pdata;const struct of_device_id *match;u32 line;int ret;if (pdev->id == -1)pdev->id = atomic_inc_return(&msm_serial_hsl_next_id) - 1;/* Use line (ttyHSLx) number from pdata or device tree if specified */pdata = pdev->dev.platform_data;if (pdata)line = pdata->line;elseline = pdev->id;/* Use line number from device tree alias if present */if (pdev->dev.of_node) {dev_dbg(&pdev->dev, "device tree enabled\n");ret = of_alias_get_id(pdev->dev.of_node, "serial");if (ret >= 0)line = ret;pdata = msm_hsl_dt_to_pdata(pdev);if (IS_ERR(pdata))return PTR_ERR(pdata);pdev->dev.platform_data = pdata;}if (unlikely(line < 0 || line >= UART_NR))    return -ENXIO;pr_info("detected port #%d (ttyHSL%d)\n", pdev->id, line);......

在probe函数代码中关于line的判断处理如下:

// 这里 UART_NR的值是预处理的时候根据结构体msm_hsl_uart_ports元素个数确定的
#define UART_NR ARRAY_SIZE(msm_hsl_uart_ports)static int msm_serial_hsl_probe(struct platform_device *pdev)
{/* Use line (ttyHSLx) number from pdata or device tree if specified */pdata = pdev->dev.platform_data;if (pdata)line = pdata->line;        // 这里有个疑问,这个pdata结构体中的line是谁来更新的?elseline = pdev->id;/* Use line number from device tree alias if present */......if (unlikely(line < 0 || line >= UART_NR))return -ENXIO; // 这里 UART_NR的值是预处理的时候就确定的

综上:msm_hsl_uart_ports的元素个数是3的话,设备树中配置第四个uart会直接结束probe函数,不会打印相关log。
在msm_hsl_uart_ports中添加一个元素即可解决我遇到的问题。

msm8953 uart配置相关推荐

  1. UART配置调试指南

    UART配置(硬件描述) 1.根据原理图,查找相关的i2c引脚对应的GPIO值,以GPIO16作为UART1_TX,GPIO17作为UART1_RX为例. 2.查找GPIO16与GPIO17对应的BL ...

  2. ZigBee 裸机 uart 配置

    一.   usart 数据发送 1. usart介绍 1)cc2530中,有两个串口, UART0 对应的外部设备 IO 引脚关系为:P0_2------RX, P0_3------TX UART1 ...

  3. 全志 H6 Orange Pi Lite 2 Android 7.0 UART配置

    UART配置 查看原理图,确认管脚 从原理图可以确认,有串口UART3模块可以使用. 这里做了张图,方便以后对管脚. sys_config.fex配置 [uart3] uart3_used = 0 u ...

  4. 对MSP430F5438的时钟及uart配置

    对MSP430F5438的时钟及uart配置 在使用的过程中,一直认为比较简单,也一直没有深究,忽然这几天卡壳了,出现问题是操作UART发送出的数据给232显示,并不是想得到的数据.这里涉及了两个地方 ...

  5. 高通7x27a平台UART配置

    高通7x27a平台使用uart1作为debug的配置 高通7x27a平台一共有5个UART PORT: Port 对应的GPIO 描述 UART1 122+123 Can used for debug ...

  6. SL8521E开发笔记---UART配置

    简单的说,有多组 UART 控制器,有多组 UART PIN 引脚.UART PIN 可以灵活的分配给不同的 UART 控制器(不在同一个软件版本中).这个分配过程,就是去调整寄存器 REG_PIN_ ...

  7. [单片机框架][bsp层][N32G4FR][bsp_uart] UART配置和使用

    USART 简介 通用同步异步收发器(USART)是一种全双工或半双工,同步或异步的一个串行数据交换接口.USART 提 供了可编程的波特率发生器,能对系统时钟进行分频产生 USART 发送和接收所需 ...

  8. DSP UART配置和使用

    一,初始化 1,给UART模块上电 2,执行必要的设备pin多路复用设置(请参阅设备特定的数据手册). 3,配置 (1)通过将适当的时钟除数值写入除数锁存寄存器(DLL和DLH)来设置所需的波特率 ( ...

  9. stm8s uart配置

    uart一般配置为1个起始位,8个数据位,1个停止位,无奇偶校验.8s105只有UART2,初始化配置如下: UART2_CR1_M = 0;//一个起始位,8个数据位     UART2_CR1_P ...

  10. 7、RH850 F1 RLIN/UART功能和配置

    前言: UART是最常见的串行通讯,广泛应用于单片机和单片机之间通讯.这里UART/RLIN的具体原理讲解就不做介绍,不清楚的朋友可移步up主的个人专栏 ---- "串行通讯原理" ...

最新文章

  1. opencv函数copyto的用法
  2. vlc-android配置实录
  3. jquery实现点击a链接,跳转之后,该a链接处显示背景色
  4. Fedora20下安装VLC
  5. Nacos配置文件覆盖问题
  6. 程序员伪装 AI 编程,竟骗来 2 亿的投资!
  7. PAT 乙级 1009. 说反话 (20) Java版
  8. node2vec简单总结
  9. polyfit线性拟合函数
  10. ee er_61对词根相同后缀分别是er和ee的单词要这样区别记忆它们
  11. python3安装setuptools步骤_详解Python3中setuptools、Pip安装教程
  12. B站 下载版权保护视频
  13. 启用计算机的fn键,联想电脑怎么设置fn键
  14. 电脑连上网络,浏览器上不了网?
  15. 【NLP】从WE、ELMo、GPT到Bert模型—自然语言处理中的预训练技术发展史
  16. [渝粤教育] 中国传媒大学 计算机组成原理 参考 资料
  17. 对话《财富》40U40|闪马智能创始人兼CEO彭垚:人口、变局与下一代智慧系统
  18. SSO的实现和参考工具类
  19. SyntaxError :invalid syntax错误解决办法
  20. 单例模式-DoubleCheck

热门文章

  1. TCP中 滑动窗口RWND 和 拥塞窗口 CWND的区别
  2. html页面图片可点击事件,html中如何给图片添加点击事件的详解
  3. win7 摄像头驱动软件找不到,只有sys文件
  4. 发票显示服务器不可用什么原因,增值税发票服务平台常见问题汇总:发票勾选需要注意哪些问题?...
  5. 做网站有虚拟服务器,虚拟主机只能做网站吗
  6. SpringBoot整合Magic-Api
  7. h5页面 html,h5页面和普通页面的区别是什么
  8. php自动生成word目录,word怎么自动生成目录
  9. 清空文本框java_Java 添加、删除Word文档中的文本框
  10. MySQL garbled code