新版本uboot和旧版本的区别

转载地址:https://www.cnblogs.com/awsqsh/articles/4508726.html

新版本:u-boot-2015.04

旧版本:u-boot-2012.04.01

一、编译方法

1.1 其中最不同的就是我们所熟悉的在u-boot-2014.04中的boards.cfg和mkconfig没有了,而同时又在u-boot-2015.01的顶层目录下多出了一个configs目录,还有一个Kconfig文件,可以看到现在的uboot编译方法和linux kernel的编译方法非常的接近。

 

1.2编译方法区别:

新版的uboot 使用现成的 make xx_defconfig 就会像编译kernel一样在顶层目录生成.config文件。

复制代码

liam@ubuntu:~/uboot/uboot_2015.04$ make distclean
  CLEAN   scripts/basic
  CLEAN   scripts/kconfig
  CLEAN   include/config include/generated
  CLEAN   .config include/autoconf.mk include/autoconf.mk.dep include/config.h
liam@ubuntu:~/uboot/uboot_2015.04$ make  smdk2410_defconfig
  HOSTCC  scripts/basic/fixdep
  HOSTCC  scripts/kconfig/conf.o
  SHIPPED scripts/kconfig/zconf.tab.c
  SHIPPED scripts/kconfig/zconf.lex.c
  SHIPPED scripts/kconfig/zconf.hash.c
  HOSTCC  scripts/kconfig/zconf.tab.o
  HOSTLD  scripts/kconfig/conf
#
# configuration written to .config
#

复制代码

 

也可以用make menuconfig手动配置。

新版本中:make xxx_defconfig主要完成了以下工作:

  1 编译fixdep;

  2 编译conf;

  3 执行conf 二进制文件,生成.config

  注意:include/config.h文件时在make all的时候生成的。

 

旧版

liam@ubuntu:~/uboot/uboot_2012.04.01$ make smdk2410_config 
Configuring for smdk2410 board...

然后再include目录下会得到:

config.mk 

ARCH   = arm
CPU    = arm920t
BOARD  = smdk2410
VENDOR = samsung
SOC    = s3c24x0

config.h

复制代码

/* Automatically generated - do not edit */
#define CONFIG_BOARDDIR board/samsung/smdk2410
#include <config_cmd_defaults.h>
#include <config_defaults.h>
#include <configs/smdk2410.h>
#include <asm/config.h>

复制代码

另外还会在根目录生成:.boards.depend 

asm arch proc三个symlink文件,作用不明。

make xxxconfig后均是直接执行make进行编译。

 

二、交叉编译CROSS_COMPILE定义:

旧版:

./arch/arm/config.mk

./arch/mips/config.mk

CROSS_COMPILE ?= arm-linux-

这样目录的mk文件里面的文件开头处定义的。

新版可以直接在顶层目录:Makefile里面修改

 ifeq ($(HOSTARCH),$(ARCH))
 CROSS_COMPILE ?= arm-linux-
 endif
 
 CROSS_COMPILE = arm-linux-

注意:这里需要提到if endif外面来。否则读取不到CROSS_COMPILE的。

### 查看 U-Boot 版本的方法 在嵌入式系统中,了解当前使用的 U-Boot 版本对于开发、维护以及升级非常重要。以下是几种常见的方法用于查看 U-Boot 的版本信息: #### 方法一:通过串口打印输出 当目标板上电启动时,U-Boot 会在控制台(通常是串口)打印其欢迎消息版本号。可以通过连接串口调试工具(如 minicom 或 putty),观察启动过程中显示的信息。典型的输出可能如下所示: ``` U-Boot 2023.01 (Jan 15 2023 - 14:30:29 +0800) ARM GNU/Linux ARM cross tools chain v2022.04 ... ``` 上述输出的第一行即为 U-Boot 的版本号 `2023.01`[^1]。 #### 方法二:进入 U-Boot 命令模式并执行 `version` 命令 如果已经进入了 U-Boot 的命令交互界面,可以直接输入以下命令获取版本信息: ```bash => version ``` 该命令会返回类似于以下的结果: ``` U-Boot 2023.01 (Jan 15 2023 - 14:30:29 +0800) ``` 这表明当前运行的是 U-Boot 版本 `2023.01`[^2]。 #### 方法三:检查源码中的版本定义 如果拥有 U-Boot 的源代码,则可以在源文件中查找版本号。通常情况下,版本号被定义在 `include/version.h` 文件中。打开此文件后,可以看到类似以下的内容: ```c #define U_BOOT_VERSION "2023.01" ``` 这里的字符串 `"2023.01"` 即表示 U-Boot 的版本号[^1]。 #### 方法四:通过 Linux 内核日志回溯 某些情况下,在 Linux 启动完成后,仍然可以从内核的日志中找到 U-Boot 提供的版本信息。可以使用以下命令检索相关信息: ```bash dmesg | grep U-Boot ``` 输出可能会包含类似下面的一行: ``` [ 0.000000] Booting Linux on physical CPU 0x0 [ 0.000000] U-Boot 2023.01 (Jan 15 2023 - 14:30:29 +0800) ``` 从中可提取出 U-Boot 的具体版本号[^3]。 --- ### 总结 以上提供了四种不同的方式来确认正在使用的 U-Boot 版本号。无论是通过启动阶段的串口输出还是直接调用内部命令,都可以快速定位所需的版本信息。 ```python # 示例 Python 脚本模拟读取 dmesg 日志中的 U-Boot 版本 import subprocess def get_uboot_version_from_dmesg(): try: output = subprocess.check_output(['dmesg', '|', 'grep', 'U-Boot']).decode('utf-8') lines = output.splitlines() for line in lines: if "U-Boot" in line: return line.strip().split()[1] except Exception as e: print(f"Error occurred: {e}") return None uboot_version = get_uboot_version_from_dmesg() if uboot_version: print(f"Detected U-Boot Version: {uboot_version}") else: print("Failed to detect U-Boot version.") ``` 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值