20145219《信息安全系统设计基础》实验二 固件开发
20145219《信息安全系统设计基础》实验二 固件开发
实验报告封面
-
小组成员:201452114张宁、20145219宋歌
实验内容与步骤
1、配置开发环境(同实验一)
- 连接arm开发板
- 建立超级终端
- 启动实验平台(redhat虚拟机)
- 配置同网段IP
- 安装arm编译器(bc共享文件夹)
- 配置环境变量(redhat虚拟机中)
2、导入实验代码
-
将实验所需代码拷贝到bc共享文件夹中
实验代码在老师提供的
02_pthread
和03_tty
文件夹中
3、在虚拟机中编译代码
- 对于多线程相关的代码,编译时需要加-lpthread 的库。
-
编译pthread.c
-
编译term.c
-
4、下载调试
-
在超级终端中运行可执行文件pthread
-
在超级终端中运行可执行文件term
实验过程中遇到的问题及解决过程
-
问题1:在虚拟机中使用
armv4l-unknown-linux-gcc pthread.c -o pthread -lpthread
命令编译pthread.c文件时出错,提示bash:armv4l-unknown-linux-gcc:command not found
-
解决方法:经过理解错误提示,发现是环境变量没有配置成功,进入
/root/.bash_profile
重新配置后即可编译成功(先开始hello.c也没编译通过,我们一时没有想到解决方法就继续向后做了,后来改正这个错误后都编译成功了)
-
问题2:在超级终端运行可执行文件
term
时出错,提示/dev/ttyS0: No such file or directory
-
解决方法:老师给的实验指导书中说:这个问题是因为在 Linux 下串口文件位于/dev 下,一般在老版本的内核中串口一为/dev/ttyS0 ,串口二为 /dev/ttyS1, 在我们的开发板中串口设备位于/dev/tts/下,因为开发板中没有ttyS0这个设备,所以我们要建立一个连接。解决方法就是按照实验指导书说的在超级终端中进入/dev文件夹中,输入命令
ln –sf /dev/tts/0 ttyS0
(注意空格与字母l、数字0。)
实验过程的理解
-
pthread.c分析
先设置一个整数的圆形缓冲区,并初始化缓冲区(初始化缓存指针信息(信号量)),再向缓冲区中写入一个整数,接着从缓冲区中读出一个整数(此步骤与写入类似),然后实现一个生产者程序:生产者线程不断顺序地将0到1000的数字写入共享的循环缓冲区,当生产-1时,程序终止;或者消费掉缓存中生产出来的数据:消费者线程不断地从共享的循环缓冲区读取数据,当消费-1时,程序终止。最后,等待生产者、消费者进程结束。
这个代码是
生产者-消费者问题模型
的实现。 -
term.c分析
先通过标准的文件打开函数打开串口,接着设置串口,包括:波特率设置、效验位和停止位设置(串口的设置主要是设置struct termios结构体的各成员值),然后把串口当作文件读写,最后关闭串口。
实验体会
本次实验是《实验二:固件开发》,从实验的操作流程上看,这次实验与实验一的步骤基本相同,唯一的不同就是编译.c文件时的命令加了参数-lpthread
,这是因为本次实验的两个代码是与多线程相关的代码,编译时需要加-lpthread 的库。我觉得这次实验的重点应该是在实验一的基础上熟练掌握开发流程,并读懂实验示例代码。这两个代码明显比我们第一次实验的hello.c复杂了n倍,其中所包含的知识点也有很多,需要花时间去理解和体会。实验课堂上可能缺乏充足的时间和安静的环境让我们理解代码,因此,我们要利用课下的时间把这方面完成。