Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析

发布者:science56最新更新时间:2024-08-26 来源: cnblogs关键字:Linux移植  auto  conf 手机看文章 扫描二维码
随时随地手机看文章

在Linux移植之make uImage编译过程分析中分析了uImage文件产生的过程,在uImage产生的过程中,顺带还产生了其它的一些中间文件。这里主要介绍几个比较关键的文件


1、linux-2.6.22.6includeconfigauto.conf、inux-2.6.22.6includelinuxautoconf.h文件的生成过程


2、includeasm-armMach-types.h文件的生成过程


1、inux-2.6.22.6includeconfigauto.conf、inux-2.6.22.6includelinuxautoconf.h文件的生成过程


在顶层Makefile中尝试寻找auto.conf,找到如下信息:可以看到顶层Makefile中需要包含-include include/config/auto.conf、-include include/config/auto.conf.cmd。-include表示即使文件不存在也不会报错。


442    # Read in config

443    -include include/config/auto.conf

444

445    ifeq ($(KBUILD_EXTMOD),)

446    # Read in dependencies to all Kconfig* files, make sure to run

447    # oldconfig if changes are detected.

448    -include include/config/auto.conf.cmd

449

450    # To avoid any implicit rule to kick in, define an empty command

451    $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;

452

453    # If .config is newer than include/config/auto.conf, someone tinkered

454    # with it and forgot to run make oldconfig.

455    # if auto.conf.cmd is missing then we are probably in a cleaned tree so

456    # we execute the config step to be sure to catch updated Kconfig files

457    include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd

458        $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig


继续分析生成include/config/auto.conf目标的语句


457    include/config/auto.conf: $(KCONFIG_CONFIG) include/config/auto.conf.cmd

458        $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig

可以看到依赖KCONFIG_CONFIG其实就是.config


192    KCONFIG_CONFIG    ?= .config

依赖include/config/auto.conf.cmd,这条语句知道,该语句中的目标没有依赖,也没有生成它的规则命令,所以可想GNU Make本身无法生成auto.conf.cmd 的。

451    $(KCONFIG_CONFIG) include/config/auto.conf.cmd: ;

然后该条语句后面的一个分号表明,这两个目标被强制是最新的,所以下面这条命令得以执行:

458        $(Q)$(MAKE) -f $(srctree)/Makefile silentoldconfig

继续往下分析发现这条命令是执行顶层的Makefile生成silentoldconfig目标。找到生成这个目标的规则:


416    config %config: scripts_basic outputmakefile FORCE

417        $(Q)mkdir -p include/linux include/config

418        $(Q)$(MAKE) $(build)=scripts/kconfig $@

这个规则在Linux移植之配置过程分析已经分析过。所以直接去到scripts/kconfig/Makefile找到silentoldconfig目标的规则:


22    silentoldconfig: $(obj)/conf

23        $< -s arch/$(ARCH)/Kconfig

可以看到它依赖于scripts/kconfig/conf这个程序,这个程序的编译过程就不分析了,继续看到规则,将规则展开得到


23        conf -s arch/arm/Kconfig

所以需要知道conf的功能,那么就去要看它的源码。在这里简单说明一下它的功能:其实就是调用.config文件,保证了 .config 已经最新后,那么调用 conf_write_autoconf() 生成 auto.conf,auto.conf.cmd 以及 autoconf.h 这 3 个文件。详情分析参考https://blog.csdn.net/lcw_202/article/details/6661364


 


2、includeasm-armMach-types.h文件的生成过程,在分析内核源码时发现这个文件如果没有编译的话是不存在的,它存放着单板机器编码,这个编码就是与uboot传入的编码比较的。比如#define MACH_TYPE_S3C2440              362。


来到arch/arm/Makefile文件中,看到如下几条命令:


221    maketools: include/linux/version.h include/asm-arm/.arch FORCE

222        $(Q)$(MAKE) $(build)=arch/arm/tools include/asm-arm/mach-types.h

这个分析过程类似于第一点产生文件的过程,来到arch/arm/tools/Makefile中,可以看到nclude/asm-arm/mach-types.h是由


7    include/asm-arm/mach-types.h: $(src)/gen-mach-types $(src)/mach-types

8    @echo '  Generating $@'

9    $(Q)$(AWK) -f $^ > $@ || { rm -f $@; /bin/false; }

将第9行命令展开得到,它的意思是利用arch/arm/tools/mach-types程序产生include/asm-arm/mach-types.h文件,如果不成功,则删除。其中arch/arm/tools/mach-types是内核一开始就做好的工具。


awk -f arch/arm/tools/gen-mach-types arch/arm/tools/mach-types > include/asm-arm/mach-types.h || { rm -f include/asm-arm/mach-types.h; /bin/false; }


关键字:Linux移植  auto  conf 引用地址:Linux移植之auto.conf、autoconf.h、Mach-types.h的生成过程简析

上一篇:Linux移植之子目录下的built-in.o生成过程分析
下一篇:Linux移植之make uImage编译过程分析

推荐阅读最新更新时间:2024-11-11 16:18

Vishay将HOTcap® K…H系列汽车级MLCC的温度范围提高到+200℃
日前,Vishay Intertechnology, Inc.(NYSE 股市代号:VSH)宣布,将其 HOTcap® K…H系列 汽车级径向引线的多层陶瓷片式电容器(MLCC)的工作温度范围提高到+200℃,达到II类陶瓷通孔器件的业内最高温度。 Vishay BCcomponents引线MLCC被认定能在-55℃~+200℃温度范围内工作500小时,在+175℃温度下则没有时间限制。器件具有良好的高温性能,容量从100pF到1μF,电容公差保持在严格的±5%。 I类和II类陶瓷MLCC使用电容变化为±30ppm/K的非常稳定的C0G电介质和-55℃~+175℃温度范围TCC为+22%/-56%的X0U电介质。X0U电
[汽车电子]
Vishay将HOTcap® K…<font color='red'>H</font>系列汽车级MLCC的温度范围提高到+200℃
MCS-51系列单片机方式寄存器TMOD(89H)
特殊功能寄存器TMOD为T0、T1的工作方式寄存器,其格式如下:   TMOD的低4位为T0的方式字段,高4位为T1的方式字段,它们的含义是完全相同的。      工作方式选择位M1、M0(方式 0~3)      定时方式和外部事件计数方式选择位C/T      C/T=1为外部事件计数方式。      门控位GATE      GATE为1时,定时器的计数受外部引脚输入 电平 的控制(INT0控制T0的运行,INT1控制T1的运行);GATE为0时定时器计数不受外部引脚输入电平的控制。
[单片机]
MCS-51系列单片机方式寄存器TMOD(89<font color='red'>H</font>)
STC8H开发(六): SPI驱动ADXL345三轴加速度检测模块
ADXL345 ADXL345是一款常见的的3轴加速度计, Analog Device生产. 13位分辨率, ±16 g测量范围, 分辨率3.9 mg/LSB. 可通过SPI(3线或4线)或I2C接口访问. 主要用于倾斜检测, 静态重力加速度测量, 以及运动或冲击导致的动态加速度测量. 能够测量不到1.0°的倾斜角度变化. 可以对单击, 双击, 自由落体等情况设置中断. 模块与STC8H的接线 市面上的模块, 一般是8个pin脚, 在使用SPI接线方式的情况下, 与STC8H的接线方式如下. 除了SPI用到的CS, MISO, MOSI, SCLK以外, STC8H还需要提供两个中断输入, 因为INT0, INT1已经
[单片机]
STC8<font color='red'>H</font>开发(六): SPI驱动ADXL345三轴加速度检测模块
STC8PROG - Linux下的 STC8G STC8H 烧录工具
动机 在Linux下用 VSCode + PlatformIO 做开发, 因为VSCode的界面字体代码提示, 以及自定义的类JetBrain风格快捷键, 开发体验非常好. 在这个环境下, 有两个基础工具链必不可少, 一个是SDCC, 另一个是stcgal. 前者是MCS-51的编译工具, 后者是用于STC系列MCU的烧录工具. 在前一阵开始使用STC8后, stcgal这个工具链掉链子了, 无法烧录STC8系列的芯片. 进一步了解后发现的几个问题: PlatformIO 的 MCS-51 Platform 停止更新 PlatformIO 项目是活跃的, 但是这个平台模块子项目处于停滞状态, 项目地址 platformio/p
[单片机]
S3C2440 Linux驱动移植——NAND驱动
开发板:TQ2440 内核:Linux 2.6.32 PC OS:Ubuntu 11.04 本文将对NAND驱动的移植进行简单介绍。其中,将对NAND控制器所需要的参数进行详细说明。 1. 修改分区表 打开文件arch/arm/plat-s3c24xx/common-smdk.c,修改mtd_partition结构体数组。 修改后如下: static struct mtd_partition smdk_default_nand_part = { = { .name = Uboot , .size = 0x00040000, .offset = 0x00000000,
[单片机]
S3C2440 <font color='red'>Linux</font>驱动<font color='red'>移植</font>——NAND驱动
基於tiny4412的Linux內核移植--- 中斷和GPIO學習(2)
平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uImage做了稍許改動 平臺 tiny4412 ADK Linux-4.4.4 u-boot使用的U-Boot 2010.12,是友善自帶的,爲支持設備樹和uImage做了稍許改動 我們以控制tiny4412上的LED1和LED2爲例,使用的GPIO是GPM4_0和GPM4_1對應的原理圖如下: datasheet如下: 在samsung的pinctrl驅動中加一些調試用的log: 1 diff --git a/drivers/gpio/gpiolib.c
[单片机]
高速H桥上管驱动电路
高速H桥上管驱动电路 上例方案的速度瓶颈为光耦,如果不采用光耦那么控制信号的频率可以提高很多。通过试验,我们开发了如下的高速型H桥上管驱动电路。方案如图9所示。 图中上管控制信号高电平为+l2 V,低电平为0 V。控制信号通过电阻电容和二极管电路加到Q1的基极,Q1的集电极输出作为 图9 高速H桥上管驱动电路 Fig.9 High Speed H-bddge Highside Driving Q2,Q3组成的差动驱动电路控制信号,差动电路的输出作为Ml的驱动信号。Q2,Q3组成的差动驱动电路上端Q2接 +l2 V电源,下端Q3接到Ml的s极。当上管控制信号为低电平时,Q2导通,Q3截止,Ml的G极约为 D+l2 V,
[模拟电子]
高速<font color='red'>H</font>桥上管驱动电路
LCD1602.h头文件下载(完美液晶驱动文件)
1602液晶屏是在单片机系统中常用的显示器件,这里我给大家共享2个完美的LCD1602.h头文件,下面是第一个:由于2个文件组成: http://www.51hei.com/bbs/dpj-24671-1.html 把里面的2个代码分别保存为文件即可. 点这里可以提供文件下载 还有一个是 LCD1602.h 代码如下,复制代码并保存到文件即可,当然io口要改为你自己的. #ifndef _LCD1602_H #define _LCD1602_H /* #define uchar unsigned char #define uint unsigned int #define LCD_DATA P0 sbit LCD_EN=P2
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京ICP证060456号 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved