CN102520993A - 在特异硬件平台上移植通用引导装载程序的方法 - Google Patents
在特异硬件平台上移植通用引导装载程序的方法 Download PDFInfo
- Publication number
- CN102520993A CN102520993A CN2011103999466A CN201110399946A CN102520993A CN 102520993 A CN102520993 A CN 102520993A CN 2011103999466 A CN2011103999466 A CN 2011103999466A CN 201110399946 A CN201110399946 A CN 201110399946A CN 102520993 A CN102520993 A CN 102520993A
- Authority
- CN
- China
- Prior art keywords
- bcm5358u
- boot loader
- hardware platform
- universal
- program
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Landscapes
- Stored Programmes (AREA)
Abstract
在特异硬件平台上移植通用引导装载程序的方法,属于系统软件的处理技术,特别涉及到跨硬件平台的软件移植方法。该方法在美国博通公司的BCM5358U硬件平台上实现,包括以下步骤:A、将BCM5358U引导装载程序按通用引导程序的要求进行转换,设置文件读取的方式参数,将代码写入通用引导装载程序中的开始部分,B、将BCM5358U引导装载程序中的设备驱动程序按通用引导程序的要求进行转换,将转换后的代码写入通用引导装载程序的第二部分,C、准备内核启动参数,D、编译程序,生成目标文件,将目标文件写入BCM5358U的程序存储区。采用本发明,可以解决BCM芯片平台上运行通用引导装载程序的空白,基于通用引导装载程序引导的系统软件可以方便、快速地移植到BCM5358U平台上。
Description
技术领域
本发明属于系统软件的处理技术,特别涉及到跨硬件平台的软件移植方法。
背景技术
任何处理器在开机运行时都需要一个引导加载程序,主要完成系统硬件的驱动加载、设置堆栈、调用操作系统内核并加载其他系统软件,典型的例子是大家熟悉的BIOS(基本输入输出系统)。
全球有线和无线通信半导体市场的先导者美国博通(Broadcom)公司推出的BCM5358U是新的Intensi-fi XLR无线局域网络(WLAN)VoIP路由器单芯片系统平台解决方案,该方案具有3G支持、业界领先的性能和最佳功耗等增强特性。因此,在3G USB调制解调器等设备开发时,该芯片是一个理想的选择。
CFE 是Common Firmware Environment即通用固件环境的缩写,它是由Broadcom Com公司专门针对自己生产的处理器开发的一款加载软件,它功能完备,对处理器进行硬件环境初始化,进行文件系统的更新以及加载内核维护等功能,包含了各种设备的驱动、文件系统、网络 协议、内存管理等软件模块。目前博通芯片都采用CFE(通用固件环境,Common Firmware Environment),读取NVRAM(非易失性随机存取存储器,Non-Volatile Random Access Memory)中的配置文件进行引导,完成硬件初始化然后加载操作系统内核。CFE几乎只支持博通公司的原厂软件,这导致了从其它平台的软件可移植性降低;而且CFE和NVRAM配置组合也限制了在该硬件平台上的二次开发。由于NVRAM配置文件就是一个文本文件,没有进行压缩直接存入flash固定位置,会占用嵌入式系统更多的flash资源。
U-Boot,全称 Universal Boot Loader,是计算机系统加电后的引导程序,功能类似于Windows操作系统的BIOS。U-Boot支持包括嵌入式Linux系统在内的大多数嵌入式操作系统的引导,在硬件支持方面,U-Boot除了支持PowerPC系列的处理器外,还能支持MIPS、 x86、ARM、NIOS、XScale等诸多常用系列的处理器。这两个特点正是U-Boot项目的开发目标,即支持尽可能多的嵌入式操作系统和嵌入式处理器。由于上述优点,很多开发机构都将U-Boot作为设备的引导程序。
采用U-BOOT进行系统引导时,使用XML格式的文件进行软件配置,CFE和U-BOOT读取配置区的方式不一样,一般U-Boot是直接读取第二flash块的64K字节XML文件配置信息,而CFE读取配置信息是在FLASH最后的高地址最后一块区域。
由于以上限制,在现有模式下,依赖U-Boot加载的软件移植到博通公司的BCM5358U上非常困难。
发明内容
本发明的目的是提供一种在BCM5358U运行U-Boot的方法,使通用引导装载程序可以在BCM5358U平台上运行,以便其它基于U-Boot引导的软件能够方便快速地移植到BCM5358U平台上。
本发明采用的技术方案是:在特异硬件平台上移植通用引导装载程序的方法,该方法在美国博通公司的BCM5358U硬件平台上实现,移植过程包括以下步骤:
A、将BCM5358U引导装载程序的第一部分的汇编代码和第二部分中对CPU初始化的汇编代码按通用引导程序的要求进行转换,保持原来的程序架构,设置文件读取方式的参数,将上述代码写入通用引导装载程序中的第一部分的开始位置,
B、将BCM5358U引导装载程序中的设备驱动程序按通用引导程序的要求进行转换,将转换后的代码写入通用引导装载程序的第二部分,
C、准备内核启动参数,
D、编译程序,生成目标文件,将目标文件写入BCM5358U的程序存储区。
上述步骤将BCM5358U的引导部分和CPU的初始化放到了U-Boot的第一部分中的汇编部分,将设备驱动程序按U-Boot的架构加入到U-Boot的第二部分。U-Boot的第一部分中的C语言程序保持不变,U-Boot的第一部分的C语言程序解压了U-Boot的第二部分,然后把CPU运行权交给U-Boot第二部分。U-Boot第二部分汇编部分是U-Boot本身的。
完成上述步骤后,当设备加电运行时,安装在BCM5358U中通用引导转载程序启动运行,完成对BCM5358U以及配套设备的初始化,完成基于BCM5358U的通用引导装载程序。
采用本发明,可以解决BCM芯片平台上运行通用引导装载程序的空白,在此基础上,基于通用引导装载程序引导的系统软件可以方便、快速地移植到BCM5358U平台上。
附图说明
下面结合附图对本发明进行详细说明。
图1为U-Boot启动流程图。
其中1为第一部分,2为第二部分。
具体实施方式
在特异硬件平台上移植通用引导装载程序的方法,该方法在美国博通公司的BCM5358U硬件平台上实现,移植过程包括以下步骤:
A、将BCM5358U引导装载程序的第一部分的汇编代码和第二部分中对CPU初始化的汇编代码按通用引导程序的要求进行转换,保持原来的程序架构,设置文件读取方式的参数,将上述代码写入通用引导装载程序中的第一部分的开始位置,
B、将BCM5358U引导装载程序中的设备驱动程序按通用引导程序的要求进行转换,将转换后的代码写入通用引导装载程序的第二部分,
C、准备内核启动参数,
D、编译程序,生成目标文件,将目标文件写入BCM5358U的程序存储区。
具体地,在步骤A中,设置文件读取的方式参数是将sdram_config的参数定义成宏形式。在步骤B中,转换的设备驱动程序包括串口驱动程序,SPI FLASH驱动程序和以太网驱动程序。
下面结合实例对本发明作进一步说明。
一般情况下,U-Boot分成两部分:第一部分为系统初始所需的最小集;另一部分为占较大空间的常用功能和驱动。第一部分只引导CPU、PLL初始化、SDRAM初始化、C语言部初始化等部分并解压第二部分。第二部分加载驱动程序,引导系统或者进入U-Boot命令模式。CFE也类似U-Boot分为两个部分。
步骤A中,必须保证CFE的第一部分的汇编部分和第二部分的汇编部分,以及U-Boot的第一部分运行;同时保证U-Boot的第一部分的编译环境和编译宏跟CFE的第一部分一致;保证初始化sdram_config参数与原BCM5358U参数一致,这个是U-Boot能否启动起来的关键。
为此,将CFE的第一部分的汇编部分移植到U-Boot的第一部分的最开始,将CFE的第二部分中对CPU初始化的汇编代码移植到U-Boot第一部分的汇编代码后面,移植过来的汇编部分的源码的架构保持原样不需要修改,这样才能满足系统无线驱动的需要。
为了在系统引导时读取XML格式的文件,需要设置涉及到NVRAM的值。
将sdram_config的参数定义成宏形式,保证在其初始化时该值与原BCM5358U的参数一致,见下面修改sdram_config的方法:
在U-Boot的头文件目录include/configs/下是U-Boot中各个芯片的参数配置文件,每个芯片一般都有一个对应的头文件,在对应BCM5358U的文件include/configs/bcm5358u.h中加入宏:
#define NVRAM_SDRAM_CONFIG 0x203
将NVRAM_SDRAM_CONFIG定义成0x203说明:这个值直接从原版本的NVRAM文件提出即可,博通的不同的硬件都有对应唯一的一个NVRAM文件,也就是说这个要从博通公司对应提供的硬件平台带的NVRAM文件得来。同时修改bootstart/CPU/bcm5358u/aisdram.S文件中从512开始的两行。
把下列两行:
lw s0,12(t4) # Pick up sdram_config & sdram_refresh
lw s8,16(t4) # Pick up sdram_ncdl
修改成:
li s0,NVRAM_SDRAM_CONFIG # Pick up sdram_config & sdram_refresh
li s8,0x0 # Pick up sdram_ncdl
经过上述修改,U-Boot启动时按照sdram_config参数的定义,就可以读取xml文件。
需要注意的是已经移植到U-Boot的第一部分汇编代码的有个为NVRAM备份的4K地址填充的代码需要注释掉,这样可以节省flash空间。
在步骤B中,要保证底层的代码,如flash驱动,以太网驱动的逻辑关系在满足U-Boot的要求的同时必须与原版本的BCM5358U的CFE一致。为此,移植下列设备驱动程序:串口驱动程序、SPI FLASH驱动程序和以太网驱动程序。
a. 串口驱动程序:移植NS16550芯片驱动。
根据U-Boot串口驱动的要求,移植CFE的NS16550驱动代码,再进行下面的函数转换和实现。
int serial_init (void) :芯片初始化,设置比特率,数据位,
校验和,数据流。
int serial_tstc(void) :数据读取状态。
int serial_getc(void) :读取一个8位的数据。
void serial_putc(const char c) :向串口输出一个字符。
void serial_puts(const char *s):向串口输出一个字符串。
以上函数的实现是直接移植CFE的dev_ns16550.c。但是串口寄存器位置需要根据BCM5358U芯片NS16550的寄存器位置来确定:
#define CFG_NS16550_COM1 (0xb8000000+0x300)
/* UART0: 0x300-0x307 */
b. SPI FLASH驱动移植:
由于spi flash驱动跟芯片相关,一般没有通用的spi flash驱动,因此只有移植CFE的整个底层部分的sflash.c和sflash.h。
U-Boot的Flash驱动包含以下六个接口:
flash_init() :实现Flash驱动初始化,包括Flash探测等动作。
flash_read_buf() :实现Flash读操作,将指定地址和长度的数据读到内 存中。
flash_write() :实现Flash写操作,将内存中的数据写到Flash中。
flash_erase() :实现Flash擦除操作,擦除Flash指定的扇区。
flash_print_info() :用于查看Flash信息。
addr2info() :实现从地址到扇区的转换。
将BCM5358_SPI_PAGE_SIZE宏由256改为BLOCK_SIZE。
实现flash_erase()函数的时候需要把块转换成offset。
c.以太网驱动移植:
BCM5358U以太网驱动是由BCM5481和BCM5325E组成,以太网数据一般是dma进行读写,移植包括三个部分gmac(Gigabit Media Access Control,千兆以太网控制器)、robo(交换机控制芯片)、dma(Direct Memory Access ,直接内存存取),需要从CFE移植三个文件:etcgmac.c、hnddma.c、bcmrobo.c分别对应的gamc、switch、DMA三个模块。
在eth.c中int eth_initialize(bd_t *bis)函数中增加:
#if defined(CONFIG_BCM5358U)
bcm_eth_gmac_init(bis);
#endif
U-Boot需要添加网络接口函数如下:
int bcm_eth_gmac_init(bd_t *bis)
{
struct eth_device *dev;
debug ("Register eth_gmac driver.\n");
dev = (struct eth_device *)malloc(sizeof(struct eth_device)); //分配 网络驱动内存
if(dev == NULL) {
printf("Allocate memory for eth device fail.\n");
return NULL;
}
dev->init = eth_gmac_start; //填充init启动函数,芯片状态启动,协 议层MAC设定
dev->halt = eth_gmac_stop; //网络停止使用会调用,一般不用实现 具体代码
dev->send = eth_gmac_send; //数据包发送函数
dev->recv = eth_gmac_recv; //数据包接收函数
dev->priv = ð_gmac_priv_data0; //私有数据指针保存
eth_gmac_init(dev, bis); //进行芯片最原始的初始化
eth_register(dev); //向协议层注册dev设备
return 0;
}
在这里需要注意以太网的gamc寄存器、dma寄存器、switch寄存器和CFE的对应模块的寄存器保持一致。
dma接收的数据对应的内存地址是在dma_ringalloc()函数分配的,这地址要求是4K对齐,而且保证这4K地址没有任何的代码会占用或者读写,这是高速缓冲区,由于U-Boot内存管理较弱,不能满足该块的分配,直接用宏定义实现:
#define DMA_SDRAM_ADDR 0xa0001000,
这个地址能保BCM5358U平台使用。
gmac初始化的chipreset()函数需要调用两次,一个是在gmac芯片chipattach()初始化,第二次初始化是在协议层调用eth_gmac_start()的时候进行初始化进行调用。
协议层数据传输的时候需要关注的函数:
static int eth_gmac_recv()
当接收到数据的时候,类似linux的网卡向协议栈传输数据,将接收的buffer指针和实际的数据长度作为参数调用NetReceive(buffer,len)后再返回接收成功的标志。
Nvram参数说明:
boardflags=0x710
这个参数主要控制“Broadcom Robo ethernet switch”驱动的初始化,同时控制siwtch去掉是否进行vlan的设置。
在步骤C中,准备内核启动参数,确定内核在flash里的具体位置,本例中需要在配置文件bcm5358u.h准备内核启动参数(cmdline):
#define CONFIG_BOOTARGS "console=ttyS0,115200 root=31:2 mtdparts=sflash:"
#define CONFIG_CMDLINE_TAG 1
参数说明:CONFIG_BOOTARGS 其它的选项不需要修改,但mtdparts需要根据kernel加载的flash模块名称进行修改,5358U AP软件启动的是sflash模块名称,冒号后面的不需要增加,只要定义CONFIG_CMDLINE_TAG宏,就会自动根据配置文件自动去补齐启动命令。
在步骤D中,首先设置编译选项,在这里,第一部分和第二部分都有config.mk,直接添加即可。需要注意的是直接使用以前的U-Boot.lds文件。设置完编译选项后,编译程序生成目标文件,将将目标文件写入BCM5358U的程序存储区。
当设备启动时,安装在BCM5358U中通用引导转载程序启动,如图1所示:在第一部分1,运行移植过来的CFE的第一部分的汇编部分和CFE的第二部分中对CPU初始化的汇编代码,完成对BCM5358U的初始化,然后运行bootloader,完成对读取文件的设置。运行C部分,将第二部分2解压到内存运行,初始化移植过来的设备驱动程序,完成基于BCM5358U的通用引导装载程序,然后根据用户选择进入下一步。
Claims (3)
1.在特异硬件平台上移植通用引导装载程序的方法,该方法在美国博通公司的BCM5358U硬件平台上实现,其特征在于包括以下步骤:
A、将BCM5358U引导装载程序的第一部分的汇编代码和第二部分中对CPU初始化的汇编代码按通用引导程序的要求进行转换,保持原来的程序架构,设置文件读取方式的参数,将上述代码写入通用引导装载程序中的第一部分的开始位置,
B、将BCM5358U引导装载程序中的设备驱动程序按通用引导程序的要求进行转换,将转换后的代码写入通用引导装载程序的第二部分,
C、准备内核启动参数,
D、编译程序,生成目标文件,将目标文件写入BCM5358U的程序存储区。
2.根据权利要求1所述的在特异硬件平台上移植通用引导装载程序的方法,其特征在于:在步骤A中,设置文件读取的方式参数是将sdram_config的参数定义成宏形式。
3.根据权利要求1所述的在特异硬件平台上移植通用引导装载程序的方法,其特征在于:在步骤B中,转换的设备驱动程序包括串口驱动程序,SPI FLASH驱动程序和以太网驱动程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103999466A CN102520993A (zh) | 2011-12-06 | 2011-12-06 | 在特异硬件平台上移植通用引导装载程序的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2011103999466A CN102520993A (zh) | 2011-12-06 | 2011-12-06 | 在特异硬件平台上移植通用引导装载程序的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN102520993A true CN102520993A (zh) | 2012-06-27 |
Family
ID=46291934
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2011103999466A Pending CN102520993A (zh) | 2011-12-06 | 2011-12-06 | 在特异硬件平台上移植通用引导装载程序的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102520993A (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514001A (zh) * | 2012-06-27 | 2014-01-15 | 中兴通讯股份有限公司 | 处理器初始化方法及装置 |
CN105429785A (zh) * | 2015-11-02 | 2016-03-23 | 浪潮集团有限公司 | 一种基于sdn方式的交换机操作系统加载方法 |
CN106250760A (zh) * | 2016-07-26 | 2016-12-21 | 浪潮电子信息产业股份有限公司 | 一种基于TPM2.0芯片的U‑Boot可信启动方法 |
CN110830482A (zh) * | 2019-11-13 | 2020-02-21 | 哈尔滨工业大学 | 一种部件串行接口的通用驱动系统及方法 |
CN112612473A (zh) * | 2020-12-23 | 2021-04-06 | 苏州三六零智能安全科技有限公司 | 文件压缩加壳方法、装置、设备及存储介质 |
CN115238621A (zh) * | 2022-09-22 | 2022-10-25 | 深圳市国电科技通信有限公司 | 移植方法、装置、电子设备及存储介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101179537A (zh) * | 2007-12-05 | 2008-05-14 | 上海电器科学研究所(集团)有限公司 | 一种工业以太网网关 |
US20110125995A1 (en) * | 2009-11-26 | 2011-05-26 | Samsung Electronics Co. Ltd. | Method and apparatus for downloading secure micro bootloader of receiver in downloadable conditional access system |
-
2011
- 2011-12-06 CN CN2011103999466A patent/CN102520993A/zh active Pending
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101179537A (zh) * | 2007-12-05 | 2008-05-14 | 上海电器科学研究所(集团)有限公司 | 一种工业以太网网关 |
US20110125995A1 (en) * | 2009-11-26 | 2011-05-26 | Samsung Electronics Co. Ltd. | Method and apparatus for downloading secure micro bootloader of receiver in downloadable conditional access system |
Non-Patent Citations (2)
Title |
---|
李翔等: "U-BOOT的启动参数传递与移植分析", 《黑龙江科技信息》 * |
陈为军等: "基于U-BOOT的S3C44B0引导程序设计实现", 《微计算机信息(嵌入式与SOC)》 * |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103514001A (zh) * | 2012-06-27 | 2014-01-15 | 中兴通讯股份有限公司 | 处理器初始化方法及装置 |
CN105429785A (zh) * | 2015-11-02 | 2016-03-23 | 浪潮集团有限公司 | 一种基于sdn方式的交换机操作系统加载方法 |
CN106250760A (zh) * | 2016-07-26 | 2016-12-21 | 浪潮电子信息产业股份有限公司 | 一种基于TPM2.0芯片的U‑Boot可信启动方法 |
CN110830482A (zh) * | 2019-11-13 | 2020-02-21 | 哈尔滨工业大学 | 一种部件串行接口的通用驱动系统及方法 |
CN110830482B (zh) * | 2019-11-13 | 2021-07-27 | 哈尔滨工业大学 | 一种部件串行接口的通用驱动系统及方法 |
CN112612473A (zh) * | 2020-12-23 | 2021-04-06 | 苏州三六零智能安全科技有限公司 | 文件压缩加壳方法、装置、设备及存储介质 |
CN112612473B (zh) * | 2020-12-23 | 2022-11-04 | 苏州三六零智能安全科技有限公司 | 文件压缩加壳方法、装置、设备及存储介质 |
CN115238621A (zh) * | 2022-09-22 | 2022-10-25 | 深圳市国电科技通信有限公司 | 移植方法、装置、电子设备及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102520993A (zh) | 在特异硬件平台上移植通用引导装载程序的方法 | |
US7761701B2 (en) | Component firmware integration in distributed systems | |
US9301164B2 (en) | Method, system, and terminal for performing system update between mobile communication terminals | |
AU613248B2 (en) | Translation technique | |
US7657881B2 (en) | Using optimized libraries to improve performance of deployed application code at runtime | |
RU2406113C2 (ru) | Системы и способы двухрежимной виртуализации устройства реальных и идеализированных аппаратных устройств | |
CN101763279A (zh) | 一种BootLoader架构设计方法 | |
CN105204899A (zh) | 一种基于网络的单片机固件升级方法的实现 | |
WO2016150098A1 (zh) | PCIe设备和PCIe总线的管理方法及装置 | |
US20190370011A1 (en) | Computing device | |
CN105068860A (zh) | 一种基于ARM的Linux采煤机管理主机系统 | |
CN101894039A (zh) | 一种嵌入式设备驱动程序辅助生成方法及系统 | |
US8862714B2 (en) | Apparatus and method for virtualizing of network device | |
CN104391726A (zh) | 一种基于Bootloader的SFP光模块升级方法 | |
US20220237144A1 (en) | Baseboard management controller and construction method thereof | |
WO2022227409A1 (zh) | 一种嵌入式终端远程软件更新方法 | |
CN114691178B (zh) | 一种基于EtherCAT通讯驱动器的固件升级方法及装置 | |
CN114490023B (zh) | 一种基于arm和fpga的高能物理可计算存储设备 | |
CN104461638B (zh) | 一种基于Bootloader的XFP光模块升级方法 | |
CN108182079A (zh) | 一种基于串口的tms320c6748程序加载方法 | |
US20070300054A1 (en) | Universal BSP tool for porting on embedded systems and an application thereof | |
KR20050086165A (ko) | 플래시 메모리 및 광 드라이브의 펌웨어 모듈 동적 로딩동작 방법 | |
EP4064041A1 (en) | Platform hardening for bootloaders via reference firmware | |
CN112148283B (zh) | 一种跨平台的abi兼容c++组件框架的实现方法 | |
CN104007979A (zh) | 一种Bootloader层驱动无线网络的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20120627 |