这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 米尔i.MX6UL开发板Linux操作系统的环境部署 (二)

共3条 1/1 1 跳转至

米尔i.MX6UL开发板Linux操作系统的环境部署 (二)

菜鸟
2018-01-11 14:11:14     打赏

硬件米尔i.MX6UL开发板MYD-Y6ULX

简介:MYD-Y6ULX开发板(i.MX6UL开发板)由MYC-Y6ULX核心板和底板组成,基于NXP i.MX6UL处理器或i.MX6ULL处理器可选,MYD-Y6ULX开发板(i.MX6ULL开发板)提供丰富外设硬件,板载了Mini PCIE接口(用于4G模块)及SIM卡槽、WIFI芯片及天线接口、双百兆网口、LCD液晶接口、音频接口、带隔离的CAN,RS485,RS232等


2.构建系统
本章主要介绍MYD-Y6ULX开发板上, Linux操作系统相关部件的编译和使用。MYD-Y6ULX的Linux系统包含以下部件: U-Boot: 引导程序,支持不同方式启动内核。 Linux Kernel: 适用于MYD-Y6ULX开发板的Linux 4.1.15内核,同时包含支持板载外设的驱动。 Yocto: 一个开源协作项目,提供丰富的模板、工具和方法来支持构建出面向嵌入式产品的自定义Linux系统。 本章中用到的代码存放在资源包04-Source目录下,编译u-boot和Linux内核代码前,请先安装meta-toolchain并加载环境变量到当前shell

2.1 编译U-Boot
进入Bootloader目录,解压U-boot源码:
cd $DEV_ROOT/04-Source/

tar -xvf MYiR-iMX-uboot.tar.gz

cd MYiR-iMX-uboot
开始编译:
make distclean

make <config>

make
这里的是配置选项名称,不同的启动模式需使用不同的配置选项,MYD-Y6ULX开发板有两种选项:
启动模式                                        编译选项
MYD-Y6ULX NAND Flash           myd_y6ull_14x14_nand_defconfig
MYD-Y6ULX SD Card                 myd_y6ull_14x14_sd_defconfig
u-boot SD卡方式启动时默认会先检测"boot.scr"文件,这是u-boot上的脚本镜像文件,用于临时改变启动设备顺序。以下是从TFTP下载zImage和dtb 文件并启动的脚本例子。使用mkimage工具"myd-y6ull-boot-mmc0-tftp.txt"文件制做成"boot.scr"文件,mkimage工具是在u-boot的tools目录下,uboot编译完成后,mkimage也会被编译出来,直接使用即可。
cat myd-y6ull-boot-mmc0-tftp.txt

setenv mmcroot '/dev/mmcblk0p2 rootwait rw rootdelay=5 mem=256M'

run mmcargs

tftpboot 0x83000000 zImage

tftpboot 0x84000000 myd-y6ull-gpmi-weim.dtb

bootz 0x83000000 - 0x84000000
./tool/mkimage -A arm -T script -O linux -d myd-y6ull-boot-mmc0-tftp.txt boot.scr

2.2  Linux Kernel
进入Kernel目录,解压内核源码:
cd $DEV_ROOT/04-Source

tar -xvf MYiR-iMX-Linux.tar.gz

cd MYiR-iMX-Linux
开始编译:
make distclean

make myd_y6ulx_defconfig

make zImage dtbs
编译完成后在"arch/arm/boot"目录会生成内核镜像文件zImage,在"arch/arm/boot/dts"目录会生成DTB文件。
DTB文件                                         备注
myd-y6ull-gpmi-weim.dtb      MYD-Y6ULX NAND启动方式
MYD-Y6ULX板上的Micro SD卡槽是连接mmc0控制器,所有的dtb文件都是默认启用mmc0控制器。 SD卡方式启动时,U-Boot默认查找的文件是myd-imx6ull-14x14-evk-gpmi-weim.dtb文件。 更新kernel后,由于版本标识改变,若驱劝是以模块方式加载,需要重新编译驱动模块:
make modules
编译后,可以安装在指定位置:
mkdir ../target-kernel

make INSTALL_MOD_PATH=../target-kernel modules_install
这样就可以把target-kernel目录打包后,解压在MYD-Y6ULX开发板的/lib目录下使用。

 2.3构建文件系统
Linux系统平台上有许多开源的系统构建框架,这些框架方便了开发者进行嵌入式系统的构建和定制化开发,目前比较常见的有Buildroot, Yocto, OpenEmbedded等等。其中Yocto项目使用更强大和定制化的方法,来构建出适合嵌入式产品的Linux系统。

Yocto不仅仅是一个制做文件系统工具,同时提供整套的基于Linux的开发和维护工作流程,使底层嵌入式开发者和上层应用开发者在统一的框架下 开发,解决了传统开发方式下零散和无管理的开发形态。

Yocto是一个开源的“umbrella”项目,意指它下面有很多个子项目,Yocto只是把所有的项目整合在一起,同时提供一个参考构建项目Poky,来指导开 发人员如何应用这些项目,构建出嵌入式Linux系统。它包含Bitbake, OpenEmbedded-Core, 板级支持包,各种软件包的配置文件。通过Poky,可以 构建出不同类需求的系统,如最小的系统core-image-minimal、全功能命令行系统core-image-base、带Qt5图形库的fsl-image-qt5。

MYD-Y6YKX提供了符合Yocto的配置文件,帮助开发者构建出可烧写在MYD-Y6ULX板上的Linux系统镜像。 Yocto还提供了丰富的开发文档资源,让开发者学习并定制自己的系统。由于篇幅有限,不能完整介绍Yocto的使用方法,建议开发者先阅读以下文 档后,再开始动手构建。

Yocto Project Quick start

Bitback User Manual

Yocto Project Reference Manual

Yocto Project Development Manual

Yocto Project Complete Documentation Set

2.2.1  Yocto构建Linux系统
本节适合需要对文件系统进行深度定制的开发者,希望从Yocto构建出符合MYD-Y6ULX系列开发板的文件系统,同时基于它的定制需求。初次体验 使用或无特殊需要的开发者可以直接使用MYD-Y6ULX已经提供的文件系统。 由于Yocto构建前需要下载文件系统中所有软件包到本地,为了快速构建,MYD-Y6ULX已经把相关的软件打包好,可以直接解压使用,减少重复下 载的时间。 注意:构建Yocto不需要加载工具链环境变量,请创建新shell或打开新的终端窗口。
MYD-Y6ULX提供的Yocto
解压Yocto源码包,同时解压Yocto-downloads.tar.xz软件包至Yocto目录下。Yocto-downloads.tar.xz是把Yocto构建中用到的第三方软件包打包,免除 开发者再次下载花费的时间。 注意:由于Yocto-downloads.tar.xz文件较大,无法与MYD-Y6ULX打包在同一文件内,请访问网页下载: http://down.myir-tech.com/MYD-Y6ULX/。 文件名为Yocto-downloads.tar.xz。
cd $DEV_ROOT

tar xvf 04-Source/fsl-release-yocto.tar.xz

tar xvf 04-Source/Yocto-downloads.tar.xz -C fsl-release-bsp
还需要将Linux内核和U-Boot代码放在用户家目录下,方便开发和Yocto编译。
tar xvf 04-Source/MYiR-iMX-Linux.tar.gz -C ~/

tar xvf 04-Source/MYiR-iMX-uboot.tar.gz -C ~/
初始化Yocto构建目录
使用NXP提供的fsl-setup-release.sh脚本,会创建一个工作空间,然后在此空间下构建镜像。执行脚本后会先要求阅读并同意版权声明后才会进入构 盡过目录。同时,脚本会默认创建并进入build目录。如果需要特定目录名称,可以使用-b参数,如"-b myir"。 这里的MACHINE参数为"mydy6ull14x14"。
cd fsl-release-bsp

DISTRO=myir-imx-fb MACHINE=myd-y6ull14x14 source fsl-setup-release.sh -b build

tree conf/

conf/

├── bblayers.conf

├── bblayers.conf.org

├── local.conf

├── local.conf.org

├── local.conf.sample

├── sanity_info

    └── templateconf.cfg
build/conf目录下是当前构建的配置文件。上面在初始化后,就可以构建适合"myd-y6ull14x14"的镜像了。
构建GUI Qt5版的系统
第一次构建时,会需要很长时间,请耐心等待。
bitbake fsl-image-qt5
构建非GUI版的系统
第二次构建时,如果是同设备,不需要修改其它文件,直接编译即可。
bitbake core-image-base
Image名称                     描述                                        用途
core-image-minimal minimal版本的文件系统 用于MYD-Y6ULX的升级或更新系统
core-image-base base版本的终端更多功能的镜像 通用的文件系统
fsl-image-qt5 构建基于Qt5的镜像 带Qt5的通用文件系统
构建文件系统完成后,会在输出目录下有manifest文件,这个文件里包含了对应文件系统中已安装的软件包。 Yocto第一次构建会需要很长时间,取决于计算机的CPU核心数和硬件读写速度。Yocto建议可以使用八核和SSD硬盘可以加速构建速度。第一次构 建完成后会生成缓存,后面修改的构建,时间会减少很多。 檭建完成后在会"tmp/deploy/images/myd-y6ull14x14/"目录下生成不同的文件,以下是构建后的一个例子:
ls -lh tmp/deploy/images/myd-y6ull14x14/

total 1.4G

-rw-r--r-- 1 kevinchen kevinchen  64M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.ext4

-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.manifest

-rw-r--r-- 1 kevinchen kevinchen  80M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.sdcard

-rw-r--r-- 1 kevinchen kevinchen  15M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.bz2

-rw-r--r-- 1 kevinchen kevinchen  11M Oct 11 16:16 core-image-base-myd-y6ull14x14-20171011081338.rootfs.tar.xz

-rw-r--r-- 1 kevinchen kevinchen  64M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.ext4
-rw-r--r-- 1 kevinchen kevinchen 4.4K Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.manifest

-rw-r--r-- 1 kevinchen kevinchen  80M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.sdcard

-rw-r--r-- 1 kevinchen kevinchen  15M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.bz2

-rw-r--r-- 1 kevinchen kevinchen  11M Oct 11 16:48 core-image-base-myd-y6ull14x14-20171011084756.rootfs.tar.xz

lrwxrwxrwx 1 kevinchen kevinchen   57 Oct 11 16:48 core-image-base-myd-y6ull14x14.ext4 -> core-image-base-myd-y6ull14x14-20171011084 756.rootfs.ext4

lrwxrwxrwx 1 kevinchen kevinchen   61 Oct 11 16:48 core-image-base-myd-y6ull14x14.manifest -> core-image-base-myd-y6ull14x14-2017101 1084756.rootfs.manifest

lrwxrwxrwx 1 kevinchen kevinchen   59 Oct 11 16:48 core-image-base-myd-y6ull14x14.sdcard -> core-image-base-myd-y6ull14x14-201710110 84756.rootfs.sdcard

lrwxrwxrwx 1 kevinchen kevinchen   60 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.bz2 -> core-image-base-myd-y6ull14x14-20171011 084756.rootfs.tar.bz2

lrwxrwxrwx 1 kevinchen kevinchen   59 Oct 11 16:48 core-image-base-myd-y6ull14x14.tar.xz -> core-image-base-myd-y6ull14x14-201710110 84756.rootfs.tar.xz

-rw-r--r-- 1 kevinchen kevinchen 532M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.ext4

-rw-r--r-- 1 kevinchen kevinchen 7.3K Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.manifest

-rw-r--r-- 1 kevinchen kevinchen 548M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.sdcard

-rw-r--r-- 1 kevinchen kevinchen 111M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.bz2

-rw-r--r-- 1 kevinchen kevinchen  64M Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14-20171011090003.rootfs.tar.xz lrwxrwxrwx 1 kevinchen kevinchen   55 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.ext4 -> fsl-image-qt5-myd-y6ull14x14-20171011090003. rootfs.ext4

lrwxrwxrwx 1 kevinchen kevinchen   59 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.manifest -> fsl-image-qt5-myd-y6ull14x14-20171011090 003.rootfs.manifest

lrwxrwxrwx 1 kevinchen kevinchen   57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.sdcard -> fsl-image-qt5-myd-y6ull14x14-2017101109000 3.rootfs.sdcard

lrwxrwxrwx 1 kevinchen kevinchen   58 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.bz2 -> fsl-image-qt5-myd-y6ull14x14-201710110900 03.rootfs.tar.bz2 l

rwxrwxrwx 1 kevinchen kevinchen   57 Oct 11 17:02 fsl-image-qt5-myd-y6ull14x14.tar.xz -> fsl-image-qt5-myd-y6ull14x14-2017101109000 3.rootfs.tar.xz

-rw-r--r-- 2 kevinchen kevinchen 1.3M Oct 11 16:47 modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tgz lrwxrwxrwx 1 kevinchen kevinchen   52 Oct 11 16:47 modules-myd-y6ull14x14.tgz -> modules--4.1.15-r0-myd-y6ull14x14-20171011084447.tgz

-rw-r--r-- 2 kevinchen kevinchen  294 Oct 11 17:01 README_-_DO_NOT_DELETE_FILES_IN_THIS_DIRECTORY.txt

lrwxrwxrwx 1 kevinchen kevinchen   26 Oct 11 16:01 u-boot.imx -> u-boot-nand-2016.03-r0.imx

lrwxrwxrwx 1 kevinchen kevinchen   26 Oct 11 16:01 u-boot.imx-nand -> u-boot-nand-2016.03-r0.imx lrwxrwxrwx 1 kevinchen kevinchen   24 Oct 11 16:01 u-boot.imx-sd -> u-boot-sd-2016.03-r0.imx

lrwxrwxrwx 1 kevinchen kevinchen   26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx -> u-boot-nand-2016.03-r0.imx

lrwxrwxrwx 1 kevinchen kevinchen   26 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-nand -> u-boot-nand-2016.03-r0.imx

lrwxrwxrwx 1 kevinchen kevinchen   24 Oct 11 16:01 u-boot-myd-y6ull14x14.imx-sd -> u-boot-sd-2016.03-r0.imx -rwxr-xr-x 2 kevinchen kevinchen 395K Oct 11 16:01 u-boot-nand-2016.03-r0.imx -rwxr-xr-x 2 kevinchen kevinchen 343K Oct 11 16:01 u-boot-sd-2016.03-r0.imx

lrwxrwxrwx 1 kevinchen kevinchen   51 Oct 11 16:47 zImage -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin

-rw-r--r-- 2 kevinchen kevinchen 6.2M Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin -rw-r--r-- 2 kevinchen kevinchen  37K Oct 11 16:47 zImage--4.1.15-r0-myd-y6ull-gpmi-weim-20171011084447.dtb

lrwxrwxrwx 1 kevinchen kevinchen   51 Oct 11 16:47 zImage-myd-y6ull14x14.bin -> zImage--4.1.15-r0-myd-y6ull14x14-20171011084447.bin

lrwxrwxrwx 1 kevinchen kevinchen   56 Oct 11 16:47 zImage-myd-y6ull-gpmi-weim.dtb -> zImage--4.1.15-r0-myd-y6ull-gpmi-weim-201710110 84447.dtb
生成的文件中,有一些是链接文件,下面是不同文件的用途:
文件名 用途
*.rootfs.manifest 文件系统内的软件列表
*.rootfs.ext4 打包成ext4格式的文件系统
*.rootfs.sdcard 可直接写入SD卡,从SD卡启动的镜像
*.rootfs.tar.bz2 打包成tar.bz2格式的文件系统
*.rootfs.tar.xz 打包成tar.xz格式的文件系统
u-boot-sd-2016.03-r0.imx 适合从SD启动的u-boot镜像
u-boot-nand-2016.03-r0.imx 适合从NAND启动的u-boot镜像
Bitbake常用命令
Bitbake 参数 描述
-c fetch 从recipe中定义的地址,拉取软件到本地
-c cleanall 清空整个构建目录
-c deploy 部署镜像或软件包到目标rootfs内
-k 有错误发生时也继续构建
-c compile 重新编译镜像或软件包
更多Yocto使用方法,请参考NXP官方Yocto使用文档《i.MX Yocto Project User's Guide》。

2.2.2 Yocto构建SDK工具
Yocto提供可构建出SDK工具的功能,用于底层或上层应用开发者使用的工具链和相关的头文件或库文件,免去用户手动制做或编译依赖库。SDK工 具有两种,一种是适合底层开发的工具链,用于编译u-boot和linux内核代码,另外一种是应用开发工具链,附带目标系统的头文件和库文件,方便 应用开发者移植应用在目标设备上。两种SDK工具都是shell自解压文件,执行后,默认安装在/opt目录下。
构建底层工具连
bitbake meta-toolchain
构建完成后,在"tmp/deploy/sdk"目录下有三个文件:
ls tmp/deploy/sdk/ -lh

myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest

myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

myir-imx-fb-glibc-x86_64-meta-toolchain-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
这里有两个manifest文件,host.manifest是工具链中包含主机端的软件包的列表,target.manifest是包含目标设备端的软件包列表。
构建应用层工具链
应用层工具链是和Image名称是统一的,这里可以使用"fsl-image-qt5"和"core-iamge-base"两种参数。
bitbake -c populate_sdk <image name>
构建完成后,同样在"tmp/deploy/sdk/"目录下有六个文件:
ls tmp/deploy/sdk/ -lh

myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest

myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

myir-imx-fb-glibc-x86_64-core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest

myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.host.manifest

myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh

myir-imx-fb-glibc-x86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.target.manifest
".host.manifest"文件表示工具链中包含主机端的软件包列表,".target.manifest"表示工具链中包含目标设德端的软件包列表。"myir-imx-fb-glibcx86_64-fsl-image-qt5-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是构建出的fsl-image-qt5镜像对应的SDK工具链,"myir-imx-fb-glibc-x86_64core-image-base-cortexa7hf-neon-toolchain-4.1.15-2.0.1.sh"文件是构建出的core-image-base镜像对应的SDK工具链。可以直接安装在其他Linux系 统中,开发和编译目标端设备的二进制程序。


3. Linux应用开发
本章主要介绍MYD-Y6ULX开发板底板外围硬件设备应用例程的使用。 使用前,需要先安装Yocto提供的SDK工具链,再编译所有例程代码,并拷贝至开发板目录下。
编译应用例程
加载工具链到当前终端后,可以查看gcc的版本信息,确认当前环境已正确加载。
$source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-\ poky-linux-gnueabi
$ arm-poky-linux-gnueabi-gcc --version arm-poky-linux-gnueabi-gcc (GCC) 5.3.0 Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions.  There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
编译示例代码:
$cd $DEV_ROOT/04-Sources

$tar xvf example.tar.gz

$cd example

$make

3.1 LCD测试
本例程演示对Linux的FrameBuffer设备操作,实现液晶输出显示RGB颜色和颜色合成测试。例程基于Linux FrameBuffer API接口开发。测试前需要把 LCD连接至J3接口上。 米尔科技提供三种LCD模块,Linux默认配置为MY-TFT043RV2。
型号                            描述
MY-TFT070CV2     7寸电容屏
MY-TFT070RV2     7寸电阻屏
MY-TFT043RV2     4.3寸电阻屏
执行程序后,LCD液晶屏会出现相应颜色,以下是终端输出信息:
# ./framebuffer_test

The framebuffer device was opened successfully.

vinfo.xres=480

vinfo.yres=272

vinfo.bits_per_bits=16

vinfo.xoffset=0

vinfo.yoffset=0

red.offset=11

green.offset=5

blue.offset=0

transp.offset=0

finfo.line_length=960

finfo.type = PACKED_PIXELS

The framebuffer device was mapped to memory successfully.

color: red   rgb_val: 0000F800

color: green   rgb_val: 000007E0

color: blue   rgb_val: 0000001F

color: r & g   rgb_val: 0000FFE0

color: g & b   rgb_val: 000007FF

color: r & b   rgb_val: 0000F81F

color: white   rgb_val: 0000FFFF

color: black   rgb_val: 00000000
支持MY-TFT070RV2的配置方法
MYD-Y6ULX开发板中提供的Linux代码已经支持该模块的显示和触摸功能。MY-TFT070RV2的触摸功能是通过ADC采样方式,dts代码中已配置好,只 需要启用相应功能即要可。 第一步,编辑"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status属性为okay。
  &tsc {    

           pinctrl-names = "default";   

           pinctrl-0 = <&pinctrl_tsc>;    

          xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;    

          measure-delay-time = <0xfffff>;    

          pre-charge-time = <0xffff>;   

          status = "okay";  };
第二步,将默认的4.3寸屏莫的配置注释,并打开7.0寸的配置。找到lcfif节点下的display-timings节点,修改如下:
        display-timings {          

  native-mode = <&timing0>;  /*           

  timing0: timing0 {           

  clock-frequency = <9200000>            

hsync-len = <41>;           

  vback-porch = <2>;            

vfront-porch = <4>;            

vsync-len = <10>;
            

hsync-active = <0>;           

  vsync-active = <0>;            

de-active = <1>;          

   pixelclk-active = <0>;        

     };  */           

  timing0: timing0 {          

   clock-frequency = <33000000>;        

     hactive = <800>;         

    vactive = <480>;           

  hfront-porch = <210>;            

hback-porch = <46>;          

   hsync-len = <1>;           

  vback-porch = <22>;          

   vfront-porch = <23>;            

vsync-len = <20>;
           

  hsync-active = <0>;         

    vsync-active = <0>;       

      de-active = <1>;         

    pixelclk-active = <1>;      

       };

支持MY-TFT070CV2的配置方法 MY-TFT070CV2模块的触摸使用的是I2C方式通讯,丛设备已添加到i2c2控制器上。使用前禁用tsc控制器,再启用7寸屏的配置参数即可。 第一步,编辑"arch/arm/boot/dts/myb-y6ull-14x14.dts"文件,修改tsc的status属性为disabled。
  &tsc {  

   pinctrl-names = "default";   

  pinctrl-0 = <&pinctrl_tsc>;    

xnur-gpio = <&gpio1 3 GPIO_ACTIVE_LOW>;    

measure-delay-time = <0xfffff>;   

pre-charge-time = <0xffff>;    

status = "disabled";  };
第二步,将默认的4.3寸屏莫的配置注释,并打开7.0寸的配置。找到lcfif节点下的display-timings节点,修改如下:
        display-timings {           

native-mode = <&timing0>;  /*            

timing0: timing0 {            

clock-frequency = <9200000>            

hsync-len = <41>;            

vback-porch = <2>;            

vfront-porch = <4>;            

vsync-len = <10>;
             hsync-active = <0>;            

vsync-active = <0>;            

de-active = <1>;            

pixelclk-active = <0>;            

};  */            

timing0: timing0 {            

clock-frequency = <33000000>;            

hactive = <800>;            

vactive = <480>;            

hfront-porch = <210>;            

hback-porch = <46>;            

hsync-len = <1>;            

vback-porch = <22>;            

vfront-porch = <23>;            

vsync-len = <20>;
             hsync-active = <0>;            

vsync-active = <0>;            

de-active = <1>;            

pixelclk-active = <1>;           

  };
        };


3.2 触摸测试
MYD-Y6ULX支持两种触摸方式,电容和电阻。米尔科技可提供两种带触摸的液晶,7寸电容MY-TFT070CV2和4.3寸电阻MY-TFT043RV2。 触摸测试可以使用ts_calibrate和ts_test命令,ts_calibrate用于触摸校验,ts_test用于测试。其中,命令需要变量"TSLIB_TSDEVICE"来找到触摸设 备,不同触摸方式的设备节点不一定相同,请对应设备填写。
# export TSLIB_TSDEVICE=/dev/input/event1
# ts_calibrate

//测试触摸屏

# ts_test


 3.3Ethernet 测试
本例使用Linux sokect API,实现简单的C/S结构的程序,两个程序通过TCP/IP协议栈通信。将可执行程序arm_client拷贝至开发板,pc_server拷贝 至PC,将开发板和PC接入网络。 在 PC 上配置IP并运行服务程序:
$ sudo ifconfig eth0 192.168.1.111

$ ./pc_server

REC FROM: 192.168.1.222
在开发板上运行客户程序,将看到所发送的信息:
# ifconfig eth0 192.168.1.222

# ./arm_client 192.168.1.111

form server: Make Your idea Real!


3 .4GPIO-KEY 测试
本例演示如何在Linux用户空间读取按键状态和键值。运行gpio_key程序后,按下或释放S2按键,串口会输出相应按键的状态信息。按下"Ctrl-C"可 退出程序。 在开发板的控制终端上执行程序:
# ./gpio_key /dev/input/event2

Hit any key on board ......

key 2 Pressed

key 2 Released

key 2 Pressed

key 2 Released


3.5GPIO-LED 测试
本例程演示使用Linux系统API操作开发板上的LED灯,D30。运行程序后,D30闪烁。按下"Ctrl-C"可结束程序。
# ./gpio_led /sys/class/leds/user/brightnes


 3.6USB Host 测试
使用USB存储设备插入USB HOST(J6)接口,调试串口会输出检测设备信息。同时,使用将此存储设备挂载至linux系统下对其读写。
# usb 1-2: USB disconnect, device number 6

usb 1-2: new high-speed USB device number 7 using atmel-ehci

usb 1-2: New USB device found, idVendor=0bda, idProduct=0316

usb 1-2: New USB device strings: Mfr=1, Product=2, SerialNumber=3

usb 1-2: Product: USB3.0-CRW

usb 1-2: Manufacturer: Generic

usb 1-2: SerialNumber: 20120501030900000

usb-storage 1-2:1.0: USB Mass Storage device detected

scsi host5: usb-storage 1-2:1.0

scsi 5:0:0:0: Direct-Access     Generic- SD/MMC           1.00 PQ: 0 ANSI: 4

sd 5:0:0:0: [sda] 31116288 512-byte logical blocks: (15.9 GB/14.8 GiB)

sd 5:0:0:0: [sda] Write Protect is off sd 5:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA

sda: sda1 sda2

sd 5:0:0:0: [sda] Attached SCSI removable disk
# mount /dev/sda1 /mnt/

# echo "hello" > /mnt/hello.txt

# cat /mnt/hello.txt

hello


3.7 USB Device测试
本例程演示使用开发板的Micro USB接口(J26)作为Device模式,可以将指定的文件或设备模拟为设备,连接到其它USB HOST设备。这里把内存作为 存储设备提供给HOST设备。 开发板上使用modprobe加载驱动:
#mkfs.vfat /dev/ram1

#modprobe g_mass_storage file=/dev/ram1 removable=1 \

iSerialNumber="1234"


[ 3048.950498] Mass Storage Function, version: 2009/09/11

[ 3048.982245] LUN: removable file: (no medium)

[ 3048.997849] LUN: removable file: /dev/ram1

[ 3049.000674] Number of LUNs=1

[ 3049.002272] Number of LUNs=1 [ 3049.023990] g_mass_storage gadget: Mass Storage Gadget,

version: 2009/09/11

[ 3049.029682] g_mass_storage gadget: g_mass_storage ready

[ 3094.766373] g_mass_storage gadget: high-speed config

#1: Linux File-Backed Storage

Linux PC机上查看到有USB设备接入,SerialNumber为"1234",Manufacturer是内核构建版本号:
#dmesg | tail -n 20

[2872436.778616] usb 1-1: USB disconnect, device number 102

[2872436.779156] sd 3:0:0:0: [sdb] Synchronizing SCSI cache

[2872436.779201] sd 3:0:0:0: [sdb] Synchronize Cache(10)

failed: Result: hostbyte=DID_NO_CONNECT driverbyte=DRIVER_OK

[2872442.508567] usb 1-1: new high-speed USB device number 103 using xhci_hcd

[2872442.650549] usb 1-1: New USB device found, idVendor=0525, idProduct=a4a5

[2872442.650551] usb 1-1: New USB device strings: Mfr=3, Produ ct=4, SerialNumber=5

[2872442.650552] usb 1-1: Product: Mass Storage Gadget

[2872442.650553] usb 1-1: Manufacturer: Linux 4.1.15-1.2.0+g8d9 8da6 with 2184000.usb [2872442.650554] usb 1-1: SerialNumber: 1234

[2872442.657827] usb-storage 1-1:1.0: USB Mass Storage device detected

[2872442.657895] usb-storage 1-1:1.0: Quirks match for vid 0525 pid a4a5: 10000

[2872442.657923] scsi host3: usb-storage 1-1:1.0

[2872443.669426] scsi 3:0:0:0: Direct-Access     Linux    FileStor Gadget 0401 PQ: 0 ANSI: 2 [2872443.669886] sd 3:0:0:0: Attached scsi generic sg1 type 0

[2872443.670820] sd 3:0:0:0: [sdb] 131072 512-byte logical blocks: (67.1 MB/64.0 MiB) [2872443.779976] sd 3:0:0:0: [sdb] Write Protect is off

[2872443.779979] sd 3:0:0:0: [sdb] Mode Sense: 0f 00 00 00

[2872443.890093] sd 3:0:0:0: [sdb] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA [2872444.110372]  sdb:

[2872444.330074] sd 3:0:0:0: [sdb] Attached SCSI removable disk


3.8RS485 测试
本例程演示如何使用 Linux Serial API编程,使用RS485接口,实现数据发送和接收,详细请参考源码。
硬件连接
MYD-Y6ULX上有一个RS485接口(J10),可以将A,B信号线与另外的RS485设备相连接。或者是USB转RS485的转换器设备。
软件测试
将编译出来的可执行程序拷贝至MYD-Y6ULX开发板系统内。MYD-Y6ULX作为发送端执行以下命令,另外一端的设备可以接数据。
# ./rs485_write -d /dev/ttymxc3 -b 4800 -e 1

SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

SEND[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
另一个设备作为接收端:
# ./rs485_read -d /dev/ttymxc3 -b 4800 -e 1

RECV[20]: 0x010x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14

RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11

0x12 0x13 0x14


 3.9 RS232 测试
本例程演示如何使用 Linux Serial API编程,使用RS232接口,实现数据发送和接收,详细请参考源码。
硬件连接
MYD-Y6ULX上有一个RS232接口(J10),可以将TXD,RXD信号线与另外的RS232设备相连接。或者是USB转RS232的转换器设备,此处使用USB转 RS232设备连接到PC。
软件测试
将编译出来的可执行程序拷贝至MYD-Y6ULX开发板系统内。MYD-Y6ULX作为发送端执行以下命令,PC端接收数据。
# ./uart_test -d

/dev/ttymxc1 -b 115200

/dev/ttyS1 RECV 10 total

/dev/ttyS1 RECV: 1234567890

/dev/ttyS1 RECV 10 total

/dev/ttyS1 RECV: 1234567890

/dev/ttyS1 RECV 10 total

/dev/ttyS1 RECV: 1234567890

/dev/ttyS1 RECV 10 total

/dev/ttyS1 RECV: 1234567890
在PC端可以使用串口工具查看接收的数据。


3.10 CAN Bus 测试
本例程演示使用Linux socket CAN API,使用MYD-Y6ULX上的CAN总线接口发送和接收数据。将can_send和can_receive拷贝至开发板。执行以下步 骤:
硬件连接
MYD-Y6ULX开发板有一个CAN总线接口(J10),将H,L信号线与另外的CAN通讯设备或USB CAN转换器相连接。
软件测试
配置开发板上CAN0通信波特率都设置为 50kbps,并使能CAN0设备 Linux上可以使用两种工具来配置CAN设备,canconfig和ip,MYD-Y6ULX附带的系统默认使用ip命令。 canconfig命令配置:
# canconfig can0 bitrate 50000 ctrlmode triple-sampling on

# canconfig can0 start
ip命令配置
# ip link set can0 type can bitrate 50000 triple-sampling on

# ifconfig can0 up
CAN收发测试可以使用系统附带的cansend、candump命令,也可以使用资源包中CAN收发例程。 MYD-Y6ULX作为发送端: 使用cansend发送数据到CAN总线:
# cansend can0 100

#01.02.03.04.05.06.07.08
can_send例程运行后会一直发送数据,直到ctrl + c结束。
# ./can_send -d can0 -i 100 0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88
其他设备作为接收端: 使用candump接收CAN数据:
# candump can0

# can0  100   [8]  01 02 03 04 05 06 07 08
can_receive例程接收来自CAN总线的数据:
# ./can_receive -d can0

can0  0x100  [8]  0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

can0  0x100  [8]  0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

can0  0x100  [8]  0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88

can0  0x100  [8]  0x11 0x22 0x33 0x44 0x55 0x66 0x77 0x88



此章结束,下一章将继续介绍i.MX6UL开发板的Linux文件系统的构建方法





关键词: 米尔     i.MX6UL     i.MX6ULL    

专家
2018-01-15 14:28:30     打赏
2楼

楼主能先发个目录吗?


菜鸟
2018-01-16 12:01:23     打赏
3楼

本文是分几章单独介绍的,有兴趣可以关注后续的文章分享哦

目錄

(一)构建系统
1.1 U-Boot
1.2 Linux Kernel
1.3 构建文件系统
     1.3.1 Yocto构建Linux系统
     1.3.2 Yocto构建SDK工具
(二)Linux应用开发
2.1 LCD测试
2.2 触摸测试
2.3 Ethernet测试
2.4 GPIO-KEY测试
2.5 GPIO-LED测试
2.6 USB Host测试
2.7 USB Device测试
2.8 RS485测试
2.9 RS232测试
2.10 CAN bus测试
2.11 Audio测试
2.12 Camera测试
2.13 WiFi测试
2.14 4G模块测试
(三)QT应用开发
3.1 安装QtCreator
3.2 配置QtCreator
3.3 测试Qt应用
(四)系统更新
4.1 USB更新
4.2 SD卡更新



共3条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]