一、准备工作
1. 建立工作文件夹
2.下载crosstool-ng
git clone https://github.com/crosstool-ng/crosstool-ng
crosstool-ng的环境需要libncurse5-dev
sudo apt-get install libncurse5-dev
3.安装
安装autoconf: sudo apt-get install autoconf进入crosstool-ng目录,执行./bootstrap,生成 configure 执行文件 检查安装环境,报什么错,就安装什么软件:
./configure --prefix=`pwd`/crosstool 需要的软件有:sudo apt-get install gperf bison flex texinfo help2man gawk 执行命令 make执行命令 make instalexport PATH="${PATH}:`pwd`/crosstool/bin"
二、编译链制作
1.根目录下建立三个文件夹
mkdir src x-tools crosstool
进入crosstool目录:
cd ~/.crosstool
执行:ct-ng list-samples
ct-ng show-arm-cortexa9_neon-linux-gnueabihf
ct-ng arm-cortexa9_neon-linux-gnueabihf
ct-ng menuconfig
Target options ---> 从datasheet中的 BLOCK DIAGRAM 中可以看到
*** Target optimisations ***
(armv7-a) Architecture level :指令集架构,exynos4412为armv7-a架构,-march=name
(cortex-a9) Emit assembly for CPU :CPU核心类型, -mcpu=name
(cortex-a9) Tune for CPU:对CPU的优化,具体可以查看芯片手册,-mtune=name
这些参数都可以gcc里面对应,man gcc然后查找关键字即可
工具链的分类:http://blog.csdn.net/ccskyer/article/details/16864173
kernel下载:https://www.kernel.org/pub/linux/kernel/v4.x/
gcc-linaro下载:http://releases.linaro.org/components/toolchain/binaries/6.3-2017.02/
其他工具下载:http://ftp.gnu.org/gnu/
执行编译命令:ct-ng build,开始进行工具链的构建:
2. 编译完成
ls ~/x-tools/arm-cortexa9_neon-linux-gnueabihf/
建立环境变量:
PATH=~/x-tools/arm-cortexa9_neon-linux-gnueabihf/bin:$PATH/ arm-cortexa9_neon-linux-gnueabihf-gcc -v
3.编译内核
make ARCH=arm CROSS_COMPILE=arm-cortexa9_neon-linux-gnueabihf- exynos_defconfig
exynos_defconfig是内核自带的配置文件,具体目录在 /arch/arm/config/ 目录中
make ARCH=arm CROSS_COMPILE=arm-cortexa9_neon-linux-gnueabihf- zImage modules
三、报错
1. build failed int step ‘Retrieving needed toolchain components‘ tarballs‘
查看log可知道,isl下载出错,进行手动下载:http://isl.gforge.inria.fr/
然后重新编译。
gcc-linaro-6.3-2017.02.tar.xa:http://releases.linaro.org/components/toolchain/gcc-linaro/6.3-2017.02/