文章中提到的压缩包如果SDK包里没有的话直接去网上下载
这个压缩包最好在Linux环境下解压运行
解压后进入Hi3516EV200_SDK_V1.0.1.1 执行:./sdk.unpack(请用root或sudo 权限执行)将会展开SDK包打包压缩存放的内容,请按照提示完成操作。
( 如果您需要通过WINDOWS 操作系统中转拷贝SDK包,请先运行./sdk.cleanup,收起SDK包的内容,拷贝到新的目录后再展开。)
编译osdrv
1.osdrv 顶层 Makefile 使用说明
本目录下的编译脚本支持 arm-himix100-linux 和 arm-himix200-linux 工具链,其中 arm-himix100-linux 对应uclibc库。arm-himix200-linux 对应glibc库。具体命令如下(以hi3516ev200举例)
a:linux-4.9.37.tar.gz 将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中
b:yaffs2utils-0.2.9.tar.gz 将下载的 yaffs2utils-0.2.9.tar.gz 存放到osdrv的tools/pc/mkyaffs2image/目录中
c:gdb-7.9.1.tar.gz将下载的 gdb-7.9.1.tar.gz 存放到 osdrv的tools/board/gdb/目录中
d:ncurses-6.0.tar.gz将下载的 ncurses-6.0.tar.gz 存放到 osdrv的tools/board/gdb/目录中
e:util-linux-2.31.tar.gz将下载的 util-linux-2.31.tar.gz 存放到 osdrv的tools/pc/cramfs_tool/目录中
f:xz-5.2.2.tar.bz2将下载的 xz-5.2.2.tar.bz2 存放到 osdrv的tools/pc/squashfs4.3/目录中
n: squashfs4.3.tar.gz将下载的 squashfs4.3.tar.gz 存放到 osdrv的 tools/pc/squashfs4.3 目录中
g:e2fsprogs-1.42.13.tar.gz将下载的 e2fsprogs-1.42.13.tar.gz 存放到 osdrv的tools/board/e2fsprogs/中
h: lzo-2.09.tar.gz将下载的 lzo-2.09.tar.gz 存放到 osdrv的tools/pc/jffs2_tool/目录中
i:eudev-3.2.7.tar.gz将下载的 eudev-3.2.7.tar.gz 存放到 osdrv的tools/board/eudev-3.2.7目录中
j: libuuid-1.0.3.tar.gz将下载的 libuuid-1.0.3.tar.gz 存放到 osdrv的tools/board/mtd-utils/目录中
由于zlib 工具在pc端及board端多处都有使用到,所以需要将源码包分别放置到下面路径:
将下载的 zlib-1.2.11.tar.gz 存放到 osdrv的 tools/board/mtd-utils/ 目录中
将下载的 zlib-1.2.11.tar.gz 存放到 osdrv的 tools/pc/zlib/ 目录中
将下载的 zlib-1.2.11.tar.gz 存放到 osdrv的 tools/pc/squashfs4.3/ 目录中
由于mtd-utils在pc端及board端都有使用到,所以需要将源码包分别放置到下面路径:
将下载的 mtd-utils-2.0.2.tar.bz2 存放到 osdrv的 tools/board/mtd-utils/ 目录中
将下载的 mtd-utils-2.0.2.tar.bz2 存放到 osdrv的 tools/pc/jffs2_tool/目录中
m:gzip-1.8.tar.gz将下载的 gzip-1.8.tar.gz 存放到 osdrv的 tools/pc/hi_gzip/ 目录中
(1)编译整个osdrv目录:(多半成功不了)
注意:默认不发布内核源码包,只发布补丁文件。内核源码包需自行从开源社区上下载。
从linux开源社区下载v4.9.37版本的内核:
1)进入网站:www.kernel.org
2)选择HTTP协议资源的Index of /pub/选项,进入子页面
3)选择linux/菜单项,进入子页面
4)选择kernel/菜单项,进入子页面
5)选择v4.x/菜单项,进入子页面
6)下载linux-4.9.37.tar.gz (或者linux-4.9.37.tar.xz)到osdrv/opensource/kernel目录下
make all
其中 hi3516dv200 和 hi3516ev300 支持 arm-himix200-linux 工具链
make OSDRV_CROSS=arm-himix200-linux CHIP=hi3516dv200 all
make OSDRV_CROSS=arm-himix200-linux CHIP=hi3516ev300 all
注意:由于Makefile中文件系统编译依赖组件较多,不能保证单独编译的文件系统可用,建议采用make all编译;
但可单独编译uboot,kernel;
可以传如下参数:
a, BOOT_MEDIA:spi(default) or emmc
b, CHIP:hi3516ev200(default) or hi3516ev300 or hi3518ev300 or hi3516dv200
c, 如果客户想要更换可以使用TARGET_XLSM=*.xlsm来指定所需要的u-boot表格文件
(2)清除整个osdrv目录的编译文件:
make clean
(3)彻底清除整个osdrv目录的编译文件,除清除编译文件外,还删除已编译好的镜像:
make distclean
(4)单独编译kernel:
打补丁:
1)将下载的 linux-4.9.37.tar.gz 存放到 osdrv的opensource/kernel目录中
2)在linux服务器中进入 osdrv 的根目录,执行如下命令:
cd opensource/kernel
tar -zxf linux-4.9.37.tar.gz
这个文件夹上要是有个锁的标志的话需要加个权限 (chmod 777 linux-4.9.37.tar.gz)
mv linux-4.9.37 linux-4.9.y
cd linux-4.9.y
patch -p1 < ../linux-4.9.37.patch
cd ../
tar -czf linux-4.9.y.tgz linux-4.9.y
cd ../../
待进入内核源代码目录后,执行以下操作
cp arch/arm/configs/hi3516ev200_full_defconfig .config
(emmc启动时执行如下操作:cp arch/arm/configs/hi3516ev200_emmc_defconfig .config)
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- menuconfig
这个最好先别动选择Exit(后面需要根据需要生成内核的时候才需要更改这些)
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- uImage
生成的内核文件在arch/arm/boot/uImage
(emmc启动时执行如下操作:cp arch/arm/configs/hi3516ev200_emmc_defconfig .config)
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- modules
(5)单独编译uboot:
注意:发布包默认按照DMEB板的配置发布,如果客户单板和DEMB板不一致,需要根据客户自己的单板环境修改
uboot表格才能使用,否则可能导致uboot无法启动或者其他问题。
进入 uboot目录 执行: tar -zxf u-boot-2016.11.tgz
待进入 uboot源代码目录 后,执行以下操作
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_defconfig
(emmc启动时执行如下操作:make ARCH=arm CROSS_COMPILE=arm-himix100-linux- hi3516ev200_emmc_defconfig)
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- -j 20
编译成功后,将在U-boot 目录下生成u-boot.bin。
Windowns下进入到osdrv/tools/pc/uboot_tools/目录下打开对应单板的Excel文件,在main标签中点
击"Generate reg bin file"按钮,生成reg_info.bin即为对应平台的表格文件。
使用板子对应的配置的那个表格
从osdrv/tools/pc/uboot_tools目录拷贝reg_info.bin到boot源代码目录,重命名为.reg
cp ../../../tools/pc/uboot_tools/reg_info.bin .reg
make ARCH=arm CROSS_COMPILE=arm-himix100-linux- u-boot-z.bin
opensource/uboot/u-boot-2016.11下生成的u-boot-hi3516ev200.bin即为可用的u-boot镜像
(6)制作文件系统镜像:
在osdrv/pub/中有已经编译好的文件系统,因此无需再重复编译文件系统,只需要根据单板上flash的规格型号制
作文件系统镜像即可-> 这个版本 rootfs_hi3516ev200_64k.jffs2
进入busybox 执行: tar -zxf busybox-1.26.2.tgz
1)配置busybox
进入源码目录 找到config_v100_a7_softfp_neon或config_v200_a7_softfp_neon 复制一份改名为 .config
指定配置文件,更改配置本质上就是改.config文件,不用图形化界面直接打开.config文件直接编辑也行
config_v100_a7_softfp_neon 对应 32bit 操作系统工具链 arm-himix100-linuxlinux-
执行:make menuconfig
busybox的配置界面和内核配置相似,其 功能选项 容易理解,可以根据自己的需求 选择配置。在 Busybox
Settings --- > Build Options 中
第一个选项是用于选择 SDK 推荐的交叉编译器,配置好后保存并退出。欲了解busybox 各选项含义请参考busybox 配置帮助。
2)编译和安装busybox
执行make
make install
编译并安装成功后,在busybox 目录下的_install 目录下生成以下目录及文件:
3)制作根文件系统
在osdrv目录先执行:mkdir rootbox
cd rootbox
在rootbox中创建以下文件夹 etc dev lib tmp var mnt home proc
在内核源码目录下创建名为_modules_install
执行:make ARCH=arm INSTALL_MOD_PATH=_modules_install modules_install
将生成在_modules_install/lib中的modules拷贝到rootbox中
etc 中需要inittab、fstab、init.d/rcS文件等,这些文件最好从 busybox-1.26.2/examples/bootfloppy/etc 目录下
拷贝过来,根据需要自行修改
dev 从系统根目录拷贝sudo cp -R /dev /home/tom/Hi3516EV200_SDK_V1.0.1.1/osdrv/rootbox
更改权限sudo chmod -R 777 dev/
lib 从opt/hisi-linux/x86-arm/arm-himix100-linux/runtime_uclibc/a7_softfp_neon-vfpv4中复制lib压缩包到
rootbox中的lib中并解压
sudo tar -xf /opt/hisi-linux/x86-arm/arm-himix100-linux/runtime_uclibc/a7_softfp_neon-vfpv4/lib.tgz -C ./
将上一步中编译生成在_install中的bin sbin usr linuxrc复制到rootbox中
到这一步rootbox下应该有以下目录及文件
编译生成根文件系统的工具
解压automake-1.15.1
将autoconf-2.6.8解压到automake-1.15.1中
将m4-1.4.9 解压到autoconf-2.6.8中 包含关系如下
执行:./configure
make
sudo make install
返回上级目录
执行:./configure
make
sudo make install
返回上级目录
执行:./configure
make
sudo make install
解压lzo-2.09.tar.gz
将autoconf-2.68复制到 lzo-2.09 中一份
执行:./configure
make
sudo make install
在jffs2_tool目录下执行make 如果报错uuid和library安装下面的依赖
apt-get install zlib1g-dev liblzo2-dev uuid-dev pkg-config
生成mkfs.jffs2 把它复制到usr/bin下
在osdrv目录下执行:mkfs.jffs2 -d ./rootbox -l -e 0x10000 -o rootfs.jffs2
生成我们需要的文件系统