嵌入式Linux系统生产实习报告1Word文件下载.docx
《嵌入式Linux系统生产实习报告1Word文件下载.docx》由会员分享,可在线阅读,更多相关《嵌入式Linux系统生产实习报告1Word文件下载.docx(8页珍藏版)》请在冰豆网上搜索。
实习主要
内容及进度安排
指导教师
签字
二、实习报告
一、初识嵌入式:
嵌入式系统是一种专用的计算机系统,作为装置或设备的一部分。
通常,嵌入式系统是一个控制程序存储在ROM中的嵌入式处理器控制板。
事实上,所有带有数字接口的设备,如手表、微波炉、录像机、汽车等,都使用嵌入式系统,有些嵌入式系统还包含操作系统,但大多数嵌入式系统都是由单个程序实现整个控制逻辑。
从应用对象上加以定义,嵌入式系统是软件和硬件的综合体,还可以涵盖机械等附属装置。
国内普遍认同的嵌入式系统定义为:
以应用为中心,以计算机技术为基础,软硬件可裁剪,适应应用系统对功能、可靠性、成本、体积、功耗等严格要求的专用计算机系统。
二、实习目标及内容:
(1)实习目标:
1、熟悉linux的开发环境,常用的一些相关相关软件和命令.
2、熟练使用变量、指针、结构体,和基本函数使用方法;
能独立编写排序算法。
3、掌握文件操作的基本函数,打开使用设备;
可独立编写键盘输入记录和播放程序。
4、掌握进程线程创建的基本方法,会用互斥体完成资源保护.
5、理解网络通信的基本概念,掌握通信函数的基本使用;
编写聊天室模型。
6、将linux环境下的各种操作与硬件平台结合起来,利用驱动以及linux环境下的编程实现对硬件屏幕的控制.
(2)实习大纲:
1、嵌入式相关介绍;
环境安装.
2、C语言基础补习回顾.
3、I/O编程:
介绍标准I/O编程、文件I/O编程;
4、进程编程:
进程线程的创建、进程间通信、进程间同步与互斥;
5、网络编程:
介绍网络通信模型(OSI模型、TCP/IP模型)、TCP/IP协议簇以及使用socket编程.
(3)实习内容:
1、Linux下的常用命令
命令的工作原理:
用户在提示符下输入的名令经Shell(名令解释程序)解释后传给内核输入命令应注意:
1)、格式:
命令【选项】【参数】
2)、区分大小写例:
ls列出当前目录下的文件列表,LS则不存在,错误。
帮助命令:
man<
命令名或函数名〉;
超级权限:
sudo〈要执行的命令>
;
重启:
reboot文件操作;
ls[选项]-—查看当前文件列表;
mkdir<
目录名>
--创建目录;
cd〈目录名或路径>
——进入相应目录;
rmdir<
目录名〉——删除目录touch<
文件名〉—-创建空白文件;
rm〈文件名>
—-删除文件;
pwd——查看当前路径;
vi<
文件名>
——进入或编辑文件。
注:
1、这里的文件指普通文件,目录指目录文件即常说的文件夹;
2、路径是指从树型目录中的某个目录层次到某个文件的一条道路。
此路径的主要构成是目录名称,中间用“/”分开.任一文件在文件系统中的位置都是由相应的路径决定的。
2、Linux的文件命名规则
由Linux文件系统的规定,文件名和目录名可以包含以下字符:
大写英文字母A—Z、小写英文字母a—z、数字0-9、“@"
、“_"
等。
在文件名和目录中,不得包括的字符有:
*?
>
<
/;
&
!
[]|\‘“(){}。
不得以”+“和"
—“开头。
Linux中的文件名是大小写敏感的,也就是说,rainbow和Rainbow代表两个丌同的文件。
一个以“。
”打头的文件表明这个文件是隐藏文件(可以用ls—a查看)。
Linux系统中文件名的最大长度为255个字符。
3、文件权限
文件的权限,分为三段,分别代表“所有者(u)”、“同组人(g)”、“其它人(o)”的读(r)、写(w)、执行(x)的权限。
对普通文件而言,“r”代表可以阅读文件内容,“w"
代表可以修改或删除文件内容,"
x”代表可以将文件作为命令来执行(同时需要r权限)。
修改文件权限:
命令——chmod(最常用)例:
[root@localhost~]#chmod664a。
txt
4、Linux下开发工具——vi
Vin是“Visualinterface”的简称Unixn、Linux下的程序开发工具Unixn、Linux下修改配置文件Vi可以执行输入、删除、查找、替换、块操作等众多文本操作Vi不是一个排版程序、它只是一个文本编辑程序Vi是全屏幕文本编辑程序,它没有菜单,只有命令.
vi编辑器有三种工作模式:
命令行模式:
刚进入文件即为此模式,此模式下可以移动鼠标、通过键盘输入一些命令完成查找、复制等功能,或进入底行模式、插入模式插入模式:
在命令行模式下输入i或a进入(最常用为i),只有在命令行模式下才能字符输入,按【Esc】返回到命令行模式底行模式:
在该模式下,用户可以将文件保存或退出。
这一模式下的命令都以“:
”开始,例“:
q!
"
(不保存离开),“:
wq”(保存离开)“:
wq!
”(强制保存离开)
5、Linux编译器gcc及其使用
编译如C、C++、ObjectC、Java、Fortran、Pasca等多种语言一个交叉平台编译器,适合在嵌入式领域的开发编译全称为GNUCompilerCollection,GNU项目中符合ANSIC标准的编译系统gccn可以使程序员灵活地控制编译过程。
编译过程一般可以分为四个阶段,每个阶段分别调用不同的工具迚行处理使用格式:
gcc【选项】源文件名连接:
gcctest。
o—otest一般情况下直接由源程序生成可执行文件:
1、gcctest.c即可生成以a。
out命名的可执行文件2、gcctest。
c–otest(或其他名字)即生成具有自己命名的可执行文件执行:
。
/可执行文件名
6、Makefile
Makefile需要按照某种语法进行编写,其中说明了如何编译各个源文件并连接生成可执行文件,并定义了源文件之间的依赖关系.当修改了其中某个源文件时,如果其他源文件依赖于该文件,则也要重新编译所有依赖该文件的源文件。
Makefile文件的建立:
通常采用vimakefile,编辑完成后保存即生成makefile文件一个Makefile文件主要含有一系列的规则,每条规则包含以下内容:
一个目标(target),即make最终需要创建的文件,如可执行文件和目标文件;
目标也可以是要执行的动作,如“clean”。
一个或多个依赖文件(dependency)列表,通常是编译目标文件所需要的其他文件。
一系列命今(command),是make执行的动作,通常是把指定的相关文件编译成目标文件的编译命令,每个命令占一行,且每个命令行的起始字符必须为TAB字符.例:
makefile的例子:
1、server:
server。
olinkedlist。
owrap。
o
2、gcc-oserverserver。
3、server。
o:
cserver.hwrap。
h
4、gcc—cserver.c
5、linkedlist。
linkedlist.cserver.hwrap.h
6、gcc—clinkedlist.c
7、wrap。
o:
wrap。
c
8、gcc—cwrap。
cMakefile的执行保存并退出makefile文件后,输入make命令如果要使用其他文件作为makefile,则可利用类似下面的make命令选项指定makefile文件:
$make—fMakefile。
debug
7、Make的工作过程
首先make按顺序读取makefile中的规则然后检查该规则中的依赖文件与目标文件的时间戳哪个更新如果目标文件的时问戳比依赖文件还早,就按规则中定义的命令更新目标文件。
如果该规则中的依赖文件又是其他规则中的目标文件,那么依照规则链不断执行这个过程,直到Makefile文件的结束,至少可以找到一个不是规则生成的最终依赖文件,获得此文件的时间戳然后从下到上依照规则链执行目标文件的时间戳比此文件时间戳旧的规则,直到最顶层的规则。
8、Makefile的优点
通过以上的分析过程,可以看到make的优点,因为。
o目标文件依赖。
c源文件,源码文件里一个简单改变都会造成那个文件被重新编译,并根据规则链依次由下到上执行编译过程,直到最终的可执行文件被重新连接。
例如,当改变一个头文件的时候,由于所有的依赖关系都在Makefile里,因此不再需要记住依赖此头文件的所有源码文件,make可以自动的重新编译所有那些因依赖这个头文件而改变了的源码文件,如果需要,再进行重新连接。
9、进程与程序
程序(program)是存放在磁盘文件中的可执行文件。
进程:
程序的执行实例被称为进程(process)。
进程ID:
每个linux进程都一定有一个唯一的数字标识符,称为进程ID(processID)。
进程ID总是一非负整数.
10、进程的三种状态
运行状态(Running):
占用处理机资源;
处亍此状态的迚程的数目小于等于CPU的数目。
在没有其他进程可以执行时(如所有进程都在阻塞状态),通常会自动执行系统的idle进程(相当于空操作).就绪状态(Ready):
进程已获得除处理机外的所需资源,等待分配处理机资源;
只要分配CPU就可执行。
可以按多个优先级来划分队列,如:
时间片用完-〉低优,I/O完成-〉中优,页面调入完成->
高优阻塞状态(Blocked):
由于进程等待某种条件(如I/O操作或进程同步),在条件满足之前无法继续执行。
该事件发生前即使把处理机分配给该进程,也无法运行.如:
等待I/O操作的完成。
11、项目中使用多进程的原因
本项目多进程只应用在了客户端原因是在客户端信息的发送和接收都是互相独立的,即并发执行,采用两个进程一个进程负责发送消息,一个进程负责接收消息,可以顺利的实现信息的发收本项目中服务器也可以才用多进程,即用多个进程分别处理所连接的各个用户的信息,但由于使用了select,所以省去了多进程
12、进程控制
#include〈sys/types.h〉#include〈unistd.h〉pid_tfork(void);
fork调用失败则返回—1
13、fork函数的用法
一个父进程希望复制自己,使父、子进程同时执行不同的代码段。
—-网络服务器的经典代码一个进程要执行一个不同的程序.——这对shell是常见的情况。
在这种情况下,子进程在从fork返回后立即调用exec函数。
14、fork()函数的作用
Fork产生的子进程是对父进程完整的复制但fork之后返回两个值,即一次调用,两个返回其中的一个返回值是子程序的id号,一个返回为0;
当返回值大于0,即为子进程ID时,父进程执行,当返回值等于0,子进程执行通过上述原理实现父进程、子进程执行不同的代码段.
三、实习总结:
3.1实习中遇到的问题
1)、什么是多文件处理,如何操作?
当我们写程序时,若只在一个文件中写,写的代码可能会有几百上千行,维护起来特别麻烦。
所以要用到多文件管理,可是,如何调用文件,如何定义,在主函数中如何声明?
多文件,要在主函数中声明你要用的函数,并在分文件中定义。
其实就这么简单,必要的头文件如“stdafx.h"
一定要包含进去就可以了.
2)、怎么读入文件,怎么输出到文件?
通过询问老师得知:
把文件当做数据库,我输入的数据写到里面,回来我再调用,每个函数都会把文件中的内容读入到结构体数组中,然后我在查找,修改,删除,排序等,最后完成操作后,若有变动,则再次写入到文件中,这样下次再使用时,就是用户改过的内容.这里比较重要的是要知道文件中有多少条记录,用到了feof函数以及fopen,fread,fwrite,fclose函数。
feof是查找文件否到了末尾,其余的就不用说了。
3)、怎样完成“容错”处理?
这个是比较让人头疼的事,你得想到各种情况,比如,你让用户输入数字来选择相应功能,但是用户输入了字母,这个时候就要提示用户输入错误,并再次出现菜单,这就需要循环语句,但是我遇到了死循环,就是因为每次用户输入一个选项后,会有敲下回车,这个回车会在文件缓冲区中,下一次scanf()语句执行时,会直接得到这个回车,造成死循环。
因此要写一条语句“吃掉”这个回车.
3.2生产实习心得
(1)注重理论联系实际,多动手实践操作
(2)注意与同组人员配合,锻炼团队协作能力(3)总结学习方法,找到合适自己的方法,提高学习效率(4)大胆操作,勇于创新,活跃自己的思维。
3。
3实习收获
通过这次实习,在各方面我感觉自己都有了一定的收获。
这次实习主要是为了我们今后在工作及业务上能力的提高起到了促进的作用,增强了我们今后的竞争力,为我们能在以后立足增添了一块基石。
实习单位的老师也给了我很多机会参与他们的设计是我懂得了很多以前难以解决的问题,将来从事设计工作所要面对的问题,如:
前期的择业和后期的发展方向等等。
这次实习丰富了我在这方面的知识,使我向更深的层次迈进,对我在今后的社会当中立足有一定的促进作用,但我也认识到,要想做好这方面的工作单靠这这几天的实习是不行的,还需要我在平时的学习和工作中一点一点的积累,不断丰富自己的经验才行.我面前的路还是很漫长的,需要不断的努力和奋斗才能真正地走好。
大学生活让我对计算机理论知识有了一定的了解,但真正操作起来就没有那么容易.纸上得来终觉浅,绝知此事要躬行。
经过过去半个月的实习,我对自己有了新的认识及前进的方向。
经过过去半个月的实践和实习,我对未来充满了美好的憧憬,在未来的日子,我将努力做到以下几点:
1)、继续学习,不断提升理论素养。
在信息时代,学习是不断地汲取新信息,获得事业进步的动力。
现在通过实习总感觉自己学的不够,要用到知识时总感觉脑袋是空白的。
很后悔自己在学校为什么不多学一点,多练习一点。
总在后悔也没有用,只能自己去努力学习。
为了能更好的适应工作,我利用自己空闲时间去附近的书店去看书,希望能弥补不足。
2)、加强信心,坚持下去
有时候遇到事情总会着急,慌张。
平常信心不足,总感觉自己做不好。
大家说我很内向,其实只是自己有点自卑,不敢去表达。
或许还需要一段时间的磨练吧。
只有自己的知识和能力都在提升,相信自己总有一天会很勇敢的表现自己。
对给自己点信心,多给自己点赞赏,多给自己鼓鼓劲。
相信总会走出一条宽敞大道的。
实习,是开端也是结束。
在书本上学过很多理论,但从未付诸实践过,也许等到真正运用时,才会体会到难度有多大。
在今后的工作和生活中,自己需要更加努力的奋斗下去.实习的同时也让我了解到了自己的不足,我会继续努力,完善自我。