北京电子科技学院(BESTI)
实验报告
课程:信息安全系统设计基础 班级:201352
姓名: 何佳 林涵锦
学号:20135231 20135213
成绩: 指导教师:娄嘉鹏 实验日期:2015.12.1
实验密级: 预习程度: 实验时间:15:30-17:30
仪器组次: 必修/选修:必修 实验序号:4
实验名称:基于 S3C2410 的 linux 开发环境的配置和使用的基础上进行交叉编译
实验目的与要求:
1 在掌握基于 S3C2410 的 linux 开发环境的配置和使用的基础上进行交叉编译。
2 理解驱动程序的一般设计方法。
3 正确使用连接线等实验仪器,并注意保护实验箱。实验结束之后将实验箱送回。
实验仪器:
名称 |
型号 |
数量 |
ARM |
S3C2410 |
1 |
PC |
WindowsXP |
1 |
一、实验内容:
本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式);在linux系统中安装arm系统,然后对01_demo文件夹中的.c文件进行交叉编译。
二、实验原理
1.什么是驱动程序?
目的:驱动程序是应用程序和硬件之间的一个软件层,为(许多个)应用程序提供硬件的所有功能。为了处理并发的情况,还需要考虑互斥量和锁等机制。
特点:应用程序一般有一个 main 函数,从头到尾执行一个任务;驱动程序却不同,它没有main函数,通过使用宏module_init(初始化函数名)。
用法:将初始化函数加入内核全局初始化函数列表中,在内核初始化时执行驱动的初始化函数,从而完成驱动的初始化和注册,之后驱动便停止等待被应用软件调用。驱动程序中有一个宏moudule_exit(退出处理函数名)注册退出处理函数。它在驱动退出时被调用。
2.接口实现方法
Open方法
Open 方法提供给驱动程序初始化设备的能力,从而为以后的设备操作做好准备,此外open
操作一般还会递增使用计数,用以防止文件关闭前模块被卸载出内核。在大多数驱动程序
中Open 方法应完成如下工作:
1. 递增使用计数
2. 检查特定设备错误。
3. 如果设备是首次打开,则对其进行初始化。
4. 识别次设备号,如有必要修改 f_op 指针。
5. 分配并填写 filp->private_data 中的数据。
Release方法
与 open 方法相反,release 方法应完成如下功能:
1. 释放由 open 分配的filp->private_data 中的所有内容
2. 在最后一次关闭操作时关闭设备
3. 使用计数减一
Read和Write方法
ssize_t demo_write(struct file *filp,const char * buffer, size_t count,loff_t *ppos)
ssize_t demo_read(struct file *filp, char *buffer, size_t count, loff_t *ppos)
read 方法完成将数据从内核拷贝到应用程序空间,write 方法相反,将数据从应用程序空间拷贝到内核。对于者两个方法,参数filp 是文件指针,count 是请求传输数据的长度,buffer 是用户空间的数据缓冲区,ppos 是文件中进行操作的偏移量,类型为64 位数。由于用户空间和内核空间的内存映射方式完全不同,所以不能使用象memcpy 之类的函数,必须使用如下函数:
unsigned long copy_to_user (void *to,const void *from,unsigned long count);
unsigned long copy_from_user(void *to,const void *from,unsigned long count);
三、实验步骤
①改写makefile文件,打开makefile 文件将其文件源部分替换为下列代码。
KERNELDIR = /usr/src/linux
#KERNELDIR = /arm2410cl/ kernel/linux-2.4.18-2410cl/
②进入make 所在文件夹,执行命令make ,进行编译。
③在/usr/src下建立一个linux连接
④测试程序来进行测试。
四、实验遇到的感想和遇到的问题
运行makefile时报错,于是对代码根据指导书上所列程序进行修改。