微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于MPC8245的嵌入式VPN的研究与开发

基于MPC8245的嵌入式VPN的研究与开发

时间:03-24 来源:互联网 点击:

1 引言

基于IPsec的VPN是最重要的网络安全设施之一。自Linux内核版本2.47开始,内核实现了IPsec的无缝集成,Linux 2.6内核在支持嵌入式系统方面作了大量改进,在内存管理、进程调度、抢占性、响应时间等多方面性能都有显著提高,因此基于新Linux 2.6内核设计开发嵌入式VPN硬件网关设备具有性能高,扩展性好,易于升级等诸多优点。在嵌入式设备硬件的选择上,Motorola公司的 MPC8245处理器采用嵌入式PowerPC603e内核,将高性能32位处理器与浮点、存储器管理、分支预测单元、16K数据及16K指令缓存集成在一起,是面向网络基础设施、存储设备及电信产品中需要SoC集成与PCI连接的系统首选,非常适合于高端防火墙、VPN虚拟网关、以太网三层交换机以及工业控制中心板等高端嵌入式网络设备的开发,本文将对Linux 2.6内核在基于MPC8245嵌入式系统上的移植,并在此基础上対实现嵌入式IPsec VPN安全网关设备进行深入讨论。

2 嵌入式Linux VPN总体设计

2.1 VPN安全网关的总体功能模块设计

图1为基于MPC8245处理器的嵌入式Linux系统上开发设计的IPsec VPN安全网关总体设计图。VPN分为两部分:(1)IPsec服务,在Linux内核中实现,内核IPsec VPN处理逻辑使用两个安全数据库SPD和SAD,报文通过IPsec处理时需查询SAD和SPD,根据加密策略、算法进行处理;(2)密钥管理机制 IKE等IPsec控制部件,在应用层中设计,主要包括:

用户管理与配置界面,用于管理员控制台的配置;

系统管理模块,负责接收处理用户命令或读取配置文件,调用相应的模块接口完成,返回给显示终端,并进行相应日志记录;

密钥管理机制IKE模块,处理来自控制台的管理消息、来自网络中其它VPN网关的IKE交互消息以及来自内核的消息;

VPN内核消息处理模块,通过NETLINK套接字,负责与内核中的内核消息管理模块交互,实现IKE与内核安全关联数据库、安全策略数据库之间的消息传递。

图1 基于MPC8245的嵌入式Linux VPN 安全网关的总体设计

2.2 HHPPC8245-4ETH-R1嵌入式开发平台结构

HHPPC8245-4ETH-R1是华恒公司推出的一款嵌入式高性能网络开发平台,开发板硬件系统由核心板和底板两部分组成[1],功能模块图如图2所示。核心板采用musenki板,板上集成了处理器MPC8245、NOR FLASH(4M)、SDRAM等设备,采用PCI 2.2总线,并引出多种功能接口;底板上配置4个Davicom10/100M自适应以太网口,一个串口,并将FLASH扩展到32M,便于将来的功能扩展。FLASH上的软件主要由引导装载程序PPCboot、Linux内核映象和RAMDISK文件系统三部分构成,其中RAMDISK中包含了 BusyBox Shell、IPsec-Tools、模块操作工具等上层应用程序。

图2 核心板(上)和底板(下)的硬件功能模块图

3 基于HHPPC8245平台的嵌入式Linux VPN网关设备的开发与设计

3.1 Linux交叉开发环境的分析与实现

HHPPC8245-4ETH-R1目标板与PC宿主机有不同的POWER结构,需要在PC宿主机上建立交叉开发工具链,包括binutils、 gcc和glibc库三大部件。本系统采用Linux-2.6.10内核,网上的二进制代码大多版本太低,仅能编译Linux-2.4系列内核,因此从源代码开始建立开发环境,本系统选择的源代码版本为binutils-2.13.90.0,10、gcc-3.3.1、glibc-2.3.2;由于 MPC8245支持altivec,因此编译平台目标名为powerpc-linux-gnualtivec-。交叉开发环境建立后将包含有 powerpc-linux-gnualtivec-gcc等交叉开发工具的目录加入$PATH环境变量,并交叉编译、安装OpenSSL和Flex库,用于安装IPsec-Tools。

3.2 Linux 2.6.10内核移植的分析与实现

内核移植包括CPU Core移植、硬件平台移植和系统外围驱动程序开发[4]。Linux-2.6内核支持MPC8245 处理器和开发板上大部分硬件,因此移植的主要任务是核心板硬件平台的移植。内核代码入口点为arch/ppc/kernel/head.S,在完成查找 processor和architecture类型,建立内核初始化堆栈、建立临时页表等工作后,调用platform_init函数,用于在 start_kernel函数中初始化中断、陷阱、控制台等各个模块时调用。平台相关的初始化函数在arch/ppc/platform/中实现。因此在该目录下创建musenki_setup.c,实现PCI总线、中断控制器、IO端口映射、CPU频率、复位函数、串口和早期打印函数支持等初始化工作。这部分修改、移植需要熟悉平台的各种配置参数,应参考相似平台及Internet上相关源代码。

平台的移植同时需要修改相关Kconfig和Makefile文件,在arch/ppc/Kconfig中加入musenki平台的支持,在arch/ppc/platforms/Makefile加入musenki_setup.c的编译。

FLASH中为内核映象留下的地址

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top