首先下载linaro预编译好的arm64工具链,如下:

# mkdir aarch64-toolchain
# cd aarch64-toolchain
# wget https://releases.linaro.org/components/toolchain/binaries/5.3-2016.02/aarch64-linux-gnu/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz

将工具链的bin目录添加到执行路径中:

# tar xf gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu.tar.xz
# export PATH=$PATH:$PWD/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin

测试一下是否能找到linaro工具链的命令,如aarch64-linux-gnu-gcc,正确执行说明上一步的路径设置成功,当前gcc的版本为5.3.1:

# aarch64-linux-gnu-gcc -v
Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
Target: aarch64-linux-gnu
Configured with: ...
Thread model: posix
gcc version 5.3.1 20160113 (Linaro GCC 5.3-2016.02)

编译LINUX内核

可以使用linaro提供的内核代码,如下:

# git clone git://git.linaro.org/kernel/linaro-aarch64.git
# cd linaro-aarch64
# git checkout -b linaro-aarch64 origin/linaro-aarch64

另外,就是使用官方版本的内核,此处使用Linux-3.10版本:

# mkdir kernel
# cd kernel
# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v3.x/linux-3.10.tar.xz
# tar -xf linux-3.10.tar.xz
# cd linux-3.10/

使用内核自带的ARM64默认配置文件,如下:

# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig

结果,入到如下的问题:

# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- vmlinuxCC      kernel/bounds.s
In file included from include/linux/compiler.h:54:0,from include/uapi/linux/stddef.h:1,from include/linux/stddef.h:4,from /home/kai/linux/linux-3.10/include/uapi/linux/posix_types.h:4,from include/uapi/linux/types.h:13,from include/linux/types.h:5,from include/linux/page-flags.h:8,from kernel/bounds.c:9:
include/linux/compiler-gcc.h:103:30: fatal error: linux/compiler-gcc5.h: No such file or directory
compilation terminated.

查看目录include/linux/下文件,确实没有compiler-gcc5.h。

$ ll include/linux/compiler-gcc*
-rw-rw-r-- 1 root root  635 7月   1  2013 include/linux/compiler-gcc3.h
-rw-rw-r-- 1 root root 2688 7月   1  2013 include/linux/compiler-gcc4.h
-rw-rw-r-- 1 root root 4074 7月   1  2013 include/linux/compiler-gcc.h

查看出问题的文件compile-gcc.h,第103行左右相关代码如下:其中宏定义__GNUC__在编译时为5,对应于文件compiler-gcc5.h,看来内核版本3.10还没有支持版本为5及以上的GCC编译器。将内核版本换为4.10。

#define __gcc_header(x) #x
#define _gcc_header(x) __gcc_header(linux/compiler-gcc##x.h)
#define gcc_header(x) _gcc_header(x)
#include gcc_header(__GNUC__)

更换内核版本为4.10,编译顺利完成:

# wget https://mirrors.edge.kernel.org/pub/linux/kernel/v4.x/linux-4.10.tar.xz
# tar -xf linux-4.10.tar.xz
# cd linux-4.10/
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- defconfig
# make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image
scripts/kconfig/conf  --silentoldconfig KconfigCHK     include/config/kernel.releaseUPD     include/config/kernel.releaseWRAP    arch/arm64/include/generated/asm/bugs.h......LD      vmlinux.oMODPOST vmlinux.oKSYM    .tmp_kallsyms1.oKSYM    .tmp_kallsyms2.oLD      vmlinuxSORTEX  vmlinuxSYSMAP  System.mapOBJCOPY arch/arm64/boot/Image

编译完成。

使用linaro工具链编译ARM64架构内核相关推荐

  1. 使用交叉编译工具链编译并调试linux内核

    内核源码的github地址 现在之后进入到目录之中 编译之前的准备工作:安装一些软件 sudo apt-get install qemu libncurses5-dev gcc-arm-linux-g ...

  2. linux 脚本自动编制工具,全自动工具链编译脚本

    GCC 工具链自动编译脚本 本工具用于自动编译指定的工具链,可以同时生成运行于本机系统 (Build system) 和 Windows 系统(可以修改)的两套工具链 具体编译规则指定于 .confi ...

  3. Linux编译x86架构内核出现_stack_chk_guard未定义错误

    背景 android模拟器运行于virtualbox中,而virtualbox运行于x86架构的pc端,所以android及其Linux内核都编译成x86架构.当virtualbox的vt未开启的情况 ...

  4. android 静态编译链接,libpcap静态链接错误使用ndk工具链编译为android

    我已经使用Git和android从源代码下载了外部文件夹中的libpcap 回购.我使用ndk(android-ndk-r5b)的工具来编译这些库 脚步: ./configure --prefix = ...

  5. ttylinux-src-mp8编译工具链编译经过

    1. 我是用的Ubuntu 11.10 2. 必须装的软件,否则后面编译会出错的: ① ncurses-devel必须的 ② texinfo(就是缺少makeinfo命令不然编译glibc会出错,可以 ...

  6. Buildroot构建指南——工具链

    Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件.一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工 ...

  7. Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  8. Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构

      最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...

  9. 【编译原理】交叉工具链详解

    1.嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分,宿主机是执行编译.链接嵌入式软件的计算机,目标机是运行嵌入式软件的硬件平台.在宿主机执行编译的流程如下: 而所谓的交叉编译就 ...

  10. RISCV toolchain编译工具链搭建

    目录 写在前面 1.获取源文件 2.安装相关依赖包 3.修改环境变量 4.编译GCC 写在前面 刚刚接触RISCV编译器,根据网上RISCV toolchain工具链的搭建方法,结合自己体会,写点儿学 ...

最新文章

  1. ios xib 四等分_ios Xib的几种用法[转]
  2. 在vc或mfc中显示IplImage的方法
  3. java jolt tuxedo_java使用jolt调用tuxedo服务
  4. 介绍一下画图小能手matplotlib。
  5. android wear 2 手表,Android Wear 2.0 和新款智能手表有望在2月8号发布
  6. Android短信验证码倒计时
  7. java 开发手机web,手机web app开发笔记
  8. [转载] 中国象棋软件-引擎实现(二)棋局表示
  9. 数据库持久化ORM框架Hibernate、JPA、Mybatis、JOOQ和JDBC Template的比较
  10. Android 用webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决 ....
  11. js 数组、对象转json 以及json转 数组、对象
  12. 电商管理后台 API 接口文档
  13. MTK平台驱动基本介绍
  14. 常见的几种多媒体设计框架
  15. “粤省事”春运专区上线 31项服务让回家更便捷
  16. 十进制进制法_关于二进制、十进制、八进制、十六进制数据转换计算方法详细总结...
  17. Linux-CentOS 安装配置swftools
  18. python中show函数_Pycharm(Python)下imshow函数显示问题的解决方法
  19. rt-thread i2c 使用教程
  20. 了解RESTful接口设计风格

热门文章

  1. Hugo博客双线部署
  2. 堆溢出off-by-one(asis-ctf-2016 pwn 之 b00ks)
  3. 求一个点到任意两个点所在直线距离 C#代码公式
  4. BeEF-XSS实验手记
  5. 【网格压缩测评】MeshQuan、MeshOpt、Draco
  6. 简单说 通过CSS实现 文字渐变色 的两种方式
  7. cnzz.php,php,curl_PHP curl抓取cnzz统计数据,php,curl,cnzz - phpStudy
  8. IE浏览器清除缓存的坑
  9. svn status详解
  10. SQLServer@@FETCH_STATUS含义