==============================智能娱乐系统===================硬件:中控:UI,音视频数据处理能力操作:显卡,声卡、LED、游戏机、触控屏ARM :cortex - A软件:开发环境:vmware + linux(ubuntu)程序开发:linux C程序移植:交叉开发效果:自动处理程序一、Linux 命令linux : 图形简陋---> 追求效率高移植性强,开源性linux :命令行形式进行交互ls: 查看全部文件名/ --->根目录pwd: 打印当前的路径/home/gec 等于~ ---> 家目录cd : 直接回到/home/geccd / : 回到根目录/cd ..: 回到上一级的目录ls -l类型权限链接数创建者工作组大小日期目录名d rwxrwxr-x 2 gec gec 4096 Jul 2 2013 Desktopd:目录(第一个字母:-:普通文件d:目录)rwxrwxr-x:文件的权限r:读权限w:写权限x:执行权限用户权限:rwx(创建者的权限)rwx(同组人)r-x(其他人)clear: 清除屏幕信息touch 创建文件touch xxxx ----> 因为身份是gec,所以必须在/home/gec中创建rm 删除文件/目录rm xxxx(文件名) ----> 因为身份是gec,所以必须在/home/gec中删除rm xxxx(目录名) -rfgedit 编辑文件gedit xxxxcat 查看文件内容cat xxxxmkdir 创建目录mkdir xxxx ----> 因为身份是gec,所以必须在/home/gec中创建cp 拷贝命令cp 文件名目录名---> cp abc.c 123/chmod 修改文件的权限-rw-rw-r-- 1 gec gec 20 Apr 14 19:43 abc.c4214214216 6 4希望三个人都是可读可写可执行7 7 7chmod 777 xxxxchmod 777 abc.c-rwxrwxrwx 1 gec gec 20 Apr 14 19:43 abc.c二、linux与windows间的共享目录1,在windows系统中的D:\创建一个名字为share的目录2, "虚拟机" --- "设置" ---- "选项" --- "共享文件夹" --- "总是启用" ---"确定" 3,在linux系统输入以下命令来进入共享目录cd /mnt/hgfs/share/4,在linux与windows分别创建目录和文件,观察两个系统的变化=====================开发板的使用=========================一、核心板CPU:ARM - cortex -A8名字:S5PV210内存:4块4 * 128MB = 512MBnandfalsh: 1G ---〉linux系统二、底板电源线插口:5V按键音频输入(红色)输出(绿色)串口:连接PC机与开发板网口:快速传输数据三、使用GEC210板子1,接上电源线2,串口线一端接在开发板上,另一端接在USB转串口上,USB口接在电脑的USB口上。
3,双击"D:\岭南实训包\Hl-340.exe" ----"安装"4,查看对应的USB口的com口右键选择"计算机" --- "属性" ---- "设备管理器" ---"端口"假如:"COM3"5,使用一个串口软件secureCRT双击"D:\岭南实训包\SecureCRT\SecureCRT.exe"6, "文件" --- "快速连接"协议:serial端口:COM3波特率:115200数据位:8奇偶检验位:none停止位:1流控:把全部的打钩去掉---- "连接"7,重启启动====================项目实操1(本地开发)=========================技术点:本地开发一般只用于检查程序的语法是否正确,与ARM无关。
工程文件的格式:xxx.c1,切换到工作路径cd /mnt/hgfs/share/2,建立一个工程文件touch project.c3,在windows下安装notepad++来编辑工程D:\岭南实训包\npp_6.9.2_Installer.exe4,在windows使用notepad++打开project.c--------------------------------#include <stdio.h>int main(){printf("my project!\n");return 0;}---------------------------------5,在linux系统中编译工程,得到一个可执行的程序gcc project.c -o project6,执行程序./project=======================项目实操2(交叉开发)========================技术点:交叉开发,可以编译出一个适合于ARM平台使用的程序1,打开secureCRT ,输入以下命令rz -y选择"D:\share\project" ---- "添加" ----- "确定"2,直接执行,会提示权限拒绝[root@GEC210 /]# ./project-/bin/sh: ./project: Permission denied ---> 权限拒绝3,修改project权限chmod 777 project4,执行./project./project: line 1: syntax error: unexpected "("----> 文件的运行平台不一致解决方案:分析project文件,重新编译得到一个新的运行平台文件ubuntu ---> 80386(x86)开发板---> ARM1,在ubuntu中重新编译project.carm-linux-gcc project.c -o project2, 在secureCRT中执行以下命令rz -y选择下载"D:\share\project" ---- "添加" ----- "确定"3,修改project权限chmod 777 project4,执行./project========================项目实操3(LCD开发)==========================技术点:ARM板LCD大小:800*480操作显卡--> jpeg_show ---> 显示jpeg图片的工具目标:example.jpg1, jpeg_show D:\岭南实训包\岭南学院学生实训包\ARM\jpeg_show2, libjpeg.so.9 D:\岭南实训包\岭南学院学生实训包\lib\libjpeg.so.9---> jpeg库(帮助处理jpeg图片的编解码)3,打开secureCRT ,输入以下命令rz -y选择"jpeg_show、libjpeg.so.9 、example.jpg" ---- "添加" ----- "确定"4,把libjpeg.so.9拷贝到/lib/cp libjpeg.so.9 /lib/5、修改权限chmod 777 jpeg_show6、执行./jpeg_show example.jpg今晚作业:把项目实操3加入project.c中./project后,既能够打印my AI project!又能够显示一张图片思路:在project.c中执行“./jpeg_show xxx.jpg”,但是这样写不符合linux系统的语法规则,所以必须要按照linux的编程语法来实现这个功能。
./jpeg_show xxx.jpg ----> 调用system函数system()语法?参数?1,在ubuntu中,输入以下命令,查看system函数的功能手册数man -f systemsystem (3) - execute a shell command----> 我们要调用的system函数在3手册2,进入第3手册,查看system函数的用法man 3 system-----> 进入了system的帮助文档,退出按“q”int system(const char *command);project.c --> system("./jpeg_show xxx.jpg");------------------------#include <stdio.h>int main(){printf("my AI project!\n");system("./jpeg_show xxx.jpg");return 0;}------------------------3,回到工作目录share中cd /mnt/hgfs/share/4,重新编译arm-linux-gcc project.c -o project5,在secureCRT中,执行以下命令rz -y选择下载"D:\share\project" ---- "添加" ----- "确定"6,修改权限chmod 777 project7,执行./project========================项目实操4(LCD效果增强)=======================技术点:一个工程在执行时,在系统中就会产生一个进程要使得程序延迟若干秒后,再执行接下的程序,必须把进程挂起sleep() ---> 把进程挂起若干秒1,查看sleep()函数的手册数man -f sleepsleep (3) - Sleep for the specified number of seconds2, 查看第3手册中的sleep函数man 3 sleepunsigned int sleep(unsigned int seconds);seconds:整数的秒数假如让进程挂起5秒---> sleep(5);./project后1,打印my project!2, 显示login.jpg3, 2秒后,再显示main.jpg--------------------------------------#include <stdio.h>int main(){printf("my AI project!\n");system("./jpeg_show login.jpg");sleep(2);system("./jpeg_show main.jpg");return 0;}(注意:记得把main.jpg和login.jpg也放进开发板)--------------------------------------------======================项目实操5(音频处理)============================技术点:1,开发板中绿色(音频输出)线2,播放的歌曲为:xxx.mp33, 使用mp3播放器:madplay4, 解释mp3歌曲的编码libid3tag.so.0 --->解释mp3歌曲libmad.so.0 --->解释madplay播放器madplay xxx.mp35,把当前歌曲取消掉killall -9 madplay1) 把libid3tag.so.0和libmad.so.0和xx.mp3传输到开发板2) 把libid3tag.so.0和libmad.so.0拷贝到/lib/cp libid3tag.so.0 /lib/cp libmad.so.0 /lib/3) 使用madplay工具来播放歌曲madplay xx.mp3把项目实操5加入到项目./project1,打印my project2,显示login.jpg3,播放歌曲4,2秒后,看到main.jpg解决方法:播放歌曲在后台播放------------------------------------------------#include <stdio.h>int main(){printf("my AI project!\n");system("./jpeg_show login.jpg");system("madplay start.mp3 &");----> 播放歌曲需要在后台执行,添加& 符号sleep(2);system("./jpeg_show main.jpg");return 0;}----------------------------------------------======================项目实操6(工程管理文件)==========================技术点:因为编译命令过长,所以makefile可以帮助我们简单地通过编译1,把D:\岭南实训包\岭南学院学生实训包\makefile放到D:\share中2,在D:\share创建一个命名为Headers目录,用于存放工程的头文件把D:\岭南实训包\岭南学院学生实训包\project.h放到D:\share\Headers中3, 在D:\share创建一个命名为libs目录,用于存放工程的库文件把D:\岭南实训包\岭南学院学生实训包\libts.so放到D:\share\libs中4, 在linux系统中编译make5, 清除目标文件projectmake clean6, 重新编译make==============项目实操7(人机交互--访问触控屏驱动)====================技术点:1,在linux下,一切都是文件普通文件、设备驱动---->文件2,ARM平台的所有硬件的驱动全部存放/dev (device)----> 触控屏对应的驱动文件也是在/dev3, 鼠标、触控屏、键盘--->linux下,都是叫事件----> /dev/event0 4,访问(打开)触摸屏ts_open(驱动文件名字,阻塞方式);1) 把D:\岭南实训包\岭南学院学生实训包\tslib.h放到D:\share\Headers中2) 在project.c中,添加新加的头文件添加:#include "project.h"#include "tslib.h"因为project.h和tslib.h都是自己添加,需要用"",不能用<> 3) 访问触摸屏添加:struct tsdev* ts = ts_open("/dev/event0",0);if(ts != NULL){printf("open touch OK!\n");}返回值:struct tsdev* (结构体指针)类型如果函数执行成功,则返回ts如果函数执行失败,则返回NULL4)在linux中编译make5) 在secureCRT中,执行以下命令rz -y选择下载"D:\share\project" ---- "添加" ----- "确定"6,修改权限chmod 777 project7,执行./projectopen touch OK!===================项目实操8(读取压力值)============================1)访问驱动后,需要进一步配置触摸屏的数据,否则不能读取坐标ts_config(struct tsdev*) 需要struct tsdev*类型的参数在工程中,添加以下代码:ts_config(ts);2)采样点,当你的手指触摸屏幕时,都会给你返回一个以下的结构struct ts_sample{int x;----> x轴坐标int y;----> y轴坐标unsigned int pressure;---->压力值struct timeval tv;---->事件发生的时间};在工程中,添加以下代码:struct ts_sample buf;3)读取压力值从触摸屏的驱动中读取数据到buf变量中在工程中,添加以下代码:ts_read(ts,&buf,1);printf("pressure = %d\n",buf.pressure);4)在linux中编译make5) 在secureCRT中,执行以下命令rz -y选择下载"D:\share\project" ---- "添加" ----- "确定"6,修改权限chmod 777 project7,执行./projectopen touch OK!使用手指触摸屏幕pressure = 200=======================项目实操9(循环读取坐标)=================技术点:ts_config(ts); 用于配置触摸屏的数据,只需要配置一次。