开始时系统用的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