基于Yocto项目UART驱动开发

2019-07-13 04:07发布

官方的i.MX 6UltraLite EVK Board 的镜像中串口只打开了UART1和UART2,那么如何打开其他的串口,步骤记录如下:
  1. 查找内核
    查找Yocto项目下内核存放路径,点击参考命令链接 。因为我不知道内核名称任何信息(因为我是初次使用Yocto开发项目,对其完全不了解,一头雾水),我使用bitbake -s | grep linux ,如图1:
    图1寻找内核
    初步了解知道linux-fslc-imx是我们使用的内核,大多数情况可能是linux-imx。
    输入如下命令bitbake -e linux-fslc-imx | grep ^S=,如图2:
    图2寻找内核路径
    可以发现上图路径就是我们使用内核的路径,我的内核如图3:
    图3内核
  2. 修改dts文件
    我使用的linux内核版本是V4.1,找到dts文件夹,如图4:
    图4dts文件路径和内容
    因为我是在官方EVK Board BSP下开发驱动,所以需要编辑的文件是imx6ul-14x14-evk.dts,可以发现该文件中只有UART1和UART2中status = "okay"; 为了打开UART3、UART4、UART5和UART7,在其iomuxc中添加如下代码,如图5:
    图5添加UART内容 具体说明参见链接1链接2
    在这里要注意,如果.dts中文件中已经使用过UART3、UART4、UART5和UART7的TX_DATA和RX _DATA,那么需要做相应处理。
    除了对应引脚正确,还需要使能UART3、UART4、UART5和UART7的状态,如图6:
    图6设备状态
    从图上可以发现,注意:不是dtsi文件中所有的节点都会被注册,在注册总线和设备时,会对dts节点的状态作一个判断,如果节点里面的status属性没有被定义,或者status属性被定义了并且值被设为“ok”或者“okay”,其他情况则不被注册到系统中。
  3. 编译内核
    在命令行中输入命令:bitbake linux-fslc-imx -c compile -f 内核开始编译,并在内核目录上级目录的deploy-linux-fslc-imx目录下生成了zImage和.dtb文件。可以使用如图7方法,拷贝两个文件到SD卡中。
    图7拷贝内核镜像和DTB文件
  4. 编译自定义镜像
    在命令行中输入命令:bitbake bdgk-image ,”bdgk-image”是在Freescale Yocto编译自定义Linux系统镜像。如果编译没有错误,在tmp/deploy/images/imx6ulevk/目录下可以生成SD卡镜像文件,如图8:
    图8镜像文件