搜档网
当前位置:搜档网 › Hi3536 SDK 安装以及升级使用说明

Hi3536 SDK 安装以及升级使用说明

Hi3536 SDK 安装以及升级使用说明


1、先明确文中的几个概念。
主片: 多片级联应用中,指PCI主片。
从片: 多片级联应用中,指PCI从片。
主arm:指双CPU中的A17。
从arm:指双CPU中的A7。

第一章 安装SDK
1、Hi3536 SDK包位置
在"Hi3536_V100R001***/01.software/board"目录下,您可以看到一个 Hi3536_SDK_Vx.x.x.x.tgz 的文件,
该文件就是Hi3536的软件开发包。

2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),使用命令:tar -zxf Hi3536_SDK_Vx.x.x.x.tgz ,
解压缩该文件,可以得到一个Hi3536_SDK_Vx.x.x.x目录。

3、展开SDK包内容
返回Hi3536_SDK_Vx.x.x.x目录,运行./sdk.unpack(请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。

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

5、编译osdrv
参见osdrv目录下readme.txt

6、SDK目录介绍
Hi3536_SDK_Vx.x.x.x 目录结构如下:
├── drv # 芯片其它驱动源代码
├── mpp_master # mpp(媒体处理平台)双cpu版本之主arm侧目录
│ ├── component # 组件源代码
│ ├── extdrv # 板级外围驱动源代码
│ ├── include # 对外头文件
│ ├── ko # 内核模块
│ ├── lib # release版本库以及音频库
│ ├── Makefile.param # makefile参数文件
│ ├── sample # 样例源代码
│ └── tools # 媒体处理相关工具
├── mpp_slave # mpp(媒体处理平台)双cpu版本之从arm侧目录(必须与mpp_master配套使用)
│ ├── bin # 从arm运行的媒体应用程序
│ ├── component

# 从arm的组件源代码
│ ├── extdrv # 从arm的外围驱动源代码
│ ├── include # 从arm的对外头文件
│ ├── ko # 从arm的内核模块
│ ├── lib # 从arm的版本库
│ ├── Makefile.param # 从arm的makefile参数文件
│ ├── rootfs-SLV_FULL_REL # 从arm的根文件系统
│ ├── rootfs-SLV_FULL_REL.cramfs.initrd.img # 从arm的根文件系统cramfs镜像
│ ├── rootfs_uclibc_slave.tgz # 从arm的根文件系统
│ ├── run_slave.sh # 启动媒体应用程序的自动运行脚本
├── mpp_single # mpp(媒体处理平台)单cpu版本的mpp平台目录
│ ├── component # 组件源代码
│ ├── extdrv # 板级外围驱动源代码
│ ├── include # 对外头文件
│ ├── ko # 内核模块
│ ├── lib # release版本库以及音频库
│ ├── Makefile.param # makefile参数文件
│ ├── sample # 样例源代码
│ └── tools # 媒体处理相关工具
├── osdrv # 存放操作系统及相关驱动的目录
│ ├── Makefile # osdrv Makefile
│ ├── opensource # 开源代码区,包括busybox源代码、linux内核源代码、rootfs源代码、交叉编译器
│ ├── pub # 编译好的镜像、工具、drv驱动等
│ ├── readme_cn.txt # 中文版readme
│ ├── readme_en.txt # 英文版readme
│ ├── rootfs_scripts # rootfs
│ └── tools # linux工具源代码
├── package # 压缩包目录
│ ├── osdrv_single # 单cpu版本,osdrv镜像
│ ├── osdrv_master # 双cpu版本,master cpu的osdrv镜像
│ └── osdrv_slave # 双cpu版本,slave cpu的osdrv镜像
├── scripts # 脚本目录
│ └── common.sh # 公共脚本
├── sdk.cleanup # SDK清理脚本
└── sdk.unpack

# SDK展开脚本

第二章、安装、升级Hi3536DEMO板开发开发环境
# 如果您使用的Hi3536的DEMO板,可以按照以下步骤烧写u-boot,内核以及文件系统,以下步骤均使用网络来更新。
# 通常,您拿到的单板中已经有u-boot,如果没有的话,就需要使用Hitools工具进行烧写。
# 更详细的操作步骤及说明,请参见01.software\board\documents目录下的《Hitools使用指南.pdf》。
# 以下操作假设您的单板上已经有u-boot,使用网口烧写uboot、kernel及rootfs到Flash中。
# Demo单板默认为从SPI Flash启动。

1、配置tftp服务器
# 可以使用任意的tftp服务器,将package/image_uclibc(或image_glibc)下的相关文件拷贝到tftp服务器目录下。

2、参数配置
# 单板上电后,敲任意键进入u-boot。设置serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
setenv serverip xx.xx.xx.xx
setenv ipaddr xx.xx.xx.xx
setenv ethaddr xx:xx:xx:xx:xx:xx
setenv netmask xx.xx.xx.xx
setenv gatewayip xx.xx.xx.xx
ping serverip,确保网络畅通。

3、烧写Uclibc映像文件到SPI Flash。(以32M SPI Flash为例)
1)地址空间说明(其中,m表示master arm;s表示slave arm)
| 1M | 4M | 6M | 1M | 4M | 6M |
|---------------|---------------|---------------|---------------|---------------|---------------|
| boot(m) | kernel(m) | rootfs(m) | boot(s) | kernel(s) | rootfs(s) |

以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写主u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 master/image_uclibc/u-boot-hi3536.bin
sf probe 0
sf erase 0x0 0x100000
sf write 0x42000000 0x0 0x100000
reset
3)烧写主内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 master/image_uclibc/uImage_hi3536
sf probe 0
sf erase 0x100000 0x400000
sf write 0x42000000 0x100000 0x400000
4)烧写主文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 master/image_uclibc/rootfs_hi3536_64k.jffs2
sf probe 0
sf erase 0x500000 0x600000
sf write 0x42000000 0x500000 0x600000
5)烧写从u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 slave/image_uclibc/u-boot-hi3536.bin
sf probe 0
sf erase 0xb00000 0x100000
sf write 0x42000000 0xb00000 0x100000
6)烧写从内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 slave/image_uclibc/uImage_hi3536
sf probe 0
sf erase 0xc00000 0x400000
sf write 0x42000000 0xc00000 0x400000
7)烧写从文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 slave/image_uclibc/rootfs-SLV_FULL_REL

.cramfs.initrd.img
sf probe 0
sf erase 0x1000000 0x600000
sf write 0x42000000 0x1000000 0x600000
8)设置启动参数
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),6M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000'
setenv slave_autostart 1
setenv slave_bootcmd 'sf probe 0;sf read 0x81000000 0xb00000 0x80000;sf read 0x82000000 0xc00000 0x400000;sf read 0x83000000 0x1000000 0x600000;bootm 0x81000000 0x82000000 0x83000000'
setenv slave_bootargs 'mem=96M console=ttyAMA0,115200'
sa
注意:
a)bootargs、bootcmd是主arm启动相关参数;slave_autostart、slave_bootcmd、slave_bootargs是从arm启动相关参数;
b)slave_autostart参数:从arm启动开关。只有在此参数被设置为1时,slave_bootcmd和slave_bootargs参数才生效;
如果只启动单cpu,即主arm,那么只需要设置slave_autostart为0,同时设置bootargs和bootcmd即可;
c)从arm的uboot环境变量默认被存储在从arm的uboot下载地址开始,512Kbyte偏移处,且环境变量占用256Kbyte空间;
所以从arm的Uboot的大小不能超出512Kbyte,否则,环境变量会将uboot内容覆盖;
以上面启动参数为例:环境变量会被存储在起始地址:0x81080000=(0x81000000+80000)处;
d)从文件系统类型为"cramfs-initrd-img"类型,相对于常见的jffs2,有如下约束:
d.1)从文件系统在uboot引导内核前,已经被预先copy到启动地址空间中,即文件系统启动空间不能与从uboot
下载地址空间重叠,同时不与从uboot运行地址空间重叠;
d.2)在内核启动过程中,从文件系统启动占用的内存空间必须被内核管理的内存空间覆盖,否则内核可能无法识别超出地址;
d.3)文件系统的启动地址修改在mkimg.rootfs脚本中;
d.4)请区分下载地址和启动地址的差异;
e)slave_bootcmd命令中,bootm命令需要紧跟三个地址参数,依次为uboot、kernel、fs的下载地址,且顺序不能改变;
f)默认参数如下:
f.1)slave_uboot下载地址:0x81000000
f.2)slave_kernel下载地址:0x82000000
f.3)slave_fs下载地址:0x83000000
f.4)slave_variable(环境变量):0x81080000
f.5)slave_fs启动地址:0x81100000(mkimg.rootfs脚本中设置;

4、烧写Uclibc映像文件到NAND Flash。(以占用32M NAND Flash为例)
1)地址空间说明(其中,m表示master arm;s表示slave arm)
| 1M | 4M | 13M | 1M | 4M | 6M |
|---------------|---------------|---------------|---------------|---------------|---------------|
| b

oot(m) | kernel(m) | rootfs(m) | boot(s) | kernel(s) | rootfs(s) |

以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写主u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 master/image_uclibc/u-boot-hi3536.bin
nand erase 0x0 0x100000;nand write 0x42000000 0x0 0x100000

3)烧写主内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 master/image_uclibc/uImage_hi3536
nand erase 0x100000 0x400000;nand write 0x42000000 0x100000 0x400000

4)烧写主文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 master/image_uclibc/rootfs_hi3536_2k_4bit.yaffs2
nand erase 0x500000 0xd00000;nand write.yaffs 0x42000000 0x500000 0xc47400(实际的文件系统大小)

5)烧写从u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 slave/image_uclibc/u-boot-hi3536.bin
nand erase 0x1200000 0x100000;nand write 0x42000000 0x1200000 0x100000

6)烧写从内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 slave/image_uclibc/uImage_hi3536
nand erase 0x1300000 0x400000;nand write 0x42000000 0x1300000 0x400000

7)烧写从文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 slave/image_uclibc/rootfs-SLV_FULL_REL.cramfs.initrd.img
nand erase 0x1700000 0x600000;nand write 0x42000000 0x1700000 0x600000

8)设置启动参数
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),13M(rootfs)'
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
setenv slave_autostart 1
setenv slave_bootcmd 'nand read 0x81000000 0x1200000 0x80000;nand read 0x82000000 0x1300000 0x400000;nand read 0x83000000 0x1700000 0x600000;bootm 0x81000000 0x82000000 0x83000000'
setenv slave_bootargs 'mem=96M console=ttyAMA0,115200'
sa
5、烧写Glibc映像文件到SPI Flash
以32M SPI Flash为例。
1)地址空间说明(其中,m表示master arm;s表示slave arm)
| 1M | 4M | 14M | 1M | 4M | 6M |
|---------------|---------------|---------------|---------------|---------------|---------------|
| boot(m) | kernel(m) | rootfs(m) | boot(s) | kernel(s) | rootfs(s) |

以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写主u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 master/image_glibc/u-boot-hi3536.bin
sf probe 0
sf erase 0x0 0x100000
sf write 0x42000000 0x0 0x100000
reset
3)烧写主内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 master/image_glibc/uImage_hi3536

sf probe 0
sf erase 0x100000 0x400000
sf write 0x42000000 0x100000 0x400000
4)烧写主文件系统
mw.b 0x42000000 0xff 0xe00000
tftp 0x42000000 master/image_glibc/rootfs_hi3536_64k.jffs2
sf probe 0
sf erase 0x500000 0xe00000
sf write 0x42000000 0x500000 0xe00000
5)烧写从u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 slave/image_glibc/u-boot-hi3536.bin
sf probe 0
sf erase 0x1300000 0x100000
sf write 0x42000000 0x1300000 0x100000
6)烧写从内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 slave/image_glibc/uImage_hi3536
sf probe 0
sf erase 0x1400000 0x400000
sf write 0x42000000 0x1400000 0x400000
7)烧写从文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 slave/image_glibc/rootfs-SLV_FULL_REL.cramfs.initrd.img
sf probe 0
sf erase 0x1800000 0x600000
sf write 0x42000000 0x1800000 0x600000
8)设置启动参数
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),14M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000'
setenv slave_autostart 1
setenv slave_bootcmd 'sf probe 0;sf read 0x81000000 0x1300000 0x80000;sf read 0x82000000 0x1400000 0x400000;sf read 0x83000000 0x1800000 0x600000;bootm 0x81000000 0x82000000 0x83000000'
setenv slave_bootargs 'mem=96M console=ttyAMA0,115200'
sa

6、烧写Glibc映像文件到NAND Flash
只占用64M NAND Flash为例。
1)地址空间说明(其中,m表示master arm;s表示slave arm)
| 1M | 4M | 32M | 1M | 4M | 6M |
|---------------|---------------|---------------|---------------|---------------|---------------|
| boot(m) | kernel(m) | rootfs(m) | boot(s) | kernel(s) | rootfs(s) |

以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写主u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 master/image_glibc/u-boot-hi3536.bin
nand erase 0x0 0x100000;nand write 0x42000000 0x0 0x100000

3)烧写主内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 master/image_glibc/uImage_hi3536
nand erase 0x100000 0x400000;nand write 0x42000000 0x100000 0x400000

4)烧写主文件系统
mw.b 0x42000000 0xff 0x2000000
tftp 0x42000000 master/image_glibc/rootfs_hi3536_2k_4bit.yaffs2
nand erase 0x500000 0x2000000;nand write.yaffs 0x42000000 0x500000 0x1a58e40;(实际的文件系统大小)

5)烧写从u-boot
mw.b 0x42000000 0xff 0x100000
tftp 0x42000000 slave/image_glibc/u-boot-hi3536.bin
nand erase 0x2500000 0x100000;nand write 0x42000000 0x2500000 0x1000

00

6)烧写从内核
mw.b 0x42000000 0xff 0x400000
tftp 0x42000000 slave/image_glibc/uImage_hi3536
nand erase 0x2600000 0x400000;nand write 0x42000000 0x2600000 0x400000

7)烧写从文件系统
mw.b 0x42000000 0xff 0x600000
tftp 0x42000000 slave/image_glibc/rootfs-SLV_FULL_REL.cramfs.initrd.img
nand erase 0x2a00000 0x600000;nand write 0x42000000 0x2a00000 0x600000

8)设置启动参数
setenv bootargs 'mem=128M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),32M(rootfs)'
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
setenv slave_autostart 1
setenv slave_bootcmd 'nand read 0x81000000 0x2500000 0x80000;nand read 0x82000000 0x2600000 0x400000;nand read 0x83000000 0x2a00000 0x600000;bootm 0x81000000 0x82000000 0x83000000'
setenv slave_bootargs 'mem=96M console=ttyAMA0,115200'
sa

7、启动新系统
reset # 重启进入新系统。

第三章、开发前环境准备

1、管脚复用
与媒体业务相关的管脚复用都在mpp/ko目录下的sh脚本中配置,如果与实际情况不符请直接修改,此脚本被load3536调用,在加载mpp内核模块之前被执行;
mpp之外的其他管脚复用统一在uboot中配置,详细说明请参见《U-boot移植应用开发指南》。

第四章、使用SDK和DEMO板进行开发
1、开启Linux下的网络
# 设置网络
ifconfig eth0 hw ether xx:xx:xx:xx:xx:xx;
ifconfig eth0 xx.xx.xx.xx netmask xx.xx.xx.xx;
route add default gw xx.xx.xx.xx
# 然后ping一下其他机器,如无意外,网络将能正常工作。

2、使用NFS文件系统进行开发
# 在开发阶段,推荐使用NFS作为开发环境,可以省去重新制作和烧写根文件系统的工作。
# 挂载NFS文件系统的操作命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 xx.xx.xx.xx:/your-nfs-path /mnt
# 然后就可以在/mnt目录下访问服务器上的文件,并进行开发工作。

3、开启telnet服务
# 网络正常后,运行命令 telnetd& 就可以启动单板telnet服务,然后才能使用telnet登录到单板。

4、运行MPP业务
# 在单板linux系统下,进入mpp/ko目录,加载KO
cd mpp/ko
./load3536 -i

# 进入各sample目录下执行相应样例程序(sample需要先在服务器上成功编译过)
cd mpp/sample/vo
./sample_vo 0

第五章 地址空间分配与使用
1、DDR内存管理
1)所有DDR内存中,一部分由操作系统管理,称为OS内存;另一部分由MMZ模块管理,供媒体业务单独使用,称为MMZ内存。
2)mpp双CPU版本,同时运行两套OS,分别占用独立的物理内存空间,且分别配套两套MMZ内存;
mpp单cpu版本,只有一套OS,配套一套MMZ空间

,独占所有的物理内存;
3)主arm运行OS内存起始地址为0x40000000,内存大小可通过bootargs进行配置,例如第二章中的setenv bootargs 'mem=128M ... ',表示分配给操作系统内存为128M,您可以根据实际情况进行调整。
4)从arm运行OS默认内存起始地址为0x80000000,内存大小可通过slave_bootargs进行配置。
5)MMZ内存由MMZ内核模块管理(mpp/ko_hi35xx目录下的mmz.ko),加载mmz模块时,通过模块参数指定其起始地址及大小,您可以通过修改mpp/ko目录下load3536脚本中的mmz模块参数,来修改其起始地址和总大小。
6)请注意MMZ内存地址范围不能与OS内存重叠;主ARM运行占用内存空间和从ARM运行占用内存空间不能重叠;

2、Demo 板DDR内存管理示意
以容量为2GBytes的Demo板的DDR内存为例,以下为根据本文档和SDK默认配置得到的内存管理示意图:

a, 双CPU demo板uClibc版本的内存分配(普通版)
DDR:

-----|-------| 0x40000000 # Memory managed by master OS.
128M | OS |
-----|-------| 0x48000000 # Memory managed by master MMZ block anonymous.
384M | MMZ |
-----|-------| 0x60000000 # unused.
512M | unused|
-----|-------| 0x80000000 # Memory managed by slave OS.
96M | OS |
-----|-------| 0x86000000 # Memory managed by slave MMZ block anonymous..
928M | MMZ |
-----|-------| 0xc0000000 # End of DDR.

# 主mmz加载在脚本 mpp_master/ko/load3536 中自动执行,无需用户操作。
# 从mmz加载在脚本 mpp_slave/ko/load3536 中自动执行,无需用户操作。

b, 单CPU demo板uClibc版本的内存分配(普通版)
DDR:

-----|-------| 0x40000000 # Memory managed by OS.
128M | OS |
-----|-------| 0x48000000 # Memory managed by MMZ block anonymous.
896M | MMZ |
-----|-------| 0x80000000 # End of DDR.

# 主mmz加载在脚本 mpp_master/ko/load3536 中自动执行,无需用户操作。
# 从mmz加载在脚本 mpp_slave/ko/load3536 中自动执行,无需用户操作。

3、flash地址空间(暂无验证nand flash,下图以spi flash为例,glibc版本,请对应修改起始地址和长度即可)

a, 双CPU demo板uClibc版本的flash空间分配
-----|-------| 0x00000000
1M |master |


|boot |
-----|-------| 0x00100000
4M |master |
|kernel |
-----|-------| 0x00500000
6M |mster |
|fs |
-----|-------| 0x00b00000
1M |slave |
|boot |
-----|-------| 0x0c000000
4M |slave |
|kernel |
-----|-------| 0x01000000
8 M |slave |
|fs |
-----|-------| 0x01800000

b, 单CPU demo板uClibc版本的flash空间分配
-----|-------| 0x00000000
1M |boot |
-----|-------| 0x00100000
4M |kernel |
-----|-------| 0x00500000
6M |fs |
-----|-------| 0x00b00000

第六章 uboot、kernel、fs地址偏移修改

以uboot、kernel、fs的运行起始地址从0x60000000修改为0x80000000为例,需要按如下步骤进行修改:
1、uboot
a、include/configs/hi3536.h: #define CFG_DDR_SIZE (512*1024*1024) ----> (1024*1024*1024)
b、include/configs/hi3536_slave.h:
#define DDR_MEM_BASE 0x60000000 ----> 0x80000000
#define CONFIG_BOOTCOMMAND "bootm 0x62000000 0x63000000" ----> "bootm 0x82000000 0x83000000"
#define CFG_DDR_SIZE (512*1024*1024) ----> (1024*1024*1024)
#define CONFIG_DDR_CHARGE_SHIFT 28
#define CONFIG_DDR_START_ADDR 0x6 ----> 0x8
c、board/hi3536/config.mk
TEXT_BASE = 0x60c00000 ----> 0x80c00000

2、kernel:

a、arch/arm/mach-hi3536slave/Makefile.boot:

zreladdr-y := 0x60008000 ----> 0x80008000

b、arch/arm/mach-hi3536slave/include/mach/memory.h
#define PLAT_PHYS_OFFSET (0x60000000) ----> (0x80000000)

3、fs
修改slave_fs启动地址:0x611000000 -> 0x81100000(mkimg.rootfs脚本中设置)

第七章 FAQ
Q1: 如何制作从arm文件系统img文件?
A1: 参考mpp_mkfs.sh脚本

mkimg脚本解释:
./mkimg.rootfs rootfs-SLV_FULL_REL ./ rootfs-SLV_FULL_REL cramfs-initrd-img;
(1) (2) (3) (4)
(1)要制作的文件系统名
(2)img文件保存路径
(3)生成的img文件名
(4)使用哪种文件系统

Q2: 什么时候,需要制作从arm文件系统img文件?
A2: 一般情况下,从arm是不需要您操作它的。
只有当你希望在从arm运行自己的业务,或修改从arm MMZ时,才需要修改从arm文件系统,并重新制作img文件。

1、将你的从arm业务程序放到从arm文件系统中。
2、修改从arm自动启动脚本。使你的从arm业务程序能自动执行。
rootfs-SLV_FULL_REL/root/.profile
3、修改从arm mmz配置脚本。注意,请仅修改 mmz 加载参数,其他不变。
4、重新制作从arm文件系统img文件。
5、将img文件烧写到flash中,请依照第三章介绍的烧写从arm文件系统的方法。

Q3: 更改从arm业务后,每次都烧写flash,太麻烦,有没有更好的办法?
A3: 当然

有。
# 在主boot中配置bootcmd,可每次重启单板时自动从TFTP服务器下载并启动从kernel和rootfs
setenv slave_bootcmd 'sf probe 0;sf read 0x81000000 0xb00000 0x100000;tftp 0x82000000 uImage_hi3536;tftp 0x83000000 rootfs-SLV_FULL_REL.cramfs.initrd.img;bootm 0x81000000 0x82000000 0x83000000'

Q4: 如何调整内存分配?
A4: 调整主从arm内存区间分配,大体需要完成如下步骤:
1、修改主从arm的uboot、kernel运行地址空间,以及内核管理的物理内存空间分配,编译生成镜像;
2、修改主从arm的文件系统的运行地址空间,制作文件系统镜像;
3、修改主从arm的启动参数,适配从arm小系统的启动;
4、修改主从mpp系统的管理的MMZ地址空间;

第八章 单核使用
以上内容,讲的是如何在双核上运行mpp业务。本章重点介绍如何在单核上运行mpp业务。
1、mpp业务目录说明
# 发布包根目录下,有三个mpp相关目录。
mpp_single:单CPU的工作目录。在单CPU上运行mpp业务时,使用此目录。
mpp_master:双CPU的主arm工作目录。在双CPU上运行mpp业务时,使用此目录。
mpp_slave :双CPU的从arm工作目录。
2、osdrv镜像目录说明
发布包包含基于demo的uboot,kernel,fs镜像,镜像目录统一存在package目录下,具体目录介绍,请参考本文档的第一章,第六小节;
osdrv_single: 单cpu的osdrv系统镜像。运行单cpu版本时,烧写本目录下的镜像;
osdrv_master: 双cpu版本,主arm运行的osdrv系统镜像。运行双cpu版本时,主arm需烧写本目录下的镜像;
osdrv_single: 双cpu版本,从arm运行的osdrv系统镜像。运行双cpu版本时,从arm需烧写本目录下的镜像;
3、在单CPU上运行mpp业务的过程
# 此处将单双CPU操作过程放在一起,便于用户比较。
+-----+---------------------+------------------------------------+--------------------------------------+
|序号 | 操作过程 | 单CPU | 双CPU |
+-----+---------------------+------------------------------------+--------------------------------------+
|(1) | 烧写FLASH与单板启动 | 单 双 CPU 一 致 | |
+-----+---------------------+------------------------------------+--------------------------------------+
|(2) | 加载ko | 加载mpp_single/ko/下的ko | 加载mpp_master/ko/下的ko |
+-----+---------------------+------------------------------------+--------------------------------------+
|(3) | mpi 接口使用 | 单 双 CPU 一 致 | |
+-----+---------------------+------------------------------------+--------------------------------------+
|(4) | 应用程序编译 |

使用mpp_single/lib/下的库文件 | 使用mpp_master/lib/下的库文件 |
+-----+-------------------------------------------------------------------------------------------------+

# 从上表可以看出,单双核操作过程很相似。
# 用户只需注意操作过程(2)、(4)的区别即可。特别提醒,(4)一定不能出错,否则会造成奇怪的问题。

相关主题