海思音视频开发

写在前面

本文是根据海思3531DV100平台相关SDK文档进行学习和记录。

环境搭建

虚拟机环境为Ubuntu 20.04

安装交叉编译器

本文使用arm-hisiv600版本编译器。

  1. 拷贝编译器安装包至开发环境:cp arm-hisiv600-linux.tgz /your/path
  2. 解压安装包:tar xvf arm-hisiv600-linux.tgz, 得到文件:arm-hisiv600-linux.install arm-hisiv600-linux.tar.bz2 runtime_glibc.tgz
  3. 运行安装脚本:sudo sh arm-hisiv600-linux.install。注:此步需要管理员权限!!
    安装交叉编译器
  4. 检查,输入arm后使用tab补全,看是否有如下输出,没有则需要重新安装或导入环境变量:export PATH="/opt/hisi-linux/x86-arm/arm-hisiv600-linux/target/bin:$PATH"可加入到/etc/profile文件中。
    检查安装
  5. 验证版本:arm-hisiv600-linux-gcc -v,输出
    Using built-in specs.
    COLLECT_GCC=arm-hisiv600-linux-gcc
    COLLECT_LTO_WRAPPER=/opt/hisi-linux/x86-arm/arm-hisiv600-linux/bin/../libexec/gcc/arm-hisiv600-linux-gnueabi/4.9.4/lto-wrapper
    Target: arm-hisiv600-linux-gnueabi
    Configured with: ../gcc-linaro-4.9-2015.06/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --target=arm-hisiv600-linux-gnueabi --prefix=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --with-arch=armv5te --with-gnu-as --with-gnu-ld --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --enable-nls --enable-clocale=gnu --enable-extra-hisi-multilibs --with-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux/target --with-build-sysroot=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/arm-hisiv600-linux/target --with-gmp=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-mpfr=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-mpc=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-ppl=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-cloog=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --enable-libgomp --disable-libitm --enable-poison-system-directories --with-libelf=/home/sying/toolchain_ljhui/gcc4_9/arm-hisiv600-linux/gcc-glibc/install/host_lib --with-pkgversion=Hisilicon_v600_20180525 --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
    Thread model: posix
    gcc version 4.9.4 20150629 (prerelease) (Hisilicon_v600_20180525)

    若输出:arm-hisiv600-linux-gcc: No such file or directory则需要安装32位环境兼容工具: sudo apt-get install lib32z1-dev

6.至此,交叉编译器安装全部完成

内核编译

官方文档中使用3.18.20版本,内核,点击即可直接下载:点我下载3.18.20版本内核源码

  1. 将下载的linux-3.18.20.tar.gz拷贝到SDK中的 osdrv/opensource/kernel目录中.
  2. 进入目录:cd osdrv/opensource/kernel
  3. 解压内核源码压缩包:tar -axf linux-3.18.20.tar.gz
  4. 修改目录名:mv linux-3.18.20 linux-3.18.y
  5. 进入内核源码目录:cd linux-3.18.y
  6. 打补丁:patch -p1 < ../hi3xx_for_linux_v3.18.y.patch
  7. 拷贝配置:cp arch/arm/configs/hi3531d_nand_defconfig .config
  8. 进行内核配置:make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- menuconfig
  9. 在出现的图文字面选择需要的模块,完成后保存退出
  10. 编译内核:make ARCH=arm CROSS_COMPILE=arm-hisiv600-linux- uImage
    编译成功截图:
    编译成功

    若出现报错:
    kernel报错1

    解决方案:sudo apt-get install u-boot-tools

制作根文件系统

使用busybox制作根文件系统。
busybox源码路径:Hi3531D_SDK_V1.0.3.0/package/osdrv/opensource/busybox

  1. 解压源码:tar xvf busybox-1.20.2.tgz
  2. 进入目录:cd busybox-1.20.2
  3. 进行配置:cp config_v600_softfp_neon .config
  4. 配置busybox:make menuconfig,打开大文件支持和静态编译,路径:Busybox Settings ---> Build Options
    busybox选项配置
  • 第一个选项选择是否把busybox编译成静态链接的可执行文件。如果选择该选项,编译出来的busybox就是静态链接的,运行时不依赖于动态库,但体积较大;清除该选项将得到动态链接的busybox,体积较小,但需要动态库的支持。

  • 第二个选项是用于选择SDK推荐的交叉编译器,配置好后保存并退出。

  1. 编译安装busybox:make && make install,生成的文件都在_install目录

    busybox编译完成

  2. 直接在_install目录制作根文件系统:

    //创建必要路径
    # mkdir etc dev mnt
    # mkdir -p proc sys tmp mnt
    # mkdir -p etc/init.d/
    //添加文件系统挂载信息
    # vim etc/fstab
    proc        /proc           proc         defaults        0        0
    tmpfs       /tmp            tmpfs      defaults        0        0
    sysfs       /sys            sysfs        defaults        0        0
    //开机脚本
    # vim etc/init.d/rcS
    echo -e "Welcome to tinyLinux"
    /bin/mount -a
    echo -e "Remounting the root filesystem"
    mount  -o  remount,rw  /
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
    # chmod 755 etc/init.d/rcS
    //busybox执行的文件
    # vim etc/inittab
    ::sysinit:/etc/init.d/rcS   //开机执行脚本
    ::respawn:-/bin/sh  //启动后不断运行shell,然后我们可以运行命令了
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    # chmod 755 etc/inittab
    # cd dev
    //创建设备节点    c为字符设备 5为主设备号,1为从设备号
    # mknod console c 5 1
    # mknod null c 1 3
    # mknod tty1 c 4 1

    目录结构

    total 44
    drwxrwxr-x 11 jeffrey jeffrey 4096 Mar 25 00:25 .
    drwxr-xr-x 35 jeffrey jeffrey 4096 Mar 25 00:13 ..
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:13 bin
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:31 dev
    drwxrwxr-x  3 jeffrey jeffrey 4096 Mar 25 00:30 etc
    lrwxrwxrwx  1 jeffrey jeffrey   11 Mar 25 00:13 linuxrc -> bin/busybox
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:24 mnt
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:25 proc
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:13 sbin
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:25 sys
    drwxrwxr-x  2 jeffrey jeffrey 4096 Mar 25 00:25 tmp
    drwxrwxr-x  4 jeffrey jeffrey 4096 Mar 25 00:13 usr
    jeffrey@ubuntu:~/hi3531d/Hi3531D_SDK_V1.0.3.0/package/osdrv/opensource/busybox/busybox-1.20.2/_install$ ls etc/
    fstab  init.d  inittab
    jeffrey@ubuntu:~/hi3531d/Hi3531D_SDK_V1.0.3.0/package/osdrv/opensource/busybox/busybox-1.20.2/_install$ cat etc/fstab
    proc        /proc           proc         defaults        0        0
    tmpfs       /tmp            tmpfs      defaults        0        0
    sysfs       /sys            sysfs        defaults        0        0
    jeffrey@ubuntu:~/hi3531d/Hi3531D_SDK_V1.0.3.0/package/osdrv/opensource/busybox/busybox-1.20.2/_install$ cat etc/inittab
    ::sysinit:/etc/init.d/rcS
    ::respawn:-/bin/sh
    ::askfirst:-/bin/sh
    ::ctrlaltdel:/bin/umount -a -r
    jeffrey@ubuntu:~/hi3531d/Hi3531D_SDK_V1.0.3.0/package/osdrv/opensource/busybox/busybox-1.20.2/_install$ cat etc/init.d/rcS
    echo -e "Welcome to tinyLinux"
    /bin/mount -a
    echo -e "Remounting the root filesystem"
    mount  -o  remount,rw  /
    mkdir -p /dev/pts
    mount -t devpts devpts /dev/pts
    echo /sbin/mdev > /proc/sys/kernel/hotplug
    mdev -s
  3. 制作文件系统镜像
    嵌入式系统中常用文件系统包括有cramfs、JFFS2、NFS、initrd、yaffs2、ubifs以及squashfs。它们的特点如下:

    • cramfs 和 JFFS2 具有好的空间特性,很适合嵌入式产品应用。
    • cramfs 与 squashfs 为只读文件系统。
    • squashfs 压缩率最高。
    • JFFS2 为可读写文件系统。
    • NFS 文件系统适用于开发初期的调试阶段。
    • ubifs 和 yaffs2 文件系统用于NAND Flash。
    • initrd 采用 cramfs 文件系统,为只读。
      制作yaffs2格式文件系统:
      yaffs2 的优缺点如下:
    • 优点
      − 专门针对NAND Flash,软件结构得到优化,速度快。
      − 使用硬件的spare area区域存储文件组织信息,启动时只需扫描组织信息,启动比较快。
      − 采用多策略垃圾回收算法,能够提高垃圾回收的效率和公平性,达到损耗平衡的目的。
    • 缺点
    • 没有采用压缩的文件格式。当包含的内容相同时,yaffs2镜像文件要比jffs2镜像文件大。
      制作方法:
      对于SPI Nand Flash:
      ./mkyaffs2image100 ./_install image_rootfs.yaffs2 pagesize ecctype
      对于Parallel Nand Flash
      ./mkyaffs2image610 ./_install image_rootfs.yaffs2 pagesize ecctype
      参数说明:

      ./_install 根文件系统路路径
      image_rootfs.yaffs2 制作出的文件系统名字
      pagesize     the page size to be converted
               0 | 512     512 Bytes pagesize
               1 | 2k      2K Bytes pagesize
               2 | 4K      4K Bytes pagesize
               3 | 8K      8K Bytes pagesize
               4 | 16K     16K Bytes pagesize
      ecctype      ECC type
               0 | none    no ecc
               1 | 1bit    used 1bit/512 ecc
               2 | 4bit    used 4bit/512 ecc
               3 | 8bit    used 8bit/512 ecc
               4 | 24bit   used 24bit/1k ecc
               5 | 40bit   used 40bit/1k ecc
               6 | 64bit   used 64bit/1k ecc

制作ext3格式文件系统:

  1. 制作一个空镜像:dd if=/dev/zero of=./rootfs.ext3 bs=1M count=32
  2. 格式化镜像:mkfs.ext3 rootfs.ext3
  3. 挂载: mkdir fs && mount -o loop rootfs.ext3 ./fs
  4. 拷贝文件: cp -fra ./_install/* ./fs/
  5. 取消挂载: umount ./fs
  6. 打包:gzip --best -c rootfs.ext3 > rootfs.img.gz
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇
error: Content is protected !!内容保护!!