[嵌入式Linux]

米尔i.MX6UL开发板Linux操作系统的应用开发

[复制链接]
1290|0
手机看帖
扫描二维码
随时随地手机跟帖
myir|  楼主 | 2018-1-12 09:03 | 显示全部楼层 |阅读模式
硬件:米尔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等。
Linux应用开发
需要先安装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  


LCD测试
本例程演示对Linux的FrameBuffer设备操作,实现液晶输出显示RGB颜色和颜色合成测试。 例程基于Linux FrameBuffer API接口开发。 测试前需要把
LCD连接至J3接口上。
米尔科技提供三种LCD模块,Linux默认配置为MY-TFT043RV2。

执行程序后,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>;
};
};  


触摸测试
MYD-Y6ULX支持两种触摸方式,电容和电阻。
触摸测试可以使用ts_calibrate和ts_test命令,ts_calibrate用于触摸校验,ts_test用于测试。 其中,命令需要变量"TSLIB_TSDEVICE"来找到触摸设
备,不同触摸方式的设备节点不一定相同,请对应设备填写。
# export TSLIB_TSDEVICE=/dev/input/event1
# ts_calibrate
//测试触摸屏
# ts_test  


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!  


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  


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


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  


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  


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  


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端可以使用串口工具查看接收的数据。  


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  


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  


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和开发板
在同一网络内时,打开流览器,
,可以看到有登录框,输入用户名为uvc_user,密码为
123456,就可以看到从MY-CAM011B实时采集到的图像了。
  


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)  




相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

15

帖子

0

粉丝