毕设-基于ARM的数据采集系统的设计.doc_第1页
毕设-基于ARM的数据采集系统的设计.doc_第2页
毕设-基于ARM的数据采集系统的设计.doc_第3页
毕设-基于ARM的数据采集系统的设计.doc_第4页
毕设-基于ARM的数据采集系统的设计.doc_第5页
免费预览已结束,剩余60页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

大 连 民 族 学 院 本 科 毕 业 设 计(论 文)基于ARM的数据采集系统的设计学 院(系): 信息与通信工程学院 专 业: 通信工程 学 生 姓 名: 学 号: 2007024116 指 导 教 师: 评 阅 教 师: 完 成 日 期: 2011.6.10 大连民族学院基于ARM的数据采集系统的设计摘 要随着嵌入式技术的迅速发展,嵌入式终端在家居和工业等领域发挥着越来越重要的作用。本设计提出了一种以嵌入式为基础的温度采集系统的设计方案,使得基于嵌入式系统做温度采集终端有较好的人机交互界面和系统高稳定性。本文介绍了整个硬件开发环境,bootloader的启动流程,Linux系统的架构,Linux内核的架构和根文件系统等相关知识。同时,本设计在软件方面主要编写了DS18B20的底层驱动程序,进行了Linux内核的配置编译,设计了QT顶层应用程序;在硬件方面主要设计了DS18B20的硬件电路,搭建了嵌入式交叉开发环境。通过综合调试最终实现了基于ARM9的嵌入式温度采集系统的设计。基于嵌入式系统的数据采集终端一般都有较好的人机交互界面和软硬件可裁剪的特性,同时,使用mini2440开发板做嵌入式开发平台具有成本低,功耗低,体积小,稳定性高,发展潜力大的特性。嵌入式系统良好的特性使得整个嵌入式温度采集系统也具备了发展潜力大,功耗低,稳定性高,可视化界面好,便于携带和功能可扩展的特性。关键词:嵌入式系统;Linux内核;温度采集 - I -基于ARM的数据采集系统的设计AbstractWith the rapid development of embedded technology, embedded terminal is playing an increasingly important role in the home and industry. This paper presents a temperature collection system which is based on embedded system, using the embedded terminal to do data collection will have a better man-machine interface and high stability.This article describes the environment of hardware development, bootloader boot process, Linux system architecture ,Linux kernel-related architecture, root file system architecture and other related knowledge. At the same time, this design mainly completed the programming of DS18B20s bottom-level driver , the configuration and compilation of the Linux kernel and the design of QT top-level application program in software; in hardware mainly implemented design of the DS18B20s circuit and build the cross-tool development environment. Through synthesized debugging this project finally realized the design of the temperature collection system which was based on ARM9 embedded system.The data collection terminal based on embedded system generally has the features of better human-machine interface and hardware and software can be cut, while using the mini2440 development board to do a embedded development platform will have the properties of low cost, low power consumption, small size, high development potential. Good performance of the embedded systems makes the whole temperature collection system also has the high potential for development, low power consumption, high stability, good visual interface, easy to carry and function can be expanded features.Key Words: Embedded system; Linux kernel; Temperature collection system- IV -目 录摘 要IAbstractII1 绪 论11.1 选题背景和意义11.2本文主要研究内容11.3本章小结22 mini2440开发板的介绍32.1 S3C2440处理器32.2 mini2440开发板的接口资源32.2.1硬件资源特性32.2.2接口资源及时钟特点42.3基于mini2440的开发环境的搭建42.3.1搭建嵌入式交叉开发环境42.3.2嵌入式开发的软件环境53 DS18B20驱动73.1系统硬件整体设计73.2 DS18B20驱动的编写73.3 数据采集电路93.3.1 DS18B20简介93.3.2 DS18B20性能指标103.3.3测温接口电路及工作时序103.4 DS18B20驱动编写113.4.1 读DS18B20113.4.2 写DS18B20123.4.3 DS18B20的控制133.4.4打开释放143.4.5 DS18B20的操作函数143.4.6 DS18B20设备的注册和注销153.5 DS18B20驱动程序的测试154 bootloader相关知识174.1 bootloader背景知识174.2 supervivi174.3本章小结195 Linux内核205.1 Linux系统简介205.2 Linux-2.6.29内核移植到mini2440225.3配置编译生成zImage225.4本章小结246 QT应用程序的开发及调试256.1 QT的简介10256.2 QT测温应用程序276.2.1需求分析276.2.2程序设计286.3 本章小结317 根文件文系统的介绍337.1 文件系统相关知识337.2 root_qtopia文件系统介绍348 综合调试40结 论44参 考 文 献45附录A 程序清单46附录B 电路原理图58附录C 实物图59致 谢60基于ARM的数据采集系统的设计1 绪 论1.1 选题背景和意义目前我国温室大棚技术已经在全国范围内被广泛应用,这一技术的诞生解决了北方人冬天没蔬菜的难题。温室大棚技术其关键技术在于对温室的温度进行严格控制,只有严格的温度控制才能保证棚内植物正常生长,而如何实现对温度的实时控制,显而易见温度采集作为大棚温控是一个不可忽略的环节,然而传统的温度采集系统一般稳定性不高,而且没有一个良好的人机交互界面,但是如果使用PC机作为温度采集系统就会大大提高生产成本,而且安装放置也很不方便。基于这一背景,本设计旨在通过设计一个基于ARM的嵌入式温度采集系统在成本高和稳定性差之间寻求一个平衡点。随着电子技术的不断发展,基于ARM的嵌入式系统已经在消费,工业控制,医疗卫生甚至是军事军工等领域得到了广泛的应用,并且将会在更广泛的领域中占有更多的市场份额。嵌入式系统是以应用为中心、以计算机技术为基础、软硬件可裁剪、适应于系统对功能、可靠性、成本、体积、功耗严格要求的专用计算机系统1。现在的嵌入式系统有很多种类,但最为成熟的是以ARM为基础的嵌入系统。基于ARM的嵌入式系统有诸多优点是传统电子系统无法比拟的,利用嵌入式开发本设计可以开发出具有良好的人机交互界面的实时系统,同时嵌入式系统最大的优点就是软硬件可裁剪,依据自己系统的需要可以进行灵活的软硬件设计开发,而且基于ARM的嵌入式系统开发成本低,而且系统稳定性高,功耗低,体积小,并且能够应用于多种应用场合。这些优点就大大扩大了基于ARM的嵌入式系统的应用范围。由于mini2440是一款接口丰富,价格低廉,系统稳定性高,功耗小,性价比极高的ARM9系列开发板。所以本设计采用mini2440为硬件开发平台。通过设计嵌入式温度采集一方面可以解决一些实际问题,但更为重要的是通过本设计是对自己大学四年学习的一个检验,由于大学期间没有学习有关嵌入式的相关知识,通过自学嵌入式开发的相关知识,让自己对嵌入式有一个深入的理解,为以后的学习工作奠定基础。1.2本文主要研究内容本设计主要研究的内容是利用mini2440开发板通过DS18B20实现温度的实时采集并最终通过QT界面显示温度值,通过获取内核时间显示实现实时温度显示。具体设计内容如下:首先,本设计详细介绍了mini2440开发板的硬件环境和丰富的接口资源,论证以mini2440开发平台做嵌入式温度采集系统的可行性和系统优点,以及对mini2440开发板的交叉开发环境的搭建也进行了详细的介绍。其次,本文将对Linux内核的架构和相关操作做一个简单的介绍,以及针对mini2440开发板如何进行Linux内核的移植,裁剪,配置和编译等关键环节做了详细的说明。第三,通过分析设计要求,结合mini2440的硬件结构编写DS18B20的驱动程序,同时通过编写驱动测试程序,上机调试验证驱动的正确性。第四,介绍根文件系统的相关知识,了解根文件系统整体结构。最后,在验证硬件驱动的正确性的基础上实现人机交互界面的应用QT程序的开发,然后编译生成内核,制作根文件系统镜像,最后实现系统的整体综合调试。在硬件方面,主要实现了DS18B20的硬件电路的设计,可行性的论证以及交叉开发环境的搭建;在软件方面,主要是实现了D218B20的底层驱动的编写和顶层应用程序的编写,以及Linux内核的移植,配置,编译和zImage的生成,同时还有根文件系统镜像制作等相关内容。1.3本章小结本章对基于ARM9做温度采集系统的意义做了总体概括,并对嵌入式开发的应用情况做了简单的介绍。另外,本文还详细介绍了本设计的主要内容及整个设计的开发流程。2 mini2440开发板的介绍2.1 S3C2440处理器Mini2440采用了S3C2440作为处理器2。S3C2440采用了ARM920T的内核,0.13m的CMOS标准宏单元和存储器单元。其功耗低,体积小且静态设计特别适合于对成本和敏感性有特殊要求的实际应用。其总线采用了新的总线架构AMBA (Advanced Micro Controller Bus Architecture)。S3C2440其特点是CPU是一个16/32位ARM920T的RISC处理器,ARM920T具备MMU,AMBA,BUS以及Harvard高速缓冲体系结构。这一结构具有独立的16KB指令Cache和16KB数据Cache每个都是由具有8字长的行组成。通过一套完整的通用系统外设,S3C2440无需配置额外的组也同时减少整体系统成本。S3C2440集成以下片上功能(列出部分):l 内核采用1.2V供电,存储器采用3.3V独立供电,外部IO口采用3.3V独立供电;l 内置外部存储器控制器(SDRAM控制和芯片选择逻辑);l 3个通用异步串行端口;l LCD控制器;l SD卡接口;l 主从USB接口;l AC97解码器接口;l 130个通用I/口和24通道外部中断源;l 具有普通,慢速,空闲和掉电模式;l PLL片上时钟发生器;S3C2440支持从Nand Flash启动,Nand Flash具有容量大,比NOR Flash价格等特点。用户可以选择将引导代码和操作系统镜像存放在外部的Nand Flash中,并从Nand Flash启动,当处理器在这种模式下开电复位时,内置的Nand Flash将访问接口控制器并引导代码自动加载到内部SRAM并且运行。之后SRAM中的引导程序将操作系统镜像加载到SDRAM中运行。启动后释放4KB的SRAM,以便用于其他用途。2.2 mini2440开发板的接口资源2.2.1硬件资源特性3l CPU处理器:三星 S3C2440A,主频 400MHz,最高可达533Mhz;l SDRAM内存:在板64M SDRAM,32bit数据总线,SDRAM时钟频率高达100MHz;l Flash存储;在板256M/1GB Nand Flash,掉电非易失(用户可定制)64M/128M/256M/512M/1G在板2M Nor Flash,掉电非易失,已经安装BIOS;l LCD显示板上集成 4线电阻式触摸屏接口,可以直接连接四线电阻触摸屏,标准配置为统宝3.5寸真彩LCD,分别率240x320,带触摸屏;2.2.2接口资源及时钟特点l 1个100M以太网RJ-45接口(采用DM9000网络芯片);l 3个串行口;l 1 个主USB接口;l 1 个从USB B型接口;l 1 个SD卡存储接口;l 1个立体声音频输出接口,一路语音输入接口; l 1个2.0mm间距10针JTAG接口;l 4个User Led;l 6组USER buttons;l 1个PWM控制蜂鸣器; l 1个可变电阻器,用于对AD模数转换进行测试;l 1个I2C总线AT24C08芯片,用于对I2C总线进行测试;l 1个2.0mm间距20引脚摄像头接口;l 电源接口(5V),带电源开关和指示灯;l 1个34引脚2.0mmGPIO接口; l 1个40引脚2.0mm系统总线接口;l 12M无源晶振;l 内部实时时钟(带后备锂电池);2.3基于mini2440的开发环境的搭建2.3.1搭建嵌入式交叉开发环境嵌入式系统的开发一般采用“宿主机-目标机”交叉开发方式4。首先,利用宿主上丰富的资源以及良好的开发环境来进行开发和仿真目标机上的软件,再通过H-JTAG口,UTAR口或者是以太网接口将生成的代码下载到目标机上进行运行。本设计宿主机主要是使用装有RedHat5企业版Linux操作系统的PC机,而目标机就是mini2440开发板。组成架构如图2.1所示。图2.1 嵌入式开发交叉环境构架在调试阶段会用到NFS(虚拟文件系统)方式挂载根文件系统,所以要设置好NFS服务器,具体设置如下:(1) 设置共享目录:运行命令 #vi /etc/exports 编辑NFS服务的配置文件(注意:第一次用vi打开时该文件是没有内容的),添加如下内容: /opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash) 其中: /opt/FriendlyARM/mini2440/root_qtopia 表示NFS共享目录,它可以表示同开发宿主机共享目录root_qtopia作为开发板的根文件系统通过NFS挂载; *表示所有的客户端都可以挂载此目录;rw表示挂接此目录的客户端对该目录有读写的权力;no_root_squash表示允许挂接此目录的客户端享有和主机root一样的权力;通过命令启动和停止NFS服务 :(2) 运行命令: #/etc/init.d/nfs start # mount -t nfs localhost: /opt/FriendlyARM/mini2440/rootfs_qtopia /mnt/ /opt/FriendlyARM/mini2440/rootfs_qtopia。 使用这个命令可以停止nfs 服务: #/etc/init.d/nfs restart2.3.2嵌入式开发的软件环境本小节将解压安装开发学习过程所用到的全部源代码以及其他一些小工具,这包括: l Linux内核源代码;l 嵌入式图形界面Qropia-2.2.0 源代码(分为x86和arm平台两个版本);l busybox-1.13源代码;l Linux编程示例源代码;l 用以启动Linux的bootloader之vboot;l 其他开源的bootloader(适用于Linux) l 其他开源软件源代码;l 目标文件系统映象制作工具mkyaffsimage; l 图形界面的Linux logo制作工具logomaker;3 DS18B20驱动3.1系统硬件整体设计由于DS18B20是单总线数字器件,同时mini2440提供了丰富的I/O接口资源;另外,DS18B20器件的供电范围是3.3V5.0V,mini2440开发板的I/O接口电压是3.3V,所以也不存在电平不兼容的问题。综合以上可知使用mini2440开发板结合DS18B20做温度采集系统理论上行得通。本设计硬件系统方面比较简单,系主要由两大部分组成:一是系统控制部分,二是温度采集部分。其中系统控制部分又包括以下几个部分:处理器、复位模块、显示模块、外部接口模块等四大部分组成。而温度采集本分主要由DS18B20电路组成。具体组成如图3.1所示。图3.1测温系统硬件框图3.2 DS18B20驱动的编写硬件驱动大体可以分为一下几类:网络接口驱动,字符设备驱动,块设备驱动5。字符设备是指按字节来访问的设备,字符驱动就负责驱动字符设备,这样的驱动通常实现read、write、open、和close的调用。块设备是指按多数目字节进行访问的设备,该设备与字符设备的区别在于与内核的接口不同。进行网络数据访问的接口设备就叫做网络接口设备,它一般通过套接字来实现。Linux用户一般是通过操作设备文件来访问和操作各种设备的,本设计可以通过图3.2有一个深刻的认识。所以用户想要使用DS18B20进行温度采集时,只需要对设备文件ds18b20进行打开、控制、读、写、关闭等一系列操作就可以控制DS18B20进行温度采集,这也是顶层应用文件如何使用底层驱动的一个实例。在设备描述中设备号是起着非常重要的中用作用,设备号又分为主次设备号。设备号使得设备文件和驱动程序之间建立起对应关系,其中,主设备号是用来区分不同种类设备,而此设备号是用来区分同类不同设备。图3.2 Linux用户对各类设备的访问流程在字符设备中存在一种特殊的字符设备-混杂设备,这类设备的主设备号都是10,次设备号通过函数调用可已进行动态分配。本设计DS18B20的驱动就被划归为字符设备中的混杂设备。Linux中使用misc_registes,misc_deregister来注册和注销设备 truct miscdevice来描述一个混杂设备:struct miscdevice int minor; const char *name; const struct file_operations *fops; struct list_head list; struct device *parent; struct device *this_device;misc设备注册:int misc_register(struct miscdevice * misc);/注册设备获取次设备号misc设备注销:int misc_deregister(struct miscdevice * misc);说明:上面的结构体是注册混合设备所需要的参数。主要有:minor:次设备号,所有的misc设备共用一个主设备号,所以注册misc设备时只要次设备号就可以了。利用次设备号来区分设备的。name:misc设备名。*fops:misc设备文件操作结构体,其它三个参数很少使用。3.3 数据采集电路3.3.1 DS18B20简介6本设计使用于由美国达拉斯公司设计生产的单总线结构的温度传感器DS18B20。 起初达拉斯公司也生产过一种温度传感器DS1820,DS18B20继承DS1820一些特性并经过改进提升成为新一代数字单总线智能温度传感器。而相对于传统的热敏电阻,它可以直接读取测量温度值,并可以根据实际需要编程实现9到12位的数字值读数方式,并在很短的时间内完成9和12位数字值的转换,同时,信息的传输仅仅需要一条总线,实现了理论上的单总线传输,这样就大大节约了主系统的接口资源。实现温度的9和12位数字值的转换需要消耗一定的功率,而这些功率都是由单总线来提供的,也可连接DS18B20的总线供电,因此不需要额外的电源供应,这种设计大大减少I/O资源。因而使用DS18B20可以使系统结构变得简单,稳定,可靠性高。而其简单的结构,单总线结构和经济实用的特点,很容易实现多点温度采集。 DS18B20的传感器测量温度范围-55+125,在-10+85范围内。测量场的温度值直接通过数字单总线传输,用符号扩展的16位数字量方式串行输出,在此基础上就大大提高了系统的抗干扰能力。因此,数字单总线器件DS18B20可应用的场合十分广泛。DS18B20可广泛应用于工业,民用,军事和教学等领域内的温度测量以及温度测量和控制仪表设备的生产。图3.3 DS18B20实物图3.3.2 DS18B20性能指标l 单总线接口方式:DS18B20 与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20 的双向通讯;l 可用数据线供电,电压范围:+3.0 +5.5V,所以该长安其与开发板I/O口电平不兼容问题;l 测温范围:-55 +125,基本适应于各种环境温度的测量;l 温度读取方式:通过编程控制可以实现912 位的数字读数方式选择;l 用户可通过编程自设定非易失性的报警上下限值,实现温度预警;l DS18B20可以实现多点测温,很容易实现温度测量网络;l 负压特性:电源极性接反时,由于在在电源和地之间加了一个二极管,所以温度计不会因发热而烧毁。3.3.3测温接口电路及工作时序(1) 测温模块的硬件电路如下图图3.4 DS18B20电路图(2) DS18B20的时序DS18B20的时序主要包括两个方面:一是DS18B20的复位时序,在系统发出复位时序后,DS18B20会发出才能在信号,具体如图3.5所示;二是DS18B20读写时序,具体如图3.6所示。图3.5 DS18B20的复位时序和存在信号图3.6 DS18B20的读写时序3.4 DS18B20驱动编写3.4.1 读DS18B20这部分程序主要是实现开发板从DS18B20读一个字节的数据。在函数内部主要是实现对读DS18B20读时序的描述,并通过copy_to_user(buff, &ddat, size)把数据拷贝到用户数据空间。static ssize_t ds18b20_read(struct file *filp, char _user *buff, size_t count, loff_t *offp)volatile int i, size=count;char ddat;if (size 2)size = 1; for (i=0; i= 1; s3c2410_gpio_cfgpin(DSDATA, DATAOUTP); /配置数据总线(GPF0)为输出模式 s3c2410_gpio_setpin(DSDATA, 0); /拉低总线 udelay(4); /延时4us s3c2410_gpio_setpin(DSDATA, 1); /拉高总线 s3c2410_gpio_cfgpin(DSDATA, DATAINP); /设定数据总线(GPF0)为输入模式 if ( s3c2410_gpio_getpin(DSDATA) /如果读到数据 ddat |= 0x80; /把最高位取零 udelay(80); /延时70us s3c2410_gpio_cfgpin(DSDATA, DATAOUTP); /配置数据总线为输出模式 s3c2410_gpio_setpin(DSDATA, 1); /拉高 udelay(3); / 1us s3c2410_gpio_cfgpin(DSDATA, DATAINP); /配置数据总线为输入模式 if(copy_to_user(buff, &ddat, size) /拷贝到用户数据缓冲区 return -1; return size;3.4.2 写DS18B20 这部分程序主要实现开发板向DS18B20写一个字节的命令,函数内部主要实现对写时序的描述,同时通过函数copy_from_user(buff, &ddat, size)把数据拷贝到驱动数据空间。static ssize_t ds18b20_write(struct file *filp, const char _user *buff, size_t count, loff_t *offp) volatile int i, size=count; char ddat=0; if (size 2) size = 1; if (copy_from_user(&ddat, buff, size)/如果有数据不能被拷贝那么就报错 printk(write data errorn); return -1; s3c2410_gpio_cfgpin(DSDATA, DATAOUTP); for (i=0; i70us s3c2410_gpio_setpin(DSDATA, 1);udelay(3); / 1us ddat = 1; s3c2410_gpio_cfgpin(DSDATA, DATAINP); return size; 3.4.3 DS18B20的控制在这部分程序代码中主要是实现DS18B20的复位过程,代码主要是描述复位时序。static int ds18b20_ioctl( struct inode *inode, struct file *file, unsigned int cmd, unsigned long arg) int res=0; switch(cmd) case DS18B20_RESET: / 复位时序 s3c2410_gpio_cfgpin(DSDATA, DATAOUTP); s3c2410_gpio_setpin(DSDATA, 1); udelay(27); s3c2410_gpio_setpin(DSDATA, 0); udelay(500); / 500us s3c2410_gpio_setpin(DSDATA, 1); udelay(27); s3c2410_gpio_cfgpin(DSDATA, DATAINP); udelay(60); res = s3c2410_gpio_getpin(DSDATA); msleep(3); default: return -EINVAL; return res;3.4.4打开释放这部分代码主要是实现DS18B20设备的打开,和使用后设备的关闭释放。static int ds18b20_open(struct inode *inode, struct file *file)/设备打开:初始化设备,标明次设备号s3c2410_gpio_cfgpin(DSDATA, S3C2410_GPB0_INP);/CPU从数据总线上读取数据 return 0;static int ds18b20_release(struct inode *inode, struct file *file)/设备关闭 return 0;3.4.5 DS18B20的操作函数其实这也是顶层应用文件对硬件操作的一个接口,只要顶层文件对相应函数进行调用也就是对DS18B20的操作。static struct file_operations ds18b20_fops = .owner = THIS_MODULE,.open= ds18b20_open, /应用程序调用执行open时驱动设备文件也要执行ds18b20_open.release = ds18b20_release, /应用程序调用执行release时驱动设备文件也要执行ds18b20_release.read = ds18b20_read, /应用程序调用执行read时驱动设备文件也要执行ds18b20_read.write = ds18b20_write, /应用程序调用执行write时驱动设备文件也要执行ds18b20_write.ioctl = ds18b20_ioctl, /应用程序调用执行ioctl时驱动设备文件也要执行ds18b20_iocotl;3.4.6 DS18B20设备的注册和注销static int _init dev_init(void) int ret; ret = misc_register(&misc); printk(DEVICE_NAMEtinitializedn); return ret;static void _exit dev_exit(void) misc_deregister(&misc);3.5 DS18B20驱动程序的测试在编写了DS18B20的驱动之后,本设计必须验证驱动的正确性。在这种情况下,通过编写简单的应用程序来验证驱动程序在开发板上能否实现测温。这里本设计使用NFS挂载根文件系统的方式来验证,具体的验证步骤如下:(1) 编译内核模块,把DS18B20的驱动以内核模块的方式进行编译,可以执行以下命令:#make modules ARCH=arm CROSS_COMPILE=arm-linux-(2) 编译完成后会产生.ko文件,编译应用程序app.c产生可执行文件app,把18b20.ko和app拷贝到NFS共享目录下:/opt/FriendlyARM/mini2440/root_qtopia下。(3) 通过supervivi命令行来挂载根文件系统:A. 通过H-JTAG把supervivi烧写到开发板,启动串口终端,重启开发板,进入supervivi命令提示界面。B. 按下x进行分区,然后下载supervivi和Linux内核。C. 把开关拨向Nand Flash,给板上电,按复位键同时按下K1K6任何一个键就可以进入vivi命令提示界面,按下q进入vivi命令行 模式。并且设定电脑NFS共享目录:vi /etc/exports 并修改共享目录:在文件中加入:/opt/FriendlyARM/mini2440/root_qtopia*(rw,sync,no_root_squash),#service nfs restart重启NFS服务。D. 输入vivi命令:param set linux_cmd_line console=ttySAC0 root=/dev/nfs nfsroot=0:/opt/FriendlyARM/mini2440/root_qtopia ip=3:0:0::sbc2440:eth0:off(4) 通过串口打开超级终端,在根目录下安装DS18B20驱动模块:FriendlyARM# insmod 18b20.ko(5) 运行测试程序:FriendlyARM# ./app运行可执行文件app后会出现下图的测试效果,如图3.7所示。图3.7 DS18B20驱动测试结果图4 bootloader相关知识4.1 bootloader背景知识一个嵌入式系统从软件角度来看分为三个层次:第一是引导加载程序包括固化在固件中的boot程序和bootloader两部分;第二是Linux内核,特定于嵌入式平台定制内核;三是文件系统,包括系统命令和应用程序。如下图4.1所示。简单地说,bootloader就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,本设计可以初始化硬件设备、建立内存空间映射图,从而将系统的软硬件环境带到一个合适状态,以便为最终调用操作系统内核准备好正确的运行环境。在嵌入式系统中,通常并没有像BIOS那样的固件程序,因此整个系统的加载启动任务就完全由bootloader来完成。比如在一个基于ARM9的嵌入式系统中,系统在上电或复位时通常都从地址0x00000000处开始执行,而在这个地址处安排的通常就是系统的bootloader程序。图4.1嵌入式系统软件层次结构4.2 supervivi对于开发板mini2440有多种bootloader,例如 u-boot,supervivi,v-boot等等。他们之间的区别就是不同的bootloader可以引导不同内核。像supervivi能启动zImage,u-boot能启动uImage,而zImage和uImage的不同之处就在于在编译时生成内核的文件头不同。本设计采用的是supervivi作为bootloader来引导Linux内核。图4.2开发板内存分配Supervivi和许多bootloader一样它的启动也包括两个部分:stage1和stage2。Stage1主要实现的是硬件的初始化同时为stage2准备内存空间,并将stage2复制到内存中并设置堆栈,然后跳转到stage2。.Stage1包括以下步骤:l 初始化硬件l 为bootloader的stage2准备RAM空间l 拷贝bootloader的stage2到RAM空间l 设置堆栈l 跳转到stage2的C入口点Stage2:包括以下步骤:l 初始化本阶段要使用的设备l 将内核和根文件系统从Flash读到RAM中l 调用内核4.3本章小结本章节主要介绍了bootloader,从系统宏观地分析了bootloader的作用,同时也具体地分析了bootloader的启动流程。在此基础上更加具体地还分析了bootloader的每个关键阶段都做了什么工作。5 Linux内核5.1 Linux系统简介7Linux是最受欢迎的自由电脑操作系统内核。它是一个用C语言写成,符合POSIX标准的类Unix操作系统。Linux最早是由芬兰黑客 Linus Torvalds为尝试在英特尔x86架构上提供自由免费的类Unix操作系统而开发的。该计划开始于1991年,在计划的早期有一些Minix 黑客提供了协助,而今天全球无数程序员正在为该计划无偿提供帮助。 技术上说Linux是一个内核。“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件。一个内核不是一套完整的操作系统。一套基于Linux内核的完整操作系统叫作Linux操作系统,或是GNU/Linux。图5.1 Linux系统架构由上图可知Linux系统构架是由用户空间和内核空间两部分组成,之所以分为两部分主要是为了实现系统稳定性。内核空间和用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够实现从用户空间到内核空间的转移。Linux内核的主要模块(或组件)分以下几个部分:存储管理、CPU和进程管理、虚拟文件系统、设备管理和驱动、网络通信,以及系统的初始化(引导)、系统调用等。具体如图4.2所示:图5.2 Linux内核架构l 系统调用接口:SCI层为用户提供了一套标准的系统调用函数来访问Linux内核,搭起了用户空间到内核空间的桥梁。l 进程管理:主要是实现了进程的创建,进程的停止,并控制进程间的相互通信,进程管理还包括进程如何共享CPU,即进程的调度。l 内存管理:主要是实现多个进程安全有序地共享内存。l 网络协议栈:主要为Linux系统提供了丰富的网络协议。l 虚拟文件系统:VFS隐藏了各种文件系统的细节,为文件操作提供统一的接口,如图4.3所示。l 设备驱动:Linux内核中很多代码都在设备驱动中,它们控制特定的硬件设备。图5.3 虚拟文件系统提供统一文件接口5.2 Linux-2.6.29内核移植到mini24408(1) 首先到下载一套没有经过移植的linux-2.6.29源代码,并解压到相关目录下,进入目录linux-2.6.29;(2) 对内核根目录下的Makefile文件进行相应修改,修改CPU类型为arm,编译工具改为arm-linux-,ARCH ?= arm,CROSS_COMPILE ?=arm-linux-;(3) 修改时钟频率:#vi arch/arm/mach-s3c2440/mach-smdk2440.cs3c24xx_init_clocks(12000000);(4) 修改对Nand的分区信息。要让内核知道Nand Flash的分区信息,设置成跟bootloader一致;(5) 添加DM9000网卡驱动和其他设备驱动;(6) 用S3C2410的默认配置文件来进行基础配置然后使用make menuconfig来详细配置;(7) 编译内核;5.3配置编译生成zImage9使用已经移植好的Linux-2.6.29内核进行zImage的生成,在此过程中通过内核编译的方式把DS18B20的驱动加载到内核当中,而不是使用内核模块的方式加载驱动程序,然后通过内核配置,编译最后生成zImage。具体过程如下:(1) 复制DS18B20驱动程序18b20.c到/linux-2.6.29/drivers/misc/下,执行如下命令: #cp ./18b20.c /linux-2.6.29/drivers/misc(2) 编辑/linux-2.6.29/drivers/misc/下的Kconfig和Makefile执行以下命令:# vi /linux-2.6.29/drivers/misc/Kconfig然后再一个位置添加以下内容: config 18b20bool “18b20”(3) #vi /linux-2.6.29/drivers/misc/Makefile然后增加以下内容obj-$(CONFIG_18B20) += 18b20.o(4) 使用S3C2410的配置文件进行配置。(5) 使用make menuconfig 进行详尽配置,执行以下命令(6) #make menuconfig ARCH=arm然后进入图形窗口进入device drivers,在高目录下使用空格选择misc device进入该目录下本设计可以看到18b20这个新设备,通过空格选择该驱动,退出并保存。(7) 编译内核,执行以下命令完成内核编译#make zImage ARCH=arm CROSS_COMPILE=arm-linux-编译完成后本设计可以在/linux-2.6.29/arch/arm /boot下可以看到编译生成的zImage。通过以上操作DS18B20的驱动已经被编译到内核当中,只要我饿们把内核下载到开发板下,在开发板的dev目录下可以看到设备ds18b20,这就说明设备添加成功,如图5.4所示。图5.4 添加设备DS18B205.4本章小结在本章节本设计主要介绍了一些Linux系统和Linux内核的相关知识,以及怎样把Linux内核移植到开发板上,但本设计得重点在于如何配置Linux内核,并且编译内核以及通过编译内核来编译D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论