资源描述
嵌入式系统原理及应用
嵌入式系统原理与应用
实验报告
班级:
学号:
姓名:
实验一 Linux shell基本命令的使用
一、 实验目的和要求
a) 掌握用户系统常用命令。
b) 掌握文件目录常用命令。
c) 掌握压缩打包常用命令。
d) 掌握网络相关命令。
二、 实验内容和原理
a) 登录系统,查看系统相关信息;
b) 查询和更新系统用户数据;
c) 创建文件目录和文件,并实现文件操作;
d) 打包并解压文件
e) 查询系统网络状态,并设置和更新
三、 实验环境
a) 硬件:PC机
b) 软件:LINUX操作系统、虚拟机
四、 算法描述及实验步骤
a) 启动系统,打开终端;
b) 查看系统信息,并将以下查看内容重定向添加到文件systemInfo.txt,最后清屏:
1、 查看系统当前所有进程;
2、 查看当前系统信息
3、 查看硬盘分区情况
4、 查看/etc/fstab文件
5、 查看系统当前的网络地址
c) 系统用户数据:
1、 切换到root状态
2、 创建用户(姓名拼间首字母加学号后两位,如张飞 ZF01),密码是123456
3、 进入新用户,并查看默认所在主目录及所有登录系统的用户
d) 文件操作:
1、 在当前用户的主目录下,创建文件夹Labl
2、 进入Lab1文件夹,新建文件welcome.txt,写入“Hello Zhang Fei!”保存退出
3、 将b步骤生成的文件SystemInfo.txt,移动到Lab1文件夹,并设置文件权限为:
文件所有者可读写,其它为只读; 并查看文件列表,权限是否设置
4、 返回到当前用户的主目录
5、 将Lab1文件夹打包生成tar.gz文件,并删除原文件夹
五、 实验报告要求:
按实验步骤执行,在纸质实验报告上详细描述执行流程(使用命令及操作流程),并在电子版的实验报告上要求另加适当截图描述;
a) 启动系统,打开终端;或使用putty连接系统(如果未安装ssh,可以使用sudo apt-get install ssh) :
运行Applications→Terminal
图1.1 启动终端
b) 查看系统信息,并将以下查看内容重定向添加到文件systemInfo.txt,最后清屏:
1、 查看系统当前所有进程:
运行Terminal→ps→ps >>SystermInfo.txt
图1.2 查看系统当前所有进程
2、 查看当前系统信息:
运行Terminal→uname -a→uname –a >>SystermInfo.txt
图1.3 查看当前系统信息
3、 查看硬盘分区情况:
运行Terminal→fdisk
图1.4 查看硬盘分区情况
4、 查看/etc/fstab文件:
运行Terminal→cat /etc/fstab→cat /etc/fstab >>SystermInfo.txt
图1.5 查看/etc/fstab文件
5、 查看系统当前的网络地址:
运行Terminal→ifconfig→ifconfig >>SystermInfo.txt→clear
图1.6 查看系统当前网络地址
c) 系统用户数据:
1、 切换到root状态:
运行Terminal→su - root→输入密码登录
图1.7 切换到root状态
2、 创建用户(姓名拼间首字母加学号后两位,如张飞 ZF01),密码是123456:
运行Terminal→useradd –m dhy27→passwd dhy27→输入并确定密码
图1.8 创建用户
3、 进入新用户,并查看默认所在主目录及所有登录系统的用户:
运行Terminal→su – dhy27→ls→who
图1.9 进入新用户
d) 文件操作:
1、 在当前用户的主目录下,创建文件夹Labl:
运行Terminal→mkdir Labl
图1.10 创建文件Labl
2、 进入Lab1文件夹,新建文件welcome.txt,写入“Hello Zhang Fei!”保存退出:
运行Terminal→vi welcome.txt
图1.11 进入Labl文件
在vi模式下创建文件
图1.12 在vi模式在创建文件
3、将b步骤生成的文件SystemInfo.txt,移动到Lab1文件夹,并设置文件权限为:
文件所有者可读写,其它为只读; 并查看文件列表,权限是否设置:
运行Terminal→mv /home/dhy/SystermInfo.txt /home/dhy27/Labl
图1.13 移动文件
运行Terminal→chmod 644 /home/dhy27/Labl/SystermInfo.txt→ls –l /home/dhy27/Labl
图1.14 更改权限
4、返回到当前用户的主目录:
运行Terminal→su dhy27→pwd→cd→pwd
图1.15 返回主目录
5、将Lab1文件夹打包生成tar.gz文件,并删除原文件夹:
运行Terminal→tar –cvf tar.gz /home/dhy27/Labl→ls→rm –r Labl
图1.16 打包文件
实验二 GCC 及GDB的使用
一、实验目的和要求
1. 掌握VI编译环境。
2. 掌握GCC编译命令。
3. 掌握多个文件共同编译方法。
4. 掌握GDB调试命令。
二、实验内容和原理
1.在VI编辑器里编写简单的“hello,world,I am 13050141XX XXX”,利用GCC编译为可执行文件,执行,观察运行结果。
2.在VI编辑器里编写多个文件(至少两个,其中一个为主程序,一个为需要调用的子程序),为其书写头文件,共同编译为可执行文件,执行,观察运行结果。学习书写MAKEFILE文件,编译,执行,观察结果。
3.编写循环结构的程序,利用GCC 编译(加参数-g)为可执行文件,利用GDB调试,学习GDB调试命令。
三.实验环境
1.硬件:PC机
2.软件:LINUX操作系统、虚拟机
四. 实验步骤
1.用vi编辑器新建hello.c文件,并用gcc编译器编译,执行,显示结果
图2.1 执行hello
2.makefile文件的编写,多文件编译执行
1) 主程序部分
图2.2 主程序
1) 子程序部分
图2.3 子程序
2) 头文件部分
图2.4 头文件
3) makefile的程序
图2.5 Makefile的程序
5)查看makefile的内容
图2.6 查看makefile的内容
6)主程序,子程序的编译执行输出结果
图2.7 执行结果
3.gdb的调试
1)用vi编辑器新建tst.c文件
图2.8 tst源程序
2)使用gdb tst 命令启动gdb调试
图2.9 启动gdb调试
3)使用 gdb l 命令列出源代码
图2.10 使用 gdb l 命令列出源代码
4)使用break 16 命令设置断点位置在16行;使用break func,设置断点,在func函数入口处;使用 info break 查看断点信息; 使用 r 命令,运行程序;使用 n 命令,单条语句执行;
图2.11 使用断点
5)使用 c命令继续运行程序,使用p i 命令打印变量i的值,print命令简写
图2.12 使用继续指令
6)使用 bt 命令查看函数堆栈
图2.13 查看函数堆栈
7)使用 finish 命令退出函数,使用 q 退出gdb调试。
图2.14 使用finish命令退出函数
实验三 交叉编译环境配置
一、 实验目的和要求
熟悉 Linux 开发环境,学会基于S3C2410 的Linux 开发环境的配置和使用。使用Linux 的armv4l-unknown-linux-gcc 编译,使用基于NFS 方式的下载调试,了解嵌入式开发的基本过程。
二、实验内容
e) 配置网络,包括配置IP 地址、NFS 服务、防火墙。
f) 安装交叉编译器
g) 配置超级终端,下载文件到目标机上。
三、实验设备及工具(包括软件调试工具)
硬件:UP-TECH S2410/P270 DVP 嵌入式实验平台、PC 机Pentium 500 以上, 硬盘10G 以上。
软件:REDHAT LINUX 9.0+超级终端+ARM-LINUX 开发环境
四、 实验步骤
1、虚拟机设置为桥接模式。
图3.1 虚拟机设置为桥接模式
2、配置IP地址,设置为192.168.0.121
图3.2 IP设置
图3.3 配制以太网
3、关闭防火墙
操作如下:点击红帽子开始菜单,选择安全级别设置,选中无防火墙。
图3.4 关闭防火墙
4、打开桌面超级终端,配置COM1,115200波特率,8N1,实验箱插上电源线,网线与主机相连,串口线与主机串口1相连,开机,看bootloader程序VIVI是否自动加载,回车后进入命令提示符。
5、宿主机和目标机互相PING,看是否PING通
宿主机Ping 192.168.0.121
超级终端Ping 192.168.0.123
图3.5 ping检验是否联通
6、安装NFS服务器,点击主菜单运行系统设置->添加/删除应用程序->服务器->服务器配置工具->system-config-nfs,system-config-samba,安装
图3.6 安装NFS服务器
7、 安装交叉编译器
利用U盘将提供的文件夹拷入系统中,虚拟机->可移动设备中将你的U盘连接上
建议的代码
fdisk -l (看SDB1出现没有)
mkdir /mnt/usb
mount -t vfat /dev/sdb1 /mnt/usb -codepage=936,iocharset=cp936
cd /mnt/usb
./install.sh
运行完后卸载U盘
umount /dev/sdb1
图3.7 安装交叉编译器
8、 在超级终端下挂载文件夹
mount -t nfs -o nolock 192.168.0.103:/liqing /host
实验四 熟悉 Linux 开发环境
一、实验目的
熟悉 Linux 开发环境,学会基于 S3C2410 的 Linux 开发环境的配置和使用。使用 Linux 的 armv4l-unknown-linux-gcc 编译,使用基于 NFS 方式的下载调试,了解嵌入式开发的基本 过程。
二、实验内容
本次实验使用 Redhat Linux 9.0 操作系统环境,安装 ARM-Linux 的开发库及编译器。创建 一个新目录,并在其中编写 hello.c 和 Makefile 文件。学习在 Linux 下的编程和编译过程, 以及 ARM 开发板的使用和开发环境的设置。下载已经编译好的文件到目标开发板上运行。
三、预备知识
C语言的基础知识、程序调试的基础知识和方法,Linux 的基本操作。
四、实验设备及工具(包括软件调试工具)
硬件:UP-CUP S2410 经典平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境
五、实验步骤
1、建立工作目录
4.1 建立工作目录
2、编写程序源代码
我们可以是用下面的命令来编写 hello.c 的源代码,进入 hello 目录使用 vi 命令来编辑代码:
图4.2 编辑代码
按“i”或者“a”进入编辑模式,将上面的代码录入进去,完成后按 Esc 键进入命令状态,再 用命令“:wq”保存并退出。这样我们便在当前目录下建立了一个名为 hello.c 的文件。
3、编写 Makefile
要使上面的 hello.c 程序能够运行,我们必须要编写一个 Makefile 文件,Makefile 文件 定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要 重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,你只需要敲一个“make” 命令整个工程就可以实现自动编译,当然我们本次实验只有一个文件,它还不能体现出使用 Makefile 的优越性,但当工程比较大文件比较多时,不使用 Makefile 几乎是不可能的。 下面我们介绍本次实验用到的 Makefile 文件。
CC= armv4l-unknown-linux-gcc
EXEC = hello
OBJS = hello.o CFLAGS +=–g
LDFLAGS+= –static
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS)
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
下面我们来简单介绍这个 Makefile 文件的几个主要部分:
e CC 指明编译器
e EXEC 表示编译后生成的执行文件名称
e OBJS 目标文件表 e CFLAGS 编译参数 e LDFLAGS 连接数 e all: 编译主入口
e clean: 清除编译结果
与上面编写 hello.c 的过程类似,用 vi 来创建一个 Makefile 文件并将代码录入其中
4、编译应用程序
在上面的步骤完成后,我们就可以在 hello 目录下运行“make”来编译我们的程序了。如果进行了修改,重新编译则运行:
图4.3 编译应用程序
5、下载调试
在宿主 PC 计算机上启动 NFS 服务,并设置好共享的目录,具体配置请参照前面第一章第四 节中关于嵌入式 Linux 环境开发环境的建立。在建立好 NFS 共享目录以后,我们就可以进入 超级终端中建立开发板与宿主 PC 机之间的通讯了。
再进入/mnt 目录运行刚刚编译好的 hello 程序,查看运行结果。
图4.4 运行结果
实验五 串行端口程序设计
一、实验目的
了解在 linux 环境下串行程序设计的基本方法。
掌握终端的主要属性及设置方法,熟悉终端 I/O函数的使用。
学习使用多线程来完成串口的收发处理。
二、实验内容
学习终端 I /O 函数的使用方法,学习将多线程编程应用到串口的接收 和发送程序设计中。发送自己的学号给串口。
三、预备知识
有 C 语言基础。
掌握在 Linux 下常用编辑器的使用。
掌握 Makefile 的编写和使用。
掌握 Linux 下的程序编译与交叉编译过程
四、实验设备及工具
硬件:UP-CUP S2410 经典平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境
五、程序分析
本实验的程序流程图如下:
图5.1 实验流程图
本实验的代码如下:
#include <termios.h>
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <sys/signal.h>
#include <pthread.h>
#define BAUDRATE B115200
#define COM1 "/dev/ttyS0"
#define COM2 "/dev/ttyS1"
#define ENDMINITERM 27
#define FALSE 0
#define TRUE 1
volatile int STOP=FALSE; volatile int fd;
void child_handler(int s)
{
printf("stop!!!\n"); STOP=TRUE;
}
void* receive(void * data)
{
int c;
printf("read modem\n"); while (STOP==FALSE)
{
read(fd,&c,1); /* com port */ write(1,&c,1); /* stdout */
}
printf("exit from reading modem\n"); return NULL;
}
int main(int argc,char** argv)
{
struct termios oldtio,newtio,oldstdtio,newstdtio; struct sigaction sa;
int ok;
pthread_t th_a, th_b, th_c; void * retval;
if( argc > 1)
fd = open(COM2, O_RDWR ); else
fd = open(COM1, O_RDWR ); //| O_NOCTTY |O_NONBLOCK);
if (fd <0) {
error(COM1); exit(-1);
}
tcgetattr(0,&oldstdtio);
tcgetattr(fd,&oldtio);
tcgetattr(fd,&newstdtio);
newtio.c_cflag = BAUDRATE | CRTSCTS | CS8 | CLOCAL | CREAD;
newtio.c_iflag = IGNPAR;
newtio.c_oflag = 0;
newtio.c_lflag = 0;
newtio.c_cc[VMIN]=1;
newtio.c_cc[VTIME]=0;
tcflush(fd, TCIFLUSH);
tcsetattr(fd,TCSANOW,&newtio);
sa.sa_handler = child_handler;
sa.sa_flags = 0;
sigaction(SIGCHLD,&sa,NULL);
pthread_create(&th_a, NULL, keyboard, 0);
pthread_create(&th_b, NULL, receive, 0);
pthread_create(&th_c, NULL, send, 0);
pthread_join(th_a, &retval);
pthread_join(th_b,&retval);
pthread_join(th_c,&retval);
tcsetattr(fd,TCSANOW,&oldtio);
tcsetattr(0,TCSANOW,&oldstdtio);
close(fd);
exit(0);
}
六、实验步骤
1、打开串口
在 Linux 下串口文件位于/dev 下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二 为 /dev/ttyS1, 在我们的开发板中串口设备位于/dev/tts/下,因为开发板中没有 ttyS0 这个设备,所以我们要建立一个连接,方法如下:
[/mnt/yaffs] cd /dev
[/dev] ln –sf /dev/tts/0 ttyS0
2、 编写代码(如上)
3、 编译连接
图5.3 编译链接
4、 下载调试
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.103/arm2410cl /host
[/mnt/yaffs]cd /host/exp/basic/03_tty/
[/host/exp/basic/03_tty]./term
41 / 41
七、实验结果
图5.4 实验结果
实验六 A/D 接口实验
一、实验目的
了解在 linux 环境下对 S3C2410 芯片的 8 通道 10 位 A/D 的操作与控制。
二、实验内容
学习 A/D 接口原理,了解实现 A/D 系统对于系统的软件和硬件要求。阅读 ARM 芯片文档, 掌握 ARM 的 A/D 相关寄存器的功能,熟悉 ARM 系统硬件的 A/D 相关接口。利用外部模拟信 号编程实现 ARM 循环采集全部前 4 路通道,并且在超级终端上显示。
三、预备知识
有 C 语言基础。
掌握在 Linux 下常用编辑器的使用。
掌握 Makefile 的编写和使用。
掌握 Linux 下的程序编译与交叉编译过程。
四、实验设备及工具
硬件:UP-CUP S2410 经典平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。
软件:PC 机操作系统 REDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境
五、程序代码
ad 驱动对用户来说只是下面的一个文件结构。在用户程序里只需要用到 open、 read、 write、 release 等内核函数即可。本实验采用的是模块方式加载,可以在实验箱的/mnt/yaffs/ad/ 中找到 AD 的驱动程序。
main.c 的代码如下:
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/ioctl.h>
#include <pthread.h>
#include <fcntl.h>
#include "s3c2410-adc.h"
#define ADC_DEV "/dev/adc/0raw" static int adc_fd = -1;
static int init_ADdevice(void)
{
if((adc_fd=open(ADC_DEV, O_RDWR))<0){
printf("Error opening %s adc device\n", ADC_DEV); return -1;
}
}
static int GetADresult(int channel)
{
int PRESCALE=0XFF;
int data=ADC_WRITE(channel, PRESCALE); write(adc_fd, &data, sizeof(data)); read(adc_fd, &data, sizeof(data));
return data;
}
static int stop=0;
static void* comMonitor(void* data)
{
getchar(); stop=1; return NULL;
}
int main(void)
{
int i; float d;
pthread_t th_com; void * retval;
//set s3c44b0 AD register and start AD if(init_ADdevice()<0)
return -1;
/* Create the threads */
pthread_create(&th_com, NULL, comMonitor, 0); printf("\nPress Enter key exit!\n");
while( stop==0 ){
for(i=0; i<=2; i++){//采样 0~2 路 A/D 值 d=((float)GetADresult(i)*3.3)/1024.0; printf("a%d=%8.4f\t",i,d);
}
usleep(1); printf("\r");
}
/* Wait until producer and consumer finish. */ pthread_join(th_com, &retval);
printf("\n"); return 0;
}
六、实验步骤
1、编写源码
使用 vi 编辑器或其他编辑器编辑源代码。
2、编译应用程序
运行 make 产生 ad 可执行文件
图6.1 运行make产生ad可执行文件
3、下载调试
换到超级终端窗口,使用 NFS mount 开发主机的/arm2410cl 到/host 目录。
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410cl /host [/mnt/yaffs]insmod ad/s3c2410-adc.o
[/mnt/yaffs]cd /host/exp/basic/04_ad/ [/host/exp/basic/04_ad]./ad
我们可以通过调节开发板上的三个黄色的电位器,来查看 a0、a1、a2 的变化。
七、 实验结果
图6.2 实验结果
实验七 简单嵌入式 WEB 服务器实验
一、实验目的
掌握在 ARM 开发板实现一个简单 WEB 服务器的过程。
学习在 ARM 开发板上的 SOCKET 网络编程。
学习 Linux 下的 signal()函数的使用。
二、实验内容
学习使用 socket 进行通讯编程的过程,了解一个实际的网络通讯应用程序整体设计,阅读 HTTP 协议的相关内容,学习几个重要的网络函数的使用方法。在 PC 计算机上使用浏览器测试嵌入 式 WEB 服务器的功能。
三、 预备知识
C 语言的基础知识、程序调试的基础知识和方法,Linux环境下常用命令和 vi 编辑器的操作。
HTTP1.0 协议的基本知识。
SOCKET 编程的几个基本函数的使用方法。
四、实验设备及工具
硬件:UP-CUP S2410 经典平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境
五、功能需求详细说明
1.获取服务器当前目录文件列表 将服务器当前目录下所有文件的信息发送给客户端,信息包括:文件名、大小、日期。
2.获取指定文件 将客户请求的文件发送给客户。
3.获取 HTML 类型文件将客户请求的 HTML 类型文件发送给客户。
4.获取纯文本文件将客户请求的纯文本发送给客户。
5.获取 JPG 图像文件将客户请求的 JPG 图像文件发送给客户。
6.获取 GIF 图像文件将客户请求的 GIF 图像文件发送给客户。
7.解析用户请求 分析客户的请求,将请求信息解析为几个变量。
8.请求的命令、请求的文件名、请求的文件类型。
六、程序代码
switch (content_type)
{
case 't':
fprintf(f,"Content-type: text/plain\n"); break;
case 'g':
fprintf(f,"Content-type: image/gif\n"); break;
case 'j':
fprintf(f,"Content-type: image/jpeg\n"); break;
case 'h':
fprintf(f,"Content-type: text/html\n"); break;
}
发送服务器信息:fprintf(f,"Server: AMRLinux-httpd 0.2.4\n");
发送文件永不过期:fprintf(f,"Expires: 0\n");
七、实验步骤
1. 阅读理解源码
进入/arm2410c1/exp/basic/07_httpd/目录,使用vi编辑器或其他编辑器阅读理解源码。
2. 编译运行文件
运行make产生可执行文件httpd
图7.1 编译
3. 下载调试
图7.2 下载调试
八、实验结果
图7.3 实验结果
实验八 8 字数码管和点阵数码管实验
一、 实验目的
学习 LED 的相关知识
掌握 74HC273 芯片的工作原理
二、实验内容
学习 LED 相关知识,了解 74HC273 芯片对 LED 点亮的工作机制,熟练阅读 74HC273芯片资料,掌握对它的使用。在七段LED上循环轮流显示学号,如“13 05 01 41 01”,在点阵LED上显示自己设计的图案,轮流显示。
三、预备知识
有 C语言基础
掌握在 Linux下常用编辑器的使用
掌握 Makefile的编写和使用
掌握 Linux 下的程序编译与交叉编译过程
需要部分数字电路的知识
四、实验设备及工具
硬件:UP-CUP S2410 经典平台、PC 机 Pentium 500 以上, 硬盘 10G 以上。 软件:PC 机操作系统 REDHAT LINUX 9.0+MINICOM+ARM-LINUX 开发环境
五、LED 数码管电路图
其中各个引脚的功能在下面都有描述。
74HC273 在 8 字数码管中开发板中的连接如图 所示:
开发板设置2 个数码管,由74HC273 控制。74HC273是同步串行转并行的锁存器,在此通过SPI 总线和CPU 连接,锁存数据后驱动数码管发光。
上面一副图的
最左边接的是下面图的最右边
六、程序分析
LEDCODE[10]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};//这个是 10 个
数字的编码
//在这里主要是用到编码的过程
假设 a 是 8 字型数码管的最上一横,以顺时针以次列出 b,c,d,e,f.中间那一横为 g,如果要显示 为 0 的话,由于在开发板中的连接是共阳极(请参考我们的电路图),所以只需要满足 a,b,c,d,e,f 为 0 即可,而 g 为 1,因为两个数码管的中间是个点号,我们用 h 表示,并且总是让它置为 1。因为我们在开发板的连接上可以看到 a 对应 d0,b 对应 d1,..........h 对应 d7,所以当想显示为 0 的时候,那 么应该是 。转化成为 16 进制的数据,也就成了 0Xc0.对应我们在 LEDCODE【10】数组中的 第一位。其他的每一位值,大家可以根据上面的方法依次类推。
在 for 循环中我们写了如下语句。
LEDWORD=(LEDCODE[i]<<8)|LEDCODE[9-i];
那是因为 LEDWORD 是一个 16 位的数。我们是需要将两个 8 字数码管同时显示,所以将 LEDCODE[i]
左移 8 位,然后再加上个位使得十位和个位同时显示。
至于显示点阵数码管还是显示 8 字数码管,主要是通过 IOCTL 函数中的命令来实现的,也就是在代 码中出现的
ioctl(fd,0x12,LEDWORD); ioctl(fd,0x11,LEDWORD);
下面分析这个 IOCTL 函数的原型
static int s3c2410_led_ioctl (struct inode *inode, struct file *filp, unsigned int cmd, unsigned int arg)
{
//printk("DOT buffer is %x\n" ,arg ); switch(cmd){
case LED_TUBE_IOCTRL://如果是 0x11 命令,那么点亮 8 字数码管
return *(volatile unsigned short *)s3c2410_led_tube_base=arg;
case LED_DIG_IOCTRL://如果是 0x12 命令 ,那么点亮点阵数码管
return *(volatile unsigned short *)s3c2410_led_dig_base=arg;
default :
return printk("your command is not exist");
}
return 0;
}
七、实验步骤
1、编写源码
使用 vi 编辑器或其他编辑器编写源代码
图8.1
图8.2 编写test_led文件
2、编译应用程序
运行 make 产生 test_led 可执行文件 test_led
图8.3 运行make产型可执行文件
3、下载调试
图8.4 下载调试
八、 实验结果(加图)
图8.5 实验结果
展开阅读全文