学习资料
Hi35XX海思芯片基础使用
海思3559
Hisi海思
海思板卡端访问服务器的文件(一)
硬件简介
模块
型号
Sensor
imx485
LCD
OLP039XGG04-01
EMMC
FORESEE_eMMC_NCEMASLD
常用命令
使用命令
关注MPP《HiMPP V4.0 媒体处理软件开发参考》13章 Proc 调试信息说明
进入LiteOS
摄像头
1 2 3 4 cat proc/umap/mipi_rxcat /proc/umap/vicat /proc/umap/vpsscat /proc/umap/venc
LCD
1 2 3 4 i2c_write 0x02 0xA9 0x01 0x3d i2c_read 0x02 0xA9 0xCE 0xCE 0x1 0x1
显示绿色棋盘格
1 2 3 4 5 6 7 8 9 himm 0x1144D300 0x0A000000 himd.l 0x1144D300 himm 0x1144D304 0x1 himm 0x112700A0 0x0 himm 0x112700B4 0x1 himm 0x1144D000 0xc0000011 himm 0x1144D000 0x80000011
屏幕亮度
1 2 i2c_read 0x02 0xA9 0xCE 0xCE 0x1 0x1 i2c_write 0x02 0xA9 0xCE 0x00
1 2 3 4 HI_S32 HI_HAL_SCREEN_SetLuma (HI_HAL_SCREEN_IDX_E enScreenIndex, HI_U32 u32Luma) ; HI_S32 HI_HAL_SCREEN_SetContrast (HI_HAL_SCREEN_IDX_E enScreenIndex, HI_U32 u32Contrast)
wifi
1 2 3 4 cat $(find . -name hostapd.conf) ifconfig
GPIO
https://blog.csdn.net/qq_21794157/article/details/122494056
以I2C_SDA W15为例,配置为GPIO4_3
引脚复用寄存器如图 《Hi3556V200_PINOUT_CN》
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 himm 0x114f0078 0x400 himm 0x114f0078 0x600 echo 35 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio35/directionecho 0 > /sys/class/gpio/gpio35/value echo 1 > /sys/class/gpio/gpio35/value himm 0x114f0074 0x400 himm 0x114f0074 0x600 echo 34 > /sys/class/gpio/exportecho out > /sys/class/gpio/gpio34/directionecho 0 > /sys/class/gpio/gpio34/value echo 1 > /sys/class/gpio/gpio34/value himm 0x111f0034 0x400 himm 0x111f0034 0x601 echo 84 > /sys/class/gpio/exportecho in > /sys/class/gpio/gpio84/directioncat /sys/class/gpio/gpio84/value
1 2 3 4 5 6 7 8 9 10 11 12 13 app/komod/usb2net_load.sh;ifconfig usb0 192.168.2.10 netmask 255.255.255.0;route add default gw 192.168.2.1cp -rf /app/bin/libs/libmpi.so /lib/cp -rf /app/bin/libs/libsecurec.so /lib/ ifconfig lo up; wget --spider -q "http://192.168.2.10/cgi-bin/hisnet/setpqdebug.cgi?&-pqdebug=1" wget --spider -q "http://192.168.2.10/cgi-bin/hisnet/setpqdebug.cgi?&-pqdebug=0" rtsp://IP:554/livestream/1
开发环境
SDK安装
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 sudo apt-get install -y build-essential sudo apt-get install u-boot-tools sudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config sudo apt-get install make libc6 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools texinfo texlive gawk curl upx pngquant sudo apt-get install make libc6:i386 lib32z1 lib32stdc++6 zlib1g-dev libncurses5-dev ncurses-term libncursesw5-dev g++ u-boot-tools:i386 texinfo texlive gawk libssl-dev openssl bc sudo apt-get install bison flex dos2unix aptitude libpcap-dev gperf libuuid1:i386 u-boot-tools libpam0g-dev lib32z1-dev sudo aptitude install libtool susource ./arm-himix100-linux.install sudo gedit /etc/profileexport PATH="/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH " export PKG_CONFIG_PATH="$PKG_CONFIG_PATH :/usr/lib/x86_64-linuxgnu/pkgconfig"
Linux开发系统还需要nfs和ssh便于调试
编译内核
1 2 3 4 cp ./arch/arm/configs/hi3559v200_amp_defconfig .config make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage -j 20
开启NFS 内核配置
首先 make all
,然后进入内核目录修改。
1 2 make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage -j 20
使用
查看是否有nfs,有则配置成功
OpenSSH配置
相关资料
openssh移植及使用
移植openssh到arm-linux
HI3516DV300笔记(三)安装SSH和SFTP
全志A33 SSH移植配置(已成功)
命令
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 wget https://mirrors.tuna.tsinghua.edu.cn/pub/OpenBSD/OpenSSH/portable/openssh-6.1p1.tar.gz --no-check-certificate wget https://jaist.dl.sourceforge.net/project/libpng/zlib/1.2.8/zlib-1.2.8.tar.gz --no-check-certificate wget https://archive.fastgit.org/openssl/openssl/archive/refs/tags/OpenSSL_1_0_1t.tar.gz --no-check-certificate tar -zxvf zlib-1.2.11.tar.gz; tar -zxvf OpenSSL_1_0_1t.tar.gz; tar -zxvf openssh-6.1p1.tar.gz;cd ./openssl-OpenSSL_1_0_1t ./Configure --prefix=$PWD /_install os/compiler:arm-himix100-linux-gcc make -j20 make installcd ..cd ./zlib-1.2.11export CC=/opt/hisi-linux/x86-arm/arm-himix100-linux/bin/arm-himix100-linux-gcc ./configure --prefix=$PWD /_install --static make -j20 make installcd ..cd ./openssh-6.1p1export OPENSSHINSTALLPATH=/ ./configure --host=arm-himix100-linux --prefix=$OPENSSHINSTALLPATH --with-zlib=$PWD /../zlib-1.2.11/_install --with-ssl-dir=$PWD /../openssl-OpenSSL_1_0_1t/_install --with-libs --disable-etc-default-login --disable-strip CC=arm-himix100-linux-gcc AR=arm-himix100-linux-ar make -j20export TOPPATH=$PWD /../openssh_buildexport ROOTPATH=$TOPPATH /rootfsmkdir $ROOTPATH mkdir -p $ROOTPATH /binmkdir -p $ROOTPATH /sbinmkdir -p $ROOTPATH /usr/local/opensshmkdir -p $ROOTPATH /usr/local/libexecmkdir -p $ROOTPATH /usr/local/etcmkdir -p $ROOTPATH /usr/local/openssh/etcmkdir -p $ROOTPATH /usr/local/openssh/bincp scp sftp ssh ssh-add ssh-agent ssh-keygen ssh-keyscan $ROOTPATH /usr/local/openssh/bincp sshd_config ssh_config $ROOTPATH /usr/local/openssh/etccp sshd $ROOTPATH /sbincp sftp-server ssh-keysign $ROOTPATH /usr/local/libexeccd $ROOTPATH /binln -s /usr/local/openssh/bin/scpln -s /usr/local/openssh/bin/sftpln -s /usr/local/openssh/bin/sshln -s /usr/local/openssh/bin/ssh-addln -s /usr/local/openssh/bin/ssh-agentln -s /usr/local/openssh/bin/ssh-keygenln -s /usr/local/openssh/bin/ssh-keyscancd $ROOTPATH cp $TOPPATH /sshd_config $ROOTPATH /usr/local/openssh/etccp $TOPPATH /openssh_install.sh $ROOTPATH tar -zcvf $TOPPATH /../openssh_build.tar.gz . tar -zxvf /openssh_build.tar.gzexport OPENSSHPATH=/export MNTPATH=/export SSHKEYGRNPATH=$OPENSSHPATH /usr/local/openssh/binmkdir $OPENSSHPATH /etccd $OPENSSHPATH /usr/local/etc$SSHKEYGRNPATH /ssh-keygen -t rsa -f ssh_host_rsa_key -N "" $SSHKEYGRNPATH /ssh-keygen -t dsa -f ssh_host_dsa_key -N "" $SSHKEYGRNPATH /ssh-keygen -t ecdsa -f ssh_host_ecdsa_key -N "" $SSHKEYGRNPATH /ssh-keygen -t dsa -f ssh_host_ed25519_key -N "" cp $OPENSSHPATH /usr/local/openssh/etc/sshd_config $OPENSSHPATH /etccp $OPENSSHPATH /usr/local/openssh/etc/ssh_config $OPENSSHPATH /etccp $OPENSSHPATH /usr/local/openssh/etc/ssh_config $OPENSSHPATH /etcmkdir -p /usr/local/etccp $OPENSSHPATH /usr/local/openssh/etc/ssh_config /usr/local/etcmkdir -p /var/run/sshdmkdir -p /var/emptycd /varchown root.root empty -R /sbin/sshd /mnt/openssh/sbin/sshd
此时文件目录为
压缩包文件结果如下
找到sshd_config修改如下:
1 2 3 4 5 6 7 8 9 10 11 HostKey /usr/ local/etc/ ssh_host_rsa_key HostKey /usr/ local/etc/ ssh_host_dsa_key HostKey /usr/ local/etc/ ssh_host_ecdsa_key PermitRootLogin yes PasswordAuthentication yes PermitEmptyPasswords yes Subsystem sftp internal-sftp UsePrivilegeSeparation no
ssh通过密钥无密码访问服务器时,尽管密钥配好了,端口服务启动都正常,但是还是ssh还是不能访问。最后发现,是密钥文件的权限问题,一般来说:
对.ssh目录设置700权限
对id_rsa,authorized_keys文件设置600权限
对id_rsa.pub,known_hosts文件设置644权限
所以,权限设置不对的话ssh登陆不上Linux系统
HI3556V200上手
SDK架构
HI3556
OS:提供基本的操作系统及基础的外围器件驱动。
MPP:提供媒体采集、处理、编解码功能。
Middleware:基于业务的接口抽象层。
Reference:具体的业务实现
HI3516
烧写方式
HI3516DV300额外支持网口烧写;Hi3556只支持串口,USB烧写 ,两种方式都支持裸烧,实际开发时,采用USB烧写。
USB烧写时,第一次需要做以下步骤:
合并注册表59V200_win10_usb.reg
安装HiUSBBurn\InstallDriver.exe
正式烧写步骤
开发板断电
HiTool工具点击烧写,注意HiTool工具中不是按分区烧写
而是**烧写emmc
**
按住Update键后,开发板上电
控制台出现烧写进度条,按键可以松手
软件开发
文档
MPP 《HiMPP V4.0 媒体处理软件开发参考》
Middleware 《HiMAPI V1.0 媒体处理开发参考》
Middleware 《Camera 中间件 开发参考》
Reference 《HiMobileCam V1.0 参考设计开发指南》
Reference 《HiMobileCam 场景自适应 使用指南》
开发方式
SDK安装
参考《HiMobileCam SDK安装使用说明》,注意有一些软件包文档未说明,实际需要安装
build 目录提供 SDK 的全局编译配置,包括各组件的相对路径和基本配置。
configs 目录提供了通过 menuconfig 配置后生成的配置文件。
Kconfig 为 SDK menuconfig 的入口配置文件。
Makefile 为 SDK 的编译文件,用于编译安装 SDK 工程。
osdrv 目录主要提供底层系统原始包,包括 Bootloader、 OS、 Rootfs,关键Driver,工具等。
amp 目录提供媒体模块驱动和库 mpp、 操作系统适配组件 osal、芯片及板级驱动drv、双系统核间通信组件 hisyslink。
middleware 目录提供了视频录制,文件管理,回放、 GUI, 流传输等典型产品业务组件及组件 sample;同时还提供了对基础音视频功能和数据流封装模块(ndk)。
reference 目录在 osdrv、 amp 和 middleware 基础上,提供产品层通用组件、 典型产品形态参考设计, 详细内容可以参见《HiMobileCam V1.0 参考设计开发指南》。
pqtool 目录用于存放图像调优工具,供用户在 PC 端进行图像效果调优,该工具的
实现依赖于 osdrv 和 mpp 。
Reference开发
3516:SDK提供到MPP 个人开发方式为提取lib库,cmake编译,可执行文件通过ssh上传至板端,使用gdb-gdbserver调试程序
3556:MPP之上有Middleware和Reference层,提供进一步的封装和抽象,重点关注《HiMobileCam V1.0 参考设计开发指南》,采取在sdk/reference修改,sdk根目录make reference
编译程序,通过Hitook usb烧写程序至板端。
功能实现
按键功能
Reference 《HiMobileCam V1.0 参考设计开发指南》
电池管理
《HiMobileCam V1.0 参考设计开发指南》
菜单
Middleware《HiGV 开发指南》
Middleware《HiGV API参考》
Reference 《HiMobileCam V1.0 参考设计开发指南》
多语言适配
Reference 《HiMobileCam V1.0 参考设计开发指南》
改动
hi3556v200_xa\osdrv\opensource\uboot\u-boot-2016.11\common\autoboot.c static int __abortboot(int bootdelay)
视频通路
输出
PDT_INIT_MediaInit
PDT_MEDIA_VoWndStart
PDT_MEDIA_VoWndStart
HI_MAPI_DISP_Bind_VProc
1 2 s32Ret = HI_MAPI_DISP_Bind_VProc(pstDispCfg->astWndCfg [i].ModHdl, pstDispCfg-> astWndCfg[i].ChnHdl, pstDispCfg -> VdispHdl , pstDispCfg-> astWndCfg[i].WndHdl, HI_FALSE);
1 2 3 4 5 6 7 8 9 10 11 12 typedef struct hiPDT_MEDIA_DISP_WND_CFG_S { HI_BOOL bEnable; HI_HANDLE WndHdl; HI_PDT_MEDIA_VIDEOMOD_E enBindedMod; HI_HANDLE ModHdl; HI_HANDLE ChnHdl; ROTATION_E enRotate; ASPECT_RATIO_S stAspectRatio; HI_MAPI_DISP_WINDOW_ATTR_S stWndAttr; HI_PDT_MEDIA_DISP_WND_CROP_CFG_S stCropCfg; } HI_PDT_MEDIA_DISP_WND_CFG_S;
ini配置的ModHdl为vproc-vpss
裁剪
reference/dashcam/modules/statemng/src/hi_product_statemng_common.c
1 2 3 4 5 6 7 8 9 10 11 HI_S32 PDT_STATEMNG_SetCrop (HI_MESSAGE_S* pstMsg) s32Ret = HI_PDT_MEDIA_DispWindowCrop(&stCropCfg); s32Ret = HI_PDT_PARAM_SetCamParam(enSettingWorkMode, pstStateMngCtx->s32PreviewCamID, HI_PDT_PARAM_TYPE_CROP, (HI_VOID*)&stCropCfg);
reference/dashcam/modules/media/common/hi_product_media_comm.c 函数 HI_S32 HI_PDT_MEDIA_DispWindowCrop(const HI_PDT_MEDIA_DISP_WND_CROP_CFG_S* pstCropCfg)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 HI_PDT_MEDIA_DISP_WND_CFG_S* pstDispWndCfg = &s_stMEDIACtx.pstMediaInfo->stMediaCfg.stVideoOutCfg.astDispCfg[i].astWndCfg[j]; if (!pstDispWndCfg->bEnable) { MLOGI("disp[%d]_wnd[%d] is not enable\n" ,i,j); continue ; } HI_HANDLE ModHdl = pstDispWndCfg->ModHdl; HI_HANDLE ChnHdl = pstDispWndCfg->ChnHdl; HI_MAPI_VPORT_ATTR_S stVPortAttr = {0 }; s32Ret = HI_MAPI_VPROC_GetPortAttr(ModHdl, ChnHdl, &stVPortAttr); HI_APPCOMM_CHECK_RETURN(s32Ret, HI_FAILURE); VPSS_CROP_INFO_S stCropInfo = {0 }; SIZE_S stSrcSize = {0 }; stSrcSize.u32Width = stVPortAttr.u32Width; stSrcSize.u32Height = stVPortAttr.u32Height; PDT_MEDIA_GetWindowCropSize(pstCropCfg, pstDispWndCfg, &stSrcSize, &stCropInfo); MLOGI("set disp[%d]_wnd[%d]_modhdl[%d]_chnhdl[%d] crop \n" ,i,j,ModHdl,ChnHdl); s32Ret = HI_MPI_VPSS_SetChnCrop(ModHdl, ChnHdl, &stCropInfo); HI_APPCOMM_CHECK_RETURN(s32Ret, HI_FAILURE);