Chinaunix首页 | 论坛 | 博客
  • 博客访问: 880198
  • 博文数量: 284
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1960
  • 用 户 组: 普通用户
  • 注册时间: 2014-05-04 16:41
文章分类

全部博文(284)

文章存档

2018年(5)

2017年(95)

2016年(69)

2015年(15)

2014年(100)

我的朋友

分类: 嵌入式

2017-02-07 19:13:02

 Hi3518C开发板系统移植总结
hi3518C 环境说明

硬件环境:

处理器内核:        ,16KB I-Cache, 16KB D-Cache

视频编码:H.264 Baseline Profile 编码    H.264 Main Profile编码   MJPEG/JPEG Baseline编码

视频编码处理器性能:

H.264编码可支持最大分辨率为2M Pixel (像素)

H.264&JPEG 多码流实时编码能力: + JPEG 抓拍   (fps :帧数)

支持JPEG抓拍

CBR/VBR两种码率控制模式,且输出码率范围为: 32kbit/s ~  40Mbit/s

编码帧率支持 1/16 ~ 30fps

支持8个感兴趣域(ROI)编码

支持8个区域的编码前处理OSD 叠加        

智能视频分析:

集成智能分析加速引擎,支持智能运动侦测,周界防范,视频诊断等多种智能分析应用

视频与图形处理:

支持3D去噪,图像增强,边缘增强,de-interlace等前处理功能

支持视频,图形输出抗闪烁处理

支持图形1/2~2x 缩放功能

8个区域的编码前处理)OSD 叠加

2层(视频层,图形层1)视频处理后处理硬件图像加

ISP:

支持AE和AWB功能,用户可自行调节
强光抑制、背光补偿、gamma、色彩增强

支持坏点校正、去噪、数字防抖
支持去雾
支持镜头畸变校正
支持图像mirror、flip 
支持数字WDR和tone mapping 
提供PC端ISP tuning tools

音频编解码:

通过软件实现多协议语音编解码
协议支持G.711、ADPCM、G.726 
支持回波抵消功能

安全引擎:

硬件实现AES/DES/3DES 三种加解密

数字水印技术

视频接口:

输入:支持支持8/10/12 bit RGB Bayer输入,时钟频率最高74.25MHz

           支持BT.601、BT.656 
           支持与SONY 、Aptina、OMiniVision、Panasonic等主流高清CMOS对接

           支持与CCD sensor对接兼容多种sensor电平提供可编程sensor时钟输出
           支持输入最大分辨率为2M Pixel

输出:
         提供1个BT.1120视频输出接口,用于外扩HDMI或SDI接口,支持输出  

 

音频接口:

集成Audio codec,支持16bit语音输入和输出

外围接口:

支持POR 
集成高精度RTC 
集成2通道SAR-ADC

2个UART接口
I2C接口、GPIO接口

 3个PWM接口
1个SDIO2.0接口,支持SDHC
1个USB 2.0 HOST接口
支持RMII和MII模式;支持10/100Mbit/s 全双工或
半双工模式,提供PHY时钟输出

外部存储接口:

DDR2/3 SDRAM接口
     16bit  
     最大容量支持1Gbit 
SPI Nor Flash接口
      1、2、4bit SPI Nor Flash
       支持从Nor Flash启动

SDK

      提供基于-3.0.y SDK包

      提供H.264的高性能PC解码库

芯片物理规格:

功耗 :

       700mW典型功耗

       支持多级省电模式

工作电压:
          内核电压为1.2V 

          IO电压为3.3V,容限电压为3.8V  

           DDR2/3 SDRAM接口电压为1.8/1.5V 
封装:
        20mm x 20mm,176pin 0.40管脚间距,QFP RoHS封装
        13mm x 13mm,293pin 0.65管脚间距,TFBGA RoHS封装

以上是HI3518C的硬件特性,以下是在板子上的系统移植过程:

 

一、搭建linux 开发环境

        1、安装Linux服务器 (此处省略)

        2、

             安装SDK(软件开发工具包)

              i、拷贝。将Hi3518_SDK_V1.0.7.0.tgz(XX是版本号)拷贝到Linux服务器上。

              II、解压。解压文件,使用命令:tar –zxf Hi3518_SDK_V1.0.7.0.tgz

             III 、展开SDK包内容
                     1) 在执行安装脚本前建议修改系统默认shell为bash。
                     2) 返回Hi3518_SDK_V1.0.7.0目录,运行source sdk.unpack(不需要sudo)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
                     如果您需要通过WINDOWS中转拷贝SDK包,请先运行source sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。       

         3、  

                 在linux服务器上安装交叉编译器

               1)安装uclibc交叉编译器(注意,需要有sudo权限或者root权限):
                    进入Hi3518_SDK_V1.0.7.0osdrv/toolchain/arm-hisiv100nptl-linux目录,运行chmod +x cross.install,然后运行./cross.install即可。 
               2) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。 

              

二、编译uboot:(参见osdrv目录下readme)

           1、待进入boot源代码目录后,执行以下操作
                 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- hi3518c_config

                可能会出现以下问题: /bin/bash: arm-hisiv100nptl-linux-gcc: command not found

                解决办法:因为交叉工具链安装在 /etc/profile中。所以打开/etc/profile文件把 export PATH="/opt/hisi-linux-nptl/arm-hisiv100-linux/target/bin:$PATH" 写在命令行

                                   临时导出工具链的路径

                 make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux-                             //指定了编译工具链为arm-hisiv100nptl-linux-

                 编译成功后,将在U-boot目录下生成u-boot.bin。    //这一步生成的u-boot.bin只是一个中间件,并不是最终在单板上执行的U-boot镜像。

                将生成的u-boot.bin 复制到osdrv/tools/pc_tools/uboot_tools/目录下

                赋予mkboot.sh可执行权限

               chmod +x mkboot.sh

                运行./mkboot.sh reg_info_.bin u-boot-ok.bin      //这里  reg_info_bin 对应的就是 osdrv/tools/pc_tools/uboot_tools/reg_info_hi3518c.bin
                生成的u-boot-ok.bin即为可用的u-boot镜像

 6、SDK目录介绍 

Hi3518_SDK_Vx.x.x.x 目录结构如下:    
    |-- sdk.cleanup                 # SDK清理脚本
    |-- sdk.unpack                  # SDK展开脚本
    |-- osdrv                       # 存放操作系统及相关驱动的目录
    |   |-- busybox                 # busybox源代码
    |   |-- drv                     # drv源代码
    |   |-- kernel                  # linux内核源代码
    |   |-- pub                     # 编译好的镜像、工具、drv驱动等
    |   |-- rootfs_scripts          # rootfs源代码
    |   |-- toolchain               # 交叉编译器
    |   |-- tools                   # linux工具源代码
    |   |-- uboot                   # uboot源代码
    |   `-- Makefile                # osdrv Makefile
    |-- package                     # 存放SDK各种压缩包的目录
    |   |-- osdrv.tgz               # linux内核/uboot/rootfs/tools源码压缩包
    |   |-- mpp.tgz                 # 媒体处理平台软件压缩包
    |   `-- image                   # 可供FLASH烧写的映像文件,如内核、根文件系统
    |-- scripts                     # 存放shell脚本的目录
    |-- mpp                         # 存放媒体处理平台的目录
        |-- component               # 组件源代码 
        |-- extdrv                  # 板级外围驱动源代码
        |-- include                 # 对外头文件
        |-- ko                      # 内核模块
        |-- lib                     # release版本库以及音频库
        |-- tools                   # 媒体处理相关工具
        `-- sample                  # 样例源代码    

 

三、配置编译linux 内核

         配置内核的操作步骤如下:
         1.  手动拷贝.config 文件: 
          linux@ubuntu:~/Hi3518_SDK_V1.0.7.0/$ cd osdrv/kernel/linux-3.0.y 
           arch/arm/configs/hi3518c_full_defconfig .config
          2.  通过“make menuconfig”进行内核配置:
           ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig

          注意:

              I:  窗口要够大不然会报错

             II: 错误:*** 'make menuconfig' requires the ncurses libraries.

                            *** Install ncurses (ncurses-devel) and try again.

                 解决方法:

                  apt-get install libncurses5-dev


           3.  选择需要的模块。
           4.  选择完毕后,保存并退出。

           5.直接输入$  make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux-  uImage  //命令编译内核生成镜像,此时需要等待几分钟。

         可能出现的错误:

        "mkimage" command not found - U-Boot images will not be built

         解决方法: 下载 mkimage 命令

         $sudo apt-get install uboot-mkimage
                 

四、制作根文件系统

            利用busybox制作根文件系统需要先获取busybox源代码,然后配置、编译和安装busybox,操作成功后开始制作根文件系统。// busybox-1.16.1


配置busybox:

                进入busybox所在目录,进行配置操作需要输入如下命令:
                 $ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- menuconfig
                 busybox的配置界面和内核配置相似,其功能选项容易理解,可以根据自己的需求选择配置。在Busybox Settings ---> Build Options中注意下面两个选项:
                 [*]Build BusyBox as a static binary (no shared libs) 
                 (arm-hisiv100nptl-linux-) Cross Compiler prefix 

其中:
       第一个选项选择是否把busybox编译成静态链接的可执行文件。如果选择该选项,编译出来的busybox就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项

       将得到动态链接的busybox,体积较小,但需要动态库的支持。
       第二个选项是用于选择SDK推荐的交叉编译器,配置好后保存并退出。// 在这里我们不要输入交叉编译,因为在命令行会输入,在这里输入,然后又在命令行输入会报错。

 

编译和安装busybox:

编译和安装busybox的具体操作如下:


 $make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- 
 $ make ARCH=arm CROSS_COMPILE=arm-hisiv100nptl-linux- install 

编译并安装成功后,在busybox目录下的_install目录下生成以下目录及文件:

drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 bin 
lrwxrwxrwx 1 linux linux 11 2005-04-22 11:01 linuxrc->bin/busybox 
drwxr-xr-x 2 linux linux 4096 2005-04-22 11:01 sbin 
drwxr-xr-x 4 linux linux 4096 2005-04-22 11:01 usr

制作扩展的根文件系统

1、在新生成的 _install 文件夹下制作根文件系统

$mkdir etc dev lib tmp var mnt home proc

2、配置etc、lib、dev目录的必需文件。
I、 etc目录可参考系统/etc 下的文件。其中最主要的文件包括inittab、fstab、init.d/rcS
文件等,这些文件最好从busybox的examples目录下拷贝过来,根据需要自行修
改。
II、dev 目录下的设备文件,可以直接从系统中拷贝过来或者使用mknod命令生成需
要的设备文件。

       1: 拷贝文件时请使用cp –R file。

       2:

III、lib 目录是存放应用程序所需要的库文件,请根据应用程序需要拷贝相应的库文
件。

我把交叉工具链下的库全部拷过去了。

$ cp -rf  ~/Hi3518_SDK_V1.0.7.0/osdrv/toolchain/arm-hisiv100nptl-linux/runtime_lib/armv5te_soft/lib    ~/Hi3518_SDK_V1.0.7.0/osdrv/busybox/busybox-1.16.1/_install/lib 下

完成以上两个步骤,一个完整的根文件系统就生成了。但是但是没有玩哦。

 

Hi3518C 选择的文件系统是JFFS2。为了使内核支持JFFS2文件系统,必须在编译内核时把JFFS2的选项加入(我们发布
的内核默认已经加入了支持)。在make ARCH=arm CROSS_COMPILE=armhisiv100nptl-linux- menuconfig后,进入“File systems”,选择“miscellaneous
filesystems”,最后选中其中的“Journalling Flash File System v2 (JFFS2) support”选项(SDK里面提供的内核默认已经选择了该文件系统的支持)

JFFS2的制作方法为:

$ mkfs.jffs2 -d ./_install -l  -o jffs2-root.img  // ./_install是刚才我们制作的根文件系统目录   

mkfs.jffs2工具可以从互联网中下载,也可以在SDK包中找到。我是通过命令行从网上下载的

$apt-get install mtd-utils

 

好啦,以上系统中生成的 u-boot-ok.bin  、uImage 、jffs2-root.img   分别就是我们最终要下载到开发板的bootloader,kernel,rootfs.

u-boot-ok.bin 路径:Hi3518_SDK_V1.0.7.0/osdrv/tools/pc_tools/uboot_tools/u-boot-ok.bin

uImage          路径:Hi3518_SDK_V1.0.7.0/osdrv/kernel/linux-3.0.y/arch/arm/boot/uImage

jffs2-root.img 路径:Hi3518_SDK_V1.0.7.0/osdrv/busybox/busybox-1.16.1/jffs2-root.img

 

五、从PC下载到开发板

 

终于可以开始下载了,嘎嘎...,由于其他原因,我就不写怎么烧录uboot了,只写内核和根文件系统的下载

因为我没有中转设备,所以我不得不采用串口来下载,串口工具我选择的是  SecureCRT ,我u-boot支持loady命令,所以我采用 Ymodem 协议。在超级终端的U-boot命令行中输入loadb 0x82000000(存放内核的内存地址),打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件。

 

下载内核过程:

 hisilicon # loadb 0x82000000      // 打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件 uImage

等待下载完成后,使用U-boot的sf命令系列将内核从内存拷贝到SPI Flash中,这里
以SPI Flash操作为例:

hisilicon#sf probe 0  /*对SPI Flash进行初始化设置*/ 
hisilicon#sf erase 0x100000 0x300000    /*擦除Flash*/   //erase 多少是根据你下载文件的大小决定的 我的文件2.8M,所以我从 0x100000 擦出到  0x300000 共 3M
hisilicon#sf write 0x82000000 0x100000 0x300000  /*将内核写入到SPI Flash偏移地址为0x100000位置*/

下载根文件系统:

下载根文件系统和下载内核的操作方法相同,具体步骤如下:

hisilicon # loadb 0x82000000      // 打开菜单“Transfer”下的“send Ymodem”,在win窗口中选择下载的文件 jffs2-root.img

等待下载完成后,使用U-boot的sf命令系列将内核从内存拷贝到SPI Flash中,这里
以SPI Flash操作为例:

hisilicon#sf probe 0  /*对SPI Flash进行初始化设置*/ 
hisilicon#sf erase 0x500000 0x100000    /*擦除Flash*/   //erase 多少是根据你下载文件的大小决定的 我的文件不到1M,所以我从 0x500000 擦出到  0x100000 共 1M
hisilicon#sf write 0x82000000 0x500000 0x100000  /*将内核写入到SPI Flash偏移地址为0x100000位置*/

 

终于内核和根文件系统已经下载到板子上,且写到spi flash中。

 

最后最后一步了!

六、启动 linux

设置启动参数以及自动启动方式 , 从U-boot引导内核,需要给内核传递参数,包括内存大小、根文件系统挂载设备等。
根据根文件系统类型不同,设置也相应不同,这里仅提供一种参考设置。

各参数的含义如下:

mem:设置操作系统内存大小。以上设置mem=64M表示分配给操作系统内存为64M。
console:设置控制台设备。格式为console=ttyAMA0,115200表示控制台为串口0,波特率115200。
root:设置根文件系统挂载设备。格式为root= /dev/mtdblock3表示从Flash第3个分区挂载(Flash分区编号从0开始)。
rootfstype:设置挂载文件系统类型。
mtdparts:Flash分区描述,格式为mtdparts=hi_sfc:256K(boot),3M(kernel),1M(rootfs),5M(data)  //表示有4个分区,分区0大小为256用于bootloader启动,分区1大小为3M用于内核启动,分区2大小为1M用于根文件系统启动,5M为用户数据。

 

以下参数设置,必须在同一行中输入。

根文件系统类型为JFFS2时,设置如下:

hisilicon# setenv bootargs ‘mem=64M console=ttyAMA0,115200 root=/dev/mtdblock3 rootfstype=jffs2 mtdparts=hi_sfc:256K(boot),3M(kernel),1M(rootfs),5M(data)’

 //boot 、kernel、rootfs、data 名字是可以随便取的。 root=/dev/mtdblock3 把根文件系统挂在到第三个分区 data 处

hisilicon# setenv bootcmd  'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'

hisilicon#setenv bootdelay 2  /*设置启动延时为2秒*/ 
hisilicon#saveenv

 

 

ok ok .可以重启开发板,进入我们的新系统了。

阅读(1481) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~