基于嵌入式linux的风力发电监控系统开发平台的构建
为了适应不同的应用场合,同时考虑到计算机系统的灵活性、可伸缩性以及可裁剪性,一种以应用为中心、以计算机技术为基础、软硬件可裁剪的嵌入式操作系统随之诞生。这种嵌入式系统能适用于对功能、可靠性、成本、体积、功耗要求严格的应用系统。而在众多嵌入式操作系统中,linux以其体积小、可裁减、运行速度快、网络性能优良、源码公开等优点而被广泛采用。特别是2.6内核版本的linux更是在实时性能方面有了很大的提高,因此在工业控制场合得到了越来越多的重视和应用。
本文正是在这一背景下,为基于s3c2410的嵌入式平台(扩充了多种外围设备,包括:lcd、a/d、网络芯片等等)构建出一个基于linux2.6.16内核的嵌入式系统开发平台,以满足风力发电监控系统开发的需求。
1系统构架
本系统的硬件平台是以32位高性能嵌入式处理器s3c2410a作为系统的cpu,其工作频率最高为203 mhz,具有强大的处理能力。另外,还扩展有多种外围设备,如:分辨率为640×480的26万色tft液晶显示屏、串口、usb口、网口、64mb flash、64mb sdram等等。可以充分满足风力发电监控系统开发的需求。
本硬件平台的软件构架主要分为以下几个部分:bsp层、操作系统层以及应用层,图1所示是其软件构架图。本系统的硬件平台是由嵌入式微处理器及其外围设备所构成的。硬件抽象层(bsp)是存储在硬件平台rom或flash上的负责与硬件底层交流的硬件驱动程序,主要负责对系统进行初始化,并将收集的硬件信息传递到接下来运行的操作系统内核中去。操作系统内核通过bsp来管理系统硬件资源,并为上层软件提供进程调度、内存管理、文件系统、设备驱动等服务。应用层主要负责与用户进行交流。
在完成系统的构架设计以后,就可以针对硬件平台进行具体的构建了,其工作主要包括以下几个部分:bootloader移植、内核移植以及文件系统的建立等,其中内核移植包括网络设备、lcd和usb等驱动的移植。文中针对本系统的设计给出了相关程序的移植。
2 bootloader移植
bootloader (引导加载程序)是系统加电后运行的第一段代码。这段小程序用于初始化硬件设备和建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。
目前,较流行的bootloader主要有u-boot和vivi等。本设计主要是以s3c2410为控制器的硬件平台,因此可以选用带有网络功能的vivi作为系统的bootloader。作为引导程序的vivi一般分为stage1和stage2两大部分。stage1主要是根据cpu的体系结构进行设备初始化等工作,通常都用短小精悍的汇编语言来实现,而stage2则通常用c语言来实现,这样可以实现更加复杂的功能,且代码会具有更好的可读性和可移植性。为了使vivi更适合本系统的硬件平台,设计时需要对其进行部分修改。
(1)修改编译器
首先要把vivi中makefile的有关编译的选项指向安装好的3.4.1版本的交叉编译工具链,将编译所需的linux文件夹“unux-include-dir=”指向交叉编译器所在的文件夹“linux-include-dir=/usr/local/arm/3.4.1/include”,并将“cross-compile=”项修改为“cross-compile=/usr/local/arm/3.4.1/bin/arm-linux-”。
(2)修改启动参数
接着根据硬件平台的实际情况要修改vivi中flash分块情况。本系统将flash划分成四个部分:第一部分用来存放系统的vivi:第二部分用来存放vivi以及linux操作系统的启动参数;第三部分用来存放嵌入式linux操作系统;最后一部分用来存放文件系统。具体的地址及块大小分配如表1所列。
修改完以上两项就可以对vivi进行编译了,之后通过jtag将生成的二进制代码烧写到flash的第一部分,即完成了vivi的移植。
3内核移植
内核移植和bootloader移植一样要根据设计的硬件平台来进行。根据本嵌入式系统硬件平台的设计,需修改内核makefile文件、设置flash分区、配置与编译内核等,并完成网络设备、lcd以及usb等驱动的移植,下面简单介绍一下针对本硬件平台的相关移植工作。
(1)内核编译与移植
在交叉编译内核之前,要先对编译选项进行配置。执行“make menuconfig”指令,进人syetem type选项,选择对s3c2410系统板的支持,然后配置file system和block device,接下来使用“make dep”指令设置依赖关系,之后便可以使用“make zimage”指令进行编译。编译内核交叉编译时间相对较长。最终会生成一个文件zimage,这就是编译成功后的arm linux内核文件。将编译好的内核镜像文件写入到flash中,即完成了内核的移植。
(2)网络设备移植
系统中采用cs8900a作为网络芯片,最高支持10 mb/s的传输率,它使用s3c2410的ngcs3作为片选线,irq_eint9作为外部中断信号线。其驱动移植方法如下:
1)在linux/driver/net/arm目录下加入芯片的驱动程序文件cs8900.h和cs8900.c:
2)在smdk2410_init函数中完成相应寄存器设置;在cs8900_probe()函数中对s3c2410的网络控制寄存器进行设置:加入_raw_writel(0x221ldll0,s3c2410_bwscon);和_raw_writel(0x1f7c,s3c2410_bankcon3);两个语句;
3)将网卡的物理地址(0x19000000)映射到vsmdk2410_eth_io所指向的虚拟地址上去,即在/arch/arm/mach-s3c2410/mach-smdk2410.c文件中的smdk2410_iodesc []结构数组中添加如下内容:{vsmdk2410_eth_io,0x19000000,sz_1m,mtl_device};
4)配置网络设备驱动的makefile、kconfig文件,并对头文件做部分修改。
(3) lcd移植
在2.6.16内核中已经包含了s3c2410的lcd驱动程序,因此,移植的主要工作是要根据驱动程序及lcd屏的实际情况进行初始化。s3c2410自带5个lcd控制器,每个控制器有不同的功能,必需对每个控制器的参数进行相应的设置才能顺利地启动lcd,这些参数包括:液晶屏类型(tft屏或cstn屏)、颜色位数、垂直度、水平度、控制信号线的极性以及液晶屏的分辨率等等。
本系统采用的是sharp 8.0英寸的tft液晶屏。参考该液晶屏手册,根据实际情况设置各个寄存器的参数如表2所列。
设置好液晶屏的参数后,再在平台初始化函数smdk2410_devices[]_initdata中启动液晶屏。最后,修改drivers/video目录下的kconfig和drivers/video目录下的makefile文件。
4文件系统建立
每种操作系统都有适合自己的文件系统,如:windows一般采用fat32或ntfs文件系统格式,linux采用ext2或ext3文件系统格式,而嵌入式linux操作系统是建立在一种称为yaffs2(yaff文件系统的改进版)的针对嵌入式linux的文件系统之上。因此可根据本系统的硬件平台设计及所采用的linux内核。构建出yafts2文件系统,步骤如下:
(1)在内核中建立yaffs2目录fs/yaffs2,并把下载的yaffs2代码(可以从网上下载开源的yaffs2的源码)复制到该目录下面;
(2)修改kconfig和makefile,使其可以配置yaffs2;
(3)在yaffs2目录中生成makefile和kconfig文件;
(4)根据表1在内核中修改nand分区;
(5)配置内核时,应选中mtd支持和yaffs2支持;
(6)编译内核并将其下载到开发板的flash中;
(7)制作根文件系统下载到flash的指定地址(地址如表1所示)。
至此,就搭建好了风力发电监控系统开发所需要的软硬件平台。图2所示是基于搭建好的平台并使用qt/embeded开发的风力发电监控系统的截图。
5结束语
本文根据一个特定的目标平台,介绍了如何构建基于linux 2.6.16的嵌入式开发平台,介绍了移植的主要技术和整个流程,并在qt/embedd下开发了风力发电监控软件。掌握这些移植和开发技术,对于开发嵌入式linux应用系统十分重要,同时对于开发其它类型的嵌入式系统也具有一定的参考意义。
2020年半导体行业发展的8大关键词
长光华芯荣获“2021年首届中国激光金耀奖”新技术银奖
在家制作PCB的步骤分享
雷军、林斌为提升小米9产能想去工厂拧螺丝,为什么会被无情拒绝?
基于FPGA的扩频系统设计
基于嵌入式Linux的风力发电监控系统开发平台的构建
TA7240AP引脚功能的电压资料参数
西门子S7-200SMART简单控制逻辑问题
江森自控推出融合AI的新技术生态系统,重新构想城市等工作场所的未来
触摸屏技术的发明史
基于单片机和LabVIEW的温湿度监测系统设计
张卫:先进CMOS制造工艺的技术演进及自主发展思考
高通死磕,苹果在智能家居布局能否绝地反击
小米6什么时候上市?小米6最新消息:小米6配置确认,高配低价1999元,小米平板3也是高配低价吗?
柔性振动盘用途
固体电路继电器Q和A大全
简化用于过程控制的模拟输入模块的设计
牛津大学入驻我国首个区块链试验区
采用PIC单片机的LED点阵手写屏设计
智能网联汽车是未来趋势 造车新势力挑战的背后往往站着机遇