cc1: some warnings being treated as errors
scripts/Makefile.build:320: recipe for target 'drivers/mtd/spi-nor/spi-nor.o' failed
make[3]: *** [drivers/mtd/spi-nor/spi-nor.o] Error 1
scripts/Makefile.build:573: recipe for target 'drivers/mtd/spi-nor' failed
make[2]: *** [drivers/mtd/spi-nor] Error 2
scripts/Makefile.build:573: recipe for target 'drivers/mtd' failed
make[1]: *** [drivers/mtd] Error 2
Makefile:1024: recipe for target 'drivers' failed
make: *** [drivers] Error 2
解决方法:
编译失败的原因主要是交叉编译工具的环境没有配置,根据手册,三条命令可以生成系统镜像,在交叉编译配置时,得先安装Xilinx Tools(也就是petalinux和vivado)或者是SDK,关于SDK安装可参考赛灵思 ZYNQ系列安装petalinux/SDK/VIVADO
一般来说,现在vivado已经包含SDK所以可以直接安装vivado即可
一、安装之后,设置工具环境:可先不走这一步
先安装64位系统下的32位环境(使32位程序在64位系统下可以执行程序)
bash$ sudo apt-get install ia32-libs
注意:如果说找不到这个安装包的话,那就安装其他可替代的包,在终端上会有提示,因为这个包可能有点老了,被新的包替代了。如果还不行,可以执行sudo apt-get install libglib2.0-0:i386,老的ia32包已经没有可真正替代的了,不过也不是一定需要他,因为现在操作系统或者我们之前搭建petalinux环境安装的32位包可能已经分散的包括了ia32包,因此可以先忽略这个包。
更新下面的第二步骤:
交叉编译工具现在已经升级为arm-linux-gnueabihf-gcc
所以交叉编译工具的环境配置变为如下
bash$ export CROSS_COMPILE=arm-linux-gnueabihf-
bash$ source ~/Xilinx/SDK/2018.2/settings64.sh # 32位系统就用 settings32.sh
下面就可以直接到2.2节了。
二、之后输入如下指令:配置环境变量,make编译时会用到这些环境变量
bash$ export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
bash$ source ~/Xilinx/SDK/2018.2/settings64.sh # 32位系统就用 settings32.sh
编译内核:
2.1 添加交叉编译工具即可
export CROSS_COMPILE=arm-xilinx-linux-gnueabi-
这个工具arm-xilinx-linux-gnueabi-gcc
是需要先安装的,软件包名字是xilinx-2011.09-50-arm-xilinx-linux-gnueabi.bin,百度云盘下载地址
配置环境变量:vim ~/.bashrc添加下面这一行
PATH=$PATH:~/CodeSourcery/Sourcery_CodeBench_Lite_for_Xilinx_GNU_Linux/bin
具体安装方法-参考这位博主!
!!PS:这个软件会区分是实体机还是虚拟机环境,如果是虚拟机环境,那么不会启动该软件的图形安装界面,会自动用命令行模式来安装,你只需要一直enter就行了,然后询问y/n时输入y即可,如果是实体机环境,那么会默认用图形界面来安装,跟windows安装软件一样了,只需要鼠标点点就行。
====================================
2.2 然后配置内核:
make ARCH=arm xilinx_zynq_defconfig
编译:make ARCH=arm -j4 生成zImage
三、要想生成uImage必须先得到uboot编译后的mkimage工具:
前提,先下载uboot程序下载xlnx-uboot,选一个你需要的版本,我选的是2018.2的,以此类推。
必须先安装petalinux工具,可参考petalinux安装,必须执行里面的修改.bashrc那条命令,不然找不到下面的工具
编译工具选择:export CROSS_COMPILE=arm-linux-gnueabihf-
配置zc706的配置文件,如果你是其他系列的板子,自己选择
make zynq_zc706_defconfig
可供选择的其他配置文件如下
如果还是选择上面的arm-xilinx-linux-gnueabi-gcc工具,那么会提示gcc版本低于6.0!!所以得修改为arm-linux-gnueabihf-gcc
编译uboot源程序,直接输入make即可,然后把mkimage的地址(在uboot源码的tools目录里)添加到PATH中:
gedit ~/.bashrc 添加下面这一行
PATH=$PATH:<path>/u-boot-xlnx-xilinx-v2018.2/tools(注意path自己填自己的值,如果在主目录,就填~波浪号就行)
之后在内核目录下可以编译生成uImage:
export CROSS_COMPILE=arm-linux-gnueabihf-
make ARCH=arm xilinx_zynq_defconfig
make ARCH=arm UIMAGE_LOADADDR=0x8000 uImage -j4
恭喜!成功了,生成的内核镜像在arch/arm/boot下:
PS:一共有3个镜像:
- Image:未压缩的内核镜像
- zImage:压缩的内核镜像,在运行时会自己解压缩自己
- uImage:使用U-boot头部(也就是用mkimage工具)封装zImage的uImage镜像
Image Name: Linux-4.14.0-xilinx
Created: Tue Sep 25 13:29:45 2018
Image Type: ARM Linux Kernel Image (uncompressed)
Data Size: 4169744 Bytes = 4072.02 KiB = 3.98 MiB
Load Address: 00008000
Entry Point: 00008000
Kernel: arch/arm/boot/uImage is ready