优秀的毕业设计论文网
计算机 JAVA 电子信息 单片机 机械机电 模具 土木工程 建筑结构 论文
热门搜索词:网络 ASP.NET 汽车 电气 数控 PLC

基于Linux的嵌入式Internet应用

以下是资料介绍,如需要完整的请充值下载.
1.无需注册登录,支付后按照提示操作即可获取该资料.
2.资料以网页介绍的为准,下载后不会有水印.资料仅供学习参考之用.
  
资料介绍:

操作系统
操作系统的出现对于应用开发来说有着极大的好处。有了操作系统,就可以专注于应用部分的设计实现,很少或者不需要和硬件打交道,除非编制驱动程序,这有利于提高程序的通用性[12]。
本课题选择的嵌入式操作系统为Linux。Linux操作系统是由Linus Torvalds于1991年在赫尔辛基大学开发的。随着嵌入式市场的发展,Linux发布了包含对所有当前32微处理器所需要技术的内核支持,这些技术越来越多的在嵌入式系统设计中被使用。它们包含了对内存管理,进程和线程创建,内部进程通信机制,中断处理,片内执行ROM文件系统,RAM文件系统,flash管理以及TCP/IP网络等方面的支持[13]。同时由于其开源开发模式,Linux较其他操作系统而言具有更高的可靠性和稳定性。
同时,Linux是少数既可以在嵌入式设备上运行也可作为开发环境的操作系统之一。这一特性可让开发者在转向此开发系统之前于常用硬件(比如X86桌面系统)之上开发、调试和测试应用程序和库,因此可减少对标准参考平台和指令集仿真器的依赖,提高开发效率[14]。
2.2.3 开发工具及开发环境
开发者对开发工具的熟练程度影响着开发的效率。在这里对Linux下开发所使用的开发工具进行简要的介绍:
(1) vi编辑器:Vi是Visual interface的简称,是Linux上最常用的文本编辑器。它可以执行输出、删除、查找、替换、块操作等众多文本操作,而且用户可以根据自己的需要对其进行定制。但是它没有菜单,只有命令。在使用时需要对其命令集有一定的了解。 think58

[资料来源:http://www.THINK58.com]

(2) Gcc编译器:是GNU推出的功能强大、性能优越的多平台编译器,是GNU的代表作品之一。Gcc是可以在多种硬体平台上编译出可执行程序的超级编译器,其执行效率与一般的编译器相比平均效率要高20%~30%,可以做成交叉编译的形式,即在宿主机上开发编译目标机上可以运行的程序。
(3) GDB调试器:可使用多种交叉调试方式。
开发环境的建立包括以下方面:
(1) 在宿主机上安装Linux操作系统,本课题使用的操作系统为Red hat 9.0。
(2) 建立Linux交叉编译环境。
(3) 配置宿主机minicom。
(4) 配置宿主机的TFTP和NFS服务。
3.2 嵌入式设备网关实现
3.2.1操作系统的移植和配置
(1)BootLoader
在进行操作系统移植和配置前,需要一段代码对硬件设备进行初始化并对操作系统进行引导,即类似PC机中的引导加载程序。而BootLoader就是系统加电后运行的第一段代码,其主要任务就是对硬件进行初始化,建立内存空间的映射图,将操作系统加载进入内存,然后调用操作系统内核[15]。
BootLoader是依赖于硬件实现的。本课题使用U-Boot作为Bootloader。当实验箱加电后,系统自动运行U-Boot。U-Boot为终端用户提供一个类似于Linux shell界面的命令行接口。用户可以交互地输入命令和看到结果。通过网络连接或者串口连接的方式,U-Boot可以从宿主机下载应用程序、数据文件和内核映像等[15]。

[资料来源:http://THINK58.com]


本文通过下载模式来进行开发和调试,但在最终产品发布时,BootLoader应该从目标机上的某个固态存储设备上自主将操作系统加载到RAM运行。
(2)Linux的移植
Linux的移植可以分为板级移植和片级移植。对于Linux发行版本中已经支持的CPU,通常只需要针对板级硬件进行适当的修改即可,这种移植叫做板级移植;而对于Linux发行版本中没有支持的CPU,则需要添加相应CPU的内核移植,这种移植叫做片级移植[16]。本文使用和实验箱配套的Linux,其中已经包含了S3C2410X ARM920T处理器的移植包。
(3)Linux的配置和编译
解压实验箱配套光盘中的Linux-jx2410.tar.gz到宿主机用户目录下,然后在该目录下会有一个Linux的新目录。在shell中使用以下命令进入Linux目录:
$cd Linux
键入命令:
$make menuconfigLinux下CAN驱动的实现
(1)Linux驱动程序简介
 1)概述
在Linux中,驱动程序是操作系统内核和应用程序之间的接口,设备驱动程序是操作系统内核和机器硬件之间的接口。设备驱动程序为应用程序屏蔽了硬件的细节,这样在应用程序看来,硬件设备只是一个设备文件,应用程序可以像操作普通文件一样对硬件设备进行操作[19]。设备驱动程序是内核的一部分,它完成对硬件的初始化和释放的功能,它运行在内核,负责应用程序和机器硬件之间的数据通信并且检测和处理设备出现的错误。 think58好,好think58 [版权所有:http://think58.com]
在Linux系统下,有三类主要的设备文件类型:字符设备,块设备和网络设备。字符设备和块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生;而块设备则不然,它利用一块系统内存做缓冲区,当用户进程对设备请求能满足用户的要求时,就返回请求的数据;如果不能,就调用请求函数来进行实际的I/O操作。块设备是主要针对磁盘等慢速设备设计的,以免耗费过多的CPU时间来等待。
用户进程通过设备文件来与实际的硬件打交道。每个设备文件都有其文件属性(c/b)表示是字符设备还是块设备。每个文件都有两个设备号,第一个是主设备号,表示驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的不同硬件设备。设备文件的主设备号必须与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问到驱动程序[20]。
 2)常见问题
A)I/O端口
和硬件打交道离不开I/O端口,原来的ISA设备经常是占用实际的I/O端口,在Linux下,操作系统没有把I/O端口屏蔽,也就是说,任何驱动程序都可以对任意的I/O口进行操作,这样就容易引起混乱。每个驱动程序应该避免误用端口。
B)内存操作
在设备驱动程序中开辟动态内存,不使用malloc,而是使用kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree或free_pages。kmalloc等函数返回的是物理地址,而malloc返回的是线性地址。内存映射的I/O口,寄存器或者硬件设备的RAM一般占用F0000000以上的地址空间。在驱动程序中不能直接访问,要将其转换为虚拟地址才能实现。

内容来自think58 [来源:http://www.think58.com]

[资料来源:http://www.THINK58.com]