以下内容源于朱有鹏嵌入式课程的学习与整理,如有侵权请告知删除。
一、概述
mpp是海思编写的与视频编解码有关的驱动、库等内容。我们需要部署这些内容,也就是把这些内容放在合适的目录位置。
二、mpp的目录结构
mpp目录位于Hi3518E_SDK_V1.0.3.0\package\mpp,其文件组织如下。
二、完整版(即包含mpp)根文件系统的制作
因为海思SDK提供的根文件系统还没有部署mmp,因而里面没有ko、lib等文件内容,所以不能执行sample,需要自己制作完整的根文件系统并制作成镜像烧录至板子。
(1)在osdev/pub/目录下找到rootfs_uclibc.tgz(也可以使用Hi3518E_SDK_V1.0.3.0/package目录系的),解压开后得到文件夹形式的根文件系统osdrv/pub/rootfs_uclibc/。
(2)将Hi3518E_SDK_V1.0.3.0\package\mpp目录下的ko文件夹复制到osdrv/pub/rootfs_uclibc/目录下,将lib文件夹里的内容复制到osdrv/pub/rootfs_uclibc/usr/lib中。lib文件夹中有a静态库和.so动态库,这里主要是动态库的部署,所以可以把.a文件删掉。
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub# ls
bin image_uclibc rootfs_uclibc rootfs_uclibc.tgz
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub# cd rootfs_uclibc
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc# ls
bin boot dev etc home init lib linuxrc lost+found mkimg.rootfs mknod_console mnt nfsroot opt proc root sbin share sys tmp usr var
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc# cp ../../../mpp/ko/ ./ -rf
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc# ls
bin boot dev etc home init ko lib linuxrc lost+found mkimg.rootfs mknod_console mnt nfsroot opt proc root sbin share sys tmp usr var
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc# cd lib/
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc/lib# ls
ld-uClibc-0.9.33.2.so libc.so.0 libgcc_s.so.1 libnsl-0.9.33.2.so libresolv-0.9.33.2.so libstdc++.so libthread_db.so.1
ld-uClibc.so.0 libdl-0.9.33.2.so libhimount_api.a libnsl.so.0 libresolv.so.0 libstdc++.so.6 libuClibc-0.9.33.2.so
libcrypt-0.9.33.2.so libdl.so.0 libm-0.9.33.2.so libpthread-0.9.33.2.so librt-0.9.33.2.so libstdc++.so.6.0.19 libutil-0.9.33.2.so
libcrypt.so.0 libgcc_s.so libm.so.0 libpthread.so.0 librt.so.0 libthread_db-0.9.33.2.so libutil.so.0
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc/lib# cp ../../../../mpp/lib/* ./
root@ubuntu:/home/xjh/iot/hisi_development/Hi3518E_SDK/Hi3518E_SDK_V1.0.3.0/osdrv/pub/rootfs_uclibc/lib#
(3)在osdrv/pub/rootfs_uclibc/etc/profile文件中添加“设置板载系统网卡的ip址”的指令。
ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.11
(4)在osdrv/pub/rootfs_uclibc/etc/profile文件中添加“自动挂载NFS服务器”的指令。
mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs /mnt
(5)在osdrv/pub/rootfs_uclibc/etc/profile文件中继续添加如下指令(其中第一条指令只是为了挂载SD卡而已,可无,见下面完整的profile文件内容中的描述。)
mount -t vfat /dev/mmcblk0p1 /usr/mmc
cd /ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64
完整的/etc/profile文件内容如下。
# /etc/profile: system-wide .profile file for the Bourne shells
#
#
set_path_before()
{[ -d $1 ] && PATH="$1:$PATH"
}PATH="/usr/bin:/usr/sbin:/bin:/sbin"
set_path_before /usr/local/sbin
set_path_before /usr/local/bin
#若自己设置了其他路径,需要导出,即使用export LD_LIBRARY_PATH=xxxx:$LD_LIBRARY_PATH
LD_LIBRARY_PATH="/usr/local/lib:/usr/lib"export PATH
export LD_LIBRARY_PATH# ANSI COLORS
CRE="^M^[[K"
NORMAL="^[[0;39m"
RED="^[[1;31m"
GREEN="^[[1;32m"
YELLOW="^[[1;33m"
BLUE="^[[1;34m"
MAGENTA="^[[1;35m"
CYAN="^[[1;36m"
WHITE="^[[1;37m" umask 022 echo "${GREEN}Welcome to HiLinux.${NORMAL}" ifconfig lo 127.0.0.1
ifconfig eth0 192.168.1.11#/usr/mmc是我自己创建的,一开始没有这个目录(所以第一次执行此命令的话会报错,要创建此目录后才能使用下面的那条mount命令)。
#/dev/mmcblk0p1是插卡后显示的。
#整句命令意思是将SD卡挂载到/usr/mmc目录下。
#mount -t vfat /dev/mmcblk0p1 /usr/mmc cd /ko
./load3518e -i -sensor ar0130 -osmem 32 -total 64mount -t nfs -o nolock 192.168.1.141:/home/xjh/iot/hisi_development/hisi_rootfs /mntcd /mnt
(6)输入以下命令手工制作根文件系统镜像文件。注意路径。
osdrv/pub/bin/pc/mkfs.jffs2 -d osdrv/pub/rootfs_uclibc -l -e 0x10000 -o osdrv/pub/rootfs_uclibc_64k.jffs2
(7)烧录至spiflash。烧录方法见博客(注意实际的镜像文件名字!):海思方案中uboot、kernel和rootfs的烧写方法
(8)镜像测试。uboot启动后,首先要测试是否能ping通虚拟机;然后板载系统启动后,看挂载是否成功;然后看/etc/profile里设置的内容是否得到执行。