2.4、uboot配置和编译过程详解

2.4.1、uboot主Makefile分析1

2.4.1.1、uboot version分析

  • (1)uboot版本号分为3个级别:

VERSION:主版本号

PATCHLEVEL:次版本号

SUBLEVEL:再次版本号

EXTRAVERSION:另外附加的版本信息

这四个用.隔开共同构成了最终的版本号。

  • (2)Makefile中版本号最终生成了一个变量U_BOOT_VERSION,这个变量记录了Makefile中配置的版本号
  • (3)include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了。它里面的内容是一个宏定义,宏定义的值内容就是我们在Makefile中配置的uboot的版本号。
  • (4)验证方法:自己修改主Makefile中几个Version有关的变量,然后重新编译uboot,然后烧录到SD卡中,从SD卡启动,然后去看启动时uboot打印出来的版本信息,看看变化是不是和自己的分析一致。

2.4.1.2、HOSTARCH和HOSTOS

  • (1)直接在shell中执行uname -m得到i686,得到的值其实你当前执行这个命令的电脑的CPU的版本号。
  • (2)shell中的竖9线叫做管道,管道的作用就是把管道前面的运算时的输出作为后面一个的输入再去做处理,最终的输出才是我们整个式子的输出
  • (3)HOSTARCH这个名字:HOST是主机,就是当前在做开发用的这台电脑就叫做主机;ARCH是architecture(架构)的缩写,表示CPU的架构。所以HOSTARCH就表示主机的CPU架构。
  • (4)这两个环境变量是主句的操作系统和主机的CPU架构,的出货保存备用,侯曼自然会用到。

2.4.2、uboot主Makefile分析2

2.4.2.1、静默编译(50~54行)

  • (1)平时默认编译是命令行会打印出来很多编译信息。但是有时候我们不希望看到这些编译信息,就后台编译即可。这就叫做静默编译。
  • (2)使用方法就是编译时make -s, -s会作为MAKEFLASS传给Makefile,在50~54行这段代码作用下XECHO变量就会变成空(默认等于echo),于是就实现了静默编译

2.4.2.2、2种编译方法(原地编译和单独输出文件夹编译)

  • (1)编译复杂项目,Makefile提供两种编译方法。默认情况下时当前文件夹中的.c文件,编译出来的.o文件会放在同一个文件夹下,这种方式叫做原地编译。原地编译的好处是处理起来简单
  • (2)原地编译有一些坏处:第一:污染了源文件目录。第二的缺陷就是一套源代码只能按照一种配置和编译方法进行处理,无法同时维护2个或者2个以上的配置编译方式。
  • (3)为了解决以上两种缺陷,uboot支持单独输出文件夹方式的编译(linux kernel也支持,而且uboot的这种技术就是从linux kernel学习来的)。基本思路就是在编译时另外指定一个输出目录,将来所有的编译生成的.o文件和生成的其他文件全部丢到输出目录下面。源代码目录不做任何污染。这样输出目录就承载了本次配置编译所有的结果。
  • (4)具体的用法:默认的就是原地编译,如果需要指定具体的输出目录编译则有两种方式来指定输出目录。

第一种:make O=输出目录

第二种:export BUILD_DIR=输出目录,然后在make

如果两个都指定了(既有BUILD_DIR环境变量,又有O=xx,则O=xx有更高的优先级)

  • (5)两种编译的实现代码在Makefile的78行~123行
时间: 2024-12-09 23:08:00

2.4、uboot配置和编译过程详解的相关文章

uboot配置和编译过程详解【转】

本文转载自:http://blog.csdn.net/czg13548930186/article/details/53434566 uboot主Makefile分析1 1.uboot version确定(Makefile的24-29行) Makefile代码部分: [plain] view plain copy VERSION = 1 PATCHLEVEL = 30 SUBLEVEL = 4 EXTRAVERSION = U_BOOT_VERSION = $(VERSION).$(PATCHL

u-boot配置和编译过程详解

备注:分析的是OK210开发板自带的uboot_smdkv210,可能有些部分和其他版本不太一样,但是原理都类似. 编译u-boot的步骤 make forlinx_linux_config make 首先生成配置文件,然后编译源码,依次看看这些命令都干了些什么事情 配置过程 #forlinx add forlinx_linux_config : unconfig @$(MKCONFIG) $(@:_config=) arm s5pc11x smdkc110 samsung s5pc110 li

uboot配置和编译过程详解

一.uboot主Makefile分析 1.uboot version确定(Makefile的24-29行) include/version_autogenerated.h文件是编译过程中自动生成的一个文件,所以源目录中没有,但是编译过后的uboot中就有了 2.HOSTARCH和HOSTOS HOSTARCH:表示主机的CPU的架构,值会影响后面的CROSS_COMPILE环境变量的值.HOSTOS:主机 3.静默编译(50-54行) 不希望看到这些编译信息,就后台编译即可.这就叫静默编译. 4

uboot主Makefile分析(t配置和编译过程详解)

1.编译uboot前需要三次make make distcleanmake x210_sd_configmake -j4 make distclean为清楚dist文件. make x210_sd_config  跳转执行mkconfig用来配置并生成config.mk(board/samsung/x210目录下为指定链接地址的与主uboot目录的config.mk不同) autuconfig.mk 2.框图 3.uboot主Makefile分析 3.1.uboot version确定(Make

反编译过程详解

这段时间在学Android应用开发,在想既然是用Java开发的应该很好反编译从而得到源代码吧,google了一下,确实很简单,以下是我的实践过程. 在此郑重声明,贴出来的目的不是为了去破解人家的软件,完全是一种学习的态度,不过好像通过这种方式也可以去汉化一些外国软件. 一.反编译Apk得到Java源代码首先要下载两个工具:dex2jar和JD-GUI 前者是将apk中的classes.dex转化成Jar文件,而JD-GUI是一个反编译工具,可以直接查看Jar包的源代码. dex2jar和JD-G

使用HeartBeat实现高可用HA的配置过程详解

使用HeartBeat实现高可用HA的配置过程详解 一.写在前面 HA即(high available)高可用,又被叫做双机热备,用于关键性业务.简单理解就是,有2台机器 A 和 B,正常是 A 提供服务,B 待命闲置,当 A 宕机或服务宕掉,会切换至B机器继续提供服务.常见的实现高可用的开源软件有 heartbeat 和 keepalived. 这样,一台 web 服务器一天24小时提供web服务,难免会存在 web 服务挂掉或服务器宕机宕机的情况,那么用户就访问不了服务了,这当然不是我们期望

Nginx实现集群的负载均衡配置过程详解

Nginx实现集群的负载均衡配置过程详解 Nginx 的负载均衡功能,其实实际上和 nginx 的代理是同一个功能,只是把代理一台机器改为多台机器而已. Nginx 的负载均衡和 lvs 相比,nginx属于更高级的应用层,不牵扯到 ip 和内核的修改,它只是单纯地把用户的请求转发到后面的机器上.这就意味着,后端的 RS 不需要配置公网. 一.实验环境 Nginx 调度器 (public 172.16.254.200 privite 192.168.0.48)RS1只有内网IP (192.168

Linux LVM逻辑卷配置过程详解

Linux LVM逻辑卷配置过程详解 许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以满足应用系统的需要. LVM是Linux环境中对磁盘分区进行管理的一种机制,是建立在硬盘和分区之上.文件系统之下的一个逻辑层,可提高磁盘分区管理的灵活性.RHEL5默认安装的分区格式就是LVM逻辑卷的格式,需要注意的是/boot分区不能基于LVM创建,必须独立出

win7配置免安装mysql5.6.19过程详解

本文主要介绍免安装配置mysql5.6.19的过程,整个过程中自己出现很多次失误,经过整理,现将一次可成功的过程记录下来,供大家参考. 准备 在mysq官网 http://dev.mysql.com/downloads/mysql/,下载最新稳定版本. 本文使用的mysql版本为5.6.19,因下载免安装版本,在页面选择"Windows (x86, 64-bit), ZIP Archive"[吐槽一下,越来越大了:217.2M] 解压 将下载的mysql.zip解压到E:\Develo