智能监测课程ARM部分
第一节课的计划任务是这样的:
- 安装虚拟机
- 在虚拟机中安装Ubuntu
- 安装minicom,和开发板进行串口通信
- 安装nfs-kernel-server,实现和开发板的网络传输文件
- 配置Qt4.5.3的交叉编译环境
- 写一个输出hello world的例子
- 简单介绍ad7841.ko的用法
- 课程圆满结束
现实比较残酷,只进行到了minicom串口通信,先假设大家都已经可以通过串口线进行和开发板的通信,有什么问题可以另外咨询,下面咱们接着这里往下进行。
注意到虚拟机中网络通信网线灯不亮,为降低难度就不用nfs挂载传输文件了,直接通过U盘在主机和开发板上拷贝文件。
1. 挂载U盘
我们通过U盘在主机和开发板之间拷贝文件。在开发板上从U盘复制文件首先要挂载U盘,将U盘插在开发板USB口上,在minicom中执行命令mount /dev/sda1 /mnt
这样U盘就挂载了/mnt
文件夹下,我们可以通过ls /mnt
查看U盘中的内容。
把文件从U盘拷贝到根目录下cp /mnt/filename /
,查看根目录ls /
就可以看到你拷贝过来的文件了。
注意:拔U盘前要执行umount /mnt
,这就相当于Windows下的“安全移除U盘”。
2.配置Qt开发环境
先介绍一个要用到的命令tar
,这个就是Linux下的解压缩指令,很常用,大家一定要自己查一下基本用法。这里只介绍我们用到的解压缩部分。
假设我们的压缩包叫做filename.tar.gz
,我们要解压缩只要执行
tar zxvf filename.tar.gz
解压缩后的文件就放在你当前目录下,可以通过ls
指令看到解压缩出来的内容。
以下内容是在虚拟机内的Linux系统中进行的
在拷贝的资料中我们可以看到两个压缩文件arm-9261.tar.gz
和Trolltech.tar.gz
,将这两个文件分别解压缩,出现两个文件夹arm-9261
和Trolltech
。
- 将
arm-9261
复制到用户目录下(/home/username/
); - 将
Trolltech
文件夹复制到/usr/local/
下。
如果提示"permission denied"
,记得给他们用户管理员权限哦(在指令前面加上sudo
)。
因为大家的电脑路径和我的不一样,下面还有一丢丢环境变量需要去修改一下。
如果你上面运行正确,下面需要进到这个目录里/usr/local/Trolltech/QtEmbedded-4.5.3-arm/
,怎么样?是不是很眼熟?对的,就是你刚才把压缩包解压缩后放到/usr/local/
下后形成的文件夹。
打开这个目录下的setenv-arm.sh
文件(vi
是linux下常用的文本编辑命令,自己学习,我不管)。下面是原始文件的内容。
QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm
PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH
PATH=/home/yy/ctools/arm-9261/bin:$PATH
LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH
我们要修改的是第三行以"PATH"
开头的内容。
把PATH=/home/yy/ctools/arm-9261/bin:$PATH
中的路径改成实际bin
文件夹实际的路径。到此Qt的环境就设置好了,在下一部分我们会用一个简单的例子介绍Qt交叉编译环境的使用。
3.让开发板跟大家打个招呼
不管大家是用Linux C还是用Qt编程,大家自己去学习。我今天只用一个最简单的Qt小程序为例介绍一下大概的过程。
#include <QCoreApplication>
#include <QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
qDebug()<<"hello world!";
return app.exec();
}
保存成main.cpp,好了,源代码就这样就好了,下面我们来看一下如何编译。
- 打开一个终端,就是按
Ctrl+Alt+T
出来的那个小黑框框;后续的操作都在这个窗口里进行。 - 执行上文中提到的
setenv-arm.sh
。怎么执行呢?进入这个文件所在的文件夹,执行./setenv-arm.sh
。这样做的目的是在这个窗口中增加文件中的环境变量,我们可以直接执行命令而不用输入命令的绝对路径。举个例子,qmake
这个命令在/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin
这个路径下,如果这个路径不在环境变量PATH
中,直接执行qmake
,他会提示not found
,如果我们要执行这个命令就要输入他的绝对路径/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin
。我们把这个路径加入到环境变量中就这个直接执行了。但是如果你换一个终端窗口,这个环境变量就失效了。 - 构建工程,进入源代码文件夹,执行
qmake -project
。 - Qt编译,执行
qmake
。 - 编译源文件,执行
make
。
现在在源文件里文件夹里应该会有一个绿色的文件,为什么是绿色的呢?因为他是一个可执行文件,但他是不能在电脑上执行的。用U盘把这个文件拷贝到开发板,执行这个文件./filename
,铛铛铛铛!是不是看到运行的结果了,Ctrl+C
退回到命令行。
4.简单介绍ad7841.ko的用法
看原理图可以知道,AD采样采用AD7841数采芯片,SPI口通信。ad7841.ko内核模块已经放在开发板里,并启动是挂载,可以通过下面的方式读取AD值。
meter_fd = open("/dev/ads7841_spi1", O_RDWR | O_SYNC );
unsigned char command[2];
command[0]= ADS_S | ADS_S_D | ADS_POWER | ADS_CHANNEL;
read(meter_fd,&command[0],2);
memcpy(res,command,2);
这就是上节课没有完成的内容,台子搭好了,唱戏是你们的事了。
祝大家取得好成绩!!!