uboot移植 --更新板级参数
?
本篇给出部分细节和要点,假定$U-BOOT为源码根目录。
这里去掉了flash.c文件,因为它是在lubbock板中自定义的FLASH存储器驱动,lubbock不使用U-Boot自带的FLASH驱动;而在本次移植中,我们将使用drivers/cfi_flash.c作为XSBASE270开发板的NOR型闪存28F128K18C的驱动程序,具体过程后述。 实际移植过程中还可能要作如下改动:
编译U-Boot:
作其他必要修改,直至能正常编译通过。然后再进行后续的针对目标板的定制步骤。
2. 修改U-Boot Stage 1(汇编级)的平台相关代码U-Boot第一阶段的代码包括: (1) cpu/pxa/start.S (平台无关,处理器架构相关) (2) board/xsbase270/lowlevel_init.S (平台与处理器型号相关(3) board/xsbase270/config.mk (平台相关,设置TEXT_BASE) (4) include/configs/xsbase270.h (平台相关,设置寄存器初值等lowlevel_init.S已在第一步作了相应修改。config.mk中设置TEXT_BASE(U-Boot的链接起始地址),暂时不改动(0xa3080000)。 xsbase270.h中定义了系统初始化时的寄存器初值(主要是GPIO配置,时钟与处理器频率设置,片上存储器控制器与存储系统的初始化),这需要根据平台进行配置。下面给出部分代码示例及注释:
3. U-Boot Stage 2(C语言级U-Boot第二阶段的大部分代码是平台无关的。从移植的角度,我们仅需要关注下面一些平台相关的代码:(1) include/configs/xsbase270.h:通过使用定义或取消定义相关的预编译变量,用于对平台无关的代码进行平台相关的定制,包括定制U-Boot命令、缺省的环境变量、存储器映射、串口控制台配置、驱动程序等。 (2) board/xsbase270/xsbase270.c:板级初始化,只需进行最基本的配置,包括设置mach-type,启动参数列表首地址,设置标准输入输出设备,获取系统RAM配置信息等。 (3) 驱动程序的移植。最基本的是FLASH存储器驱动程序和以太网卡驱动程序。对于U-Boot中已经支持的器件,可以进行简单移植,否则需要自己加入相关的设备驱动程序。 下面对以上三部分分别阐述。 3.1 配置xsbase270.h可以参考lubbock.h,adsvix.h等相关开发板的设置,另外也可以从U-Boot源码的README文件获取更多信息。 (1) 存储器映射配置:
(2) 定制U-Boot命令: 在include/config_cmd_default.h头文件中已经预定义了一些常用的U-Boot命令,我们可以在include/configs/xsbase270.h中包含该头文件,对于其中已定义的不需要的命令,可用undef去除;对于要添加的命令,使用define定义相关的符号即可。
(3) 控制台串口配置: 包括指定控制台所用的PXA27X串口,缺省的串口通信波特率等。
(4) 环境变量设置 包括BOOTP选项设置,缺省环境变量设置,启动参数列表配置等。
其中,CONFIG_BOOTCOMMAND和CONFIG_BOOTARGS在后续的引导内核实验中还需要进行修正。 (5) 网卡驱动程序配置:
XSBASE270采用的网卡是LAN91C111,U-Boot自带的驱动程序drivers/smc91111.c可支持这款网卡,因此只要在这里作相应的配置即可。CONFIG_SMC91111_BASE要根据PXA27X对网卡的地址译码来决定(片选信号CSx和高位地址线),CONFIG_SMC_USE_32_BIT指定了网卡工作于32位数据总线模式。可以查看驱动程序源代码得到更多配置选项。 (6) NOR型闪存驱动程序配置: U-Boot本身支持一系列符合CFI(Common Flash Interface)接口规范的闪存,其缺省支持的闪存芯片信息在include/flash.h中定义,该头文件中还定义了CFI闪存驱动所必需的数据结构和其他物理及结构特性描述符。NAND闪存驱动在drivers/nand目录下,这里不予考虑。CFI是针对NOR型FLASH所提出的一种获取闪存芯片物理和结构参数的操作规程和标准。 XSBASE270采用两片Intel 28F128K18C的兼容CFI标准的NOR型闪存,单片容量为16MB,数据线宽度为16-bit,两片并作一个32MB容量的数据宽度为32-bit的BANK来使用。在头文件include/flash.h中没有定义该芯片的相关信息,可以手动添加;这并不是必须的,如果你并不需要使用这些信息的话(例如将CFI驱动所检测到的Device Id与头文件中定义的Device ID进行比对与验证)。
要使用CFI闪存驱动,必须要作的是在include/configs/xsbase270.h中添加如下定义:
另外,如果把环境变量保存在FLASH中,还有如下相关定义:
(7) 其他配置:
至此,目标板配置头文件xsbase270.h就完成了。 3.2 板级初始化代码xsbase270.c只需修改board_init()函数即可,完整代码如下:
3.3 驱动程序移植最主要的是闪存和网卡驱动程序的移植。由于使用CFI闪存驱动程序和SMC91111网卡驱动程序,应此只要在头文件中进行相关配置即可完成。具体见3.1节。如果需要自行添加相关的设备驱动,则需要在board/xsbase270/目录下添加驱动源文件,并将其添加到该目录下的Makefile中进行编译与链接。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |