谷动谷力

 找回密码
 立即注册
查看: 1610|回复: 0
打印 上一主题 下一主题
收起左侧

Hi3518EV300 Linux系统移植

[复制链接]
跳转到指定楼层
楼主
发表于 2022-7-27 16:27:57 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Hi3518EV300  Linux系统移植

1. Linux系统移植

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


默认具备:

Hi3518EV200 SDK
arm-himix100-linux.tgz 交叉编译工具链
Linux虚拟机或者环境
熟悉Linux相关操作
uboot 相关操作
1. 准备基本环境
1. 将Linux shell改为bash
查看shell是否为bash,在终端运行如下命令
  1. ls -l /bin/sh
复制代码


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

方法一:在终端运行如下命令,然后选择 no。
  1. sudo dpkg-reconfigure dash
复制代码


方法二:先删除sh,再创建软链接。
  1. sudo rm -rf /bin/sh
  2. sudo ln -s /bin/bash /bin/sh
复制代码



2. 展开SDK
解压SDK、进入
  1. tar -zxvf Hi3516EV200_SDK_V1.0.1.0.tgz
  2. cd Hi3516EV200_SDK_V1.0.1.0/
复制代码


展开SDK
  1. source sdk.unpack
复制代码


3.交叉编译工具
解压安装
  1. tar zxvf arm-himix100-linux.tgz
  2. cd arm-himix100-linux/
复制代码


安装
  1. sudo ./arm-himix100-linux.install
复制代码


设置环境
  1. echo "export PATH=/opt/hisi-linux/x86-arm/arm-himix100-linux/bin:$PATH" >> ~/.bashrc
  2. echo "export LC_ALL=C" >> ~/.bashrc
  3. arm-himix100-linux-gcc --v
复制代码

运行arm-himix100-linux-gcc --v,可能会出错误:
  1. arm-hisiv500-linux-gcc: error while loading shared libraries: libstdc++.so.6: cannot open shared object file: No such file or directory
复制代码

解决方法:
请参阅:解决libstdc++.so.6: cannot open shared object file: No such file or directo...-谷动谷力 (sunsili.com)


安装成功:
  1. arm-hisiv500-linux-gcc -v
  2. Using built-in specs.
  3. COLLECT_GCC=arm-hisiv500-linux-gcc
  4. COLLECT_LTO_WRAPPER=/opt/hisi-linux/x86-arm/arm-hisiv500-linux/bin/../libexec/gcc/arm-hisiv500-linux-uclibcgnueabi/4.9.4/lto-wrapper
  5. Target: arm-hisiv500-linux-uclibcgnueabi
  6. Configured with: ../gcc-linaro-4.9-2015.06/configure --host=x86_64-linux-gnu --build=x86_64-linux-gnu --target=arm-hisiv500-linux-uclibcgnueabi --prefix=/home/sying/build-toolchain/gcc-uclibc/install/arm-hisiv500-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/build-toolchain/gcc-uclibc/install/arm-hisiv500-linux/target --with-build-sysroot=/home/sying/build-toolchain/gcc-uclibc/install/arm-hisiv500-linux/target --with-gmp=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-mpfr=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-mpc=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-ppl=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-cloog=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-libelf=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --enable-libgomp --disable-libitm --disable-libsanitizer --enable-poison-system-directories --with-libelf=/home/sying/build-toolchain/gcc-uclibc/install/host_lib --with-pkgversion=Hisilicon_v500_20150831 --with-bugurl=http://www.hisilicon.com/cn/service/claim.html
  7. Thread model: posix
  8. gcc version 4.9.4 20150629 (prerelease) (Hisilicon_v500_20150831)
复制代码


3.编译osdrv
参考:osdrv 下 readme

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

  1. cd osdrv #进入osdrv
  2. # 将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中
  3. wget -P opensource/kernel/ https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.9.37.tar.gz
复制代码
  1. # 将下载的 yaffs2utils-0.2.9.tar.gz 存放到osdrv的tools/pc/mkyaffs2image/目录中
  2. wget -P tools/pc/mkyaffs2image/ https://github.com/dorigom/yaffs2utils/archive/0.2.9.tar.gz

  3. # 将下载的 gdb-7.9.1.tar.gz 存放到 osdrv的tools/board/gdb/目录中
  4. wget -P tools/board/gdb/ http://ftp.gnu.org/gnu/gdb/gdb-7.9.1.tar.gz

  5. # 将下载的 ncurses-6.0.tar.gz 存放到 osdrv的tools/board/gdb/目录中
  6. wget -P tools/board/gdb/ http://ftp.gnu.org/gnu/ncurses/ncurses-6.0.tar.gz
复制代码




完整编译

make OSDRV_CROSS=arm-himix100-linux CHIP=hi3518ev300 all

编译过程报错解决

先安装下面的依赖包:

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

报错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位库依赖。

报错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


报错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版本

报错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

编译成功
出现 ---------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烧录
文件准备:

osdrv -> pub -> hi3518ev300_spi_image_uclibc 目录下的这三个文件是我们烧录需要的:
这里文件系统具体可以根据uboot启动看你的 SPI Flash 的Block Size 进行选择

文件        说明
u-boot-hi3516ev200.bin        u-boot镜像
uImage_hi3516ev200        kernel镜像
rootfs_hi3516ev200_64k.jffs2        64K jffs2 文件系统镜像
将这三个文件拷贝到你的Windows下,打开HiTools,开始我们的最激动人心的时刻!!!


!!!!!!设置相关参数!!!!!!!(设置不对,可能烧录就有问题)
!!!!!!这里不清楚,就按我下面设置一模一样设置,不要乱改值!!!!!!

选择USB口
选择你开发板的端口号(去设备管理器查看)
选择按分区烧写
选择刚才让你拷贝过来的3个文件,一定按顺序加入
将器件类型改为:spi nor
不明白的就按我的一模一样的设置(建议尽量不要乱改,这里的大小设置是完全够折腾的)
勾选第二个和第三个烧录,第一个uboot不建议烧录!

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

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


7. 开发板uboot启动设置(!!重要!!)
烧录完成后会自动进入系统,但此时由于 uboot 设置参数不正确,无法引导内核启动,所以还需要设置uboot。

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


修改bootargs 和 bootcmd

# 复制过去
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        #重启

这里bootargs 和 bootcmd参数设置可以参考这篇文章:

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

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


            _ _ _ _ _ _ _ _ _ _ _ _
            \  _  _   _  _ _ ___
            / /__/ \ |_/
           / __   /  -  _ ___
          / /  / /  / /
  _ _ _ _/ /  /  \_/  \_ ______
___________\___\__________________

Welcome to HiLinux.
None of nfsroot found in cmdline.

~ #

8. 正式烧录完成进入Linux

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


+10
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|深圳市光明谷科技有限公司|光明谷商城|Sunshine Silicon Corpporation ( 粤ICP备14060730号|Sitemap

GMT+8, 2024-11-17 15:56 , Processed in 0.241363 second(s), 37 queries .

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表