目录

  • 一、简介
  • 二、环境搭建
    • 2.1 交叉编译工具环境的设置
    • 2.2 配置本地编译环境
  • 三、内核编译实例
    • 3.1 下载对应版本内核源码包
    • 3.2 解压源码包到对应路径下,注意具体路径,后面写Makefile要用到
    • 3.3 在内核根目录清理文件
    • 3.4 配置 .config 文件和生成defconfig
    • 3.5 不同方式交叉编译内核

一、简介

本文主要用实例详细讲述了如何用交叉编译工具编译内核的操作。总体概括内核编译主要有下面几个过程:
1、本地环境搭建过程:包括gcc工具链和本地编译依赖库配置;
2、下载内核源码;
3、配置.config 文件;
4、交叉编译内核;
5、打包编译好内核文件。

gcc交叉编译工具搭建学习链接

二、环境搭建

2.1 交叉编译工具环境的设置

[root@localhost /] export PATH=/opt/mips-loongson-gcc7.3-linux-gnu/2019.06-29/bin/:$PATH
[root@localhost /] export LD_LIBRARY_PATH=/opt/mips-loongson-gcc7.3-linux-gnu/2019.06-29/lib:/opt/mips-loongson-gcc7.3-linux-gnu/2019.06-29/mips-linux-gnu/lib/:$LD_LIBRARY_PATH

注意
1、如果在终端中执行这两条命令,交叉编译环境则只对该终端生效;
2、想要自动运行该命令可以降这两条命令加入到~/.bashrc中,然后执行source ~/.bashrc生效,则每次打开终端会自动执行这两条命令;

2.2 配置本地编译环境

下载本地编译依赖包

[root@localhost /] apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison

这里列举了常用的一些依赖包,也可以直接先不安装相应的依赖包,根据报错再进行安装相应包,具体报错如下:

>>  Unable to find the Ncurses libraries.
>>  You must install ncurses-devel in order
>>  to use 'make menuconfig'

报错中明确表示缺少ncurses-devel包,安装继续编译即可。

三、内核编译实例

3.1 下载对应版本内核源码包

通过官方链接下载对应版本

[root@localhost /]# wget https://www.kernel.org/pub/linux/kernel/v3.x/linux-3.10.40.tar.xz

3.2 解压源码包到对应路径下,注意具体路径,后面写Makefile要用到

[root@localhost /]# tar -xvf linux-3.10.40.tar.xz /

3.3 在内核根目录清理文件

这一步的主要的作用就是防止下载的内核有编译过内核的残留文件,影响本次内核编译

[root@localhost linux-3.10.40]# make clean         //只清理编译所有产生的文件
[root@localhost linux-3.10.40]# make mrproper     //清理编译所有产生的文件与config配置文件
[root@localhost linux-3.10.40]# make distclean   //清理编译所有产生的文件与config配置文件,并且编辑过的补丁文件

3.4 配置 .config 文件和生成defconfig

1、config就是设置内核编译参数,如需要编译的模块、平台架构相关的设置、内存管理等。
主目录如下:

[*] 64-bit kernel                                                                                General setup  --->[ ] Provide system-wide ring of trusted keys         [ ] Provide system-wide ring of blacklisted keys     [*] Enable loadable module support  --->             [*] Enable the block layer  --->                     Processor type and features  --->                Power management and ACPI options  --->          Bus options (PCI etc.)  --->                     Executable file formats / Emulations  --->       < > Volume Management Device Driver                  -*- Networking support  --->                         Device Drivers  --->                             Firmware Drivers  --->                           File systems  --->                               Kernel hacking  --->                             Security options  --->                           -*- Cryptographic API  --->                          [*] Virtualization  --->                             Library routines  --->                           [ ] Enables more stringent kabi checks in the macros

2、配置基础config文件

//1、直接复制需要编译架构下的config文件到内核根目录下
[root@localhost linux-3.10.40]# cp /arm_kernel/linux-3.10.40/arch/mips64/configs/defconfig  .config
//2、可以通过make ARCH=x86 i386_defconfig得到.config文件,如arch/x86/configs目录,这里有一个i386_defconfig,此时就会根据带的参数用arch/x86/configs/i386_defconfig在内核根目录下生成.config
[root@localhost linux-3.10.40]# make ARCH=x86 i386_defconfig
//3、保存内核通用配置defconfig,我们通过make ARCH=x86 i386_defconfig生成的.config跟我们初始的i386_defconfig是增加了一些当前环境的Kconfig配置的,要重新生成defconfig文件可以通过下面的命令
[root@localhost linux-3.10.40]# make ARCH=x86 savedefconfig //在内核根目录下生成defconfig文件

3、修改.config文件

[root@localhost linux-3.10.40] make config         //基于文本模式的交互配置;
[root@localhost linux-3.10.40] make menuconfig    //基于文本模式的菜单模式(推荐使用),内核三态:<*>将其编译进内核中, <M> 将其编译成模块,<>不编译该模块;
[root@localhost linux-3.10.40] make oldconfig    //使用已有的.config,但会询问新增的配置项,如果用户输入y,则把该特性编入内核,如果是m,则把该特性编译成模块,如果是n,则不编译该特性;

3.5 不同方式交叉编译内核

1、直接编译内核

[root@localhost linux-3.10.40] make  ARCH=arm  CROSS_COMPILE=arm-linux-
//ARCH代表目标平台的架构,CROSS_COMPILE代表交叉编译工具链

2、将配置写进Makefile中再编译内核

ARCH            ?= arm
CROSS_COMPILE   ?= arm-linux-
[root@localhost linux-3.10.40] make

3、安装内核模块

[root@localhost linux-3.10.40] make ARCH=mips    CROSS_COMPILE=mips64el-linux-   INSTALL_MOD_PATH=/test_install  modules      //安装已编译好的内核模块到指定目录
[root@localhost linux-3.10.40] make modules_install  //直接安装到当前系统的/lib/modules路径下

4、打包内核文件

[root@localhost linux-3.10.40] cp vmlinuz  System.map  /test_install/boot/  //复制内核和映射文件
[root@localhost linux-3.10.40] cd /test_install/
[root@localhost test_install]tar -cvf kernel_3.10.40_test.tar  *  //打包已编译完成的相关内核文件

5、将编译的内核文件制作成deb二进制包

[root@localhost linux-3.10.40] dpkg-buildpackage -us -uc -b -d

6、其他编译命令
1、后台多线程编译内核

[root@localhost linux-3.10.40] nohup make -j4&
//nohup为后台执行编译过程,make -jn(n为线程数量,如make -j4就是使用4个线程编译)
[root@localhost linux-3.10.40] tail -f nohup.out
//查看后台编译内核进度

2、只编译指定目录下模块

[root@localhost linux-3.10.40] make ARCH=mips    CROSS_COMPILE=mips64el-linux-    modules M=`pwd`/src //只编译/linux-3.10.40/src下的文件

3、指定内核源码路径进行编译内核

[root@localhost /]# make -C /linux-3.10.40 ARCH=mips    CROSS_COMPILE=mips64el-linux-
//这种方式编译的内核可以防止编译的内核再目标机器上出现版本不匹配安装不上的情况

其他相关链接:
gcc交叉编译工具搭建学习链接

交叉编译linux内核实例(最详细)总结相关推荐

  1. cygwin 编译linux内核,【记录】Cygwin下交叉编译Linux内核时用make menuconfig去确认和修改配置...

    [背景] 折腾: 期间,已用make xxxx_defconfig调用默认配置: 此处,接着去: make menuconfig 去确认和修改配置. [折腾过程] 1.去make menuconfig ...

  2. linux内核添加系统调用(详细)

    linux内核添加系统调用(详细) 说在前面: 这是我第五次编译内核,分别踩了很多坑.中途问过wz佬,佬让我用qemu.我还是最后换ubuntu虚拟机跑了.现在已经有点emo了. 这篇博客是我第五次的 ...

  3. 【转】LINUX内核编译步骤详细介绍

    from: http://blog.csdn.net/do2jiang/article/details/4201203 LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux ...

  4. LINUX内核编译步骤详细介绍

    LINUX内核编译步骤详细介绍 到www.kernel.org 下载 Linux-2.6.18.2.tar.bz2 tar –jxvf  Linux-2.6.18.2.tar.bz2 -C /usr/ ...

  5. linux内核编译最详细,Linux内核编译详细教程,linux内核编译

    Linux内核编译详细教程,linux内核编译 尝试编译下Linux-kernel 4.14.14,使用Ubuntu 16.04 64位 系统. kernel-4.14.14 内核文件约96MB,解压 ...

  6. 深度linux_工程师深度:学通Linux内核(含详细代码)

    内核探索工具类 Linux的具体概述这里就不多说了,今天主要讲的是Linux内核中常用的数据结构和语法的使用,并简述一些工具和实用程序,从而获取理解内核内幕所需要的信息,还会介绍一下在每个内核子系统所 ...

  7. 【内核】linux内核启动流程详细分析【转】

    转自:http://www.cnblogs.com/lcw/p/3337937.html Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件 ...

  8. 【内核】linux内核启动流程详细分析

    Linux内核启动流程 arch/arm/kernel/head-armv.S 该文件是内核最先执行的一个文件,包括内核入口ENTRY(stext)到start_kernel间的初始化代码, 主要作用 ...

  9. busybox linux内核,使用busybox创建精简linux内核实例

    busybox一个二进制程序,模拟实现众多程序./bin/busybox查看本机硬件设备信息:#cat/proc/cpuinfo#cat/proc/meminfo#lsusb显示usb接口信息.#ls ...

  10. 【Linux】交叉编译linux内核到ARM平台

    一.环境 1.主机:ubuntu20.04 2.内核版本:linux5.11.11 3.交叉编译工具链:arm-linux-gnueabihf-gcc 4.目标平台:imx6ull主板 内核源码和交叉 ...

最新文章

  1. 红旗linuxcentos_用红旗Linux 11的体验报告,附使用红旗Linux 11截图
  2. 用sublime server 启动本地服务器(手机访问电脑页面)
  3. VSCode搭建ARM(STM32开发环境)
  4. 科大星云诗社动态20210314
  5. 文档如何清除html,html清除浏览器缓存.docx
  6. python的入门UDP编程
  7. 计算机可移动磁盘无法显示图片,电脑显示可移动磁盘但打不开
  8. 学习总结以及对接下来的规划
  9. VTN国际品牌会员俱乐部 聚集高净值圈层人群 引领高品质生活方式
  10. Pytorch 版本的lookahead 优化函数使用(附代码)
  11. 街景影像分析入门(二)无需秘钥,抓取百度街景影像
  12. Jshop小程序商城系统说明
  13. 如何“谨慎”使用“数据驱动”的风控模型(三)——监控篇
  14. R统计绘图 | 物种组成冲积图(绝对/相对丰度,ggalluvial)
  15. Docker的volumes的使用
  16. Android Studio开发工具的设置
  17. mysql 给几个主键值 批量校验是否存在_MySQL基础知识整理
  18. 【Python】Python中的6个三维可视化工具!
  19. 电压跟随器加电阻分压实现降压
  20. 【华为OD机试c++】工单调度策略【2022 Q4考试题 A卷|100分】

热门文章

  1. OKR-Periods of Words
  2. 数据分析5_美团外卖用户差评分析(附数据及Tableau文件)
  3. 2010不断创新的供应链应用模式
  4. Win7复制文件时出现:“您需要权限来执行操作!”(终极解决方法!)
  5. 电脑没有使用计算机进入睡眠状态,电脑打不开,屏上显示:无视频输入,进入睡眠模式。怎么处理...
  6. Chrom浏览器安装CRX插件
  7. 2016.7.31整机升级计划
  8. PS|基础原理之‘图层混合模式’
  9. 大学生学C语言用什么笔记本电脑,有哪些适合大学生用的笔记本电脑
  10. 阿里云| 阿里云汇总