嵌入式应用开发实验指导书 (1) 下载本文

配置内核:

启动菜单配置工具后,选择“Load Alternate Configuration File”选项,然后确认。该选项载入jx2410的标准配置文件config-jx2410,该文件保存在/home/cvtech/jx2410/linux目录下,请不要修改这个文件。在提示框中键入config-jx2410配置文件名,然后选择“OK”确认,将退回到主菜单。然后按“Esc”键退出,并将提示是否保存,请选择“Yes”保存。

建立依赖关系:

编译:

2、在目标机上启动Linux内核 (1)配置主机ip为192.168.1.180。在主机上把zImage和ramdisk.gz复制到/tftpboot目录下。 (2)运行环境变量loadlinux。启动目标机的Linux系统。

3、挂接主机和目标机

挂载主机/tftpboot/挂接目录 到目标机(JXARM9-2410试验箱)/mnt/nfs目录下,输入如下命令:

# mount 192.168.1.180: /tftpboot/挂接目录 /mnt/nfs [实验报告要求]

1、实验报告包括实验目的、实验内容、实验步骤、实验结果和实验小结。 2、写出实验内容使用的命令和结果(截图表示)。

实验四: 串口应用程序编写实验

[实验目的]

1. 了解Linux下串行端口程序设计的基本原理。

2. 掌握终端的主要属性及设置方法,熟悉终端I/O函数的使用。 3. 掌握JXARM9-2410下的串口应用程序的编程方法。 [实验内容一]

1、 编写serial应用程序。 2、 编写Makefile文件。

3、 下载并调试serial应用程序。 [预备知识]

1. C语言的基础知识。

2. 程序调试的基础知识和方法。 3. Linux的基本操作。

4. 掌握Linux下的程序编译与交叉编译过程。 [基础知识]

Linux操作系统从一开始就对串行口提供了很好的支持,为进行串行通信提供了大量的函数,本试验主要是为掌握在Linux中进行串行通信编程的基本方法。

1、 串口编程相关头文件

#include /*标准输入输出定义*/ #include / *便准函数库定义*/ #include /*Linux标准函数定义*/ #include #include #include /*文件控制定义*/ #include /*PPSIX终端控制定义*/ #include /*错误号定义*/ #include /*线程库定义*/ 2、 打开串口

在Linux下,串口文件位于/dev下,串口1为/dev/ttyS0,串口2为/dev/ttyS1,打开串口是通过使用标准的文件打开函数操作:

Intfd;

/*以读/写方式打开串口*/

fd=open(”/dev/ttyS0”, 0_RDWR); if(-1==fd) { perror(“error“); }

3、 设置串口

最基本的设置串口包括波特率设置,效验位和停止位设置。串口的设置struct termios结构体的成员值。

struct termio{

unsigned short c_iflag; /*输入模式标志*/ unsigned short c_oflag; /*输出模式标志/

17

unsigned short c_cflag; /*控制模式标志*/ unsigned short c_lflag; /*local mode flags*/ unsigned char c_line; /*line discipline*/ unsigned char c_cc[NCC]; /*control characters*/ };

(1)波特率设置

下面是修改波特率的代码: struct termios Opt; tcgetattr(fd,&Opt);

cfsetispeed(&Opt,B19200); /*设置为192 000 bps*/ cfsetospeed(&Opt,B19200); tcsetattr(fd,TCANOW,&Opt); (2)校验位的设置 无效验8位:

Option.c_cflag &=~PARENB; Option.c_cflag &=~CSTOPB Option.c_cflag &=~CSIZE; Option.c_cflag |=~CS8; 奇效验(Odd)7位:

Option.c_cflag |=~PARENB; Option.c_cflag &=~PARODD; Option.c_cflag &=~CSTOPB Option.c_cflag &=~CSIZE; Option.c_cflag |=~CS7; 偶效验(Even)7位:

Option.c_cflag &=~PARENB; Option.c_cflag |=~PARODD; Option.c_cflag &=~CSTOPB Option.c_cflag &=~CSIZE; Option.c_cflag |=~CS7; Space效验7位:

Option.c_cflag &=~PARENB; Option.c_cflag &=~CSTOPB Option.c_cflag &=&~CSIZE; Option.c_cflag |=~CS8; (3)设置停止位 1位:

Options.c_cflag &=~CSTOPB; 2位:

Options.c_cflag |=~CSTOPB;

需要注意的是,如果不是开发终端之类,只是串口传输数据,从而不需要串口来处理,那么使用原始模式(Raw Mode)方式来通信,设置方式如下:

Options.c_cflag &=~(ICANON|ECHO|ECHOE|ISIG); /*Input*/ Options.c_oflag &=~OPOST; /*Output*/

(4)读/写串口

设置好串口之后,读/写串口变得很容易,就可以把串口当作文件读/写了。 发送数据:

char buffer[1024]; int Length=1024; int nByte;

nByte=write(fd,buffer,Length);

读取串口数据使用文件操作read函数读取,如果设置为原始模式(Raw Mode)传输数据,那么read函数返回的字符数是实际串口收到的字符数。可以使用操作文件的函数来实现异步读取,如fcntl或者select等来操作。

char buffer[1024]; int Len=1024;

int readByte=read(fd,buffer,Len); (5)关闭串口

关闭产口就是关闭文件。 4、实验程序流程图

实验程序流程图如图所示。

main 打开串口 设置波特率 设置效验位和停止位 从串口读数据 打印从串口读到的数据 结束

[实验步骤]

1、 建立工作目录。 $cd /

$mkdir serial $cd serial

2、 编写serial程序源代码。参照程序流程图编写串口通信程序,从串口接受数据,并将接

收到的数据打印出来。 3、 编写Makefile文件。 4、 编译serial程序。

19

$make clean

$make正确的话,将生成serial程序。 5、运行serial程序。 $./serial

6、修改Makefile文件。(使用arm-linux-gcc编译器) $make clean

$make重新编译,将生成在arm平台上运行的serial程序。 $cp serial /tftpboot/挂接目录

5、 启动目标机Linux,并挂接主机。下载serial程序到JXARM9-2410中调试。 #mount 192.168.1.180:/tftpboot/挂接目录 /mnt/nfs/ #cd /mnt/nfs/挂接目录 #./serial

[实验报告要求]

1、实验报告包括实验目的、实验内容、实验步骤、实验结果和实验小结。 2、写出serial程序源码、实验过程和实验结果(可使用贴图)。