当前位置: 首页 > news >正文

linux - 内核编译

一. 编译的实质

  • 基于头文件和c文件--->产生对象文件(.o)

  • 将所有的对象文件链接起来,产生可执行文件。

  • 内核的编译系统组成

  • Makefile

分布在内核源代码中的Makefile, 定义内核的编译规则,配合Kconfig使用。

  • Kconfig

配置文件,给用户提供配置选项的功能,make menuconfig 等命令根据此文件生成配置文件菜单。

  • 配置工具

包括配置命令解释器(解析Kconfig)和内核配置的用户界面程序等。

  • 使用make config、make menuconfig等命令时, 内核顶层目录会生成一个".config"的配置文件, 该配置文件记录了哪些功能会被编译进内核, 哪些功能会被编译成内核模块。

  • 运行make menuconfig时, 配置工具首先分析与体系结构对应的 arch/< arch >/Kconfig 文件, arch/< arch >/Kconfig 文件中除本身包含一些与体系结构相关的配置项和配置菜单以外, 还通过 source 语句引入下一层的 Kconfig 文件。

  • 配置后生成文件:

  • include/config: auto.conf

  • include/generated: autoconf.h

二. 相关命令

2.1 清理配置

指定输出目录

#除了保存config文件以及构建外围模块必要的文件,其他的全部清除。 
make clean O=build#清理全部生成的文件+config文件+不同的备份文件
make mrproper O=build#彻底的清理,等价于clean + mrproper  
make distclean O=build

2.2 配置编译选项

指定arch和输出目录

# 默认内核配置
make O=build defconfig
make O=build ARCH=arm xxx_defconfig# 或者
cp arch/arm/configs/xxx_defconfig  /build/.config# 修改配置(可能需要切换到gcc下)
make menuconfig O=build

2.3 编译内核

指定交叉编译工具,线程数,输出目录

make ARCH=arm CC=arm-oe-linux-gnueabi-gcc LD=arm-oe-linux-gnueabi-ld.bfd -j 4 O=build#或者
make zImage O=build ARCH=arm CC="${CC}" LD="arm-oe-linux-gnueabi-ld.bfd" -j 4 O=build

2.4 编译内核模块

指定交叉编译工具,线程数,输出目录

make modules ARCH=arm CC=arm-oe-linux-gnueabi-gcc LD=arm-oe-linux-gnueabi-ld.bfd -j 4 O=build#或者
make modules O=obj ARCH=arm CC="${CC}" LD="arm-oe-linux-gnueabi-ld.bfd" -j 4 O=build
http://www.lryc.cn/news/31592.html

相关文章:

  • Spring——配置文件实现IOC和DI入门案例
  • 机器学习100天(四十一):041 对偶支持向量机-公式推导
  • C语言下的signal()函数
  • google独立站和与企业官网的区别是什么?
  • Vue3---语法初探
  • esp8266WiFi模块通过MQTT连接华为云
  • 苹果新卫星专利公布,苹果Find My功能知多少
  • [ICLR‘22] DAB-DETR: Dynamic Anchor Boxes Are Better Queries for DETR
  • 双周赛99(贪心、数学、区间合并计算、换根DP)
  • OpenText Exceed TurboX(ETX) 客户案例——弗吉尼亚理工大学
  • 【Python】torch.norm()用法解析
  • C++核心编程<内存分区模型>(1)
  • 电路基础(1)电路模型和电路定律
  • pytest 基础
  • 软测入门(七)python操作数据文件(Json、yaml、csv、excel、xml)
  • 【小程序】django学习笔记1
  • MySQL常用函数整理
  • 设计模式—“组件协作”
  • vue里使用driver.js实现项目功能向导指引
  • 详解JAVA类加载
  • 高斯分布、高斯混合模型、EM算法详细介绍及其原理详解
  • [Linux入门篇]一篇博客解决C/C++/Linux System Call文件操作接口的使用
  • 数据结构和算法学习记录——删除有序数组中的重复项、合并两个有序数组
  • FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持
  • 【建议收藏】超详细的Canal入门,看这篇就够了!!!
  • KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布
  • 查漏补缺3月
  • 如何使用Java实现类似Windows域登录
  • 生成模型与判别模型
  • Kotlin lateinit 和 lazy 之间的区别 (翻译)