海思3531D环境搭建
前面工作中,有一段时间,再做海思相关的项目,hisi3531D是一款广泛应用在音视频领域的芯片,其解码的速度和效率,被业内称赞。本文主要是讲解海思3531D在linux系统环境搭建,包括u-boot、linux内核、根文件系统以及少写,以及如何实现网络环境开发。
1.内核编译
内核源代码中除了系统运行所必须的核心代码之外,还包含了各种各样的外部设备驱动、文件系统,以及一些跟某种特性相关的代码。而这些代码,在我们的业务环境中,并不都是必须的。我们将这些不必要的内容,通过配置选项进行筛选。进入内核源代码目录,运行如下命令,打开内核配置菜单,并对菜单上的选项进行配置:
cp arch/arm/configs/hi35xx_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiXXX-linux- menuconfig
编译内核时需要在 make 后添加两个参数:ARCH=arm CROSS_COMPILE=arm-hisiXXXlinux-,其中 CROSS_COMPILE 表示工具链。文档中统一以 CROSS_COMPILE=arm-hisiXXXlinux-来表示两种情况。
Hi35xx_V100R001C01SPCxxx 对应 uclibc,使用 uclibc 工具链时,CROSS_COMPILE= armhisiv5x0-linux-。
Hi35xx_V100R001C02SPCxxx 对应 glibc,使用 glibc 工具链时,CROSS_COMPILE=armhisiv6x0-linux-。
2.首次安装Hi3531D的SDK
在"Hi3531DV100_V100R001***/01.software/board"目录下,找到一个Hi3531DV100_SDK_Vx.x.x.x.tgz 的文件,该文件就是Hi3531DV100的软件开发包。使用命令:tar -zxf Hi3531D_SDK_Vx.x.x.x.tgz ,解压缩该文件,可以得到一个Hi3531D_SDK_Vx.x.x.x目录。
3.展开SDK包内容
返回Hi3531D_SDK_Vx.x.x.x目录,运行./sdk.unpack (请用root或sudo权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。如果您需要通过WINDOWS操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。
4.在linux服务器上安装交叉编译器
安装glibc交叉编译器(注意,需要有sudo权限或者root权限):获取arm-hisiv600-linux.tgz文件,使用命令:tar -zxf arm-hisiv600-linux.tgz 解压文件,进入arm-hisiv600-linux 目录,运行chmod +x arm-hisiv600-linux.install,然后运行./arm-hisiv600-linux.install 即可。执行source /etc/profile , 安装交叉编译器的脚本配置的环境变量就可以生效了,或者请重新登陆。
4.编译整个osdrv目录
下载linux-3.18.20.tar.gz (或者linux-3.18.20.tar.xz)到osdrv/opensource/kernel目录下
make OSDRV_CROSS=arm-hisiv500-linux PCI_MODE=XXX FLASH_TYPE=XXX all
清除整个osdrv目录的编译文件:make OSDRV_CROSS=arm-hisiv500-linux clean
彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:make OSDRV_CROSS=arm-hisiv500-linux distclean
单独编译kernel:
注意:单独编译内核之前请先阅读osdrv/opensource/kernel下的readme_cn.txt说明。也可以参考步骤1
待进入内核源代码目录后,执行以下操作
cp arch/arm/configs/hi3531d_xxx_defconfig .config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
如果编译过程中出现错误,按顺序执行以下命令:
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- clean
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- menuconfig
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- uImage
6.编译uboot
待进入boot源代码目录后,执行以下操作
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux- hi3531d_xxx_config
make ARCH=arm CROSS_COMPILE=arm-hisiv500-linux-
将生成的 u-boot.bin 复制到 osdrv/tools/pc/uboot_tools/ 目录./mkboot.sh reg_info_hi3531d.bin u-boot_hi3531d.bin。将生成可用的 u-boot_hi3531d.bin 镜像文件。
7.制作文件系统镜像
在osdrv/pub/中有已经编译好的文件系统,因此无需再重复编译文件系统,只需要根据单板上flash的规格型号制作文件系统镜像即可。SPI Nor Flash使用jffs2格式的镜像,制作jffs2镜像时,需要用到SPI NorFlash的块大小。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkfs.jffs2工具,根据打印信息填写相关参数。下面以块大小为64KB为例:
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2
Nand Flash和SPI Nand Flash使用yaffs2格式的镜像,制作yaffs2镜像时,需要用到Nand Flash的pagesize和ecc。这些信息会在uboot启动时会打印出来。建议使用时先直接运行mkyaffs2image工具,根据打印信息填写相关参数。示例:
2KB pagesize、4bit ecc命令格式为:如果制作Nand的镜像,则使用mkyaffs2image610工具:
osdrv/pub/bin/pc/mkyaffs2image610 osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
如果制作SPI Nand的镜像,则使用mkyaffs2image100工具:
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_uclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
或者
osdrv/pub/bin/pc/mkyaffs2image100 osdrv/pub/rootfs_gclibc osdrv/pub/rootfs_uclibc_2k_4bit.yaffs2 1 2
说明:
当FLASH_TYPE=spi时,生成的mkyaffs2image工具是mkyaffs2image100;
当FLASH_TYPE=nand时,生成的mkyaffs2image工具是mkyaffs2image610;
Nand Flash使用UBI文件系统,在osdrv/tools/pc/ubi_sh下提供mkubiimg.sh工具用于制作UBI文件系统,需要用到Nand
Flash的pagesize、blocksize和UBIFS分区的大小。
以2KB pagesize, 128KB blocksize和UBI文件系统分区大小32MB为例:
mkubiimg.sh hi3531d 2k 128k osdrv/pub/rootfs 32M osdrv/pub/bin/pc
osdrv/pub/rootfs是根文件系统文件夹目录
osdrv/pub/bin/pc是制作UBI文件系统镜像的工具目录
生成的rootfs_hi3531d_2k_128k_32M.ubifs,就是最终用于烧写的UBI文件系统镜像。
5.安装、升级DEMO板开发环境
Hi3531DV100的DEMO板,可以按照以下操作烧写uboot、内核以及文件系统,以下操作均使用网络来更新:
1、如果您拿到的单板没有uboot的话,就需要使用01.software/pc/HiTool进行烧写。更详细的烧写操作步骤及说明,请参见01.software\pc\HiTool目录下的《HiBurn 工具使用指南》。
2、如果您拿到的单板中已经有uboot,可以按照以下步骤使用网口烧写uboot、kernel及rootfs到Flash中。DEMO板默认为从SPI Flash启动。
6.配置tftp服务器
可以使用任意的tftp服务器,将package/image_glibc下的相关文件拷贝到tftp服务器目录下。
7.参数配置
# 单板上电后,敲任意键进入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,确保网络畅通。
8.烧写镜像文件到SPI Nor Flash
以16M SPI Nor Flash为例。
1)地址空间说明
| 1M | 4M | 11M |
|---------------|---------------|---------------|
| boot | kernel | rootfs |
2)烧写u-boot
sf probe 0
mw.b 42000000 ff 100000
tftp 42000000 u-boot-hi3531d.bin
sf probe 0
sf erase 0 100000
sf write 42000000 0 100000
reset
3)烧写内核
mw.b 42000000 ff 400000
tftp 42000000 uImage_hi3531d
sf probe 0
sf erase 100000 400000
sf write 42000000 100000 400000
4)烧写文件系统
mw.b 42000000 ff b00000
tftp 42000000 rootfs_hi3531d_64k.jffs2
sf probe 0
sf erase 500000 b00000
sf write 42000000 500000 b00000
5)设置启动参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs)'
setenv bootcmd 'sf probe 0;sf read 0x42000000 0x100000 0x400000;bootm 0x42000000'
sa
9.如果是NAND Flash则使用如下方法
以64M NAND Flash为例。
1)地址空间说明
| 1M | 4M | 32M | 27M |
|---------------|---------------|---------------|------------------------|
| boot | kernel | rootfs | other |
以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
2)烧写u-boot
mw.b 42000000 ff 100000
tftp 42000000 u-boot-hi3531d.bin
nand erase 0 100000
nand write 42000000 0 100000
reset
3)烧写内核
mw.b 42000000 ff 400000
tftp 42000000 uImage_hi3531d
nand erase 100000 400000
nand write 42000000 100000 400000
4)烧写文件系统
mw.b 42000000 ff 2000000
tftp 42000000 rootfs_hi3531d_2k_4bit.yaffs2
nand erase 500000 2000000
nand write.yaffs 42000000 500000 96d200 #注意:96d200为rootfs文件实际大小(16进制)
5)设置启动参数
setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),4M(kernel),32M(rootfs),27M(test)'
setenv bootcmd 'nand read 0x42000000 0x100000 0x400000;bootm 0x42000000'
sa
10.启动新系统
reset
11.开启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一下其他机器,如无意外,网络将能正常工作。
12.使用NFS文件系统进行开发
# 在开发阶段,推荐使用NFS作为开发环境,可以省去重新制作和烧写根文件系统的工作。挂载NFS文件系统的操作命令:
mount -t nfs -o nolock -o tcp -o rsize=32768,wsize=32768 192.168.129.70:/home/qin/nfs /mnt
备注:
关于nfs配置参考博客https://blog.csdn.net/s030702614/article/details/4662718
13.进入解码目录测试
sample_vdec测试
支持H264、H265、VDH MP4、JPEG PIP
具有暂停、播放、单帧播放、”a”表示增加码率、d表示”减小”码率;“q”表示具有查询功能、查询解码的帧数等;
H264和H265,MP4表示都是支持1920X1080。JPEG deconding表示有3通道,解码三路图片,参数如下:
显示视频也需要有3路输入,3通道,3路输出。解码也支持PIP,表示画中画,hisi提供的是一共三个图层,一张大图,一张缩放图,缩放图里再叠加一张小图。编码通道需要开启输入才能去编码;否则会有如下的打印信息;
Region可以支持如下的这些功能:
支持画线和图形叠加;
内存贩子的小秘密! AMD专用条与ECC到底是什么?
大家好,我是小匠。我们都知道,内存有许多种类,我今天就来给大家带来DDR3L、AMD专用内存以及ECC内存的区别科普。如果还想听听其他内存种类科普,可以评论区留言。
第一,DDR3L内存
这种内存大多是出现在低电压笔记本上,往细了说应该是专注于特别省电,特别注重续航的笔记本,大多是二合一或者超薄本,只有少数的台式机使用这种内存。它与普通DDR3内存有以下区别:
1.工作电压不同:标准的DDR3内存的工作电压为1.5V,DDR3L电压为1.35V
2.功耗有所区别:DDR3内存采用1.5V工作电压,而DDR3L内存普遍采用1.35V电压,DDR3L低压内存大多比DDR3标压内存节能2W左右。
3.性能有所区别:DDR3标压内存相比于DDR3L内存,性能强了大约10~15%左右。
4.价格区别,DDR3L内存要比标压的DDR3内存便宜一些。
对于使用标压内存的笔记本,其实也兼容低压内存,只不过一般优先使用标压组合,不建议大家混合使用,以免出现我昨天文章说过的不兼容现象以及性能不良等问题。
第二,AMD专用条
顾名思义AMD专用条就是只能在AMD平台使用的一种内存,那为什么这种内存只有AMD才能使用呢?因为AMD专用条采用的是服务器内存条颗粒,服务器的内存条颗粒是4bit标准,而4bit标准的内存颗粒在国际标准规范中所定义的适用范围是服务器PC。
Intel产品依照国际标准的规范去设计,所以Intel的主机只能辨认:8bit*1bank,8bit*2bank,16bit*1bank。如果在英特尔CPU上使用以4bit颗粒规格所制作的内存条,是无法识别的。普通合格内存用的是8bit颗粒,一面8个颗粒,合计64bit,称为1rank。双面128bit,称为2rank。
而AMD专用内存条采用4bit颗粒,单面只有32bit,双面只有64bit,比正常的内存位宽少一半。内存对于整机的性能影响还是非常明显的,并且大容量对于玩家的游戏体验确实有明显的提升。但对于一般的普通玩家来讲,还是建议选择正规内存。
这种内存在英特尔的内存规范中不被认可,因此不能识别,或者只能够识别到一半容量。但经过造假者在内存EP-ROM(相当于主板的BIOS)里进行伪造和仿冒,能欺骗过AMD的内存控制器,是AMD误以为是128bit的正常内存,能识别容量,貌似也能正常工作,但容易出现内存位址溢出,造成死机蓝屏现象。
这种内存大多都便宜,但容易翻车,主要是内存的制作相对其他硬件比较简单,如果你是一个资深技术的话,换几个颗粒找个板子焊上去基本问题不大,更不用说华强北这一类以及一些专业小作坊了。他从哪里搞到的颗粒你根本不知道,所以稳定性就更不用说了。如果不是专业垃圾佬的话,请购买正规渠道内存。
第三,ECC内存
那么ECC内存又是什么呢?通俗来讲ECC内存=服务器专用内存,因为它能够实现错误检查和纠正技术(ECC),所以叫它ECC内存。一般多应用在服务器以及图形工作站上,这将使整个电脑系统在工作时更趋于安全稳定,ECC是“Error Checking and Correcting”(错误检查和纠正),目前是一谈到服务器内存,大家都一直强调要买ECC内存,认为ECC内存速度很快,其实是一种错误的认识。
ECC内存特色之处并不是因为它速度快(速度方面根本不关它事只与内存类型有关),而是因为他有特殊的纠错能力,使服务器保持稳定,ECC本身并不是一种内存型号,也不是一种内存专用技术,它是一种广泛应用于各种领域的计算机指令中,是一种指令纠错技术。
有一些说ECC内存比普通内存条便宜是错误的,ECC内存要比普通内存贵上一大截的,但二手的确实便宜一些。如果你不是要搭建服务器的话,我觉得没必要。原因也很简单,ECC内存价格更高,性能更差,因为要进行的运算更多,还有一点就是他不能和消费级主板兼容,最重要的ECC内存没有RGB!
以上就是就是给大家科普的你可能听说过或者正在使用的几种少见的内存种类,如果你正打算购买看到了的话,希望你能三思后行。如果各位还有什么想要了解的关于硬件的科普,也可以在下方的评论区给我留言,如果有关于电脑的问题可以私聊我帮帮你。码字辛苦,感谢大家的观看。
相关问答
dell工作站用什么操作系统最好,多谢-ZOL问答cheng7711418只要是支持的系统都可以使用,系统没有所谓的好坏,只是看看你的配置适合什么样的系统。比如这款工作站,支持Client:Microsoft®Windows®-W...
RECC内存与 ECC 内存的区别?RECC内存与ECC内存的主要区别在于它们解决的问题和应用的场景不同。RECC内存主要解决存储数据完整性和一致性问题,它能够检测和纠正单个bit的错误,而ECC内存则...
alittlebit和abitof的区别alittlebit后面加什么?abitof后面...[回答]1.abit与alittle都可作程度副词,表示"稍微、一点儿"的意思,修饰动词、形容词、比较级等,二者可以互换.例如:Willyoupleaseturndownth...
求教笔记本的酷睿i3的所有型号,包含所有的第一代二代三代,买...DE3q1ang一代Arrandale"(32nm)CPU支持:MMX,SSE,SSE2,SSE3,SSSE3,SSE4.1,SSE4.2,EIST,Intel64,...
recc内存和普通内存通用吗?ecc就是多了一片颗粒,可以通过ecc算法查出1bit错误,俗称u-dimm,recc的r是register,注册内存,各方面都要强于普通ecc条子,当然也要贵很多,现在的服务器板子...
ddr4 ddr5 区别体验?ddr5内存和ddr4区别对比:1.性能如果只看频率的话,相同容量下,4800MHz的DDR5内存条,性能是3200MHz的DDR4内存条的1.5倍,实际DDR5还有其他BUFF,所以最终是1.....
【英语写作求高手给一篇范文.1.有人认为读书要有选择2.有人认...[回答]HowtochoosebooksyourbookdiscussiongroupwillenjoyTherearemanydifferentwaystochooseboo...
LPDDR5又是一种怎么样的技术呢?感谢邀请LPDDR5又是一种怎么样的技术呢?题主问题的核心是LPDDR5是一种什么样的技术呢!在解释这个问题之前,其实我们需要知道,其实决定手机运行速度的关键因...
intel G4560,这款CPU怎么样?InternetG4560这款CPU怎么样?对于这颗处理器来说他本身的定位就是属于入门级CPU,主要就是针对企业办公和一些要求不高的用户群体,至于这颗处理器到底怎么样...
电脑开机如何直接进入虚拟机系统?1.安装一个vmware或virtualbox,前者性能强然而收费,后者性能略差但是免费。如果很在意性能又要免费,可以用vmwareworkstationplayer,个人免费,功能也够了...