使用linaro工具链编译ARM64架构内核
首先下载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架构内核相关推荐
- 使用交叉编译工具链编译并调试linux内核
内核源码的github地址 现在之后进入到目录之中 编译之前的准备工作:安装一些软件 sudo apt-get install qemu libncurses5-dev gcc-arm-linux-g ...
- linux 脚本自动编制工具,全自动工具链编译脚本
GCC 工具链自动编译脚本 本工具用于自动编译指定的工具链,可以同时生成运行于本机系统 (Build system) 和 Windows 系统(可以修改)的两套工具链 具体编译规则指定于 .confi ...
- Linux编译x86架构内核出现_stack_chk_guard未定义错误
背景 android模拟器运行于virtualbox中,而virtualbox运行于x86架构的pc端,所以android及其Linux内核都编译成x86架构.当virtualbox的vt未开启的情况 ...
- android 静态编译链接,libpcap静态链接错误使用ndk工具链编译为android
我已经使用Git和android从源代码下载了外部文件夹中的libpcap 回购.我使用ndk(android-ndk-r5b)的工具来编译这些库 脚步: ./configure --prefix = ...
- ttylinux-src-mp8编译工具链编译经过
1. 我是用的Ubuntu 11.10 2. 必须装的软件,否则后面编译会出错的: ① ncurses-devel必须的 ② texinfo(就是缺少makeinfo命令不然编译glibc会出错,可以 ...
- Buildroot构建指南——工具链
Linux系统的交叉编译工具链用来将源代码变成bin文件或者库文件的一个软件.一般大家默认工具链等于gcc或者arm-linux-gcc,但是实际上,gcc只是工具链的编译器部分,不是全部,制作一个工 ...
- Linux 之八 完整嵌入式 Linux 环境、(交叉)编译工具链、CPU 体系架构、嵌入式系统构建工具
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- Linux 之八 完整嵌入式 Linux 环境及构建工具、(交叉)编译工具链、CPU 体系架构
最近,工作重心要从裸机开发转移到嵌入式 Linux 系统开发,由于之前对嵌入式 Linux 环境并不是很了解,因此,第一步就是需要了解如何搭建一个完整的嵌入式 Linux 环境.现在将学习心得记录 ...
- 【编译原理】交叉工具链详解
1.嵌入式开发模型-交叉开发 在嵌入式开发过程中有宿主机和目标机的角色之分,宿主机是执行编译.链接嵌入式软件的计算机,目标机是运行嵌入式软件的硬件平台.在宿主机执行编译的流程如下: 而所谓的交叉编译就 ...
- RISCV toolchain编译工具链搭建
目录 写在前面 1.获取源文件 2.安装相关依赖包 3.修改环境变量 4.编译GCC 写在前面 刚刚接触RISCV编译器,根据网上RISCV toolchain工具链的搭建方法,结合自己体会,写点儿学 ...
最新文章
- ios xib 四等分_ios Xib的几种用法[转]
- 在vc或mfc中显示IplImage的方法
- java jolt tuxedo_java使用jolt调用tuxedo服务
- 介绍一下画图小能手matplotlib。
- android wear 2 手表,Android Wear 2.0 和新款智能手表有望在2月8号发布
- Android短信验证码倒计时
- java 开发手机web,手机web app开发笔记
- [转载] 中国象棋软件-引擎实现(二)棋局表示
- 数据库持久化ORM框架Hibernate、JPA、Mybatis、JOOQ和JDBC Template的比较
- Android 用webService产生java.lang.ClassCastException: org.ksoap2.serialization.SoapPrimitive错误的解决 ....
- js 数组、对象转json 以及json转 数组、对象
- 电商管理后台 API 接口文档
- MTK平台驱动基本介绍
- 常见的几种多媒体设计框架
- “粤省事”春运专区上线 31项服务让回家更便捷
- 十进制进制法_关于二进制、十进制、八进制、十六进制数据转换计算方法详细总结...
- Linux-CentOS 安装配置swftools
- python中show函数_Pycharm(Python)下imshow函数显示问题的解决方法
- rt-thread i2c 使用教程
- 了解RESTful接口设计风格
热门文章
- Hugo博客双线部署
- 堆溢出off-by-one(asis-ctf-2016 pwn 之 b00ks)
- 求一个点到任意两个点所在直线距离 C#代码公式
- BeEF-XSS实验手记
- 【网格压缩测评】MeshQuan、MeshOpt、Draco
- 简单说 通过CSS实现 文字渐变色 的两种方式
- cnzz.php,php,curl_PHP curl抓取cnzz统计数据,php,curl,cnzz - phpStudy
- IE浏览器清除缓存的坑
- svn status详解
- SQLServer@@FETCH_STATUS含义