uboot 配置分析

简要介绍uboot的配置工程和文件作用。

1.uboot文件夹配置

uboot源码的目录结构如下:

  • api : 硬件无关的功能函数的API。uboot移植时基本不用管,这些函数是uboot本身使用的。
  • arch: 与体系结构相关的代码
  • board : 对应不同配置的开发板oard文件夹下每一个文件都代表一个开发板,这个文件夹下面放的文件就是用来描述这一个开发板的信息的。board目录下有多少个文件夹,就表示当前这个uboot已经被移植到多少个开发板上了(当前的uboot支持多少个开发板)。
  • common : 通用代码,涵盖各个方面,以命令行处理为主
  • disk : 磁盘分区相关代码
  • doc : 常见功能和问题的说明文档,一堆README开头的文件
  • drivers : 常用的设备驱动程序,每个类型的设备驱动占用一个子目录
  • examples : 示例程序
  • fs : 文件系统,支持嵌入式开发常见的fs(cramfs,ext2,ext3,jffs2,etc)
  • include : 全局需要的头文件定义在这儿
  • lib : 通用库文件
  • net : 网络相关的代码,小型的协议栈。
  • tools : 辅助程序, 用于编译和检查uboot目标文件

2.配置架构

2.1 配置树

整个uboot工程是由以下几个配置文件进行配置的

  • .config
  • Makefile
  • include
    • auto.conf
    • autoconf.h
  • Kconfig

2.2 配置联系

  • 顶层的Makefile是顶层入口。
  • 在调用make menuconfig的时候,会使用到各个子目录的Kconfig进行显示,最后将结果汇总到 .config — XXX_CONFIG = y 或者 XXX_CONFIG = m
  • auto.conf,其内容来自 .config 用于子目录的Makefile编译,其形式为 obj-$(XXX_CONFIG) += xxx.o,当 XXX_CONFIG = y时就会编译近启动文件,m则为驱动方式,uboot没有驱动,所以全部都是在二进制文件中。
  • aotoconf.h其内容也来自.config ,由源码进行调用,其中的定义则都是 XXX_CONFIG = 1

3.Kconfig内容解析

以常见的DM9000网卡驱动的Kconfig为例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# Network device configuration
menuconfig NETDEVICES
default y if UML
depends on NET
bool "Network device support"
---help---
You can say N here if you don't intend to connect your Linux box to any other computer at all.
……
config DM9000
tristate "DM9000 support"
depends on ARM || BLACKFIN || MIPS
select CRC32
select MII
---help---
Support for DM9000 chipset.
To compile this driver as a module, choose M here. The module will be called dm9000.
……
source "drivers/net/arcnet/Kconfig"
source "drivers/net/phy/Kconfig"
  • menuconfig : 表示菜单,本身属于一个菜单中的项目,但是他又有子菜单项目。
  • config表示菜单中的一个配置项(本身并没有子菜单下的项目)。一个menuconfig后面跟着的所有config项就是这个menuconfig的子菜单。这就是Kconfig中表示的目录关系。
  • NETDEVICES : menuconfig或者config后面空格隔开的大写字母表示的类似于 NETDEVICES 的就是这个配置项的配置项名字,这个字符串前面添加CONFIG_后就构成了“.config”文件中的配置项名字。
  • source:内核源码目录树中每一个Kconfig都会用source引入其所有子目录下的Kconfig,从而保证了所有的Kconfig项目都被包含进menuconfig中。这个也说明了:如果你自己在linux内核中添加了一个文件夹,一定要在这个文件夹下创建一个Kconfig文件,然后在这个文件夹的上一层目录的Kconfig中source引入这个文件夹下的Kconfig文件。
  • tristate:意思是三态(3种状态,对应Y、N、M三种选择方式),意思就是这个配置项可以被三种选择。
  • bool:是要么真要么假(对应Y和N)。意思是这个配置项只能被2种选择。
  • depends:意思是本配置项依赖于另一个配置项。如果那个依赖的配置项为Y或者M,则本配置项才有意义;如果依赖的哪个配置项本身被设置为N,则本配置项根本没有意义。depends项会导致make menuconfig的时候找不到一些配置项。所以在menuconfig中如果找不到一个选项,但是这个选项在Kconfig中却是有的,则可能的原因就是这个配置项依赖的一个配置项是不成立的。depends依赖的配置项可以是多个,还可以有逻辑运算。这种时候只要依赖项目运算式子的结果为真则依赖就成立。
  • select:表示depends on的值有效时,下面的select也会成立,将相应的内容选上。
  • default:表示depends on的值有效时,下面的default也会成立,将相应的选项选上,有三种选项,分别对应y,n,m。
  • help:帮助信息,解释这个配置项的含义,以及如何去配置他。

版权声明:本文为博主原创文章,转载需声明为转载内容并添加原文地址。

原文地址:http://coderdock.com

Dock wechat
欢迎您扫一扫上面的微信公众号,订阅我的公众号