标签:
北京电子科技学院(BESTI)
实验报告
课程:信息安全系统设计基础 班级:201352
姓名:池彬宁 贺邦
学号:20135212 20135208
成绩: 指导教师:娄嘉鹏 实验日期:2015.12.1
实验密级: 预习程度: 实验时间:15:30-17:30
仪器组次: 必修/选修:必修 实验序号:3
实验名称:基于 S3C2410 的 linux 开发环境的配置和使用的基础上进行交叉编译
实验目的与要求:
实验仪器:
名称 |
型号 |
数量 |
ARM |
S3C2410 |
1 |
PC |
WindowsXP |
1 |
本次实验建立在掌握嵌入式开发平台使用方法和配置方法的基础上,要求使用windows xp,linux(red hat),arm三个系统(即NFS方式);在linux系统中安装arm系统,然后对01_demo文件夹中的.c文件进行交叉编译。
目的:驱动程序是应用程序和硬件之间的一个软件层,为(许多个)应用程序提供硬件的所有功能。为了处理并发的情况,还需要考虑互斥量和锁等机制。
特点:应用程序一般有一个 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 连接。
④测试程序来进行测试。
本次实验是在实验一的基础上进行的拓展,难度并不大,但是我们在做时候,总是提示insnod,mknod命令not found,老师说是armv4l工具包安装出错,但是,我们重装了很多次,换了很多台机器,都没有成功。后来,在redhat虚拟机登录root账户后,成功做出。(之前一直登陆的bc账户)后来分析可能是因为权限不够等原因。
标签:
原文地址:http://www.cnblogs.com/L1nke/p/5027683.html