4 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
15
4.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>;
};
};
4.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

  4.3 Ethernet 测试
本例使用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!
19
4.4 GPIO-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
4.5 GPIO-LED 测试
本例程演示使用Linux系统API操作开发板上的LED灯,D30。运行程序后,D30闪烁。按下"Ctrl-C"可结束程序。
  ./gpio_led /sys/class/leds/user/brightness

  4.6 USB 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
4.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 File-
Stor 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
4.8 RS485 测试
本例程演示如何使用 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]: 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
RECV[20]: 0x01 0x02 0x03 0x04 0x05 0x06 0x07 0x08 0x09 0x0a 0x0b 0x0c 0x0d 0x0e 0x0f 0x10 0x11 0x12 0x13 0x14
24
4.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端可以使用串口工具查看接收的数据。
25
4.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
26
4.11 Audio 测试
硬件连接
本例程演示使用Linux系统中的arecord/aplay命令对音频接口录音和放音。需要使用两头3.5mm的音频AUX线,从电脑音频输出孔和开发板的LINE
IN(J5)接口连接,HEADERPHONE(J4)连接耳机。
软件操作
在电脑中播放音频文件,执行arecord命令会先将LINE IN中的音频录制并保存为test.wav文件。运行一分钟后再按ctrl + c来停止。
  arecord -f cd test.wav

  执行aplay命令来播放上面录制好的音频文件。
  aplay test.wav

  4.12 Camera 测试
MYD-Y6ULX上提供一个并行Camera接口(J9),可以连接MY-CAM011B型号的Camera模块,模块之间使用FPC线连接。由于信号序列影响,请勿直接
将其它型号的Camera的模块插入,否则会引起模块或开发板的损坏。
本例程演示使用一款开源的视频流软件uvc_stream,可以将Camera设备捕捉的数据显示在web页面。
硬件连接
使用FPC数据线将MYB-CAM011B模块和MYD-Y6ULX板上的J9接口相连接。
软件操作
uvc_stream是通过的网络传输数据,需要先设置好MYD-Y6ULX板的以太网IP地址,对应系统中的eth0设备。Linux系统中的MY-CAM011B模块的设
备,可通通过v4l2-ctl命令来查询到,输出信息的i.MX6S_CSI表示Camera控制器,对应设备是/dev/video1。uvc_stream参数中'-y'是使用yuyv方
式,'-P'后面是设置web界面的登录密码,用户名默认为uvc_user。'-r'是指定分辨率,当前仅支持800x600。可以用ctrl + c来停止。
  ifconfig eth1 192.168.1.42

  v4l2-ctl --list-devices

  i.MX6S_CSI (platform:21c4000.csi):
/dev/video1
pxp (pxp_v4l2):
/dev/video0
  ./uvc_stream -d /dev/video1 -y -P 123456 -r 800x600

  uvc_stream提供两种web功能,snapshot和streaming。snapshot的请求URL是snapshot.jpeg,streaming的请求URL是stream.mjpeg。 PC和开发板
在同一网络内时,打开流览器,输入地址http://192.168.1.42:8080/stream.mjpeg,可以看到有登录框,输入用户名为uvc_user,密码为
123456,就可以看到从MY-CAM011B实时采集到的图像了。
28
4.13 WiFi 测试
MYD-Y6ULX开发板提供一个WiFi模块(J11),支持Client模式。
硬件连接
将附带SMA接口的天线安装在开发板的J12位置。
Client模式
Client模式是用于将WiFi模块作为客户端设备,主动连接于路由器或其它提供无线热点的设备。
系统中已经加入WiFi模块的驱动,启动后会自动加载相应驱动。驱动加载成功后会出现对应的wlan0网络设备,使用ifconfig命令来确认。
# ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:3388 errors:0 dropped:10 overruns:0 frame:0
TX packets:37 errors:0 dropped:3 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:395459 (386.1 KiB) TX bytes:6074 (5.9 KiB)
下面使用wpa_passphrase生成对应WiFi热点SSID的密码,然后由wpa_supplicant命令实现WiFi模块与WiFi热点的连接。
  wpa_passphrase "MYiRTech" >> wifi.conf

  12345678
  cat wifi.conf

  network={
ssid="MYiRTech"
  psk="12345678"

  psk=b96d9a5de2d9480ad5f987857e20216b47a0c4bf43397825ba909438bc52aaff
}
  wpa_supplicant -D wext -B -i wlan0 -c wifi.conf

  Successfully initialized wpa_supplicant
rfkill: Cannot open RFKILL control device
R8188EU: Firmware Version 11, SubVersion 1, Signature 0x88e1
MAC Address = a0:2c:36:60:ee:e0
IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready
ioctl[SIOCSIWAP]: Operation not permitted
R8188EU: INFO indicate disassoc
连接成功后,使用udhcpc获取IP地址后,就可以使用了。
  udhcpc -b -i wlan0 -R

  ifconfig wlan0

  wlan0 Link encap:Ethernet HWaddr a0:2c:36:60:ee:e0
inet addr:192.168.1.211 Bcast:192.168.1.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:5577 errors:0 dropped:15 overruns:0 frame:0
TX packets:46 errors:0 dropped:3 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:651690 (636.4 KiB) TX bytes:7472 (7.2 KiB)
29
4.14 4G模块 测试
MYD-Y6ULX开发板提供一个支持4G模块的PCI-E插槽,此插槽使用USB数据线与4G模块通讯。当前仅支持移远EC20型号。
注意:移远EC20模块为选购配件,请向米尔科技购买。
硬件连接
安装移远EC20模块到PCI-E插槽(U12)。
将两头I-PEX接口的天线安装在移远EC20模块和开发板的J25位置。
安装SMA天线到开发板的J24位置。
系统中已经加入4G模块的驱动,启动后会自动加载相应驱动,驱动加载成功后会出现对应的/dev/ttyUSB*设备,查看:
**#ls /dev/ttyUSB***
/dev/ttyUSB0 /dev/ttyUSB1 /dev/ttyUSB2 /dev/ttyUSB3 /dev/ttyUSB4
系统中已加入ppp软件包,可以直接使用。启用ppp0后会自动拨号,连接成功后即获得IP地址,D25灯常亮。还需要检查/etc/resolve.conf文件中的
DNS是否设置正常。
  ifup ppp0

  ifconfig ppp0

  ppp0 Link encap:Point-to-Point Protocol
inet addr:10.163.130.65 P-t-P:10.64.64.64 Mask:255.255.255.255
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:5 errors:0 dropped:0 overruns:0 frame:0
TX packets:5 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:3
RX bytes:62 (62.0 B) TX bytes:86 (86.0 B)
  cat /etc/resolv.conf

  nameserver 202.96.128.86
nameserver 202.96.134.133
然后使用ping命令测试连接4G网络是否正常。
  ping myir-tech.com

  PING s-26427.gotocdn.com (118.123.18.103) 56(84) bytes of data.
64 bytes from 118.123.18.103: icmp_seq=1 ttl=117 time=80.5 ms
64 bytes from 118.123.18.103: icmp_seq=2 ttl=117 time=179 ms
64 bytes from 118.123.18.103: icmp_seq=3 ttl=117 time=378 ms
64 bytes from 118.123.18.103: icmp_seq=4 ttl=117 time=118 ms
64 bytes from 118.123.18.103: icmp_seq=5 ttl=117 time=122 ms
64 bytes from 118.123.18.103: icmp_seq=6 ttl=117 time=177 ms
如果上面验证步骤有异常,可以查看日志来确定问题原因。
  cat /var/log/quectel-dial.log

  30
5 QT应用开发
Qt是一个跨平台的图形应用开发框架,被应用在不同尺寸设备和平台上,同时提供不同版权版本供用户选择。MYD-Y6ULX使用Qt 5.6.2版本进行应
用开发。
在Qt应用开发中,推荐使用QtCreator集成开发环境,可以在Linux PC下开发Qt应用,自动化地交叉编译为开发板的ARM架构。
本章使用Yocto构建的SDK工具作为交叉编译系统,配合QtCreator快速开发图形类应用程序。开始本章前,请先完成第三章的Yocto构建过程。或者
使用光盘中提供的预编译好的SDK工具包。本章开始前,请安装好应用SDK开发工具。
31
5.1 安装QtCreator
QtCreator安装包是一个二进制程序,直接执行就可以完成安装。
cd $DEV_ROOT
chmod a+x 03-Tools/qt-creator-opensource-linux-x86_64-4.1.0.run
sudo 03-Tools/Qt/qt-creator-opensource-linux-x86_64-4.1.0.run
执行安装程序后,一直点击下一步即可完成。默认安装目录在"/opt/qtcreator-4.1.0"。
安装完成后,为了让QtCreator使用Yocto的SDK工具,需要对QtCreator加入环境变量。修改"/opt/qtcreator-4.1.0/bin/qtcreator.sh"文件,在"#!
/bin/sh"前加入Yocto的环境配置即可,参考如下:
source /opt/myir-imx6ulx-fb/4.1.15-2.0.1/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
  ! /bin/sh

  Use this script if you add paths to LD_LIBRARY_PATH

  that contain libraries that conflict with the

  libraries that Qt Creator depends on.

  使用QtCreator时,请从终端执行"qtcreator.sh"来启动QtCreator,参考如下:
/opt/qtcreator-4.1.0/bin/qtcreator.sh &
5.2 配置QtCreator
第一步,运行 QtCreator 后,依次点击"Tool"->"Options",出现选项对话框,在左侧点击"Build & Run",右边选择"Compilers"标签。 点击右
侧"Add"按钮,弹出下拉列表后,选择"GCC",在下面填写"Name"为"MYDY6ULx-GCC","Compiler path"点击旁边的"Browse.."按钮选 择到arm-
poky-linux-gnueabi-g++的路径,例子中的路径是"/opt/myir-imx6ulx-fb/4.1.15-2.0.1/sysroots/x86_64-pokysdk-linux/usr/bin/arm-poky-linux-
gnueabi/arm-poky-linux-gnueabi-g++"。填写完成后,点击"Apply"。

图5-2-1 配置
编译器
第二步,选择"Qt Version"标签,在右侧点击"Add...",会弹出qmake路径选择对话框,这里以"/opt/myir-imx6ulx-fb/4.1.15-
2.0.1/sysroots/x86_64-pokysdk-linux/usr/bin/qt5/qmake"为例子。选择”qmake”文件后,点击"Open"按钮。"Version name"改为"Qt %
{Qt:Version} (MYDY6ulx-qt5)"。然后点击"Apply"按钮。

图5-2-2 配
置Qt版本
第三步,选择左侧"Device",点击右边的"Add..."按钮,在弹出的对话框中选择Generic Linux Device,再填写内容"Name"为"MYDY6ULx
Board","Host name"为开发板的IP地址(可以暂时填写任意一个地址),"Username"为"root",然后点击"Apply"

图5-2-3 配置
设备
第四步,点击左侧"Build & Run"回到"Kits"标签下,"Name"为"MYDY6ULx-dev-kit","Device"选择"MYDY6ULx Board"选项了。"Sysroot"选择目标
设备的系统目录,这里以"/opt/myir-imx6ulx-fb/4.1.15-2.0.1/sysroots/cortexa7hf-neon-poky-linux-gnueabi"为例。"Compiler"选择之前配置的名
称"MYDY6ULx-GCC","Qt version"选择之前配置的名称"Qt 5.6.2 (MYDY6ulx-qt5)","Qt mkspec"填写为"linux-oe-g++"。其它默认即可,最后点
击"Apply"和"OK"按钮。

图5-2-4 配置
套件
5.3 测试Qt应用
为了方便测试之前的配置是否正确,这里提供了一个Qt例程,打开项目后,配置为相应的编译工具套件,就可以编译此例程。
第一步,在菜单栏选择"File"->"Open File or Project",在打开的对话框中,浏览到"helloword"例程的目录下,选择"helloworld.pro"文件,点
击"Open"按钮。
第二步,项目打开后,选择"MYDY6ULx-dev-kit"选项,这样"helloworld"项目就会使用"MYDY6ULx-dev-kit"的相关配置构建应用。

图5-3-1 选择构建配置
第三步,点击菜单栏"Build"->"Build Project hellowrld"按钮,即可完成项目的编译,同时下侧会有编译过程输出。

图5-3-2 编译输出结果
QtCreator 构建 helloworld 项目后,编译好的二进制文件存放在"~/build-helloworld-MYDY6ULx_dev_kit-Debug/"目录下,可以使用 file 命令查看,是
否编译为 ARM 架构。
file ~/build-helloworld-MYDY6ULx_dev_kit-Debug/helloworld
/home/kevinchen/build-helloworld-MYDY6ULx_dev_kit-Debug/helloworld:
ELF 32-bit LSB executable, ARM, EABI5 version 1 (GNU/Linux),
dynamically linked, interpreter /lib/ld-linux-armhf.so.3,
for GNU/Linux 2.6.32,
BuildID[sha1]=9c5f22deb1d8272c2a81528c171d215896112784, not stripped
然后将 helloworld 文件拷贝到开发板下运行即可。
  ./helloworld -platform linuxfb

  将会在 LCD 屏幕上看到Qt 窗口中多个QLabel的文本内容。

图5-3-3 例程运行结果
6 系统更新
MYD-Y6ULX系列开发板提供了两种更新Linux系统的方法,USB更新和SD卡更新。
USB更新: 将芯片找切换至Download模式,使用NXP MfgTool工具烧写文件到板载的Flash内。
SD卡更新: 使用可启动的SD更新卡,启动后从SD卡烧写文件到板载Flash。
6.1 USB更新
USB更新方法的烧写工具是由NXP公司提供的MfgTool 2.7.0版本,文件包名为MYD-Y6ULX-mfgtools-20171012.zip,光盘中路径"03-
Tools/ManufactoryTool"目录下,支持Windows和Linux操作系统。解压后的目录中有vbs文件,这些是配置好的烧写脚本。执行后即可启动MfgTool
程序。
更新步骤如下(顺序不可颠倒):
切换启动拨码开关(SW1)的第3位为OFF,第4位为ON。
使用USB转接线(Type-A转Micro-B)连接PC机USB端口与开发板Micro USB OTG端口(J26)。
使用DC 12V电源适配器连接至开发板的电源座(J22)。
双击MfgTool目录下的"core-image-base-myd-y6ulx-nand.vbs"文件,此时可以看到MfgTool界面已识别到开发板。
点击MfgTool界面上的"Start"按钮,MfgTool就开始自动更新系统至板载NAND存储芯片。
更新成功后底部的总进度条会显示为绿色。若失败则为红色时,可以查看"MfgTool.log"文件的错误提示信息。或者使用USB转TTL串口线连接至
JP1,再重新更新系统,就可以从串口查看更新过程并分析失败的原因。
更新MfgTool的文件
如果需要将自己编译的系统镜像文件更新到开发板上时,需要替换MfgTool里面对应的文件。MfgTool的文件更新有两个部分,firmware和files。files
目录下为烧写的目标镜像文件,路径为"MYD-Y6ULX-mfgtools/Profiles/Linux/OS Firmware/files/"。 firmware是烧写系统的镜像文件,路径为"MYD-
Y6ULX-mfgtools/Profiles/Linux/OS Firmware/firmware/"。当更新系统的分区大小或烧写方式时才需要更新firmware中的文件。
files目录下的文件说明:

文件名 描述

更新完成后断电,配置启动位拨码开关为NAND启动方式,如下:

6.2 SD卡更新
MYD-Y6ULX开发板提供了一个使用SD卡更新系统镜像的文件,sdcard镜像文件。sdcard镜像文件需要使用特殊的磁盘操作工具才可以写入Micro SD
卡内,Linux系统用户可以直接使用dd命令,Windows系统用户使用Win32ImageWriter工具。
MYD-Y6ULX的开发资源包内已包含两个sdcard文件,位置为02-Images。
文件名 描述
myd-y6ull-update-nand-base-20171026011019.rootfs.sdcard 用于更新core-image-base
myd-y6ull-update-nand-qt5-20171026011028.rootfs.sdcard 用于更新fsl-image-qt5
注意:rootfs.sdcard前面的时间为生成文件时的日期时间,请以实际文件为主。
制做SD更新的镜像
如果对Linux kernel,U-Boot或者文件系统有修改,可以自行打包制做sdcard文件,将系统烧写在开发板上。MYD-Y6ULX开发板提供了一个可以制做
SD更新镜像的工具MYD-6ULX-mkupdate-sdcard,存放在04-Tools/ManufactoryTool目录。
build-sdcard.sh脚本用于制做从SD卡更新系统的镜像,分为两个部分:更新系统和目标文件。 firmware目录下是更新系统,一般情况下不需要修
改。 'mfgimages-*'是目标文件,里面的文件最终会烧写进板载的NAND或者eMMC存储芯片内。如果修改u-boot, kernel后,需要把相应的文件替换
到目标文件内即可。
'mfgimage-*'目录内的文件名遵循以下方式命名,错误的文件名称在更新系统时不会被识别,会出现升级失败。 这些文件的名称被定义在Manifest
文件内,命名规则如下:
ubootfile="u-boot.imx"
kernelfile="zImage"
dtbfile="myd-y6ull-gpmi-weim.dtb"
rootfsfile="core-image-base.rootfs.tar.xz"
更新程序启动后会根据Manifest文件加载需要的文件,以将它们写入到目标NAND Flash存储芯片。
解压后就可以开始制做镜像了。
sudo ./build-sdcard.sh -p myd-y6ull -n -d mfgimages-myd-y6ull-ddr256m-nand256m
build-sdcard.sh提供了四种参数:
'-p' 表示平台,可用参数为"myd-y6ull"代表MYD-Y6ULL
'-n' 表示板上存储芯片是NAND
'-e' 表示板上存储芯片是eMMC
'-d' 表示更新文件的目录
'-t' 表示添加文件名标识
注意:'-n'和'-e'不能同时使用,只能使用一种。
运行结束后会生成一个sdcard后缀的文件,如'myd-y6ull-update-nand-20170825150819.rootfs.sdcard'。
制做可更新系统的SD卡
MYD-Y6ULX资源包内提供了用于更新系统的sdcard镜像文件,可以直接使用,也可以使用上一步制做的sdcard文件。MYD-Y6ULX提供好的sdcard文
件存放在02-Images目录内。 有了用于更新的SD卡镜像文件,就可以把镜像文件写入到SD卡。为了方便使用,建议把Micro SD插入USB读卡器,再
插入电脑USB端口。
注意: 02-Images目录内的文件名的时间标识部分可能与如下示例文件有差异,请以实际为主。
Linux系统
通常Linux下的存储设备名为"sd[x][n]"形式,x表示第几个存储设备,一般使用字母a~z表示。n表示存储设备的分区,一般使用数字,从1开始。插
入后可以使用"dmesg | tail"命令查看新设备的设备名称。这里以"/dev/sdb"设备为例,sdb后面不写任务分区数字。
sudo dd if=myd-y6ull-update-nand-base-20170919090957.rootfs.sdcard of=/dev/sdb conv=fsync
写入的速度与USB和Micro SD卡的速率有关,如果对速度有要求,建议选用更高速度等级的Micro SD存储卡。
Windows系统
Windows用户可以使用Win32DiskImager工具把sdcard镜像写入Micro SD里。工具在"03-Tools"目录下,解压后,双击"Win32DskImager.exe"应用程
序。启动后的界面中,右侧的"Device"是选择要写入的设备盘符。左侧的"Image File"是选择将要写的镜像文件,点击旁边的文件夹图标,选中要写
入的文件即可(注意:文件选择对话框中默认是过滤".img"文件,切换成".*",就可以显示到sdcard后缀的文件)。
写入前请再次确认目标磁盘和文件是否正确,避免写入到系统磁盘,损坏Windows系统分区。
39
等待进度条结束后,就可以拔出USB读卡器。
把制做好的Micro SD卡插入开发板的卡槽(J8),配置启动位拨码开关(SW1)为SDCARD启动方式,如下:
启动位 状态
Bit1 ON
Bit2 OFF
Bit3 ON
Bit4 OFF
连接USB转TTL串口线至调试串口(JP1),配置好电脑端的串口终端软件。使用DC 12V电源适配器连接至开发板的电源接口(J22)。通过串口可以看到
系统从Micro SD卡启动,并执行更新脚本,把Linux系统镜像文件写入NAND存储芯片内。
也可以通过用户LED灯(D30)来判断当前更新状态,更新中为闪烁状态,更新成功后会常亮,失败则会熄灭。
切换为NAND启动方式
更新完成后断电,配置启动位拨码开关为NAND启动方式,如下:
启动位 状态
Bit1 OFF
Bit2 ON
Bit3 ON
Bit4 OFF
重新连接电源,开发板就可以从NAND启动系统了。