【ELF 1开发板试用】2.Ubuntu下的串口登录和接口测试
串口登录
为了充分榨干电脑性能,编译速度快一些,我直接把选择在 Ubuntu 下开发。目前电脑是 Ubuntu + Windows 10 双系统的组合。像 Ubuntu 这样的系统,权限管理比较严重,要调试起来需要特别注意权限问题,这也是相较于 Windows 比较容易忽视的点。
解除 USB 占用
我们将开发板与设备连接之后,执行
ls /dev/tty*
发现并没有查看到 USB 设备,这是怎么一回事呢? 通过查看系统日志
sudo dmesg | grep brltty
发现设备被 brltty
占用了,那简单,直接卸载 brltty
就行了
sudo apt remove brltty
重新拔插 USB 数据线,再执行
ls /dev/tty*
可以看到设备已经存在了
安装 CuteCOM
在 Ubuntu 上比较好用的一个串口调试工具 —— CuteCOM 安装方法很简单,执行
sudo apt-get install cutecom lrzsz
安装成功之后,打开 CuteCOM ,点击右边的 Settings 。这些选项按要求设置: Baudrate 115200、Data Bits 8、Flow Control None、Parity None、Open Node Read/Write、Stop Bits 1、Device /dev/ttyUSB0 。最后点击 Open 连接串口。 如果此时你也像笔者一样遇到了错误,Cannot open /dev/ttyUSB0: Permission denied
那么接着往下看吧。 图
分配权限
通过执行
ls -al /dev/ttyUSB0
我们可以看到,这里的 ttyUSB0 用户权限是 root dialout
。 我们执行命令查看自己用户所在的用户组
groups ${USER}
将自己添加到 dialout
用户组
sudo gpasswd -add ${USER} dialout
回到 CuteCOM ,再次 Open 这时已经可以查看串口信息了。
我们直接直接在 Input 里面输入命令,例如查看版本号
uname -a
接口测试
TF卡测试
笔者手中有一张金士顿 64GB 的 TF 卡,首先将 TF 卡格式化为 FAT32 格式。 我们将 TF 卡插入开发板背面的卡槽,在 CuteCOM 可以看到识别到了。
列出挂载目录
ls /run/media
查看 TF 卡内文件
ls -l /run/media/mmcblk0p1/
本来想修改一下里面的 my-sd
文件,但是 CuteCOM 对 VIM
和 NANO
命令支持都不太好,看来还是要用 SSH 登录比较方便一点。 TF 卡是支持热拔插的,但比较规范的用法还是先卸载
umount /run/media/mmcblk0p1
接着拔下 TF 卡,也会有提示的
另外当你的路径已经切换到 TF 卡内,不要热拔插,有丢失数据风险。
网络测试
有线网络
执行 ifconfig
查看网络信息
[11:32:17:943] root@ELF1:~# ifconfig␍␊
[11:32:21:683] eth0 Link encap:Ethernet HWaddr aa:cc:dd:ee:ff:dd ␍␊
[11:32:21:686] inet addr:192.168.0.232 Bcast:192.168.0.255 Mask:255.255.255.0␍␊
[11:32:21:695] inet6 addr: 240e:370:51e:6680:a8cc:ddff:feee:ffdd/64 Scope:Global␍␊
[11:32:21:701] inet6 addr: fe80::a8cc:ddff:feee:ffdd/64 Scope:Link␍␊
[11:32:21:709] UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1␍␊
[11:32:21:714] RX packets:11 errors:0 dropped:0 overruns:0 frame:0␍␊
[11:32:21:720] TX packets:43 errors:0 dropped:0 overruns:0 carrier:0␍␊
[11:32:21:728] collisions:0 txqueuelen:1000 ␍␊
[11:32:21:728] RX bytes:1513 (1.4 KiB) TX bytes:7119 (6.9 KiB)␍␊
[11:32:21:735] ␍␊
[11:32:21:735] lo Link encap:Local Loopback ␍␊
[11:32:21:735] inet addr:127.0.0.1 Mask:255.0.0.0␍␊
[11:32:21:741] inet6 addr: ::1/128 Scope:Host␍␊
[11:32:21:741] UP LOOPBACK RUNNING MTU:65536 Metric:1␍␊
[11:32:21:748] RX packets:2 errors:0 dropped:0 overruns:0 frame:0␍␊
[11:32:21:753] TX packets:2 errors:0 dropped:0 overruns:0 carrier:0␍␊
[11:32:21:761] collisions:0 txqueuelen:0 ␍␊
[11:32:21:761] RX bytes:140 (140.0 B) TX bytes:140 (140.0 B)␍␊
[11:32:21:768] ␍␊
ELF1 有 eth0 和 eth1 两路网卡,开机默认 eth0 IP 为 192.168.0.232
,eth1 未设置固定 IP eth0 是有线网卡,用网线将 ELF1 和路由器相连,执行
udhcpc -i eth0
再次查看网络配置,此时的 IP 地址已经是动态获取的了。
[12:21:07:071] root@ELF1:~# ifconfig eth0␍␊
[12:23:36:799] eth0 Link encap:Ethernet HWaddr aa:cc:dd:ee:ff:dd
[12:23:36:801] inet addr:192.168.124.22 Bcast:192.168.124.255 Mask:255.255.255.0
[12:23:36:809] inet6 addr: 240e:370:51e:6680:a8cc:ddff:feee:ffdd/64 Scope:Global
[12:23:36:815] UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
[12:23:36:824] RX packets:1785 errors:0 dropped:5 overruns:0 frame:0
[12:23:36:830] TX packets:159 errors:0 dropped:0 overruns:0 carrier:0
[12:23:36:836] collisions:0 txqueuelen:1000
[12:23:36:843] RX bytes:225568 (220.2 KiB) TX bytes:24400 (23.8 KiB)
[12:23:36:843]
此时的开发板已经可以联网了,试试看 wget
命令
[12:24:55:541] root@ELF1:~# wget baidu.com␍␊
[12:25:03:072] Connecting to baidu.com (110.242.68.66:80)␍␊
[12:25:03:156] index.html 100% |*******************************| 81 0:00:00 ETA
WIFI网络
除了有线连接网络,开发板还具有无线 WIFI 功能,可以执行
/usr/bin/elf1_cmd_wifi.sh -i 8723 -s SSID -p PASSWORD
[12:35:12:733] root@ELF1:~# elf1_cmd_wifi.sh -i 8723 -s SSID -p PASSWORD␍␊
[12:37:33:784] wifi 8723␍␊
[12:37:33:784] ssid SSID␍␊
[12:37:33:784] pasw PASSWORD␍␊
[12:37:34:185] usbcore: deregistering interface driver rtl8723du␍␊
[12:37:34:803] usbcore: registered new interface driver rtl8723du␍␊
[12:37:35:685] IPv6: ADDRCONF(NETDEV_UP): wlan0: link is not ready␍␊
[12:37:39:166] Successfully initialized wpa_supplicant␍␊
[12:37:41:242] wlan0: Trying to associate with 34:d8:56:f8:26:14 (SSID='SSID' freq=2437 MHz)␍␊
[12:37:41:714] IPv6: ADDRCONF(NETDEV_CHANGE): wlan0: link becomes ready␍␊
[12:37:41:724] wlan0: Associated with 34:d8:56:f8:26:14␍␊
[12:37:41:824] wlan0: WPA: Key negotiation completed with 34:d8:56:f8:26:14 [PTK=CCMP GTK=CCMP]␍␊
[12:37:41:830] wlan0: CTRL-EVENT-CONNECTED - Connection to 34:d8:56:f8:26:14 completed [id=0 id_str=]␍␊
[12:37:42:169] udhcpc (v1.24.1) started␍␊
[12:37:42:300] Sending discover...␍␊
[12:37:42:652] Sending select for 192.168.124.28...␍␊
[12:37:42:813] Lease of 192.168.124.28 obtained, lease time 86400␍␊
[12:37:42:869] RTNETLINK answers: File exists␍␊
[12:37:42:935] /etc/udhcpc.d/50default: Adding DNS 192.168.124.1␍␊
[12:37:42:962] Finshed!␍␊
路由器就在旁边,所以超强WIFI信号,查看信号强度执行
cat /proc/net/wireless | grep wlan0 | awk '{print $3}'
[12:37:42:962] root@ELF1:~# cat /proc/net/wireless | grep wlan0 | awk '{print $3}'␍␊
[12:38:44:095] 98.␍␊
关闭 WIFI
ifconfig wlan0 down
LED测试
ELF1 主板上的 LED 红灯、LED 绿灯、LED 黄灯为用户 LED 灯。 其与软件及 ELF1 丝印对应关系:
LED 灯 |
丝印 |
/sys/class/leds 目录下 |
---|
红灯 |
D4 |
led1 |
黄灯 |
D6 |
led3 |
绿灯 |
D5 |
led2 |
我们可以通过简单的命令控制灯的亮灭 |
|
|
echo 1 > /sys/class/leds/led1/brightness
简单写个流水灯控制程序
#!/bin/bash
# 设置LED的路径
LED1_PATH="/sys/class/leds/led1/brightness"
LED2_PATH="/sys/class/leds/led2/brightness"
LED3_PATH="/sys/class/leds/led3/brightness"
# 定义八种组合状态
LED_STATES=("000" "100" "110" "111" "011" "001" "000")
# 循环显示八种组合状态
while true; do
for state in "${LED_STATES[@]}"; do
# 设置LED状态
echo -e "${state:0:1}" > $LED1_PATH
echo -e "${state:1:1}" > $LED3_PATH
echo -e "${state:2:1}" > $LED2_PATH
# 延迟200毫秒
usleep 200000
done
done