行情
HOME
行情
正文内容
jffs2 nand 海思3531D环境搭建
发布时间 : 2024-11-24
作者 : 小编
访问数量 : 23
扫码分享至微信

海思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可以支持如下的这些功能:

支持画线和图形叠加;

uboot常用命令汇总

我们经常使用uboot命令,虽然资料光盘->常见问题目录有U-boot常用命令汇总文档,但从大家的反馈来看,并没有很多人注意到这个文档,所以把它挪到这里。如此全的uboot命令汇总,建议收藏。

注意:不同版本的uboot,它的命令有所不同,这里使用u-boot 1.1.6。

一、nandflash分区信息

OpenJTAG>mtdpart

device nand0 <nandflash0>, # parts = 4

#:name size offset

0: bootloader 0x00040000 0x00000000

1: params 0x00020000 0x00040000

2: kernel 0x00200000 0x00060000

3: root 0x0fba0000 0x00460000

二、设置机器ID

set machid 16a // JZ2440,也可以用setenv machid 16a

set machid 7CF // mini2440

三、设置环境变量

print // 打印环境变量

save // 保存环境变量

setenv bootdelay 5 // 设置bootdelay 为5setenv ipaddr 192.168.1.226 // 设置开发板ip为192.168.1.226setenv serverip 192.168.1.200 // 设置服务器ip为192.168.1.200

setenv gatewayip 192.168.1.1 // 设置网关为 192.168.1.1setenv netmask 255.255.255.0 // 设置子网掩码

// 由于是两条指令,因此需要用单引号引起来

// 读取内核 并启动

setenv bootcmd 'nand read.jffs2 0x30007FC0 kernel ; bootm 0x30007FC0'

// 使用flash中的文件系统启动,默认为yaffs2文件系统,如果是jffs2文件系统,添加 rootfstype=jffs2

// yaffs2

setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200

// jffs2setenv bootargs noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0,115200 rootfstype=jffs2

// 使用nfs网络文件系统启动,默认为yaffs2文件系统,如果是jffs2文件系统,添加rootfstype=jffs2

举例:

虚拟机ip :192.168.1.2

网关 :192.168.1.1

开发板ip : 192.168.1.3

子网掩码 :255.255.255.0

文件系统目录:/work/nfs_root/xxxx

// yaffs2 ,注意是一行

setenv bootargs noinitrd root=/dev/nfs console=ttySAC0

nfsroot=192.168.1.2:/work/nfs_root/xxxxip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc

// jffs2 ,注意是一行

setenv bootargs noinitrd root=/dev/nfs console=ttySAC0

nfsroot=192.168.1.2:/work/nfs_root/xxxxip=192.168.1.3:192.168.1.2:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc rootfstype=jffs2

// 清除某个环境变量

setenv bootargs //以bootargs为例

save

// 清除全部的环境变量

nand erase params

四、tftp烧写

// 通过tftp烧写u-boot.bin到nand Flash步骤:

打开 tftpd32.exe 软件, 将u-boot.bin 拷贝至工作目录

在SecureCRT中依次输入:

tftp 0x30008000 u-boot.bin //将uboot.bin 下载到sdram 0x30008000地址处

nand erase bootloader // 擦除bootloader区域

nand write 0x30008000 bootloader // 烧写到bootloader

// 通过tftp烧写uImage到nand Flash步骤:

打开 tftpd32.exe 软件, 将 uImage 拷贝至工作目录

在SecureCRT中依次输入:

tftp 0x30008000 uImage

nand erase kernel

nand write 0x30008000 kernel

// 烧写YAFFS文件系统至Nand Flash

打开 tftpd32.exe 软件, 将 fs_mini.yaffs2 拷贝至工作目录

在SecureCRT中依次输入:

tftp 0x30008000 fs_mini.yaffs2

nand erase root

nand write.yaffs 0x30008000 root $(filesize) // $(filesieze) 是fs_mini.yaffs2 的大小

// 烧写JFFS文件系统至Nand Flash

//使用 jffs2 文件系统启动时记得修改 bootargs 添加 rootfstype=jffs2

打开 tftpd32.exe 软件,将 fs_mini.jffs2 拷贝至工作目录

在SecureCRT中依次输入:

tftp 0x30008000 fs_mini.jffs2

nand erase root

nand write.jffs2 0x30008000 root $(filesize) // $(filesieze) 是fs_mini.yaffs2 大小

当然,之前的所有下载也可以换成 nfs ,

假设虚拟机 ip 为 192.168.1.123

nfs共享目录(在ubuntu 的 /etc/exports设置)为: /work/nfs_root

那么nfs下载命令如下:

nfs 0x30008000 192.168.1.123:/work/nfs_root/u-boot.bin // nfs下载u-boot.bin

nfs 0x30008000 192.168.1.123:/work/nfs_root/uImage // nfs下载uImage

nfs 0x30008000 192.168.1.123:/work/nfs_root/fs_mini.yaffs2 // nfs下载fs_mini.yaffs2

nfs 0x30008000 192.168.1.123:/work/nfs_root/fs_mini.jffs2 // nfs下载fs_mini.jffs2

- end -

相关问答

英语单词between和between… and …怎么造?分开的,要翻译,_作业帮

[最佳回答]ThegirlbetweenthetwoboysisLily.两男孩之间的女孩是莉莉Istandbetweendadandmom.我站在爸爸和妈妈中间Thegirlbet...

谁给我所有物理单位的概念和简称'字母等..还有单位的换算_作业帮

[回答](a)振幅、加速度电流强度的单位“安培”B磁感应强度C(c)电容、比热容电量的单位“库仑”D(d)距离E(e)电场强度、电动势、基元电荷F(f)...

力矩单位1N等于多少Kg.m/ s2 _作业帮

[最佳回答]F=m*a力的大小等于质量乘以加速度,质量单位Kg加速度单位m/s2,所以1N等于1Kg.m/s2

物理里面N是什么单位?为什么不用kg?_作业帮

[回答]牛顿是一个国际单位制导出单位,它是由kg·m·s−2的国际单位制基本单位导出.1牛顿等于要使质量1公斤物体的加速度为1m/s2时,所需要的力.利用因次分...

用字母组成单词1、g,i,n,w, s2 、g,t,i, f ,h3、m,b,l,i,c4、k,r...

[最佳回答]1wings翅膀2.fight打斗3.climb攀登4.kangaroo袋鼠5.drink喝

发动机油gf-5和sn哪种好 - 汽车维修技术网

[回答]qcwx_s2()

新买的联想笔记本英文怎么切换成中文?-ZOL问答

联想Y400Y400N-IFI7人讨论5221次围观关注问题写回答讨论回答(7)FDSHDFH在controlpanel也就是控制面板里边,找到regionandlanguag...

【比较微粒半径的大小 S2 -,CL,S, F 】作业帮

[最佳回答]先看电子层,电子层多的半径大.所以F的是最小的.S2-与S的质子数相等,阴离子半径大于其对应原子的半径.S2->S,S>Cl.故有S2->S>Cl>F先看电...

jcs10n70fh怎么判断好坏?

所有中大功率场效应管的测量方法都一样:指针万用表一个,左右母指和中指拿管、将管子的散热一面对着自己、管脚朝上;将万用表拨到Rx1K以上(Rx10k最好):右手...

物理上的g的单位是什么?好像一个是m/ s2 ,求另一个单位是什么?...

m/s^2或者N/kg两者可以根据公式F=ma来得到

 星光大道苏丹资料  三一重工王海燕 
王经理: 180-0000-0000(微信同号)
10086@qq.com
北京海淀区西三旗街道国际大厦08A座
©2024  上海羊羽卓进出口贸易有限公司  版权所有.All Rights Reserved.  |  程序由Z-BlogPHP强力驱动
网站首页
电话咨询
微信号

QQ

在线咨询真诚为您提供专业解答服务

热线

188-0000-0000
专属服务热线

微信

二维码扫一扫微信交流
顶部