前言

预告:

!!!!下一篇出uvc相关及驱动的教程!!!!

开发板:

这里使用的是润和的 IPC Camra Hi3518EV300 开发板。
开发板

默认具备:

  • Hi3518EV200 SDK
  • arm-himix100-linux.tgz 交叉编译工具链
  • Linux虚拟机或者环境
  • 熟悉Linux相关操作
  • uboot 相关操作
1. 准备基本环境
1. 将Linux shell改为bash

查看shell是否为bash,在终端运行如下命令

ls -l /bin/sh

如果显示为“/bin/sh -> bash”则为正常,否则请按以下方式修改:

  • 方法一:在终端运行如下命令,然后选择 no。
    sudo dpkg-reconfigure dash
    
  • 方法二:先删除sh,再创建软链接。
    sudo rm -rf /bin/sh
    sudo ln -s /bin/bash /bin/sh
    

2. 展开SDK
  1. 解压SDK、进入
    tar -zxvf Hi3516EV200_SDK_V1.0.1.0.tgz
    cd Hi3516EV200_SDK_V1.0.1.0/
    
  2. 展开SDK
    ./sdk.unpack
    

3.交叉编译工具
  1. 解压安装
    tar zxvf arm-himix100-linux.tgz
    cd arm-himix100-linux/
    
  2. 安装
    sudo ./arm-himix100-linux.install
    
  3. 设置环境
    echo "export PATH=/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH" >> ~/.bashrc
    echo "export LC_ALL=C" >> ~/.bashrc
    arm-himix100-linux-gcc --v
    

安装成功: success


3.编译osdrv

参考:osdrv 下 readme

  1. 准备工具
    下载linux-4.9.37.tar.gz

    cd osdrv #进入osdrv
    # 将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中
    wget -P opensource/kernel/ https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.9.37.tar.gz
    
    # 将下载的 yaffs2utils-0.2.9.tar.gz 存放到osdrv的tools/pc/mkyaffs2image/目录中
    wget -P tools/pc/mkyaffs2image/ https://github.com/dorigom/yaffs2utils/archive/0.2.9.tar.gz
    
    # 将下载的 gdb-7.9.1.tar.gz 存放到 osdrv的tools/board/gdb/目录中
    wget -P tools/board/gdb/ http://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz
    
    # 将下载的 ncurses-6.0.tar.gz 存放到 osdrv的tools/board/gdb/目录中
    wget -P tools/board/gdb/ http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
    
    # 将下载的 util-linux-2.31.tar.gz 存放到 osdrv的tools/pc/cramfs_tool/目录中
    wget -P tools/pc/cramfs_tool/ https://mirrors.edge.kernel.org/pub/linux/utils/util-linux/v2.31/util-linux-2.31.tar.gz
    
  2. 完整编译

    make OSDRV_CROSS=arm-himix100-linux CHIP=hi3518ev300 all
    
  3. 编译过程报错解决

    1. 先安装下面的依赖包

      sudo apt-get install libc6 libc6-dev libc6-dev-i386 
      sudo apt-get install libx32gcc-4.8-dev lib32stdc++6 gcc-multilib lib32ncurses5 
      sudo apt-get install lib32z1 lib32z1-dev 
      sudo apt-get install libstdc++6 lib32stdc++6  
      sudo apt-get install build-essential 
      sudo apt-get install libusb-1.0-0-dev 
      sudo apt-get install libtool 
      sudo apt-get install bison 
      sudo apt-get install libncurses5-dev 
      sudo apt-get install mtd-utils 
      sudo apt-get install uuid-dev
      
    2. 报错1:

      mv: cannot stat '/home/xxxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/tools/pc/\
      uboot_tools/hiregbin-v5.0.1/reg_info_hi3516ev200.bin': No such file or directory
      Makefile:174: recipe for target 'hiregbin_prepare' failed
      make: *** [hiregbin_prepare] Error 1
      

      解决:

      sudo apt install lib32z1-dev
      

      原因:Hi3518EV300是 32 位开发板,电脑是64位,安装32位库依赖。

    3. 报错2:

      cp: cannot stat '/home/xxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/opensource/uboot/\
      u-boot-2016.11/u-boot-hi3516ev200.bin': No such file or directory
      Makefile:189: recipe for target 'hiboot' failed
      make: *** [hiboot] Error 1
      

      解决:

      sudo vi /etc/default/locale
      vi opensource/uboot/u-boot-2016.11/Makefile
      

      注释 第23行:unexport LC_ALL,改为:#unexport LC_ALL


    1. 报错3

      Makefile:45: recipe for target '/home/xxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/tools/pc/ \
      jffs2_tool/tmp/sbin/mkfs.jffs2' failed
      make[1]: *** [/home/xxxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/tools/pc/ \
      jffs2_tool/tmp/sbin/mkfs.jffs2] Error 1 
      

      解决:

      sudo apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config
      export PKG_CONFIG_PATH="$PKG_CONFIG_PATH:/usr/lib/x86_64-linux-gnu/pkgconfig"
      sudo apt-get install automake
      

      原因:缺少 mtd-utils2.0.2 依赖库,同时依赖于>=automake1.15.1版本

    2. 报错4:

      make[1]: *** [/home/xxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/tools/ \
      board/eudev-3.2.7/tmp/eudev-3.2.7/udevd] Error 1
      make[1]: Leaving directory '/home/xxx/Hi3516EV200_SDK_V1.0.1.0/osdrv/tools/ \
      board/eudev-3.2.7'
      Makefile:377: recipe for target 'hiboardtools' failed
      

      解决:

      sudo apt-get install  gperf
      
  4. 编译成功
    出现 ---------finish osdrv work即成功编译

    注意,这里采用全部编译,只是保证 为后面单独修改编译提供便利,大佬是可以采用单独编译的!!!
    成功编译

5. 生成目录

编译完的image,rootfs等存放在osdrv/pub目录下

pub/
|-- bin
|   |-- board_uclibc
|   |   |-- doc_loadbios
|   |   |-- docfdisk
|   |   |-- flash_erase
|   |   |-- flash_eraseall
|   |   |-- flash_lock
|   |   |-- flash_otp_dump
|   |   |-- flash_otp_info
|   |   |-- flash_otp_lock
|   |   |-- flash_otp_write
|   |   |-- flash_unlock
|   |   |-- flashcp
|   |   |-- ftl_check
|   |   |-- ftl_format
|   |   |-- gdb-arm-himix100-linux
|   |   |-- jffs2dump
|   |   |-- jffs2reader
|   |   |-- mkfs.jffs2
|   |   |-- mkfs.ubifs
|   |   |-- mtd_debug
|   |   |-- .....
|   |-- pc
|       |-- lzma
|       |-- make_ext4fs
|       |-- mkfs.cramfs
|       |-- mkfs.jffs2
|       |-- mkfs.ubifs
|       |-- mksquashfs
|       |-- mkyaffs2image100
|       |-- nand_product
|       |-- ubinize
|-- hi3518ev300_spi_image_uclibc------------------------------------ himix100编译出的镜像文件
|   |-- uImage_hi3516ev200 ----------------------------------------- kernel镜像
|   |-- u-boot-hi3516ev200.bin ------------------------------------- u-boot镜像
|   |-- rootfs_hi3516ev200_64k.jffs2 ------------------------------- 64K jffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_128k.jffs2 ------------------------------ 128K jffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_256k.jffs2 ------------------------------ 256K jffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_2k_4bit.yaffs2 -------------------------- yaffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_2k_24bit.yaffs2 ------------------------- yaffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_4k_4bit.yaffs2 -------------------------- yaffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_4k_24bit.yaffs2 ------------------------- yaffs2 文件系统镜像
|   |-- rootfs_hi3516ev200_2k_128k_32M.ubifs------------------------ 2k 128k UBI 文件系统镜像
|   |-- rootfs_hi3516ev200_4k_256k_50M.ubifs------------------------ 4k 256k UBI 文件系统镜像
|
|-- rootfs_uclibc.tgz  ------------------------------------------- himix100编译出的rootfs文件系统
6. PC烧录
  1. 文件准备:

    1. osdrv -> pub -> hi3518ev300_spi_image_uclibc 目录下的这三个文件是我们烧录需要的:

    这里文件系统具体可以根据uboot启动看你的 SPI Flash 的Block Size 进行选择

    文件说明
    u-boot-hi3516ev200.binu-boot镜像
    uImage_hi3516ev200kernel镜像
    rootfs_hi3516ev200_64k.jffs264K jffs2 文件系统镜像

    将这三个文件拷贝到你的Windows下,打开HiTools,开始我们的最激动人心的时刻!!!


  1. !!!!!!设置相关参数!!!!!!!(设置不对,可能烧录就有问题)
    !!!!!!这里不清楚,就按我下面设置一模一样设置,不要乱改值!!!!!!
    在这里插入图片描述
    1. 选择USB口
    2. 选择你开发板的端口号(去设备管理器查看)
    3. 选择按分区烧写
    4. 选择刚才让你拷贝过来的3个文件,一定按顺序加入
    5. 将器件类型改为:spi nor
    6. 不明白的就按我的一模一样的设置(建议尽量不要乱改,这里的大小设置是完全够折腾的)
    7. 勾选第二个和第三个烧录,第一个uboot不建议烧录!

  1. 现在进行烧录,这里参考我的这篇文章,已经完完全全的写明白,按步骤操作即可:

    Hi3518EV300开发板——移植Linux 0.串口快速烧录教程


7. 开发板uboot启动设置(!!重要!!

烧录完成后会自动进入系统,但此时由于 uboot 设置参数不正确,无法引导内核启动,所以还需要设置uboot

  1. 烧录完成后,在SecureCRT可以看到hisilicon # 说明 uboot 启动了。
    uboot

  2. 修改bootargsbootcmd

    # 复制过去
    setenv bootargs "console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 init=/linuxrc mtdparts=hi_sfc:1M(boot),4M(kernel),11M(rootfs) rw"
    setenv bootcmd "sf probe 0;sf read 0x40000000 0x100000 0x400000;bootm 0x40000000";
    saveenv	# 保存参数
    reset	#重启
    

    这里bootargsbootcmd参数设置可以参考这篇文章:

    Hi3516DV300开发板——3.烧录过程问题、uboot相关设置及移植前准备

  3. 此时你应该就可以看到可以引导进入内核和挂载文件系统了。

    
                _ _ _ _ _ _ _ _ _ _ _ _
                \  _  _   _  _ _ ___
                / /__/ \ |_/
               / __   /  -  _ ___
              / /  / /  / /
      _ _ _ _/ /  /  \_/  \_ ______
    ___________\___\__________________
    
    Welcome to HiLinux.
    None of nfsroot found in cmdline.
    
    ~ # 
    
8. 正式烧录完成进入Linux

Linux
然后相关的驱动之类的就需要自己加油探索研究了!!!


Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐