1. 串口调试

1.1 简介

一般而言,嵌入式开发板使用串口来监控后台。可以使用串口线连接开发板和电脑,对于没有串口的笔记本电脑来说,一般还需要一根USB转串口线。
在这里插入图片描述

串口软件多种多样,比如secureCRT、Xshell、超级终端、miniCom、putty等,它们的功能大同小异,因此只需安装用的顺手的一款即可。下面以secureCRT为例,详细介绍其使用步骤。

1.2 secureCRT使用步骤

  1. 接好串口线,在设备管理器中找到正确的串口编号,比如下图中的COM19:

image.png
设备管理器查看串口编号

注意,如果使用USB转串口线,那么一般是需要安装对应的驱动程序才可以让windows系统识别出来,而USB转串口线内置的芯片并不唯一,因此建议可以安装驱动精灵或驱动人生,自动识别并安装对应的驱动即可。如果不想安装这两个软件,也可以试试CH/YH340驱动。

  1. 启动secureCRT,正确配置串口信息(注意,流控的勾要去掉)

image.png
设置secureCRT串口信息

  1. 使用串口传输,在secureCRT输入rx hello,hello是想要传输的文件名。然后将文件拖入secureCRT,再单击发送xModem即可。

image.png
使用rx命令进行串口协议传输

  1. 修改字体颜色、中文编码

image.png
修改中文编码、字体

  1. 增加语法高亮:

image.png
增加语法高亮

  1. 一切准备就绪,启动开发板,即可通过调试串口在secureCRT中看到启动的后台信息,并可以在窗口下调试程序。

image.png
secureCRT界面

2. 文件传输

将编译好的程序放到开发板中去运行,需要借助于一些软件,下面介绍最常用的通过tftp的方式与开发板之间互通文件。

2.1 文件传输: tftp

在有网络的情况下,采用tftp的方式来传输文件是最高效的一种方式,tftp的全称是 tiny FTP,可见此工具专用于文件传输,其所为tiny意指匿名传输,是一种轻量级的FTP工具。

  1. 在windows中安装tftp服务器,可根据系统实际情况下载对应版本:
  1. 启动tftpd,选择准备传送到开发板的文件的所在目录和与开发板联通的网卡:

image.png
tftpd配置界面

  1. 假设在上述 C:\EFI 文件夹下有文件example.txt,在开发板中可执行如下命令下载该文件:
[root@root:~]# tftp 192.168.9.65 -gr example.txt
  1. 如果想要将开发板的文件发送到tftpd服务端,命令如下:
[root@root:~]# tftp 192.168.9.65 -pr example.txt

2.2 文件传输: NFS (相当于将主机作为一个u盘插入开发板)

  • ubuntu安装nfs
sevan@unbuntu-dev:~$ sudo apt install nfs-kernel-server
  • ubuntu配置nfs
sevan@unbuntu-dev:~$ sudo vi /etc/exports
添加
/home/sevan/ *(rw,async,no_subtree_check,no_root_squash) //将虚拟机家目录下的所有文件开放给其他任何ip主机设备(rw:可读写 async:异步 no_subtree_check:不检查子树)

sevan@unbuntu-dev:~$sudo service nfs-kernel-server restart
  • 测试挂载
sevan@unbuntu-dev:~/work$ showmount -e
Export list for unbuntu-dev:
/home/sevan *
  • 开发板配置
    将Ubuntu的家目录按照一个分区插入到开发板/root目录下
[root@GEC6818 /]#mount 192.168.1.104:/home/sun /root -o nolock

参考配置:mount -t nfs -o nolock 192.168.1.104:/home/sun/nfs_rootfs /mnt
注意:开发板的ip地址必须和Ubuntu主机的ip在同一网络段落
修改开发板ip的方法如下:

  • 临时设置ip地址(重启开发板失效)
ifconfig eth0 192.168.1.xxx netmask 255.255.255.0
route add default gw 192.168.1.254
  • 永久设置ip地址
    vi /etc/profile,然后把前面临时配置ip地址的两行命令写到里面
export PATH=/bin:/sbin:/usr/bin:/usr/sbin
 
if [ "$PS1" ]; then
        if [ "`id -u`" -eq 0 ]; then
                export PS1='[\u@\h:\w]# '
        else
                export PS1='[\u@\h:\w]$ '
        fi
fi
 
export PAGER='/bin/more '
export EDITOR='/bin/vi'
 
# Source configuration files from /etc/profile.d
for i in /etc/profile.d/*.sh ; do
        if [ -r "$i" ]; then
                . $i
        fi
        unset i
done
 
ifconfig eth0 172.31.8.xx netmask 255.255.255.0
#route add default gw 192.168.1.254
  • 最终挂载Ubuntu主机家目录分区测试如下
    在这里插入图片描述

3. 交叉编译

3.1 下载

由于嵌入式板卡的软硬件是定制的,因此针对其平台开发的程序所需要的编译器也必须与之相匹配:

3.2 配置

下载完了之后需要进行配置,然后才能使用,由于配置过程是一样的,因此以GEC6818的交叉工具链为例,其配置步骤如下:

  • 解压:
gec@ubuntu:~$ ls
arm-linux-gnueabi-5.4.0.tar.xz
gec@ubuntu:~$ 
gec@ubuntu:~$ xz --decompress arm-linux-gnueabi-5.4.0.tar.xz 
gec@ubuntu:~$ ls
arm-linux-gnueabi-5.4.0.tar
gec@ubuntu:~$ 
  • 查看归档文件中的文件路径:
gec@ubuntu:~$ tar -tf arm-linux-gnueabi-5.4.0.tar
usr/local/arm/5.4.0/usr/include/ext2fs/qcow2.h
usr/local/arm/5.4.0/usr/include/ext2fs/ext3_extents.h
usr/local/arm/5.4.0/usr/include/ext2fs/bitops.h
usr/local/arm/5.4.0/usr/include/ext2fs/tdb.h
usr/local/arm/5.4.0/usr/include/e2p/
usr/local/arm/5.4.0/usr/include/e2p/e2p.h
usr/local/arm/5.4.0/usr/include/com_err.h
... ...
... ...

可以看到,归档文件中的资料都是以usr/local/arm开头的,因此可以直接将归档内容释放到根目录下,到时候具体文件就会出现在/usr/local中。

  • 释放:
gec@ubuntu:~/Downloads$ sudo tar xvf arm-linux-gnueabi-5.4.0.tar -C /
gec@ubuntu:~$ cd /usr/local
gec@ubuntu:/usr/local$ ls
arm  bin  etc  games  include  lib  man  sbin  share  src

可见,第一个目录 arm 就是解压之后得到的交叉工具链所在的目录。

  • 配置环境变量PATH:
gec@ubuntu:~$ cd /usr/local/arm/5.4.0/usr/bin
gec@ubuntu:~$ echo "export PATH=/usr/local/arm/5.4.0/usr/bin:$PATH" >> ~/.bashrc
gec@ubuntu:~$ source ~/.bashrc
  • 测试交叉工具链的版本信息:
sevan@unbuntu-dev:~$ arm-linux-gcc -v
使用内建 specs。
COLLECT_GCC=/home/sevan/work/usr/local/arm/5.4.0/usr/bin/arm-linux-gcc.br_real
COLLECT_LTO_WRAPPER=/home/sevan/work/usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/lto-wrapper
目标:arm-none-linux-gnueabi
配置为:./configure --prefix=/home/geclab/buildroot-2016.11/output/host/usr --sysconfdir=/home/geclab/buildroot-2016.11/output/host/etc --enable-static --target=arm-none-linux-gnueabi --with-sysroot=/home/geclab/buildroot-2016.11/output/host/usr/arm-none-linux-gnueabi/sysroot --disable-__cxa_atexit --with-gnu-ld --disable-libssp --disable-multilib --with-gmp=/home/geclab/buildroot-2016.11/output/host/usr --with-mpc=/home/geclab/buildroot-2016.11/output/host/usr --with-mpfr=/home/geclab/buildroot-2016.11/output/host/usr --with-pkgversion='Buildroot 2016.11' --with-bugurl=http://bugs.buildroot.net/ --disable-libquadmath --enable-tls --disable-libmudflap --enable-threads --without-isl --without-cloog --with-float=soft --disable-decimal-float --with-abi=aapcs-linux --with-cpu=cortex-a15 --with-float=soft --with-mode=arm --enable-languages=c,c++,fortran --with-build-time-tools=/home/geclab/buildroot-2016.11/output/host/usr/arm-none-linux-gnueabi/bin --enable-shared --disable-libgomp
线程模型:posix
gcc 版本 5.4.0 (Buildroot 2016.11)
sevan@unbuntu-dev:~/work$

有出来版本信息的话,就代表配置成功了。

  • 编译测试
报错:
sevan@unbuntu-dev:~/work$ arm-linux-gcc hello.c
/home/sevan/work/usr/local/arm/5.4.0/usr/bin/../libexec/gcc/arm-none-linux-gnueabi/5.4.0/cc1: error while loading shared libraries: libmpfr.so.4: cannot open shared object file: No such file or directory
  • 添加链接库环境变量
 sevan@unbuntu-dev:~$ echo "export LD_LIBRARY_PATH=/usr/local/arm/5.4.0/usr/lib:$LD_LIBRARY_PATH" >> ~/.bashrc
 sevan@unbuntu-dev:~$ source ~/.bashrc

Logo

更多推荐