UART子系统(十六)编写虚拟UART驱动程序_调试

简介: UART子系统(十六)编写虚拟UART驱动程序_调试

编写虚拟UART驱动程序_调试


参考代码

硬件相关:
drivers/tty/serial/imx.c
drivers/tty/serial/stm32-usart.c
串口核心层:
drivers/tty/serial/serial_core.c
TTY层:
drivers/tty/tty_io.c


本节课程源码在GIT仓库里

doc_and_source_for_drivers\IMX6ULL\source\09_UART
  07_virtual_uart_driver_ok
doc_and_source_for_drivers\STM32MP157\source\A7\09_UART
  07_virtual_uart_driver_ok


1. 实验流程


1670941402754.jpg

2. 上机实验


2.1 设置工具链


1. STM32MP157

export ARCH=arm
export CROSS_COMPILE=arm-buildroot-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_stm32mp157_pro-sdk/ToolChain/arm-buildroot-linux-gnueabihf_sdk-buildroot/bin


2. IMX6ULL

export ARCH=arm
export CROSS_COMPILE=arm-linux-gnueabihf-
export PATH=$PATH:/home/book/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin


2.2 编译、替换设备树


1. STM32MP157

修改arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v1.dts,添加如下代码:

/ {
  virtual_uart: virtual_uart_100ask {
  compatible = "100ask,virtual_uart";
  interrupt-parent = <&intc>;
  interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
  };
};


编译设备树:

在Ubuntu的STM32MP157内核目录下执行如下命令,

得到设备树文件:arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v2.dtb

make dtbs


复制到NFS目录:

$ cp arch/arm/boot/dts/stm32mp157c-100ask-512d-lcd-v2.dtb ~/nfs_rootfs/


开发板上挂载NFS文件系统


vmware使用NAT(假设windowsIP为192.168.2.100)

[root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 
192.168.2.100:/home/book/nfs_rootfs /mnt


vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为192.168.2.137

[root@100ask:~]#  mount -t nfs -o nolock,vers=3 192.168.2.137:/home/book/nfs_rootfs /mnt


更新设备树

[root@100ask:~]# mount  /dev/mmcblk2p2  /boot
[root@100ask:~]# cp /mnt/stm32mp157c-100ask-512d-lcd-v1.dtb /boot
[root@100ask:~]# sync


重启开发板


2. IMX6ULL

修改arch/arm/boot/dts/100ask_imx6ull-14x14.dts,添加如下代码:

/ {
  virtual_uart: virtual_uart_100ask {
  compatible = "100ask,virtual_uart";
  interrupt-parent = <&intc>;
  interrupts = <GIC_SPI 99 IRQ_TYPE_LEVEL_HIGH>;
  };
};


编译设备树:

在Ubuntu的IMX6ULL内核目录下执行如下命令,

得到设备树文件:arch/arm/boot/dts/100ask_imx6ull-14x14.dtb

make dtbs


复制到NFS目录:

$ cp arch/arm/boot/dts/100ask_imx6ull-14x14.dtb ~/nfs_rootfs/


开发板上挂载NFS文件系统


vmware使用NAT(假设windowsIP为192.168.2.100)

[root@100ask:~]# mount -t nfs -o nolock,vers=3,port=2049,mountport=9999 
192.168.2.100:/home/book/nfs_rootfs /mnt


vmware使用桥接,或者不使用vmware而是直接使用服务器:假设Ubuntu IP为192.168.2.137

[root@100ask:~]#  mount -t nfs -o nolock,vers=3 192.168.2.137:/home/book/nfs_rootfs /mnt


更新设备树

[root@100ask:~]# cp /mnt/100ask_imx6ull-14x14.dtb /boot
[root@100ask:~]# sync


重启开发板


2.3 编译、安装驱动程序


编译:


在Ubuntu上

修改07_virtual_uart_driver_ok中的Makefile,指定内核路径KERN_DIR,在执行make命令即可。

安装:


在开发板上


挂载NFS,复制文件,insmod,类似如下命令:

mount -t nfs -o nolock,vers=3 192.168.2.137:/home/book/nfs_rootfs /mnt
// 对于IMX6ULL,想看到驱动打印信息,需要先执行
echo "7 4 1 7" > /proc/sys/kernel/printk
insmod -f /mnt/virtual_uart.ko


观察内核打印的信息


3. 调试


根据框架、数据流程来调试:

1670941330921.jpg

相关文章
|
Linux
Linux驱动开发(使用I2C总线设备驱动模型编写AT24C02驱动程序)
Linux驱动开发(使用I2C总线设备驱动模型编写AT24C02驱动程序)
158 0
|
缓存 Linux 定位技术
嵌入式Linux系列第7篇:操作UART
嵌入式Linux系列第7篇:操作UART
|
Web App开发 芯片
USB2S可编程USB转串口适配器的开发原理
USB2S可编程USB转串口适配器的开发原理主要涉及USB接口协议、USB控制器芯片以及串口通信协议等方面。
USB2S可编程USB转串口适配器的开发原理
|
XML 测试技术 网络安全
开发工具:USB转IIC/I2C/SPI/UART适配器模块可编程开发板
总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成上面几种接口的硬件时序电信号,实现与这几种接口芯片、设备的快速测试。 首先声明一下,大家都是搞硬件开发的,这几种接口当然是很简单的事,但有些时候对于一个新的设备或者芯片的测试,有个现成的工具当然更顺手,节省时间,也更可靠嘛。
|
XML 测试技术 网络安全
开发调试工具:可编程USB转IIC/I2C/SPI/UART适配器模块开发板
发个方便测试I2C、SPI、1Wire接口的工具模块 总的思路是通过USB或者UART接口发送一些协议字符串,由模块转换成上面几种接口的硬件时序电信号,实现与这几种接口芯片、设备的快速测试。
LED模板驱动程序的改造:总线设备驱动模型
LED模板驱动程序的改造:总线设备驱动模型
118 0
|
移动开发 Unix Linux
UART子系统(四) TTY驱动程序框架
UART子系统(四) TTY驱动程序框架
248 1
UART子系统(四) TTY驱动程序框架
|
Linux 开发工具 git
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
235 1
嵌入式linux/鸿蒙开发板(IMX6ULL)开发(三十)LED模板驱动程序的改造:总线设备驱动模型
|
XML 传感器 数据格式
可编程 USB 转串口适配器开发板主要开发测试作用
上面写的东西不少,其实这个模块用法特别简单,拿到套件和专门的工具软件后一分钟都不需要就完全明白了,如果想编写自己的xml驱动,随便打开一个照葫芦画瓢,然后另存就行。
|
开发工具 git
UART子系统(十三)编写虚拟UART驱动程序_框架
UART子系统(十三)编写虚拟UART驱动程序_框架
149 0
UART子系统(十三)编写虚拟UART驱动程序_框架