Hi3520 SDK 安装以及升级使用说明
1、先明确文中的几个概念。
主片: 多片级联应用中,指PCI主片。
从片: 多片级联应用中,指PCI从片。
主arm:指双核中的arm11。
从arm:指双核中的arm9。
2、第六章 FAQ,新增如何调整主从arm MMZ和os内存,实现16D1编码 or 16D1解码。
3、2009-12-15,精简内存,减少了从arm os内存,调整了16-bit mmz分配。
第一章 Hi3520 版本升级操作说明
如果您是首次安装本SDK,请直接参看第2章。
1、补丁升级规则
补丁所在目录,均与完整包的目录相同,便于用户对照修改、替换更新。
a, mpp补丁
补丁形式:ko、lib、头文件、从arm文件系统、从arm文件系统镜像。
升级方式:请替换原mpp_master目录。若您用到了mpp、mpp_slave,也请一并替换。
请将从arm文件系统(因为其包含运行在从arm上的mpp业务)烧写至单板flash。
请基于新的mpp_master/lib库,重新编译主arm应用程序。
b, driver补丁
补丁形式:源码、编译好的ko。
升级方式:若您自己改动过driver源码,请参考补丁源码,修正问题后重新编译ko,更新至单板。
若您未改动过driver源码,可使用补丁包中已经编译好的ko,更新至单板。
更新方式:重新制作主arm文件系统,烧写至单板;或者通过nfs,复制到单板该driver的ko目录下。
c, os补丁
补丁形式:源码、编译好的os。
升级方式:若您改动过os源码,请参考补丁源码,修正问题后重新编译,烧写至单板。
若您未改动过os源码,请使用新的os,烧写至单板。
第二章 首次安装SDK
1、Hi3520 SDK包位置
在"Hi3520 DMS V100R001C01/software/board/"目录下,您可以看到一个 Hi3520_tgz 的文件,
该文件就是Hi3520的软件开发包。
2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3520_tgz,
解压缩该文件,可以得到一个Hi3520_目录。
3、在linux服务器上安装交叉编译器
1) 进入tools/toolchains,运行chmod +x cross.install,然后运行./cross.install即可,注意,需要有sudo权限或者root权限
2) 执行source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。
4、展开SDK包的其他内容(注意!这一步不可以省略)
返回SDK目录,运行./sdk.unpack将会展开SDK包打包压缩存放的其他内容,请按照提示完成操作。这步操作可能需要几分钟。
如果您需要通过WINDOWS中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展
开。
5、SDK目录介绍
完整的 Hi3520_SDK_VX.X.X.X 目录结构如下:
|-- pub
|  |-- images                  # 可供FLASH烧写的映像文件,如内核、jffs2文件系统
|  |-- include                # 公共头文件(该目录已废弃)
|  |-- kbuild-FULL_REL        # 主ARM内核头文件,内核模块使用该目录来进行编译
|  | `-- include              # 主ARM应用程序需要的头文件
|  |-- kbuild-FULL_REL_SLAVE  # 从ARM内核头文件,内核模块使用该目录来进行编译
|  | `-- include              # 从ARM应用程序需要的头文件
|  |-- lib                    # 应用程序需要的库文件
|  |-- resource                # 构成rootfs的各种组件,一般不需要关心
|  |-- standee                # 各模块的原始安装文件,如需要mmz.ko就可以在这里到,同时也包含组件所需的调试信息
|  `-- tarball                # SDK各模块的打包备份文件
|
|-- extdrv                      # 板级外围驱动源码
|-- rootfs-FULL_REL            # 主ARM的根文件系统
|-- rootfs-SLV_FULL_REL        # 从ARM的根文件系统
|-- scripts                    # 存放相关脚本的目录
|-- sdk.cleanup                # SDK清理脚本
|-- sdk.unpack                  # SDK展开脚本
|-- source                      # 放置所有源代码的目录
|  |-- app                    # 应用程序类源代码
|  |-- drv                    # 驱动类源代码
|  |-- lib                    # Lib类源代码
|  `-- os                      # OS相关源代码,如内核
|-- tools                      # 工具类
|    |-- bin                    # 可执行程序,如amfs
|    `-- toolchains            # 交叉工具链,展开SDK时已自动安装
|                             
|-- mpp                        # 媒体处理平台发布的头文件、库以及内核模块,适用于单核
|  |-- component              # 组件源代码
|  |-- include                # 对外头文件,包括FB,TDE
|  |-- ko                      # 单ARM使用的内核模块,包括FB,TDE
|  |-- lib                    # 单ARM使用的release版本库以及音频库
|  `-- sample                  # sample代码,进入各个子目录,可以直接编译运行
|                             
|-- mpp_master                  # 媒体处理平台发布的头文件、库以及内核模块,适用于双核主ARM
|  |-- component              # 组件源代码
|  |-- include                # 对外头文件,包括FB,TDE
|  |-- ko                      # 主ARM使用的内核模块,包括FB,TDE
|  |-- lib                    # 主ARM使用的release版本库以及音频库
|  `-- sample                  # sample代码,进入
各个子目录,可以直接编译运行
|                             
`-- mpp_slave                  # 媒体处理平台发布的头文件、库以及内核模块,适用于双核从ARM
|-- component              # 组件源代码
|-- include                # 对外头文件,包括FB,TDE
|-- ko                      # 从ARM使用的内核模块,包括FB,TDE
|-- lib                    # 从ARM使用的release版本库以及音频库
`-- sample                  # sample代码,进入各个子目录,可以直接编译运行
第三章、安装、升级Hi3520DEMO板开发开发环境
# 如果您使用的Hi3520的DEMO板,可以按照以下步骤安装u-boot,内核以及文件系统,以下步骤均使用网络来更新。
# 通常,您拿到的单板中已经有u-boot,如果没有的话,就需要使用仿真器进行烧写。
# 具体操作步骤,请参见 DMS\software\Doc下的《Hi3520 Linux 开发环境用户指南》和 DMS\application notes\下的《Hi3520 U-boot移植应用 Application Notes》。
# 以下操作假设您的单板已经有了u-boot。
1、配置tftp服务器
# 可以使用任意的tftp服务器,将pub/images下的文件拷贝到tftp服务器的目录下。
2、更新u-boot的环境变量
# 单板上电后,敲Ctrl-C,进入u-boot。先设置好serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
setenv xx
setenv xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv xx
setenv xx
ping serverip,确保网络畅通。
# 具体的使用方法请参见《Hi3520 Linux 开发环境用户指南》。
3、烧写并设置主u-boot
(1)烧写
protect off 0x80000000 +0x80000
erase 0x80000000 +0x80000
tftp 0x80000000 u-boot-hi3520v100_200M.bin;
protect on 0x80000000 +0x80000
(2)设置
# 在u-boot下设置启动参数:(主ARM操作系统分配72MB的内存,并使用jffs2的文件系统,文件系统的大小为16MB)
setenv bootargs mem=72M console=ttyAMA0,115200 root=1f01 rootfstype=jffs2 mtdparts=physmap-flash.0:14M(boot),16M(rootfs) pcimod=host pciclksel=1
setenv bootcmd 'bootm 0x80100000'
saveenv
4、烧写并设置从boot
(1)烧写
erase 0x80300000 +0x80000;
tftp 0x80300000 u-boot-hi3520v100_slave_200M.img; 
(2)设置
setenv slave_bootargs mem=15M console=ttyAMA0,115200;
saveenv
5、烧写主内核和文件系统
erase 0x80100000 +0x200000;
tftp 0x80100000 kernel-hi3520v100_full_release.img;
erase 0x80E00000 +0x1000000;
tftp 0x80E00000 rootfs-FULL_REL-Flash.jffs2;
6、烧写从内核和文件系统(到flash)及启动
(1)烧写
erase 0x80400000 +0x200000
tftp 0x80400000 kernel-hi3520v100_full_release_slave.img
erase 0x80600000 +0x800000
tftp 0x80600000 rootfs-SLV_amfs.initrd.img   
(2)手动启动从armsdk
# 在主boot下输入:
slavestart
(3)设置从ARM自动启动
# 在主boot下输入:
setenv slave_kernel_addr 0x80400000
setenv slave_initrd_addr 0x80600000
setenv slave_autostart 1
saveenv
7、启动新系统
# 重启单板即可,第一次进入系统时,挂载文件系统的速度可能比较慢,请耐心等待。
8、使用新系统
# 切记,不可随意在Linux下复位单板或断电,因为这样可能会损坏文件系统,导致文件丢失、损坏以致系统无法启动!
# 每次重启单板请使用reboot;同理,单板断电时请先运行halt,待到挂死后再断电,这样可以有效地保护FLASH文件系统,也可以避免不必要的麻烦。
第四章、使用SDK和DEMO板进行开发
1、开启Linux下的网络
# 执行命令加载网络驱动:
modprobe h2gether;
# 设置网络
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx;
ifconfig xx xx;
route add default xx
# 然后ping一下其他机器,如无意外,网络将能正常工作。
# 如果收包性能不足,目前确认通过增加协议栈缓存即可,可以按如下操作来调整收包缓存默认值和最大值
echo "1048576" /proc/sys/net/core/rmem_default;
echo "2048576" /proc/sys/net/core/rmem_max;
# 在内存紧张的情况下,如果再进行繁重的网络访问,有可能会报出缺页异常。此时通过限制系统将内存用于文件系统cache的数值,
# 可以提高网络突发情况下的处理能力。可以使用下面的命令将min_free_kbytes设置为2MB,提高网络突发情况下的可用内存数量
echo 2000 > /proc/sys/vm/min_free_kbytes
2、使用NFS
# 在开发阶段,推荐使用NFS作为开发环境。您开发的代码都可以放在NFS服务器上,通过NFS可以直接在DEMO板上访问到NFS服务器。
# 执行命令加载NFS驱动:
modprobe nfs
# 然后挂载NFS文件系统:
mount -t nfs -o nolock,rsize=xx:/your-nfs-path /mnt
# 然后就可以在/mnt目录下看到你服务器上的文件了,当然,如果你挂载的NFS目录就是SDK下面的rootfs,那么你可以:
chroot /mnt
# 然后就可以在新的根目录下工作了。
3、开启telnet服务
# 网络正常后,运行命令 telnetd& 就可以启动单板telnet服务,然后才能telnet到单板。
4、使用硬盘FAT32
# 按以下顺序依次插入ko文件,由于部分模块已经编入内核了,以下可能有部分命令冗余:
modprobe nls_base
modprobe nls_cp437
modprobe fat
modprobe vfat
modprobe msdos
modprobe nls_iso8859-1
modprobe nls_ascii
modprobe scsi_mod
modprobe sd_mod
mod
probe libata
modprobe sata_sil
# 注意: 调试时,如果对部分驱动有改动,重新生成了新模块,则无法通过modprobe方式插入,需使用insmod插入新模块。
modprobe as-iosched                    # 增加IO调度算法,还有loop、cfq_iosched、deadline-iosched选择
echo "anticipatory" > /sys/block/<devicename>/queue/scheduler  # 使能as-iosched算法,<devicename>是在/dev/<devicename>,如hda
# 然后挂载FAT32文件系统:
mount -t vfat /dev/sda1 /mnt
# 然后就可以在/mnt目录下看到文件了
# 其他驱动的使用请参考文档《驱动模块使用指南.txt》
#! 当然,你也可以把以上操作都放到脚本里面,并让它在linux启动的时候自动执行。
#! OK,到这里,所有的环境都已经准备好了,你可以开始媒体业务体验之旅了。
5、运行MPP业务
# 进入mpp ko目录,加载KO
cd mpp_master/ko
./load_master
# (确保sample已编译)进入各sample目录下,执行即可。例:
cd mpp_master/sample/vio
./sample_vio 1
第五章 地址空间分配与使用
1、RAM 内存管理
# DEMO板上共有两块DDR内存:
# DDRA 256M,对应物理地址从0xC0000000 到 0xCFFFFFFF;
# DDRB 128M,对应物理地址从0xE0000000 到 0xE7FFFFFF。
# 这些内存,一部分由操作系统管理,称之为os内存;另一部分则需根据业务进行灵活分配,称之为mmz内存。
# 为此,SDK提供了一个内核模块mmz,来管理mmz内存。用户可以在插入mmz模块时,指定其管理的内存,例如:
#  modprobe mmz mmz=anonymous,0,0xC2000000,32M:ddr16,0,0xE5800000,8M anony=1
# 表示mmz管理两块内存。
# 第一块内存名字为anonymous,起始地址为 0xC2000000,大小为32M。
# 第二块内存名字为ddr16,起始地址为 0xE5800000,大小为8M。
2、DEMO板RAM内存分配
# DEMO板的内存分配如下图所示:
图1 DDRA内存分配 (主从mmz)
-----|-------|  0xC0000000  # Reserved memory. You can use it all for your convience.
1M  |rsv    |
-----|-------|  0xC0100000  # Name:window. Usage: pci communication. If you have no pci, you can use for your convience.
7M  |window |         
-----|-------|  0xC0800000  # Name:anonymous. Usage: Frame Buffer.
24M  |master |             
|mmz    |
-----|-------|  0xC2000000  # Name:anonymous. Usage: Video Buffer.
224M |slave  |
|mmz    |
-----|-------|  0xD0000000  # End of 32-bit ddr.
图2 DDRB内存分配(主ARM OS + 从ARM OS + 主从mmz)
-----|-------|  0xE0000000  # slave file system. Note: image of slave file system must small than 5M.
15M  |slave  |           
|os    |
-----|-------|  0xE0F00000  # Name:ddr16. Usage: arm11 alloc for vdec stream buffer, dcc msg buf, etc.
15M  |master |
|mmz    |
-----|-------|  0xE1E00000  # Name:ipcm. Usage: communication memory between two arm.
2M  |IPCM  |
|memory |
-----|-------|  0xE2000000  # master os memory.
72M  |master |
|os    |
-----|-------|  0xE6800000  # Name:ddr16. Usage: arm9 alloc for venc stream buffer, channel context, etc.
24M  |slave  |
|mmz    |
-----|-------|  0xE8000000  # End of 16-bit ddr
# 主mmz加载在脚本 mpp_master/ko/load_master 中自动执行,无需用户操作。
# 从mmz加载在脚本 mpp_slave/ko/run_slave 中自动执行,无需用户操作。
3、flash地址空间
图3 flash空间分配
-----|-------|  0x80000000
1M  |master |
|boot  |
-----|-------|  0x80100000
2M  |master |
|kernel |
-----|-------|  0x80300000
1M  |slave  |
|boot  |
-----|-------|  0x80400000
2M  |slave  |
|kernel |
-----|-------|  0x80600000
8M  |slave  |
|fs    | 
-----|-------|  0x80E00000
16M  |master |
|fs    |
-----|-------|
# Flash 擦除需根据分区情况进行
uboot:  erase 0x80000000 +0x80000      # 必须从0x80000000开始擦除,建议擦除大小0x80000, 这样原来保存的环境变量可不被擦除,避免重新设置。
kernel: erase 0x80100000 +0x200000    # 必须擦除足够的空间,以写入kernel image文件
rootfs: erase 0x80E00000 +0x1000000    # 必须从分区2起始地址开始擦除,必须擦除分区2全部内容。
# flash的空间分配,要通过bootargs告诉主kernel
setenv bootargs ......(此处省略):14M(boot),16M(rootfs) 
14M(boot) 表示分区1,14M,存放 主boot(1M),主kernel(2M),从boot(1M),从kernel(2M) 和 从fs(8M)。
16M(rootfs) 表示分区2,16M,存放 主fs(16M)。
# 你可以根据实际从armfs、主armfs的大小,自行调整bootargs,并erase相应空间。以两个例子说明。
从fs大小 主fs起始地址 主fs大小 erase从fs                    erase主fs                    bootargs             
10M      0x81000000  16M      erase 0x80600000 +0xa000000  erase 0x81000000 +0x10000000  :16M(boot),16M(rootfs)
12M      0x81200000  20M      erase 0x80600000 +0xc000000  erase 0x81200000 +0x10400000  :18M(boot),20M(rootfs)
第六章 FAQ
Q1: 如何制作从arm文件系统img文件?
A1:  # 如下执行:
cd rootfs-SLV_FULL_REL;
./mknod_console;  # 必须执行该操作
fs ../;
cd .. ;
./fs rootfs-SLV_FULL_REL ./ rootfs-SLV_FULL_REL cramfs-initrd-img;
fs;
生成的文件名为: rootfs-SLV_amfs.initrd.img
mkimg脚本解释:
./fs rootfs-SLV_FULL_REL ./ rootfs-SLV_FULL_REL  cramfs-initrd-img;
(1)            (2) 

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。