【转】3.3.1 交叉编译内核设置

原文网址:http://book.51cto.com/art/201309/412064.htm

《深度探索Linux操作系统:系统构建和原理解析》第3章构建内核,本章首先讨论了内核的构建过程。本节为大家介绍交叉编译内核设置。

AD:干货来了,不要等!WOT2015 北京站演讲PPT开放下载!

3.3.1 交叉编译内核设置

在默认情况下,内核构建系统默认内核是本地编译,即编译的内核是运行在与宿主系统相同的体系架构上。如果是为其他的架构编译内核,即交叉编译,我们需要设置两个变量:ARCH和CROSS_COMPILE。其中:

ARCH指明目标体系架构,即编译好的内核运行在什么平台上,如x86、arm或mips等。

CROSS_COMPILE指定使用的交叉编译器的前缀。对于我们的交叉工具链来说,其前缀是i686-none-linux-gnu-。

在顶层的Makefile中,我们可以看到工具链中的编译器、链接器等均以$(CROSS_COMPILE)作为前缀:

  1. linux-3.7.4/Makefile:
  2. AS      = $(CROSS_COMPILE)as
  3. LD      = $(CROSS_COMPILE)ld
  4. CC      = $(CROSS_COMPILE)gcc
  5. CPP     = $(CC) -E
  6. AR      = $(CROSS_COMPILE)ar
  7. NM      = $(CROSS_COMPILE)nm
  8. STRIP       = $(CROSS_COMPILE)strip
  9. OBJCOPY     = $(CROSS_COMPILE)objcopy
  10. OBJDUMP     = $(CROSS_COMPILE)objdump

可以使用多种方式定义这两个变量,比如通过在环境变量中定义ARCH、CROSS_COMPILE;或者每次执行make时,通过命名行为这两个变量的赋值,如:

  1. make ARCH=i386 CROSS_COMPILE=i686-none-linux-gnu-

也可以直接更改顶层Makefile。这种方法比较方便,但是要小心,以免破坏Makefile文件。本书中我们采用这种方式,将顶层Makefile中的如下脚本:

  1. linux-3.7.4/Makefile:
  2. ARCH        ?= $(SUBARCH)
  3. CROSS_COMPILE   ?= $(CONFIG_CROSS_COMPILE:"%"=%)

更改为:

  1. linux-3.7.4/Makefile:
  2. ARCH        ?= i386
  3. CROSS_COMPILE   ?= i686-none-linux-gnu-
时间: 2024-08-07 21:20:40

【转】3.3.1 交叉编译内核设置的相关文章

linux /proc目录说明(访问内核数据结构,修改内核设置)

1. /proc目录 Linux 内核提供了一种通过 /proc 文件系统,在运行时访问内核内部数据结构.改变内核设置的机制.proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间.它以文件系统的方式为访问系统内核数据的操作提供接口. 用户和应用程序可以通过proc得到系统的信息,并可以改变内核的某些参数.由于系统的信息,如进程,是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的.下面列出的这些文件或子文件夹,并不是都是在你的系

Qt安装及交叉编译环境设置

1.安装Qt 我这里安装的是中文版的Qt_SDK,网上一般只能收到英文版.QtSdk-offline-linux-x86-v1.2.1.run(763M). 拷贝到linux下,先chmod可执行权限 #chmod  -x QtSdk-offline-linux-x86-v1.2.1.run #./QtSdk-offline-linux-x86-v1.2.1.run 安装完成后,在linux(我这里用的是fedora14)左上角应用程序--编程--Qt Creator中打开此软件. 2.设置Qt

缓解DDoS && cc 的最佳Linux内核设置 (转)

https://javapipe.com/blog/iptables-ddos-protection/ kernel.printk = 4 4 1 7 kernel.panic = 10 kernel.sysrq = 0 kernel.shmmax = 4294967296 kernel.shmall = 4194304 kernel.core_uses_pid = 1 kernel.msgmnb = 65536 kernel.msgmax = 65536 vm.swappiness = 20

编译andorid内核

昨天编译完系统,今天编译内核 首先下载源码 git clone http://android.googlesource.com/kernel/goldfish.git 然后查看分支 git branch -a 然后check下来 git checkout remotes/origin/android-goldfish-2.6.29 但是因为被墙了,所以网页下载的2.6.29版本 https://android.googlesource.com/kernel/goldfish.git/+/andr

Linux内核编译与安装

平台:虚拟机Ubuntu10.04 内核版本:3.0.80 ---------------------------------------------------------------------------------------------------- 内核的编译分为两种:X86平台和ARM嵌入式平台 一.X86 平台:虚拟机Ubuntu10.04 内核版本:3.0.80 1.下载(并安装)源码:linux-3.0.08 https://www.kernel.org/pub/linux/

Linux 第20天: (09月12日) Linux启动和内核管理

本章内容 CentOS 5和6的启动流程服务管理Grub管理自制Linux启动排错编译安装内核 Linux组成Linux: kernel+rootfskernel: 进程管理.内存管理.网络管理.驱动程序.文件系统.安全功能rootfs:程序和glibc库:函数集合, function, 调用接口(头文件负责描述)过程调用:procedure,无返回值函数调用:function程序:二进制执行文件内核设计流派:单内核(monolithic kernel):Linux把所有功能集成于同一个程序微内

【转】飞凌嵌入式(Forlinx)TE/OK6410内核编译:“make: arm-none-linux-gnueabi-gcc:命令未找到”

原文网址:http://www.xuebuyuan.com/1104711.html Ubuntu10.04下编译飞凌嵌入式(Forlinx)TE/OK6410开发板提供的内核2.6.36 本以为按照用户手册的操作,不会有任何问题的,可能是因为内核是在Unbuntu10.10下测试通过的吧,在Ubuntu10.04下反而出了问题. 已经执行export PATH=/usr/local/arm/arm-none-linux-gnueabi/bin:$PATH,但还是出现如下问题 make: arm

Linux系统启动流程、内核及模块管理

Linux系统启动流程.内核及模块管理 Linux系统的组成部分组成:内核+根文件系统(kernel+rootfs)内核(kernel): 进程管理(创建.调度.销毁等).内存管理.网络管理(网络协议栈).驱动程序.文件系统.安全功能IPC:Inter Process Communication机制本地进程间通信机制:消息队列.semerphor.shm(共享内存)跨主机进程间通信机制:socket等运行中的系统环境可分为两层:内核空间.用户空间内核空间(模式):内核代码(特权级操作-->系统调

CentOS 6.9编译安装新版本内核

一.编译安装前准备: 1.安装依赖包组:# yum -y groupinstall "Server Platform Development""Development Tools" 2.从https://www.kernel.org/下载需要编译的内核源码包linux-3.10.105.tar.xz,并上传至服务器 二.编译安装新版本内核linux-3.10.105.tar.xz: 1.查看系统原有内核版本:# uname -r  -->  2.6.32-69