Go to file
黄昕 fd9dbb1063 Mod aaa-12 忽略内核编译ko以及根文件系统目录
RCA:
SOL:
修改人:huangxin
检视人:huangxin
2019-07-19 09:40:14 +08:00
Common MOD aaa-12 解决json转换成结构体的时候,字符串可能越界的问题 2019-07-18 11:04:11 +08:00
ControlPlatform MOD aaa-12 修改测试用例路径 2019-07-18 16:11:56 +08:00
Platform OCT 修改MAkefile 2019-07-18 18:14:30 +08:00
Product Add aaa-12 新增用户认证登陆接口 2019-07-16 15:13:02 +08:00
docs/img Mod aaa-12 更正 Cygwin 安装 163 源路径 2019-06-17 15:46:07 +08:00
kernel Mod aaa-12 增加ARM64内核网卡流控队列支持 2019-07-19 09:38:59 +08:00
libs/src Mod aaa-12 修改struct2json库malloc hook 2019-07-04 11:29:48 +08:00
.gitignore Mod aaa-12 忽略内核编译ko以及根文件系统目录 2019-07-19 09:40:14 +08:00
.gitmodules Mod aaa-12 增加 cJSON submodule 2019-06-26 10:48:35 +08:00
Makefile Add aaa-12 新增用户认证登陆接口 2019-07-16 15:13:02 +08:00
Readme.md OCT 2019-07-03 16:10:23 +08:00
build_env.sh OCT 2019-06-11 15:52:49 +08:00

Readme.md

安全网关项目产品代码仓库

简介

  安全网关项目产品侧仓库,主要存放应用与安全网关设备上的应用、内核等相关功能的代码。

目录结构

.                               安全网关产品源代码主目录
├── Common                      产品侧和平台侧公共头文件
├── docs                        Readme 文档相关资源存放目录
├── Platform                    平台侧工程目录
│   ├── build                   平台侧系统构建 Makefile 目录
|   ├── common                  平台侧公共代码目录
│   ├── modules                 平台侧内核态工程源代码目录
│   │   ├── cfgrcv
│   │   ├── conntrack_api
│   │   │   ├── api
│   │   │   ├── demoA
│   │   │   └── test
│   │   ├── netlink_api
│   │   └── pdelivery
│   └── user                    平台侧用户态工程源代码目录
│       ├── cfg2kernel
│       ├── netlink_uapi
│       └── pdeliv_u
├── Product                     产品侧工程目录
│   ├── build                   产品侧系统构建 Makefile 目录
│   ├── common                  产品侧公共代码目录
│   ├── modules                 产品侧内核态工程源代码目录
│   │   └── demo                内核态态应用程序 demo 目录
│   └── user                    产品侧用户态工程源代码目录
│       └── demo                用户态应用程序 demo 目录
└── kernel                      内核源码存放目录

注意事项:

  1. 内核态功能相关代码存放于 modules 目录下
  2. 用户态功能相关代码存放与 user 目录下
  3. 每个独立的功能以子目录方式存放到适当的目录下
  4. user 与 modules 目录中共有的源代码和头文件以及配置文件必须存放到 common 目录中
  5. 不得把相同功能、相同定义、相同配置的内容独立放到各自的 user 和 modules 目录中

编译方法

1. 从仓库获取最新代码

git clone --recursive git@git.komect.net:ISG/secogateway.git git submodule update --init --recursive

git submodule update --init --recursive git pull

2. 安装必要软件(UBuntu)

sudo ./fsl-qoriq-glibc-x86_64-fsl-toolchain-aarch64-toolchain-2.4.1.sh sudo apt-get -y install git u-boot-tools device-tree-compiler autoconf curl flex sudo apt-get -y install automake dh-autoreconf libssl-dev openssl libpcap-dev bc sudo apt-get -y install python-pip qemu-utils libncurses5-dev python-crypto bison

3. 安装 linux 内核源代码

sudo mkdir -p /opt/fsl-kernel /opt/fsl-kernel/arm64 /opt/fsl-kernel/x86 sudo chmod 644 /opt/fsl-kernel -R cp ./kernel/linux-4.14.83 /opt/fsl-kernel/x86 -rf cp ./kernel/linux-4.14.83 /opt/fsl-kernel/arm64 -rf

4. 设置环境变量

在 ~/.bashrc 文件末尾加上以下几行配置
export HUACHENG_LINUX_KERNEL=/opt/fsl-kernel/x86/linux-4.9.140 export HUACHENG_ARM64_KERNEL=/opt/fsl-kernel/arm64/linux-4.9.140 export SDKTARGETSYSROOT=/opt/fsl-qoriq/2.4.1/sysroots/aarch64-fsl-linux export PATH=/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/usr/bin:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/usr/sbin:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/bin:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/sbin:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/usr/bin/../x86_64-fslsdk-linux/bin:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/usr/bin/aarch64-fsl-linux:/opt/fsl-qoriq/2.4.1/sysroots/x86_64-fslsdk-linux/usr/bin/aarch64-fsl-linux-musl:$PATH source ~/.bashrc

5. 编译内核

  • x64_86
    cd /opt/fsl-kernel/x86/secogateway/kernel/linux-4.9.140 && make -j
  • arm64
    cd /opt/fsl-kernel/arm64/secogateway/kernel/linux-4.9.140 && unset LDFLAS 修改 Makefile 文件第 257、258 两行
    ARCH ?= $(SUBARCH) CROSS_COMPILE ?= $(CONFIG_CROSS_COMPILE:"%"=%)

    ARCH ?= arm64 CROSS_COMPILE ?= aarch64-fsl-linux-
    然后运行 make 命令进行编译
    或者设置 make 参数进行编译
    make CROSS_COMPILE=aarch64-fsl-linux- ARCH=arm64

6. 构建系统

  • 构建
    cd secogateway
    make OPT=clean && make
  • 清理
    make OPT=clean
  • 安装
    make OPT=install [DIR=../_install]
    DIR 环境变量指定了最终安装默认,默认为 ../_install。支持绝对路径以及相对路径。
  • 安装目录结构
_install
└── debug               系统构建类型 debug/release
    ├── targets         构建可执行程序、驱动安装目录
    │   ├── ARM64       ARM64 平台的可执行程序、驱动
    │   └── LINUX       Linux 平台的可执行程序、驱动
    └── targets.debug   构建可执行程序、驱动的对应调试符号信息安装目录
        ├── ARM64       ARM64 平台的可执行程序、驱动调试符号信息
        └── LINUX       ARM64 平台的可执行程序、驱动调试符号信息
  • 编译信息
    执行 make 命令进行编译结束后,./Common/compile.h 文件中保存了当前系统编译信息,可以在代码中直接引用。
    #define sGATE_COMPILE_DATE "2019-05-22" #define sGATE_COMPILE_TIME "11:19:58" #define sGATE_COMPILE_MAJOR "20190522" #define sGATE_COMPILE_SUB "111958" #define sGATE_COMPILE_BY "hx" #define sGATE_COMPILE_HOST "hx-ubuntu" #define sGATE_GIT_TAGS "sGATE1.0-20181213-stable-159-g1b4c69da2-dev" #define sGATE_GIT_VERS "1b4c69da2d9cd6d133075f2fd96fbe0ac220fb72"
    sGATE_GIT_TAGS 记录了当前源码在 gitlab 服务器上面的分支信息
    sGATE_GIT_VERS 记录了当前源码在 gitlab 服务器上面的版本信息

7. git忽略kernel目录

由于大多数人在开发时用不到kernel目录下面的内核源代码内容并且内核源代码占用了大量磁盘空间可以通过命令让git忽略kernel目录并且在本地删除kernel目录下面的所有内容。

    1. 编辑 .git/info/exclude 文件,在文件中加入 kernel/ 表示忽略 kernel 目录下的内容
    1. 执行git命令对kernel目录下面的所有文件停止追踪
      cd secogateway/kernel git ls-files -v | awk '{print $2}' | xargs git update-index --assume-unchanged rm kernel/* -r

8. Windows 开发环境搭建

  • 方法一:下载克隆(或屏蔽)部分文件代码(适用于不在windows下查看、编辑linux内核代码的开发人员
  1. 说明 windows操作系统git下载克隆或屏蔽部分文件代码的方法 使用以下代码的重点是不能使用POWERSHELL/CMD只能使用git bash如果在POWERSHELL/CMD中操作在最后一步命令的时候会报以下错误 error: Sparse checkout leaves no entry on working directory

  2. 准备工作启用git的sparse checkout功能要求Cit 1.7+版本)

     mkdir secogateway
     cd secogateway
     git init
     git remote add -f origin http://git.komect.net/ISG/secogateway.git
     git config core.sparsecheckout true
    
  3. 设置检出的过滤规则示例屏蔽kernel文件夹

     echo '/*' >> .git/info/sparse-checkout #这一步不可省略
     echo '!/kernel/' >> .git/info/sparse-checkout
    
  4. 命令行 执行检出或使用TortoiseGit等图形化工具执行检出

     git checkout master
    

  • 方法二:windows下模拟linux文件系统
  1. 下载并安装 cygwin
  2. 运行安装程序 安装界面
  3. 在源选择界面中按图添加163源 http://mirrors.163.com/cygwin/ 源设置界面
  4. 安装包选择界面中选择中 git 等必要命令(如果没有选择上,以后可以运行安装工具继续选择) 选择软件包
  5. 点击 下一步 等待安装完成 安装完成
  6. 运行 cygwin执行以下代码假设 Windows 目录为 E:\my_projects拉取服务器代码
    cd /cygdrive/e/my_projects git clone git@git.komect.net:ISG/secogateway.git
  7. 如果 git clone 报错,请设置 ssh key
  8. git clone 完成后,可以从 E:\my_projects\secogateway 访问文件。警告文件为内核源码,可以忽略
  9. 可以将 kernel/linux-4.14.83/ 添加到本地 .gitignore 文件中,但不要将 .gitignore 文件提交到服务器

  • 方法三:将服务器目录映射到 Windows 驱动器(网络IO非常慢建议在服务器上编译
  1. 安装 sshfs
  2. 安装 WinFsp
  3. 参照 WinFsp文档 进行配置