uboot中Kconfig架构的理解
1./u-boot-2019.07/Kconfig 是顶层Kconfig
mainmenu "U-Boot $UBOOTVERSION Configuration" #这是总menu
2.source "arch/Kconfig" #然后就引用了arch目录下的Kconfig 这个Kconfig中可以选择不同的架构,有arm M68K MIPS等
choice
prompt "Architecture select"
default SANDBOX
config ARC
bool "ARC architecture"
select ARCH_EARLY_INIT_R
select ARC_TIMER
select CLK
select HAVE_PRIVATE_LIBGCC
select SUPPORT_OF_CONTROL
select TIMER
config ARM
bool "ARM architecture"
select CREATE_ARCH_SYMLINK
select HAVE_PRIVATE_LIBGCC if !ARM64
select SUPPORT_OF_CONTROL
config M68K
bool "M68000 architecture"
select HAVE_PRIVATE_LIBGCC
select SYS_BOOT_GET_CMDLINE
select SYS_BOOT_GET_KBD
select SUPPORT_OF_CONTROL
config MICROBLAZE
bool "MicroBlaze architecture"
select SUPPORT_OF_CONTROL
imply CMD_IRQ
.
.
.
source "arch/arc/Kconfig"
source "arch/arm/Kconfig"
source "arch/m68k/Kconfig"
source "arch/microblaze/Kconfig" #最后引入了各个架构目录下的Kconfig
3./u-boot-2019.07/arch/arm/Kconfig
menu "ARM architecture"
depends on ARM
config SYS_ARCH
default "arm" #这里定义了CONFIG_SYS_ARCH
config CPU_V7A
bool
select HAS_THUMB2
select HAS_VBAR
select SYS_CACHE_SHIFT_6
imply SYS_ARM_MMU #CPU_V7A还会选择一些宏定义开
config SYS_CPU
default "arm720t" if CPU_ARM720T
default "arm920t" if CPU_ARM920T
default "arm926ejs" if CPU_ARM926EJS
default "arm946es" if CPU_ARM946ES
default "arm1136" if CPU_ARM1136
default "arm1176" if CPU_ARM1176
default "armv7" if CPU_V7A
default "armv7" if CPU_V7R
default "armv7m" if CPU_V7M
default "pxa" if CPU_PXA
default "sa1100" if CPU_SA1100
default "armv8" if ARM64 #这里定义了CONFIG_SYS_CPU(需要预先定义CPU_V7A)
choice
prompt "Target select"
default TARGET_HIKEY
config ARCH_S5PC1XX
bool "Samsung S5PC1XX"
select CPU_V7A
select DM
select DM_GPIO
select DM_I2C
select DM_SERIAL
imply CMD_DM
config ARCH_ZYNQ
bool "Xilinx Zynq based platform"
select BOARD_EARLY_INIT_F if WDT
select CLK
select CLK_ZYNQ
select CPU_V7A
select DM
select DM_ETH if NET
select DM_MMC if MMC
select DM_SERIAL
select DM_SPI
select DM_SPI_FLASH
select DM_USB if USB
select OF_CONTROL
select SPI
select SPL_BOARD_INIT if SPL
select SPL_CLK if SPL
select SPL_DM if SPL
select SPL_OF_CONTROL if SPL
select SPL_SEPARATE_BSS if SPL
select SUPPORT_SPL
imply ARCH_EARLY_INIT_R
imply BOARD_LATE_INIT
imply CMD_CLK
imply CMD_DM
imply CMD_SPL
imply FAT_WRITE #在这里选择了CPU_V7A ARCH_S5PC1XX ARCH_ZYNQ在menuconfig中选中即定义了。
source "arch/arm/mach-s5pc1xx/Kconfig"
source "arch/arm/mach-zynq/Kconfig" #如果有mach需要将Kconfig加入
好像并没有包含source "board/samsung/goni/Kconfig"
source "board/xilinx/zynq/Kconfig" #将board中的Kconfig加入
4.arch/arm/mach-s5pc1xx/Kconfig 答案在这里,s5pc1xx下有两个board需要选择,这其中包含了source "board/samsung/goni/Kconfig",所以每家公司的代码风格不大一样。
if ARCH_S5PC1XX
choice
prompt "S5PC1XX board select"
optional
config TARGET_S5P_GONI
bool "S5P Goni board"
select OF_CONTROL
select BLK
select DM_MMC #选中goni board
config TARGET_SMDKC100
bool "Support smdkc100 board"
select OF_CONTROL
endchoice
config SYS_SOC
default "s5pc1xx"
source "board/samsung/goni/Kconfig"
source "board/samsung/smdkc100/Kconfig"
endif
5.arch/arm/mach-zynq/Kconfig #定义了SYS_BOARD等 而s5pc1xx不是在这里定义的。
if ARCH_ZYNQ
config SPL_LDSCRIPT
default "arch/arm/mach-zynq/u-boot-spl.lds"
config SYS_BOARD
string "Board name"
default "zynq"
config SYS_VENDOR
string "Vendor name"
default "xilinx"
config SYS_SOC
default "zynq"
endif
6.board/samsung/goni/Kconfig #定义了SYS_BOARD等 在arch/arm/mach-s5pc1xx/Kconfig下一层因为if TARGET_S5P_GONI是 arch/arm/mach-s5pc1xx/Kconfig中选定的
if TARGET_S5P_GONI
config SYS_BOARD
default "goni"
config SYS_VENDOR
default "samsung"
config SYS_SOC
default "s5pc1xx"
config SYS_CONFIG_NAME
default "s5p_goni"
endif
7.board/xilinx/zynq/Kconfig 和arch/arm/mach-zynq/Kconfig 感觉平行层级 都用的if ARCH_ZYNQ
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (c) 2018, Xilinx, Inc.
if ARCH_ZYNQ
config CMD_ZYNQ
bool "Enable Zynq specific commands"
default y
help
Enables Zynq specific commands.
config CMD_ZYNQ_AES
bool "Enable zynq aes command for decryption of encrypted images"
depends on CMD_ZYNQ
depends on FPGA_ZYNQPL
help
Decrypts the encrypted image present in source address
and places the decrypted image at destination address.
config CMD_ZYNQ_RSA
bool "Enable zynq rsa command for loading secure images"
default y
depends on CMD_ZYNQ
depends on CMD_ZYNQ_AES
help
Enabling this will support zynq secure image verification.
The secure image is a xilinx specific BOOT.BIN with
either authentication or encryption or both encryption
and authentication feature enabled while generating
BOOT.BIN using Xilinx bootgen tool.
endif
在Kconfig体系结构中,可以明显看到这样一个顺序
1.选架构 ARCH arm
2.选Target ARCH 平台 某一系列
3.选Board 即具体的板子
uboot中Kconfig架构的理解的更多相关文章
- SQL SERVER 2005/2008 中关于架构的理解(二)
本文上接SQL SERVER 2005/2008 中关于架构的理解(一) 架构的作用与示例 用户与架构(schema)分开,让数据库内各对象不再绑在某个用户账号上,可以解决SQL SERVE ...
- SQL SERVER 2005/2008 中关于架构的理解(一)
SQL SERVER 2005/2008 中关于架构的理解(一) 在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询, ...
- 【转】SQL SERVER 2005/2008 中关于架构的理解
在一次的实际工作中碰到以下情况,在 SQL SERVER 2008中,新建了一个新用户去访问几张由其他用户创建的表,但是无法进行查询,提示“对象名'CustomEntry' 无效.”.当带上了架构名称 ...
- 关于NAND flash的MTD分区与uboot中分区的理解
关于NAND flash的MTD分区与uboot中分区的理解 转自:http://blog.csdn.net/yjp19871013/article/details/6933455?=40085044 ...
- SQL SERVER中架构的理解
在sqlserver 2005中,可能大家在工作或学习的时候会经常发现这样一些问题,你使用一个账户在数据库中创建了一张表,却发现你自己创建的表却没有修改和查询的权限,这是一件很郁闷的事情,在sqlse ...
- Uboot中start.S源码的指令级的详尽解析【转】
本文转载自:http://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analys ...
- 关于ASP.NET或VS2005 搭建三层架构的理解
最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...
- 【转】Linux 概念架构的理解
转:http://mp.weixin.qq.com/s?__biz=MzA3NDcyMTQyNQ==&mid=400583492&idx=1&sn=3b18c463dcc451 ...
- 【转】【UML】使用Visual Studio 2010 Team System中的架构师工具(设计与建模)
Lab 1: 应用程序建模 实验目标 这个实验的目的是展示如何在Visual Studio 2010旗舰版中进行应用程序建模.团队中的架构师会通过建模确定应用程序是否满足客户的需求. 你可以创建不同级 ...
随机推荐
- border、outline、boxshadow那些事
border 边框是我们美化网页.增强样式最常用的手段之一.例如: <div class="text"></div> .text { width: 254p ...
- instanceof用来判断啥?
java中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例.instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例.
- Linux 设置端口转发
ps -ef | grep 10020 --查询10020端口是否被使用kill -9 86971 --结束使用10020端口的进程 ssh -C -f -N -g -L 18889: ...
- ES6 二进制和八进制字面量
ES6 支持二进制和八进制的字面量,通过在数字前面添加 0o 或者 0O 即可将其转换为二进制值: let oValue = 0o10; console.log(oValue); // 8 let b ...
- C++用参数返回结果与用返回值返回结果的思考
/*** *xvkBuffer作为参数比写为返回值的好处是: *1,xvkBuffer可以是堆变量或栈变量,若写为返回值则只能是堆上申请,因为必须保证它的永久性 *2,xvkBuffer或作为栈变量返 ...
- Linux驱动开发1——基础知识
1.三类驱动 字符设备驱动:字节流,/dev下有设备节点,file_operations,inode, file 块设备驱动:数据块,/dev下有设备节点,通常有文件系统 网络设备驱动:网络报文的收发 ...
- NOIP2012 洛谷P1083 借教室
传送门 题意:有一些学(xian)生(quan)要借教室.在n天内,第i天学校有ri个教室.有m份订单,每份订单有三个数值dj,sj,tj,分别表示这个订单从第sj天开始到第tj天结束(包括端点),每 ...
- javascript处理json字符串
字符串转JSON格式 var obj = JSON.parse(json字符串); 判断字段值是否存在,返回true或false obj.hasOwnProperty("error" ...
- 小刀jsonp跨域
经常说到jsonp,今天理一理. 同源策略 同协议,同域名,同端口: 会限制你的ajax,iframe操作,窗口信息的传递,无法获取跨域的cookie.localStorage.indexDB等: j ...
- 008-Spring Boot @EnableAutoConfiguration深入分析、内部如何使用EnableAutoConfiguration
一.EnableAutoConfiguration 1.EnableAutoConfiguration原理 springboot程序入口使用注解@SpringBootApplication,Sprin ...