首次安装SDK (注意红帽子和Ubuntu的脚本不一样 ,我在这个上面吃了点苦头,要看清楚,不然编译会出错,红帽子:#!/bin/sh Ubunt : #!/bin/bash)
1、Hi3511 SDK包位置
在"Hi3511 DMS V100R001C01B123/soft/Hi3511_VSSDK_V1.1.2.3"目录下,您可以看到
一个 Hi3511_VSSDK_V1.1.2.3.tgz 的文件,该文件就是SDK的Hi3511的软件开发包。
2、解压缩SDK包
在linux服务器上(或者一台装有linux的PC上,主流的linux发行版本均可以),
使用命令:tar -zxf Hi3511_VSSDK_V1.1.2.3.tgz ,解压缩该文件,可以得到一个Hi3511_VSSDK_V1.1.2.3目录。
3、在linux服务器上安装交叉编译器
1) 进入tools/toolchains,运行chmod +x cross.install,然后运行./cross.install即可,注意,需要有sudo权限或者root权限
2)执行vim /etc/profile
添加export PATH="/opt/hisi-linux/x86-arm/gcc-3.4.3-uClibc-0.9.28/usr/bin:$PATH"
3) 执行 source /etc/profile, 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆也可。
4、展开SDK包的其他内容(注意!这一步不可以省略)
返回SDK目录,运行./sdk.unpack将会展开SDK包打包压缩存放的其他内容,请按照提示完成操作。这步操作可能需要几分钟。
如果您需要通过WINDOWS中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
5、SDK目录介绍
Hi3511_VSSSDK_VX.X.X.X 目录结构如下:
|-- pub
| |-- images
# 可供FLASH烧写的映像文件,如内核、jffs2文件系统
| |-- include
# 应用程序需要的头文件
| |-- kbuild
# 内核头文件,内核模块使用该目录来进行编译
| |-- lib
# 应用程序需要的库文件
| |-- resource
# 构成rootfs的各种组件,一般不需要关心
| |-- standee
# 各模块的原始安装文件,如需要mmz.ko就可以在这里找到,同时也包含组件所需的调试信息
| `-- tarball
# SDK各模块的打包备份文件
|-- rootfs
# 根文件系统,可以直接作为NFS
|-- scripts
# 存放相关脚本的目录
|-- sdk.cleanup
# SDK清理脚本
|-- sdk.unpack
# SDK展开脚本
|-- source
# 放置所有源代码的目录
| |-- app
# 应用程序类源代码
| |-- drv
# 驱动类源代码
| |-- lib
# Lib类源代码
| `-- os
# OS相关源代码,如内核
|-- tools
# 工具类
| |-- bin
# 可执行程序,如mkfs.cramfs
| `-- toolchains
# 交叉工具链,展开SDK时已自动安装
|
`---mpp # Hi3511的媒体处理平台发布的头文件、库以及内核模块
|-- lib.rel # 音频库,MPP发布的release版本库,音频库
|-- lib.dbg # MPP发布的debug版本库,音频库
|-- lib.lessrel # MPP发布的less release版本库,音频库
|-- ko.rel # MPP发布的发布的release内核模块,包括FB,TDE
|-- ko.dbg # MPP发布的发布的debug内核模块,包括FB,TDE
|-- ko.lessrel # MPP发布的发布的less release内核模块,包括FB,TDE
|-- include # MPP发布的发布的对外头文件,包括FB,TDE
`-- sample # MPP的sample代码,进入各个子目录,可以直接编译运行。
第三章、安装、升级Hi3511DEMO板开发开发环境
如果您使用的Hi3511的DEMO板,可以按照一下步骤安装u-boot,内核以及文件系统,以下步骤均使用网络来更新。
通常,您拿到的单板中已经有u-boot,如果没有的话,就需要使用仿真器进行烧写。
具体操作步骤,请参见 DMS\software\Doc下的《Hi3511 Linux 开发环境用户指南》和 DMS\application notes\下的《Hi3511 U-boot移植应用 Application Notes》。
以下操作假设您的单板已经有了u-boot。
1、配置tftp服务器
可以使用任意的tftp服务器,将 pub/images下的文件拷贝到tftp服务器的目录下。
2、更新u-boot的环境变量
单板上电后,敲任意键,进入u-boot。先设置好serverip(即tftp服务器的ip)、ipaddr(单板ip)和ethaddr(单板的MAC地址)。
具体的使用方法请参见《Hi3511 Linux 开发环境用户指南》。
3、更新单板u-boot,
如果不需要更新u-boot,请直接到下节。
protect off 0x34000000 +0x20000
erase 0x34000000 +0x20000
tftp 0x34000000 u-boot-hi3511v100Dmeb_144MHZ.bin
注意:
新的boot波特率默认为115200,因此重启单板之前请设置串口波特率为115200。
新的boot在启动时对所有内存进行了清零操作,这在开发过程中有助于发现某些BUG,但导致单板复位后需要过几秒钟才出现打印信息,请稍微给点耐心等待一下。
6、更新内核
如果不需要更新内核,请直接到下节。
erase 0x34100000 +0x100000
tftp 0x34100000 kernel-hi3511v100dmeb_full_release.img
7、更新文件系统
erase 0x34100000 +0x100000
erase 0x34200000 +0x1000000
tftp 0x34100000 kernel-hi3511v100dmeb_full_debug.img
tftp 0x34200000 rootfs-FULL_DBG-Flash.jffs2
8、启动新系统
在u-boot下设置启动参数:(为操作系统分配32MB的内存,并使用jffs2的文件系统,文件系统的大小为14MB)
setenv bootcmd 'bootm 0x34100000'
setenv bootargs 'mem=32M console=ttyAMA0,115200 root=1f01 rootfstype=jffs2 mtdparts=phys_mapped_flash:2M(boot),14M(rootfs)'
saveenv
然后重启单板即可,第一次进入系统时,挂载文件系统的速度可能比较慢,请耐心等待。
9、使用新系统
切记,不可随意在Linux下复位单板或断电,因为这样可能会损坏文件系统,导致文件丢失、损坏以致系统无法启动!
每次重启单板请使用reboot;同理,单板断电时请先运行halt,待到挂死后再断电,这样可以有效地保护FLASH文件系统,也可以避免不必要的麻烦。
第四章、使用SDK和DEMO板进行开发
1、分配和使用保留内存
DEMO板上的内存大小为256MB,对应物理地址从0xE0000000 到 0xEFFFFFFF。 通常,需要为操作系统留32MB的空间,例如在第三章第8步中配置。
SDK中提供了一个专门管理保留操作系统以外内存的内核模块mmz,可以指定该模块管理的内存地址空间。例如
modprobe mmz mmz=ddr,0,0xE2000000,64M
mmz管理的内存起始地址为 0xE2000000,大小为64MB。从0xE0000000到0xE2000000的32MB空间是留给操作系统的。
2、开启Linux下的网络
执行命令加载网络驱动:
modprobe libphy;
modprobe hiether rv_strat=2 rv_qcnt=512 hwq_recv=32 hwq_xmit=32 flimit=256;
# 设置网关
ifconfig eth0 hw ether 00:10:85:xx:xx:xx;ifconfig eth0 192.168.0.15 netmask 255.255.254.0;route add default gw 192.168.0.1
然后ping一下其他机器,如无意外,网络将能正常工作。
可以将以上命令写到脚本里面,每次启动时运行一下即可。
如果收包性能不足,目前确认通过增加协议栈缓存即可,可以按如下操作来调整收包缓存默认值和最大值
echo "512000" > /proc/sys/net/core/rmem_default //500KB默认缓存
echo "1024000" > /proc/sys/net/core/rmem_max //1000KB最大缓存
在内存紧张的情况下,如果再进行繁重的网络访问,有可能会报出缺页异常。此时通过限制系统将内存用于文件系统cache的数值,
可以提高网络突发情况下的处理能力。可以使用下面的命令将min_free_kbytes设置为2MB可用提高网络突发情况下的可用内存数量
echo 2000 > /proc/sys/vm/min_free_kbytes
3、使用NFS
在开发阶段,推荐使用NFS作为开发环境。您开发的代码都可以放在NFS服务器上,通过NFS可以直接在DEMO板上访问到NFS服务器。
执行命令加载NFS驱动:
modprobe nfs
然后挂载NFS文件系统:
mount -t nfs -o nolock 10.85.xxx.xxx:/your-nfs-path /mnt
然后就可以在/mnt目录下看到你服务器上的文件了,当然,如果你挂载的NFS目录就是SDK下面的rootfs,那么你可以:
chroot /mnt
然后就可以在新的根目录下工作了。
4、开启telnet服务
网络正常后,运行命令 telnetd& 就可以启动单板telnet服务,然后才能telnet到单板。
5、使用硬盘FAT32
执行命令加载FAT驱动:
modprobe fat
modprobe vfat
modprobe nls_iso8859-1
modprobe nls_cp437
modprobe nls_utf8
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/xx/../xx/hdaX /mnt
然后就可以在/mnt目录下看到文件了
当然,你也可以把以上操作都放到脚本里面,并让它在linux启动的时候自动执行。