Hi3516A环境搭建,一次性编译通过,脚本

开始时系统用的18.04,是64位的走了很多弯路,后改为16.04, 32位系统,编译就方便很多。

以下是两个脚本,方便以后直接用,免得每次都要调。一个用于配置环境,安装必要的包。另一个用于编译,其中需要设置共享文件夹,存入一个mtd 1.5.2版本的工具包。然后sudo 执行即可。

1. 

首先是安装必要的包。

env_pack.sh

#!/bin/bash

sudo apt-get install u-boot-tools

sudo apt-get install zlib1g-dev

sudo apt-get install build-essential

sudo apt-get install ncurses-dev

sudo apt-get install libacl1-dev liblzo2-dev

sudo apt-get install uuid-dev

sudo apt-get install g++

echo "++++++++++++++++++++++++++++++++++++"
echo "++++++++++++++++++++++++++++++++++++"
echo "====pack has been installed OK!====="
echo "++++++++++++++++++++++++++++++++++++"
echo "++++++++++++++++++++++++++++++++++++"

sudo chmod +x prj.sh

sudo ./prj.sh

2.prj.sh

共享文件夹路径上传文件:mtd-utils_1.5.2.orig.tar.bz2

文件下载地址:https://mirrors.tuna.tsinghua.edu.cn/ubuntu/pool/universe/m/mtd-utils/

#!/bin/bash

SharePath=/mnt/hgfs/LinuxShare

cp $SharePath/Hi3516A_SDK* .

tar -xvzf Hi3516A*

cd Hi3516A_SDK_V1.0.5.0

./sdk.unpack

cd ..

DirPath=$(pwd)
mtdPath=$DirPath/Hi3516A_SDK_V1.0.5.0/osdrv/tools/pc/jffs2_tool
cross_install=$DirPath/Hi3516A_SDK_V1.0.5.0/osdrv/opensource/toolchain/arm-hisiv300-linux


cd $cross_install
chmod +x cross.v300.install

./cross.v300.install
#这一条必须用root用户来执行,sudo source 找不到指令, $权限则profile权限又不对
source /etc/profile

#cat /etc/profile


cd $DirPath

cp $SharePath/mtd-utils_1.5.2.orig.tar.bz2 $mtdPath/mtd-utils-1.5.2.tar.bz2

sed -i "s/1.5.0/1.5.2/g" $mtdPath/Makefile


echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "++++++++prepare is ok, now we can make!++++++++++++++"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++"
echo "+++++++++++++++++++++++++++++++++++++++++++++++++++++"

cd Hi3516A_SDK_V1.0.5.0/osdrv

make OSDRV_CROSS=arm-hisiv300-linux all

以上,第一个.sh脚本负责安装必要的pack, 如果你看过别人的贴子,或者自己编译的时候会遇见很多问题,只要用第一个脚本,一次性安装就可以了。两个都可以单独运行,毕竟不可能每次编译都要安装pack浪费时间吧。 

在第二个脚本里,首先应该,su  用root用户来执行文件, 这也是我测试的时候 只用了sudo,很多次都会出错,而我编译成功时候感觉是不会错的,后来发现是权限问题。

以下生成的文件系统

pub/
├── bin
│   ├── board_uclibc
│   │   ├── ethtool
│   │   ├── flashcp
│   │   ├── flash_erase
│   │   ├── flash_otp_dump
│   │   ├── flash_otp_info
│   │   ├── gdb-arm-hisiv300-linux
│   │   ├── hifat
│   │   │   ├── himount_api.h
│   │   │   ├── how_to_use_[chs].txt
│   │   │   ├── how_to_use_[en].txt
│   │   │   ├── shared
│   │   │   │   ├── himount
│   │   │   │   ├── libfs_lib.so
│   │   │   │   ├── libfuse.so
│   │   │   │   ├── libfuse.so.2
│   │   │   │   ├── libfuse.so.2.8.3
│   │   │   │   ├── libhimount_api.so
│   │   │   │   ├── libsdparm.so
│   │   │   │   ├── libulockmgr.so
│   │   │   │   ├── libulockmgr.so.1
│   │   │   │   └── libulockmgr.so.1.0.1
│   │   │   ├── src
│   │   │   │   └── hifat-1.0-uclibc.tgz
│   │   │   └── static
│   │   │       ├── himount
│   │   │       └── libhimount_api.a
│   │   ├── mtd_debug
│   │   ├── nanddump
│   │   ├── nandtest
│   │   ├── nandwrite
│   │   └── sumtool
│   └── pc
│       ├── lzma
│       ├── mkfs.cramfs
│       ├── mkfs.jffs2
│       ├── mkfs.ubifs
│       ├── mkimage
│       ├── mksquashfs
│       ├── mkyaffs2image610
│       └── ubinize
├── image_uclibc
│   ├── rootfs_hi3516a_128k.jffs2
│   ├── rootfs_hi3516a_256k.jffs2
│   ├── rootfs_hi3516a_2k_128k_32M.img
│   ├── rootfs_hi3516a_2k_4bit.yaffs2
│   ├── rootfs_hi3516a_64k.jffs2
│   ├── u-boot-hi3516a.bin
│   ├── u-boot-hi3516d.bin
│   └── uImage_hi3516a
└── rootfs_uclibc.tgz

8 directories, 44 files

 

烧写uboot、内核、文件系统:

在fastboot工具中,提供了三种方式:按区,按地址,boot烧写。

第一种方式需要一个*.xml文件, 我对xml接触不多,所以放弃了。  所以可以先用fashtboot烧写uboot,再按地址烧写uImage。根据手册配置ip并添加文件即可,另外也可以:

3、烧写映像文件到SPI Flash
    以16M SPI Flash为例。
    1)地址空间说明
        |      1M       |      3M       |      12M      |
        |---------------|---------------|---------------|
        |     boot      |     kernel    |     rootfs    |

        以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
       2)烧写u-boot
        sf probe 0
        mw.b 82000000 ff 100000
        tftp 0x82000000 u-boot-hi3516a.bin
        sf probe 0
        sf erase 0 100000
        sf write 82000000 0 100000	
        reset    
    3)烧写内核
        mw.b 82000000 ff 300000
        tftp 82000000 uImage_hi3516a
        sf probe 0
        sf erase 100000 300000
        sf write 82000000 100000 300000
    4)烧写文件系统
        mw.b 82000000 ff C00000
        tftp 0x82000000 rootfs_hi3516a_64k.jffs2
        sf probe 0
        sf erase 400000 C00000
        sf write 82000000 400000 C00000
    5)设置启动参数
        setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=jffs2 mtdparts=hi_sfc:1M(boot),3M(kernel),12M(rootfs)'
        setenv bootcmd 'sf probe 0;sf read 0x82000000 0x100000 0x300000;bootm 0x82000000'
        sa

4、烧写映像文件到NAND Flash		
   以64M NAND Flash为例。
    1)地址空间说明
        |      1M       |      3M       |     32M       |         28M            |
        |---------------|---------------|---------------|------------------------|
        |     boot      |    kernel     |    rootfs     |        other           |

        以下的操作均基于图示的地址空间分配,您也可以根据实际情况进行调整。
    2)烧写u-boot
        mw.b 82000000 ff 100000
        tftp 82000000 u-boot-hi3516a.bin
        nand erase 0 100000
        nand write 82000000 0 100000
        reset
    3)烧写内核
        mw.b 82000000 ff 300000
        tftp 82000000 uImage_hi3516a
        nand erase 100000 300000
        nand write 82000000 100000 300000
    4)烧写文件系统
        mw.b 82000000 ff 2000000
        tftp 82000000 rootfs_Hi3516a_2k_4bit.yaffs2
        nand erase 400000 2000000
        nand write.yaffs 82000000 400000  96d200    #注意:96d200为rootfs文件实际大小(16进制)
    5)设置启动参数
	setenv bootargs 'mem=64M console=ttyAMA0,115200 root=/dev/mtdblock2 rootfstype=yaffs2 mtdparts=hinand:1M(boot),3M(kernel),32M(rootfs),28M(test)'
        setenv bootcmd 'nand read 0x82000000 0x100000 0x300000;bootm 0x82000000'
        sa
	

 

你可能感兴趣的:(Hi3516A)