20145212&20145204信息安全系统实验四报告
一、实验内容与步骤
1.本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式);
2.在linux系统中安装arm系统,然后对01_demo文件夹中的.c文件进行交叉编译。
3.阅读和理解源代码:进入/arm2410cl/exp/drivers/01_demo,使用vim编辑器或其他编辑器阅读理解源代码。
4.编译驱动模块及测试程序
- Makefile 中有两种编译方法,可以在本机上使用gcc;也可以使用交叉编译器进行编译,交叉编译器进行编译。
- 如果编译的时候出现问题,可能是在/usr/src 下没有建立一个linux 连接,可以使用下面的命令:
[root@zxt 01_demo]# cd /usr/src/
[root@zxt src]# ln -sf linux-2.4.20-8 linux
[root@zxt src]# ls
debug linux linux-2.4 linux-2.4.20-8 redhat
5.测试驱动程序
- 若使用 gcc 编译,需要通过命令
#mknod /dev/demo c 254 0来建立设备节点,如果使用交叉编译器的话,不需要建立设备节点。
二、实验原理
驱动程序
- 目的:驱动程序是应用程序和硬件之间的一个软件层,为(许多个)应用程序提供硬件的所有功能。为了处理并发的情况,还需要考虑互斥量和锁等机制。
- 特点:应用程序一般有一个 main 函数,从头到尾执行一个任务;驱动程序却不同,它没有main函数,通过使用宏module_init(初始化函数名)。
- 用法:将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。驱动程序中有一个宏moudule_exit(退出处理函数名)注册退出处理函数。它在驱动退出时被调用。
- 主要代码
test_demo.c
#include <stdio.h>
#include <stdlib.h>
#include <fcntl.h>//其中定义了很多宏和诸如open,close函数
#include <unistd.h>
#include <sys/ioctl.h>//ioctl函数的头文件
void showbuf(char *buf);
int MAX_LEN=32;
int main()
{
int fd;
int i;
char buf[255];
for(i=0; i<MAX_LEN; i++){//给数组元素依次赋值
buf[i]=i;
}
fd=open("/dev/demo",O_RDWR);//以既可以读又可以写的方式打开文件
if(fd < 0){
printf("####DEMO device open fail####\n");
return (-1);
}
printf("write %d bytes data to /dev/demo \n",MAX_LEN);
showbuf(buf);//先显示一下要写入什么,然后写入
write(fd,buf,MAX_LEN);
printf("Read %d bytes data from /dev/demo \n",MAX_LEN);
read(fd,buf,MAX_LEN);
showbuf(buf);//先读出来字符串到buf中,再显示
ioctl(fd,1,NULL);
ioctl(fd,4,NULL);
close(fd);
return 0;
}
void showbuf(char *buf)
{
int i,j=0;
for(i=0;i<MAX_LEN;i++){
if(i%4 ==0)
printf("\n%4d: ",j++);
printf("%4d ",buf[i]);
}
printf("\n*****************************************************\n");
}
三、实验过程与结果
- 1.配置实验箱
配置实验环境、连接arm开发板、建立超级终端、启动实验平台、修改windows xp系统的ip使得它与arm机的ip在同一网段、在red hat中安装arm编译器、配置环境变量
- 2.进入01_demo文件夹中,尝试直接make进行自动编译。出现错误。
- 3.修改01_demo文件夹中的Makefile
KERNELDIR = /usr/src/linux
#KERNELDIR = /arm2410cl/ kernel/linux-2.4.18-2410cl/
INCLUDEDIR = $(KERNELDIR)/include
#CROSS_COMPILE=armv41-unknown-linux-
AS =$(CROSS_COMPILE)as
LD =$(CROSS_COMPILE)ld
CC =$(CROSS_COMPILE)gcc
CPP =$(CC) -E
AR =$(CROSS_COMPILE)ar
NM =$(CROSS_COMPILE)nm
STRIP =$(CROSS_COMPILE)strip
OBJCOPY =$(CROSS_COMPILE)objcopy
OBJDUMP =$(CROSS_COMPILE)objdump
CFLAGS += -I..
CFLAGS += -Wall -O -D__KERNEL__ -DMODULE -I$(INCLUDEDIR)
TARGET = demo
OBJS = demo.o hello.o
SRC = demo.c hello.c
all: $(OBJS)
demo.o: demo.c
$(CC) -c $(CFLAGS) $^ -o $@
hello.o:hello.c
$(CC) -c $(CFLAGS) $^ -o $@
install:
install -d $(INSTALLDIR)
install -c $(TARGET).o $(INSTALLDIR)
clean:
rm -f *.o *~ core .depend
四、实验总结
- 在这次实验中,我们一开始错误的使用了make的方法,但是实际上应该先用GCC编译,补上相关语句,修改MAKEFILE即可。
- 最终成功的结果截图如下:

20145212&20145204信息安全系统实验四报告的更多相关文章
- 20145204&20145212信息安全系统实验四报告
20145204信息安全设计基础实验四报告 博客链接:信息安全设计基础实验
- 20145212&20145204信息安全系统实验五
一.实验步骤 1.阅读理解源码 进入/arm2410cl/exp/basic/07_httpd目录,使用 vim编辑器或其他编辑器阅读理解源代码. 2.编译应用程序 运行 make 产生可执行文件 h ...
- 20145204&20145212信息安全系统实验一报告
信息安全系统实验报告 实验一 步骤 1.连接 arm 开发板 将 arm 开发板的电源线接好,使得开发板开关处于闭合状态.再分别将串口线.并口线和网线与 pc 机连接好. 2.建立超级终端 运行 wi ...
- 20145204&20145212信息安全系统实验三报告
实时系统的移植 实验目的与要求 1.根据实验指导书进行实时软件的安装 2.配置实验环境,并对软件进行测试. 3.正确使用连接线等仪器,注意保护试验箱. 实验内容与步骤 1.连接 arm 开发板 连接实 ...
- 20145204&20145212信息安全系统实验二
20145204&20145212信息安全系统实验二 链接
- 20145204&20145212信息安全系统实验一
信息安全系统实验报告 博客链接
- 20192204 2019-2020-2 《Python程序设计》实验四报告
20192204 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1922 姓名: 李龙威 学号:20192204 实验教师 ...
- 20184302 2019-2020-2 《Python程序设计》实验四报告
20184302 2019-2020-2 <Python程序设计>实验四报告 课程:<Python程序设计> 班级: 1843 姓名: 李新锐 学号:184302 实验教师:王 ...
- 20201123 《python程序设计》实验四报告
20201123 2020-2021-2 <python程序设计>实验三报告 课程:<Python程序设计>班级:2011姓名:晏鹏捷学号:20201123实验教师:王志强实验 ...
随机推荐
- Linux-学习前言
本随笔会持续,不定期更新.我有上网找与Linux相关的博客,发现很多人只写了几篇就没更新了,没有坚持下来!希望我能keep on. 最近一个月是考试月,可能更新会比较少.
- 常用的SQL语句
使用prepareStatement对象执行的增.删.改.查sql语句: 查: String sql = "SELECT * FROM 表名 WHERE loginId=? AND pas ...
- ckplayer 如何在PC上完美支持 m3u8播放
使用过ckplayer的同学都知道,相对jwplayer等,它非常的容易配置和使用.功能也是基本满足我们的需求的. 一般情况我们都使用普通的视频格式比如mp4,flv等播放,但如果视频文件过大,会加载 ...
- T-SQL 查询XML
我们经常在SQL Server列中存一些XML来作为配置文件或者是保存特殊信息,那么如何将其展开并查询它或将其呈现为关系数据? 其实在T-SQL 下可以很容易的实现. 示例xml <catalo ...
- Java 消息摘要 散列 MD5 SHA
package xxx.common.util; import java.math.BigInteger; import java.security.MessageDigest; import jav ...
- Spring ApplicationContext 简解
ApplicationContext是对BeanFactory的扩展,实现BeanFactory的所有功能,并添加了事件传播,国际化,资源文件处理等. configure locations:(C ...
- Arduino 1602液晶屏实验和程序
在Arduino IDE中, 项目->加载库->管理库中搜索LiquidCrystal,然后安装即可 1.接线图 2.引脚图 3.最简单程序 #include <LiquidCrys ...
- ubuntu安装pppoeconf后与networkmanager冲突
使用pppoeconf拨号后,Network Manager显示设备未托管的解决办法: 在终端中输入以下命令,来配置网络连接管理文件: sudo gedit /etc/NetworkManager/n ...
- django 一些相关问题
这两天在处理django项目时碰到一些问题 1.ur路径设置要忽略大小写,查找了很多资料,都没有发现相关的介绍,最后在谷歌上找到一个解决方案,https://groups.google.com/for ...
- infer 检验IOS项目
1.MAC安装infer: brew install infer 2.设置环境变量指向安装infer/bin下 3.source .bash_profile 4.命令 infer -- xcode ...