http://blog.csdn.net/evilcode/article/details/5690177
前言:近期在学习U-Boot,学习过程不外乎学习文档,阅读代码。U-BOOT源码树提供的README文档讲得比较详细,可以作为一个起点,看了下网上似乎也没有完全的中文翻译,因此才有翻译的打算,一方面可以共享,另一方面今后自己查阅起来也比较方便。本系列翻译的内容来源于U-BOOT 1.3.4源码目录下的README文件,不足之处,还请各位大侠批评指正。
概述:
=====
本目录包含U- Boot的源代码。U-Boot是一个用于嵌入式单板的bootloader,支持PowerPC, ARM, MIPS及其它几种处理器。它可以安装在boot ROM中,用来对硬件进行初始化和测试,或者下载及运行应用代码。
U-Boot的开发与Linux联系紧密:有一部分代码来源于Linux内核代码树,两者有一些相同的头文件,并且U-Boot为支持Linux映像的启动也提供了特别的支持。
为了使该软件能易于配置及扩展,我们已经做了一些工作。比如所有操作命令都以相同的调用接口实现,这样便于添加新的命令。此外,你还可以在monitor上动态地加载及运行代码,而不是向monitor添加不太常用的代码(比如硬件测试程序)。
状态:
=====
对于在Makefile中存在配置的单板,一般是经过一定的测试,并可以为是"可工作的"。实际上,很多单板也正式地在生产中使用。
遇到问题时,请在CHANGELOG和CREDITS两个文件中查找一个具体的移植是由谁贡献的。MAINTAINERS文件列出了单板维护者。
获取帮助:
=========
如果你对U-Boot有疑问,或者想为U-Boot贡献,你应该向U-Boot邮件列表<u- boot-users@lists.sourceforge.net>发送消息。在提问前,请搜索邮件列表的历史记录:http://lists.sourceforge.net/lists/listinfo/u-boot-users/
获取源代码:
===========
U-Boot源代码使用git仓库维护,地址为:git://www.denx.de/git /u-boot.git;你也可以在线浏览:http://www.denx.de/cgi-bin/gitweb.cgi?p=u-boot.git; a=summary
该页面的"snapshots"链接允许你下载任一版本的源码树。官方发布可以通过FTP下载:ftp://ftp.denx.de/pub/u-boot/
预编译(并经过测试)的映像可以从这里下载:ftp://ftp.denx.de/pub/u-boot/images/
我们来自哪里:
=============
- 从8xxrom源代码开始
- 建立了 PPCBoot 项目 (http://sourceforge.net/projects/ppcboot)
- 清理代码
- 让代码更易于添加自定义单板
- 可以添加其它类型的 [PowerPC] CPU
- 扩展了函数,特别是:
* 为 Linux 引导程序提供了扩展的接口
* 下载 S-Record
* 从网络引导
* 从 PCMCIA / CompactFlash / ATA disk / SCSI ... 等设备引导
- 建立了ARMBoot项目 (http://sourceforge.net/projects/armboot)
- 添加了其它CPU家族 (从ARM开始)
- 建立了 U-Boot 项目 (http://sourceforge.net/projects/u-boot)
- 当前项目的主页: http://www.denx.de/wiki/U-Boot
命名与拼写:
===========
本项目的官方名称为"Das U-Boot"。在所有文档中都应使用"U-Boot"。比如:
这是U-Boot项目的README文件。
文件名等,也应基于u-boot字符串。比如:
include/asm-ppc/u-boot.h
#include <asm/u-boot.h>
变量名,宏定义等,也需要基于u_boot或者U_BOOT来定义。比如:
U_BOOT_VERSION u_boot_logo
IH_OS_U_BOOT u_boot_hush_start
版本编号:
=========
U-Boot使用3级版本编号,包含一个版本,子版本及补丁级别:"U-Boot-2.34.5" 表示版本2,子版本34,补丁级别4。
补丁级别用于表示发行版本间的某个阶段,比如,官方发布版本的补丁级别总是0。
目录结构:
====================
- board 与单板相关的文件
- common 一些与架构无关的函数
- cpu 针对特定CPU的文件
- 74xx_7xx 针对Freescale MPC74xx 和 7xx CPU 的文件
- arm720t 针对ARM 720 CPU 的文件
- arm920t 针对ARM 920 CPU 的文件
- at91rm9200 针对Atmel AT91RM9200 CPU 的文件
- imx 针对Freescale MC9328 i.MX CPU 的文件
- s3c24x0 针对Samsung S3C24X0 CPU 的文件
- arm925t 针对ARM 925 CPU 的文件
- arm926ejs 针对ARM 926 CPU 的文件
- arm1136 针对ARM 1136 CPU 的文件
- at32ap 针对Atmel AVR32 AP CPU 的文件
- i386 针对i386 CPU 的文件
- ixp 针对Intel XScale IXP CPU 的文件
- leon2 针对Gaisler LEON2 SPARC CPU 的文件
- leon3 针对Gaisler LEON3 SPARC CPU 的文件
- mcf52x2 针对Freescale ColdFire MCF52x2 CPU 的文件
- mcf5227x 针对Freescale ColdFire MCF5227x CPU 的文件
- mcf532x 针对Freescale ColdFire MCF5329 CPU 的文件
- mcf5445x 针对Freescale ColdFire MCF5445x CPU 的文件
- mcf547x_8x 针对Freescale ColdFire MCF547x_8x CPU 的文件
- mips 针对MIPS CPU 的文件
- mpc5xx 针对Freescale MPC5xx CPU 的文件
- mpc5xxx 针对Freescale MPC5xxx CPU 的文件
- mpc8xx 针对Freescale MPC8xx CPU 的文件
- mpc8220 针对Freescale MPC8220 CPU 的文件
- mpc824x 针对Freescale MPC824x CPU 的文件
- mpc8260 针对Freescale MPC8260 CPU 的文件
- mpc85xx 针对Freescale MPC85xx CPU 的文件
- nios 针对Altera NIOS CPU 的文件
- nios2 针对Altera Nios-II CPU 的文件
- ppc4xx 针对AMCC PowerPC 4xx CPU 的文件
- pxa 针对Intel XScale PXA CPU 的文件
- s3c44b0 针对Samsung S3C44B0 CPU 的文件
- sa1100 针对Intel StrongARM SA1100 CPU 的文件
- disk 处理磁盘驱动器分区的代码
- doc 文档 (不要报太大期望^_^)
- drivers 常用的设备驱动
- dtt 数字温度计及调节器的驱动
- examples 示范代码
- include 头文件
- lib_arm 针对ARM架构的文件
- lib_avr32 针对AVR32架构的文件
- lib_generic 针对所有架构的文件
- lib_i386 针对i386架构的文件
- lib_m68k 针对m68k架构的文件
- lib_mips 针对MIPS架构的文件
- lib_nios 针对NIOS架构的文件
- lib_ppc 针对PowerPC 架构的文件
- lib_sparc 针对SPARC架构的文件
- libfdt 支持平坦设备树(flattened device trees)的库文件
- net 网络代码
- post 上电自检
- rtc 实时时钟驱动
- tools 编译S-Record或U-Boot映像等相关工具
软件配置:
=======================
配置一般使用宏定义实现;使用宏的原因是避免可能存在的不可达代码。
有两类配置变量:
* _OPTIONS_ 配置:
这类配置以"CONFIG_"开始,用户可以自行选择。
* _SETTINGS_ 配置:
这类配置以"CFG_"开始,与硬件相关。如果你不清楚它的含义,则不要随便修改。
后面我们会添加一个配置工具,可能类似于Linux Kernel配置工具。目前,我们还得手动完成配置,比如建一些软链接,编辑一些配置文件。下面我们使用TQM8xxL单板作为范例。
选择处理器架构与单板类型:
-------------------------
对所有已经支持的单板,有默认配置可以直接使用;只需要输入"make <board_name>_config".
比如: 对一个 TQM823L 单板类型:
cd u-boot
make TQM823L_config
对于Cogent平台,你需要指定CPU类型;比如 "make cogent_mpc8xx_config"。还要根据cogent/README的指导来配置cogent目录。
配置选项:
----------------------
配置依赖于单板类型与CPU类型;所有这些信息都保存在一个配置文件 "include/configs/<board_name>.h" 中
比如: 对一个 TQM823L 单板,所有配置设置都在文件"include/configs/TQM823L.h"中。
有许多选项与对应的Linux内核配置选项名称相同,目的是之后容易做一个配置工具。
需要配置的选项如下:
- CPU类型: 只能定义一个,比如CONFIG_MPC85XX.
- 单板类型: 只能定义一个,比如CONFIG_MPC8540ADS.
- CPU子卡类型: (如果定义了CONFIG_ATSTK1000)
只能定义一个,比如CONFIG_ATSTK1002
- CPU Module 类型 (如果定义了CONFIG_COGENT)
只能定义下列中的一个:CONFIG_CMA286_60_OLD
--- FIXME --- 尚未经过测试的:
CONFIG_CMA286_60, CONFIG_CMA286_21, CONFIG_CMA286_60P,
CONFIG_CMA287_23, CONFIG_CMA287_50
- 母板类型: (如果定义了CONFIG_COGENT)
可以选择下列定义:
CONFIG_CMA101, CONFIG_CMA102
- 母板I/O Modules: (如果定义了CONFIG_COGENT)
可以择下面的一个或多个定义:
CONFIG_CMA302
- 母板选项: (如果定义了CONFIG_CMA101或者CONFIG_CMA102)
可以择下面的一个或多个定义:
CONFIG_LCD_HEARTBEAT - 在LCD上每秒钟用旋转字符(即|/-/|/-/)更新字符的位置
- Board flavour: (如果定义了CONFIG_MPC8260ADS)
CONFIG_ADSTYPE
可选值有:
CFG_8260ADS - 最初的 MPC8260ADS
CFG_8266ADS - MPC8266ADS
CFG_PQ2FADS - PQ2FADS-ZU 或者 PQ2FADS-VR
CFG_8272ADS - MPC8272ADS
- MPC824X 家族成员 (如果定义了CONFIG_MPC824X)
只能定义下列中的一个:
CONFIG_MPC8240, CONFIG_MPC8245
- 8xx CPU 选项: (如果使用MPC8xx CPU)
CONFIG_8xx_GCLK_FREQ - 不推荐: 如果get_gclk_freq()不能工作(比如,没有32KHz PIT/RTC参考时钟),用该宏定义CPU时钟。
CONFIG_8xx_OSCLK - 锁相环输入时钟(EXTCLK或者XTAL/EXTAL)
- 859/866/885 CPU 选项: (如果使用MPC859, MPC866或者MPC885 CPU):
CFG_8xx_CPUCLK_MIN
CFG_8xx_CPUCLK_MAX
CONFIG_8xx_CPUCLK_DEFAULT
参见文档 doc/README.MPC866
CFG_MEASURE_CPUCLK
定义该宏来测量实际的CPU时钟,否则需要保证配置的正确性。通常用于单板确认锁相环是否锁定到预期的频率上。注意,本功能需要一个稳定的参考时钟 (32kHz RTC时钟或者CFG_8XX_XIN)
- Intel Monahans 选项:
CFG_MONAHANS_RUN_MODE_OSC_RATIO
定义Monahans的运行模式频率与晶振频率的比值. 有效值为8, 16, 24, 31. 核心频率为该值乘以13MHz.
CFG_MONAHANS_TURBO_RUN_MODE_RATIO
定义Monahans turbo 模式频率与晶振频率的比值. 有效值为1(不定义的默认值)和2. 核心频率是上面计算出的值与该值的乘积.
- Linux内核接口:
CONFIG_CLOCKS_IN_MHZ
U-Boot在内部使用Hz保存所有时钟信息。为了与旧的Linux内核(要求bd_info数据内的时钟是MHZ单位)达到二进制兼容,可以定义环境变量"clocks_in_mhz",U-Boot在传递给Linux内核前,将时钟数据转换为MHZ。
当定义了 CONFIG_CLOCKS_IN_MHZ 时,"clocks_in_mhz=1"的定义会自动包含到默认的环境中。
CONFIG_MEMSIZE_IN_BYTES [只与 MIPS 相关]
当向linux传递memsize参数时,有一些版本的单位是字节,其它的则是MB,如果定义 CONFIG_MEMSIZE_IN_BYTES,则参数单位为字节。
CONFIG_OF_LIBFDT
新的内核版本要求使用平坦设备树(基于开放固件的概念)将固件设置传递给内核
CONFIG_OF_LIBFDT
* New libfdt-based support
* 增加"fdt"命令
* bootm命令自动更新fdt
OF_CPU - cpus节点的名称
OF_SOC - soc节点的名称
OF_TBCLK - timebase频率
OF_STDOUT_PATH - 终端设备的路径
带有QUICC引擎的单板需要将OF_QE设置为UCC MAC地址
CONFIG_OF_BOARD_SETUP
单板在将平坦设备树传递给内核前需要做额外的修改
CONFIG_OF_BOOT_CPU
该定义填充到boot参数头部的CPU部分。如果不定义,默认值为0。
- 串口:
CFG_PL010_SERIAL
如果希望支持Amba PrimeCell PL010串口控制器,则定义此宏。
CFG_PL011_SERIAL
如果希望支持Amba PrimeCell PL011串口控制器,则定义此宏。
CONFIG_PL011_CLOCK
如果你使用Amba PrimeCell PL011串口控制器,将该宏定义为串口控制器的时钟频率。
CONFIG_PL01x_PORTS
如果你的单板使用Amba PrimeCell PL010 或者 PL011 串口控制器,定义该宏为一个列表(注:即数组初始化列表,该数组类型是一个指针数组),列表里每一项为串口的基地址。例子参见 "include/configs/versatile.h"
- 终端接口:
根据单板的情况,定义一个串口终端(比如 CONFIG_8xx_CONS_SMC1, CONFIG_8xx_CONS_SMC2, CONFIG_8xx_CONS_SCC1, ...), 或者定义CONFIG_8xx_CONS_NONE来关闭串口终端
注意: 如果定义了 CONFIG_8xx_CONS_NONE, 串口例程必须在其它地方定义(比如 serial_init(), serial_getc(), ...)
CONFIG_CFB_CONSOLE
使能终端设备的彩色帧缓冲. 需要下列定义 (cf. smiLynxEM, i8042, board/eltec/bab7xx)
VIDEO_FB_LITTLE_ENDIAN 图像存储组织 (默认为大端序)
VIDEO_HW_RECTFILL 图像芯片支持矩形填充(rectangle fill)
(cf. smiLynxEM)
VIDEO_HW_BITBLT 图像芯片支持位块传输(bit-blit) (cf. smiLynxEM)
VIDEO_VISIBLE_COLS 可视像素列 (cols=pitch)
VIDEO_VISIBLE_ROWS 可视像素行
VIDEO_PIXEL_SIZE 每像素字节数
VIDEO_DATA_FORMAT 图像数据格式 (0-5, cf. cfb_console.c)
VIDEO_FB_ADRS 帧缓冲地址
VIDEO_KBD_INIT_FCT keyboard int fct
(i.e. i8042_kbd_init())
VIDEO_TSTC_FCT test char fct
(i.e. i8042_tstc)
VIDEO_GETC_FCT get char fct
(i.e. i8042_getc)
CONFIG_CONSOLE_CURSOR 打开/关闭 光标绘制 (需要 blink timer cf. i8042.c)
CFG_CONSOLE_BLINK_COUNT blink 间隔 (cf. i8042.c)
CONFIG_CONSOLE_TIME 在右上角显示时间/日期信息 (需要 CONFIG_CMD_DATE)
CONFIG_VIDEO_LOGO 在左上角显示Linux logo
CONFIG_VIDEO_BMP_LOGO 使用bmp_logo.h作为logo(默认是linux_logo.h)。 需要 CONFIG_VIDEO_LOGO
CONFIG_CONSOLE_EXTRA_INFO
除了logo外的其它单板信息
如果定义了CONFIG_CFB_CONSOLE, 视频终端是默认的i/o. 使用'console=serial'环境可以强制使用串口终端
如果定义了 CONFIG_SILENT_CONSOLE, 可以用'silent'环境变量屏蔽所有终端消息(包括U-Boot和Linux的输出!)。更多信息见doc/README.silent
- 终端波特率:
CONFIG_BAUDRATE - 以bps为单位
选择一个CFG_BAUDRATE_TABLE列出的波特率。
CFG_BAUDRATE_TABLE 见下面。
CFG_BRGCLK_PRESCALE, baudrate prescale
- 中断驱动的串口输入:
CONFIG_SERIAL_SOFTWARE_FIFO
仅用于PPC405GP。
使用一个中断处理程序来接收串口数据。它将使能并使用硬件握手(RTS/CTS)和串口内置FIFO。必须设置中断驱动的输入缓冲的字节数。
不定义该宏则禁用此特性, 包括禁用缓冲和硬件握手。
- 终端 UART 编号:
CONFIG_UART1_CONSOLE
仅用于AMCC PPC4xx。
如果定义该宏,则使用内部UART1作为默认的U-Boot终端 (否则使用UART0)
- 引导延时: CONFIG_BOOTDELAY - in seconds
在自动引导默认映像前的延时,设为-1表示禁用自动引导。
与CONFIG_BOOTDELAY相关的选项见 doc/README.autoboot. 这些选项都不是必需的。
CONFIG_BOOT_RETRY_TIME
CONFIG_BOOT_RETRY_MIN
CONFIG_AUTOBOOT_KEYED
CONFIG_AUTOBOOT_PROMPT
CONFIG_AUTOBOOT_DELAY_STR
CONFIG_AUTOBOOT_STOP_STR
CONFIG_AUTOBOOT_DELAY_STR2
CONFIG_AUTOBOOT_STOP_STR2
CONFIG_ZERO_BOOTDELAY_CHECK
CONFIG_RESET_TO_RETRY
- 自动引导命令:
CONFIG_BOOTCOMMAND
只有定义了CONFIG_BOOTDELAY时,才需要定义这个宏。如果在引导延时内没有字符输入,则自动执行该宏定义的命令字符串。
CONFIG_BOOTARGS
该宏用于向bootm命令传递参数。CONFIG_BOOTARGS的值也被赋给环境变量"bootargs"
CONFIG_RAMBOOT and CONFIG_NFSBOOT
两个宏值分别被赋给环境变量"ramboot"和"nfsboot"。用于简化从RAM和NFS两种引导途径之间的切换。
- 预引导命令:
CONFIG_PREBOOT
如果定义了该选项,则在进行引导延时的计时前或者运行自动引导命令前,检查环境变量"preboot"是否存在,如果存在则进入交互模式。
该功能在"preboot"是由程序自动生成或修改的情况下比较有用。比如,LWMON单板的代码:当引导系统时,如果用户按下特定组合键,preboot会被修改。
- Serial Download Echo Mode:
CONFIG_LOADS_ECHO
如果定义为1,在串口下载(使用"loads"命令)过程中,会对所有收到的字符进行回显。在某些终端上可能有用(如"cu"),但对大多数终端只是浪费时间。这个设置定义了"loads_echo"环境变量的默认值。
- Kgdb 串口波特率: (如果定义了 CONFIG_CMD_KGDB)
CONFIG_KGDB_BAUDRATE
选择一个 CFG_BAUDRATE_TABLE 列出的波特率,见下面。
- Monitor 功能:
可以用#include "config_cmd_all.h"包含所有Monitor命令,并用#undef去掉不需要的命令。也可以使用"config_cmd_default.h",并#define需要的命令。
下列命令里,不带*号的是默认的命令配置
CONFIG_CMD_ASKENV * ask for env variable
CONFIG_CMD_AUTOSCRIPT 支持自动脚本
CONFIG_CMD_BDI bdinfo
CONFIG_CMD_BEDBUG * 包含 BedBug 调试器
CONFIG_CMD_BMP * BMP 支持
CONFIG_CMD_BSP * 单板相关命令
CONFIG_CMD_BOOTD bootd
CONFIG_CMD_CACHE * icache, dcache
CONFIG_CMD_CONSOLE coninfo
CONFIG_CMD_DATE * 支持RTC, date/time...
CONFIG_CMD_DHCP * 支持DHCP
CONFIG_CMD_DIAG * 诊断
CONFIG_CMD_DOC * Disk-On-Chip Support
CONFIG_CMD_DTT * Digital Therm and Thermostat
CONFIG_CMD_ECHO echo arguments
CONFIG_CMD_EEPROM * 支持EEPROM读写
CONFIG_CMD_ELF * bootelf, bootvx
CONFIG_CMD_ENV saveenv
CONFIG_CMD_FDC * 支持软驱
CONFIG_CMD_FAT * 支持FAT分区
CONFIG_CMD_FDOS * 支持Dos磁盘
CONFIG_CMD_FLASH flinfo, erase, protect
CONFIG_CMD_FPGA 支持FPGA设备初始化
CONFIG_CMD_HWFLOW * RTS/CTS 硬件流控
CONFIG_CMD_I2C * I2C 串行总线支持
CONFIG_CMD_IDE * IDE 硬盘支持
CONFIG_CMD_IMI iminfo
CONFIG_CMD_IMLS 列出所有找到的映像
CONFIG_CMD_IMMAP * 支持IMMR dump
CONFIG_CMD_IRQ * irqinfo
CONFIG_CMD_ITEST Integer/string test of 2 values
CONFIG_CMD_JFFS2 * 支持JFFS2文件系统
CONFIG_CMD_KGDB * kgdb
CONFIG_CMD_LOADB loadb
CONFIG_CMD_LOADS loads
CONFIG_CMD_MEMORY md, mm, nm, mw, cp, cmp, crc, base,
loop, loopw, mtest
CONFIG_CMD_MISC Misc functions like sleep etc
CONFIG_CMD_MMC * MMC memory mapped support
CONFIG_CMD_MII * MII实用命令
CONFIG_CMD_NAND * NAND支持
CONFIG_CMD_NET bootp, tftpboot, rarpboot
CONFIG_CMD_PCI * pciinfo
CONFIG_CMD_PCMCIA * PCMCIA支持
CONFIG_CMD_PING * 向网络主机发送 ICMP ECHO_REQUEST
CONFIG_CMD_PORTIO * 端口I/O
CONFIG_CMD_REGINFO * 寄存器dump
CONFIG_CMD_RUN run command in env variable
CONFIG_CMD_SAVES * save S record dump
CONFIG_CMD_SCSI * SCSI 支持
CONFIG_CMD_SDRAM * 打印 SDRAM 配置信息 (需要CONFIG_CMD_I2C)
CONFIG_CMD_SETGETDCR 支持访问DCR寄存器 (仅用于4xx)
CONFIG_CMD_SPI * 支持SPI串行总线
CONFIG_CMD_USB * 支持USB
CONFIG_CMD_VFD * 支持VFD (TRAB)
CONFIG_CMD_CDP * 支持Cisco Discover Protocol
CONFIG_CMD_FSL * 支持Microblaze FSL
例如: 如果你需要除了网络支持外的所有功能,可以配置如下:
#include "config_cmd_all.h"
#undef CONFIG_CMD_NET
其它命令:
fdt (平坦设备树) 命令: CONFIG_OF_LIBFDT
注意: 如果你不清楚,请不要开启"icache"和"dcache"命令(配置参数CONFIG_CMD_CACHE)。在8xx或8260上无法使能数据 cache(访问IMMR区间必须不过cache),在其它使用数据cache作为初期栈和数据保存的系统里也不能禁用数据cache。
XXX - 该列表需要更新!
- 看门狗:
CONFIG_WATCHDOG
如果定义该变量,则使能看门狗支持。必须有平台特定的看门狗实现。对8xx和8260 CPU,SIU看门狗功能在SYPCR寄存器中使能。
- U-Boot版本:
CONFIG_VERSION_VARIABLE
如果定义该宏,U-Boot创建一个"ver"环境变量,用于显示"version"命令所打印出的U-Boot版本。本变量是只读的。
- 实时时钟:
如果选择了 CONFIG_CMD_DATE,需要同时选择RTC的类型。使用下列定义中的一个:
CONFIG_RTC_MPC8xx - 使用MPC8xx的内部RTC
CONFIG_RTC_PCF8563 - 使用Philips PCF8563 RTC
CONFIG_RTC_MC13783 - 使用MC13783 RTC
CONFIG_RTC_MC146818 - 使用MC146818 RTC
CONFIG_RTC_DS1307 - 使用Maxim, Inc. DS1307 RTC
CONFIG_RTC_DS1337 - 使用Maxim, Inc. DS1337 RTC
CONFIG_RTC_DS1338 - 使用Maxim, Inc. DS1338 RTC
CONFIG_RTC_DS164x - 使用Dallas DS164x RTC
CONFIG_RTC_ISL1208 - 使用Intersil ISL1208 RTC
CONFIG_RTC_MAX6900 - 使用Maxim, Inc. MAX6900 RTC
CFG_RTC_DS1337_NOOSC - 关闭DS1337的OSC输出
注意:如果RTC使用I2C,则需要配置I2C接口。参加见下面的I2C支持。
- 时间戳支持:
如果定义CONFIG_TIMESTAMP, 与映像相关的命令如bootm或iminfo会打印给定映像的时间戳(日期和时间)。如果定义了CONFIG_CMD_DATE,该选项自动使能。
- 分区支持:
CONFIG_MAC_PARTITION, CONFIG_DOS_PARTITION, CONFIG_ISO_PARTITION
如果使能了IDE或SCSI支持(CONFIG_CMD_IDE 或者 CONFIG_CMD_SCSI),你必须至少配置一种分区类型的支持
- IDE 复位例程:
CONFIG_IDE_RESET_ROUTINE - 在几个单板的配置文件中定义,但并未使用!
CONFIG_IDE_RESET - 如果定义了,会调用下面的函数复位IDE:
ide_set_reset(int reset)
这个函数必须在单板相关文件里定义。
- ATAPI 支持:
CONFIG_ATAPI
定义该宏来支持ATAPI。
- LBA48 支持
CONFIG_LBA48
定义该宏可支持大于137GB的磁盘。需要检查CFG_64BIT_LBA, CFG_64BIT_VSPRINTF 和 CFG_64BIT_STRTOUL选项。如果不定义它们,LBA48使用32位变量,只能支持到最大2.1TB的磁盘。
CFG_64BIT_LBA:
如果使能,则IDE子系统使用64位的扇区地址,默认是32位。
- SCSI 支持:
当前只支持 SYM53C8XX SCSI 控制器; 定义 CONFIG_SCSI_SYM53C8XX 来使能。
可以调整CFG_SCSI_MAX_LUN [8], CFG_SCSI_MAX_SCSI_ID [7] 及 CFG_SCSI_MAX_DEVICE [CFG_SCSI_MAX_SCSI_ID * CFG_SCSI_MAX_LUN] 定义最大LUN, SCSI ID及目标的最大设备数。
定义CFG_SCSI_SYM53C8XX_CCF 以修正clock timing(时钟时序?) (80Mhz)
- 网络支持 (PCI设备):
CONFIG_E1000
支持Intel 8254x GE芯片。
CONFIG_E1000_FALLBACK_MAC
量产后,在EEPROM为空时的默认MAC地址。
CONFIG_EEPRO100
支持Intel 82557/82559/82559ER芯片。还可以定义CONFIG_EEPRO100_SROM_WRITE使能首次初始化时的EEPROM写流程.
CONFIG_TULIP
支持 Digital 2114x 芯片。
还可以定义 CONFIG_TULIP_SELECT_MEDIA 支持单板特定的modem芯片初始化(KS8761/QS6611).
CONFIG_NATSEMI
支持 National dp83815 芯片.
CONFIG_NS8382X
支持 National dp8382[01] gigabit 芯片.
- 网络支持 (其它设备):
CONFIG_DRIVER_LAN91C96
支持 SMSC 的 LAN91C96 芯片.
CONFIG_LAN91C96_BASE
将该宏定义为LAN91C96 I/O空间的物理地址。
CONFIG_LAN91C96_USE_32_BIT
定义该宏以使能32位寻址
CONFIG_DRIVER_SMC91111
支持 SMSC 的 LAN91C111 芯片
CONFIG_SMC91111_BASE
定义设备的物理地址 (I/O 空间)
CONFIG_SMC_USE_32_BIT
如果数据总线是32位的,定义此宏
CONFIG_SMC_USE_IOFUNCS
如果定义则使用I/O函数,否则使用I/O宏 (有些硬件不能用宏)
CONFIG_DRIVER_SMC911X
支持 SMSC 的 LAN911x 和 LAN921x 芯片
CONFIG_DRIVER_SMC911X_BASE
定义设备的物理地址 (I/O 空间)
CONFIG_DRIVER_SMC911X_32_BIT
如果数据总线为32位,定义此宏
CONFIG_DRIVER_SMC911X_16_BIT
如果数据总线为16位,定义此宏。如果处理器自动将1个32位数据转化为2个16位数据,可以试着用 CONFIG_DRIVER_SMC911X_32_BIT.
- USB 支持:
目前只支持UHCI host controller (PIP405, MIP405, MPC5200); 定义 CONFIG_USB_UHCI 来使能。
定义 CONFIG_USB_KEYBOARD 使能USB键盘支持,定义 CONFIG_USB_STORAGE 使能USB存储设备。
注意: 受支持的是USB键盘和USB软驱 (TEAC FD-05PUB).
MPC5200 USB 需要附加的定义:
CONFIG_USB_CLOCK
对 528 MHz 时钟: 0x0001bbbb
CONFIG_USB_CONFIG
对差分驱动器: 0x00001000
对单边驱动器: 0x00005000
CFG_USB_EVENT_POLL
可以定义此宏来允许中断查询,否则使用异常中断。
- USB 设备:
如果希望使用USB终端,定义下面的宏。
在串口终端重建固件后,使用命令"setenv stdin usbtty; setenv stdout usbtty" 并接上USB线缆. "dmesg"命令应该会打印它找到一个新设备. 可以将usbtty环境变量设为gserial或者cdc_acm。前者让设备对USB host表现为Linux gserial设备,后者让设备表现为通用设备类抽象控制模型(Common Device Class Abstract Control Model)的串行设备。
如果你选择usbtty = gserial,应该能通过下面的命令枚举一个Linux host
# modprobe usbserial vendor=0xVendorID product=0xProductID
如果你选择 cdc_acm, 将环境变量usbtty设为cdc_acm就行了. 你还可以在单板配置头文件中定义下面的宏。
CONFIG_USB_DEVICE
定义该宏来建立一个UDC设备
CONFIG_USB_TTY
如果定义该宏,则可以使用一个tty类型的设备与UDC设备通信
CFG_CONSOLE_IS_IN_ENV
如果你想将标准输入、标准输出、标准错误设为usbtty,定义该宏。
mpc8xx:
CFG_USB_EXTC_CLK 0xBLAH
从外部时钟"blah"导出USB时钟。
- CFG_USB_EXTC_CLK 0x02
CFG_USB_BRG_CLK 0xBLAH
从brgclk导出USB时钟
- CFG_USB_BRG_CLK 0x04
如果你有一个USB-IF分配的VendorID,你可以将自己的vendor值定义在BoardName.h,或者直接定义在 usbd_vendor_info.h. 如果你不定义 CONFIG_USBD_MANUFACTURER, CONFIG_USBD_PRODUCT_NAME, CONFIG_USBD_VENDORID 和 CONFIG_USBD_PRODUCTID, U-Boot则默认对target host表现为Linux设备。
CONFIG_USBD_MANUFACTURER
定义公司的名称
- CONFIG_USBD_MANUFACTURER "my company"
CONFIG_USBD_PRODUCT_NAME
定义设备的名称
- CONFIG_USBD_PRODUCT_NAME "acme usb device"
CONFIG_USBD_VENDORID
将此宏定义为你从USB-IF(Implementors Forum)分配的Vendor ID。为避免污染USB名字空间,要求该值必须是唯一的
- CONFIG_USBD_VENDORID 0xFFFF
CONFIG_USBD_PRODUCTID
定义设备的Product ID
- CONFIG_USBD_PRODUCTID 0xFFFF
- MMC 支持:
U-Boot支持Intel PXA上的MMC控制器,定义CONFIG_MMC以使能支持。用与flash类似的方式将MMC设备映射到物理内存,即可在boot提示符下访问设备。 CONFIG_CMD_MMC使能命令行。MMC驱动支持FAT文件系统,可以通过CONFIG_CMD_FAT开启.
- 日志Flash文件系统支持:
CONFIG_JFFS2_NAND, CONFIG_JFFS2_NAND_OFF, CONFIG_JFFS2_NAND_SIZE,
CONFIG_JFFS2_NAND_DEV
用于NAND设备上的默认分区的参数
CFG_JFFS2_FIRST_SECTOR,
CFG_JFFS2_FIRST_BANK, CFG_JFFS2_NUM_BANKS
用于NOR设备上的默认分区的参数
CFG_JFFS_CUSTOM_PART
定义此宏来创建一个私有分区,你必须提供一个函数: struct part_info* jffs2_part_info(int part_num)
如果只定义一个JFFS2分区,也可以定义下面的宏来禁用chpart命令。
#define CFG_JFFS_SINGLE_PART 1
在没有自定义分区的时候,这个是默认行为。
CONFIG_ISA_KEYBOARD
支持标准PC键盘,US(默认)和GERMAN键盘布局(通过"keymap=de"切换)。为cfb_console提供函数i8042_kbd_init, i8042_tstc和i8042_getc。支持光标闪烁。
CONFIG_VIDEO
使能Silicon Motion SMI 712/710/810 视频芯片. 视频输出由环境变量'videoout' (1 = LCD and 2 = CRT). 如果不定义videoout,默认为CRT
- "videomode=num" 'num' is a standard LiLo mode numbers.
支持下列标准模式 (* 为默认值):
-------------+---------------------------------------------
8 bits | 0x301* 0x303 0x305 0x161 0x307
15 bits | 0x310 0x313 0x316 0x162 0x319
16 bits | 0x311 0x314 0x317 0x163 0x31A
24 bits | 0x312 0x315 0x318 ? 0x31B
-------------+---------------------------------------------
(i.e. setenv videomode 317; saveenv; reset;)
使能 Epson SED13806 驱动. 该驱动支持8bpp和16bpp模式(由CONFIG_VIDEO_SED13806_8BPP或 CONFIG_VIDEO_SED13806_16BPP定义)
CONFIG_KEYBOARD
Active, color, single scan.
Active, color, single scan.
It isn't 16x9, and I am not sure what it is.
Active, color, single scan.
Active, color, single scan.
or
Hitachi LMG6912RPFC-00T
or
Hitachi SP14Q002
CFG_WHITE_ON_BLACK to get it inverted.
CONFIG_BZIP2
CONFIG_PHY_ADDR
CONFIG_ETHADDR
CONFIG_ETH2ADDR
CONFIG_ETH3ADDR
CONFIG_IPADDR
CONFIG_SERVERIP
CONFIG_MCAST_TFTP
CONFIG_BOOTP_RANDOM_DELAY
2nd BOOTP request: delay 0 ... 2 sec
3rd BOOTP request: delay 0 ... 4 sec
4th and following
BOOTP requests: delay 0 ... 8 sec
可以定义下列CONFIG_BOOTP_*宏来微调DHCP的功能:
CONFIG_BOOTP_GATEWAY
CONFIG_BOOTP_HOSTNAME
CONFIG_BOOTP_NISDOMAIN
CONFIG_BOOTP_BOOTPATH
CONFIG_BOOTP_BOOTFILESIZE
CONFIG_BOOTP_DNS
CONFIG_BOOTP_DNS2
CONFIG_BOOTP_SEND_HOSTNAME
CONFIG_BOOTP_NTPSERVER
CONFIG_BOOTP_TIMEOFFSET
CONFIG_BOOTP_VENDOREX
CONFIG_CDP_DEVICE_ID
device in .1 of milliwatts.
eg: #define I2C_TRISTATE (immr->im_cpm.cp_pbdir &= ~PB_SDA)
if(bit) immr->im_cpm.cp_pbdat |= PB_SDA; /
else immr->im_cpm.cp_pbdat &= ~PB_SDA
if(bit) immr->im_cpm.cp_pbdat |= PB_SCL; /
else immr->im_cpm.cp_pbdat &= ~PB_SCL
#undef CONFIG_I2C_MULTI_BUS
#define CFG_I2C_NOPROBES {0x50,0x68}
#define CFG_I2C_MULTI_NOPROBES {{0,0x50},{0,0x68},{1,0x54}}