嵌入式课程设计 使用 tini4412配合交叉编译环境 完成串口助手的制作
注:还没有完全写完,不过主要过程都在中间了
摘要
本文主要介绍一下五个部分:
- tini4412的系统烧写
- 虚拟机上交叉编译环境的搭建
- 虚拟机上进行文件的交叉编译
- PC与tini4412的FTP传输
- 在tini4412上运行可执行程序
文章目录
一、需提前准备
- 大于4G的SD卡,网线一根,串口线一根,电源适配器和电源线一套(必须)
- tini4412开发板(必须)
- PC机,安装虚拟机镜像最好为Ubuntu18.04以上版本(必须)
- 友善之臂tini4412官方资料(必须)
- 正点原子linux开发板资料(参考)
- 各类软件,xshell,FileZilla,xcom等
1.1 tini4412官方资料下载和相关文件介绍
tini4412友善之臂官方资料下载链接
回复帖子即可下载!!
下载完后可以看到FriendlyARM-4412-DVD-20190722中有三个压缩包,我们分别解压
其中三个文件夹的主要内容介绍如下,每个文件夹中的内容的实际用途读者结合用户手册进行查阅即可。
其中我们要用到的镜像在
Disk-B
中,用到的交叉编译环境和手册说明都在Additional
文件夹中。
开发板的使用说明和最基础部分的学习请大家参考
Tini4412用户手册
,其中的内容十分详细。我从第一次接触这块开发板就是这个手册开始看起的,可以选择性跳过一些对现在来说不重要的内容比如Android的学习。
1.2 正点原子linux开发板资料介绍
对于本次课程设计的学习,正点原子关于Linux开发板的资料也给我提供了莫大的帮助,在此也推荐大家下载官方的资料进行学习:正点原子Linux开发板资料下载链接
主要学习图示的两个指南的内容即可。
具体为
【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4
的前两章和第二十六章(因为我做的题目与串口相关所以选择第二十六章)
【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.6
的前四章
1.3 常用软件的下载链接
xshell下载链接
官网下载:xshell的下载链接
学习版下载:可在此链接直接获得校园/家庭免费版
filezilla下载链接
filezilla下载链接 点击如图所示的选项下载即可。
xcom的下载
细心的小伙伴会发现,正点原子的资料会把常用软件提供给大家xcom也在其中,所以只需要打开
软件
的文件夹就能看到,很多常用的软件了。
具体路径可以看下图。
1.5 镜像的烧录
Linux镜像的烧录可以参考Tiny4412用户手册,第二章2.2和2.3的内容。
手册中写的很详细,本文所用的设备安装的是LinuxQT系统
。
1.6 xshell连接开发板
首先使用串口线将开发板与电脑连接起来
右键
此电脑
,点击管理
,进入设备管理器
可以看到串口已经连接
若设备异常则需要安装RS232驱动
打开xshell
右上角创建一个新的连接
协议选择
SERIAL
进入串口选项,端口为刚才设备管理器看到的端口号,波特率为
115200
点击连接,再输入回车就能看到已经成功通过串口连接到开发板,可以开始敲代码了
二、虚拟机上交叉编译环境的搭建
2.1 找到交叉编译工具的压缩文件
首先确保已经下载好tini4412的官方资料,打开文件夹
FriendlyARM-4412-DVD-20190722\Disk-A\Linux
路径因人而异,主要是找到如图的文件
arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
下一步我们需要把他复制到虚拟机中,如果可以直接拖拽进虚拟机就直接拖进去,如果不行我们就需要借助共享文件夹进行操作。
常见问题解决方法
如果知道自己在做什么,就可以普通用户和root用户切换使用, 如果只是跟着流程走,笔者建议一直在root用户下执行指令。 如果不记得root账户密码,可以执行: sudo passwd root 更改新的密码
如果遇到文件是红色的或者灰色无法运行,就执行
sudo chmod 777 文件名
修改文件权限就可以继续了
2.2 将交叉编译工具压缩文件放入虚拟机中
在此不赘述虚拟机的安装和共享文件夹的搭建,读者可以自行百度教程很完善。
共享文件夹的创建可看教程:ubuntu虚拟机(VirtualBox下)创建共享文件夹
首先把
FriendlyARM-4412-DVD-20190722\Disk-A\Linux
目录下的arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
文件复制到我们选择的共享文件夹中
我的共享文件夹的挂在目录是在
/media/sf_hi3516_share/
首先我们需要 执行su 登录root不然没有进入该文件夹的权限。
接着执行:
cd /media/sf_hi3516_share/
ls
可以看到文件已经能再虚拟机中看到了
我们执行
cp arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz /opt/
将交叉编译工具复制到/opt/目录下
cd /opt/
ls
查看文件是否复制成功
接着我们对文件进行解压
输入:
tar xvf arm-linux-gcc-4.5.1-v6-vfp-20120301.tgz
待解压完成后,执行
ls
可以看到多了一个opt
文件夹
接着我们执行:
cd opt/FriendlyARM/toolschain/4.5.1/bin
切换到bin目录之后,执行
pwd
会打印当前bin文件夹的绝对路径,这时候我们将这个路径复制下来
接下来执行:
nano /etc/profile
来进行环境变量的配置
在最后一行加上
export #export PATH=$PATH:/opt/opt/FriendlyARM/toolschain/4.5.1/bin
其中后面的路径就是刚才我们复制的bin
文件夹的路径
然后
ctrl+o
写入,ctrl+x
退出(保存退出)
然后继续执行
source /etc/profile
使我们刚才配置的文件生效
这时候再输入:
arm
然后连按两下tab
键
出现如下界面则表示,交叉编译环境已经配置完成
建议直接重启一下,更加稳妥。
三、虚拟机上进行文件的交叉编译
3.1 普通地创建并编译一个.c文件
书接上回
我们已经配置好了交叉编译环境,现在要对.c文件进行编译
如果重启过,我们就是再普通用户状态下,此时不需要进入root用户,执行:
cd ~
进入主目录
mkdir test_c
创建一个名叫test_c的文件夹
cd test_c/
进入test_c文件夹
nano test.c
创建一个名叫test的.c文件并编译
进入nano编辑界面
可以看到是空文件,这时候我们简单敲一个hello world的代码
然后保存退出
我们先回顾之前的gcc的使用,输入:
gcc test.c -o test
编译test.c文件得到可执行文件test
接着输入:
./test
可以看到打印了一行hello world
,这就是我们想要的结果
但gcc编译的文件只能在这里使用,我们想要在开发板上也实现相同的效果就需要使用之前配置好的交叉编译环境来编译程序。
3.2 简单地使用交叉编译环境编译一个.c文件
此时我们不切换文件夹,直接输入:
arm-linux-gcc-4.5.1 test.c -o arm-linux-gcc-4.5.1-test
使用交叉编译工具来编译刚才的test.c
文件,生成的可执行文件的名字为arm-linux-gcc-4.5.1-test
一定要按照arm-linux-gcc-4.5.1-文件名
的格式来命名,这样才能在开发板里运行(我也不知道为什么,反正试过了只有这样才能运行)
希望读者这方面不要偷懒
可以看到,我们想执行这个文件是会报错的,不过不要担心,这个文件本来就不是能在我们现在这系统中执行的,等到我们将该文件传输到开发板上执行时就知道效果了。
一定要用arm-linux-gcc-4.5.1
,如果用其他的工具编译比如arm-linux-gcc
编译的程序,复制到开发板中运行时可能会出现segment fault(段错误)
或者no such file or directory(找不到该文件)
的问题。当然,读者可以大胆尝试,并记录尝试的结果。
四、PC与tini4412的FTP传输
4.1 获取开发板的IP
首先用网线和串口线连接开发板与电脑
并打开xshell,连接开发板
输入
ifconfig
获取当前开发板的IP地址
4.2 修改电脑以太网接口的IP
进入
此电脑
,在左下角找到网络
,右键网络
,进入属性
点击
更新适配器设置
找到
以太网
,右键进入属性
进入
lnternet协议版本4(TCP/IPv4)
先选择
使用下面的IP地址
再将IP地址修改为和开发板IP地址属于同一网关不同主机号的IP
通俗点说就是以点为分隔,前面三组数字相同,最后一组的数字不同(不要用255)
可以修改为33,15,87,150,210等数据,不要和开发板一样都是230!!!
4.3 使用filezilla将电脑与开发板建立ftp连接
修改完成后,直接打开filezilla
在初始界面的快速连接的位置
输入开发板的IP地址(上面已经获取),用户名:root,密码:xxxx ,端口可以空着,点击快速连接
如果不记得或者不知道密码,直接在xshell中执行
passwd root
来更改密码
点击连接后可以看到已经初步建立连接了
再等一会会出现开发板的文件夹目录,这个时候就是成功建立连接了
4.4 使用filezilla传输电脑的文件到开发板上
这个时候先打开虚拟机,把虚拟机编译好的文件先复制到共享文件夹中,执行
su
先进入root用户
cp arm-linux-gcc-4.5.1-test /media/sf_hi3516_share/
将上面编译好的arm-linux-gcc-4.5.1-test可执行文件复制到共享文件夹中,每个人的目录可能不一样,需要读者自行修改
命令执行成功后打开filezilla,再左侧找到共享文件夹的路径,进入文件夹可以看到下方显示了我们编译好的文件
接着我们在右侧选择/home/plg文件夹,将左侧的编译好的文件拖进去,可以看到下面提示框已经显示正在传输了
传输成功后可以在右边看到相应的文件
打开xshell
输入
cd /home/plg
ls
可以看到我们的文件已经成功传到开发板里了(右边那个uart_test文件是我之前传进去的)
五、 在tini4412上运行可执行程序
5.1 简单运行一下测试程序
在xshell中执行
./arm-linux-gcc-4.5.1-test
可以看到和之前在虚拟机中gcc编译出的可执行文件运行的效果一样,打印出了hello world
5.2 运行串口助手程序
本次串口助手的程序的运行参考了正点原子手册【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.4
第二十六章 串口应用编程的内容
代码是官方例程的源码,具体的编译和运行流程上面已经介绍的的很详细了。读者可以结合博客内容和手册内容自行操作。
本节重点讲,在正点原子Linux开发板上和在tini4412开发板上程序运行的区别。
参考的手册内容如下:
在xshell中,执行
./arm-linux-gcc-4.5.1-uart_test --help
会显示串口助手程序运行各个参数如何设置
当我们仿照安装手册的参数进行读测试时,会显示
找不到 /dev/ttymxc2 这个文件
这是因为ttymxc2是正点原子Linux开发板的串口,而非我们tini4412的串口,详细可参考正点原子文档中的内容:
回看tini4412开发板的资源,我们连接的
COM0
端口,对应的是设备文件中的ttySAC0
所以哦我们要将上面的代码修改为,即将ttymxc2改为ttySAC0
./arm-linux-gcc-4.5.1-uart_test --dev=/dev/ttySAC0 --ty pe=read
可以看到程序正常运行
下一步我们打开xcom,进行串口连接
因为xshell和xcom的串口会冲突,所以这个时候我们需要断开xshell的连接,单独在开发板上运行刚才的程序
开发板显示的是电脑串口发送过来的数据:
xcom操作界面,大家可以尝试下开启和关闭十六进制发送和发送新行,对实际串口接收和发送的数据有什么样的影响。至此一个简单的串口助手就完成了~~
总结
具体代码内部实现了什么样的功能我会有时间再发一篇博客讲讲自己的理解。
这只是Linux开发的刚刚开始。希望大家继续努力。