CN102520993A - 在特异硬件平台上移植通用引导装载程序的方法 - Google Patents

在特异硬件平台上移植通用引导装载程序的方法 Download PDF

Info

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
Application number
CN2011103999466A
Other languages
English (en)
Inventor
贺福华
黄洪波
罗小建
张永杰
汪澜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Gongjin Electronics Co Ltd
Original Assignee
Shenzhen Gongjin Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Gongjin Electronics Co Ltd filed Critical Shenzhen Gongjin Electronics Co Ltd
Priority to CN2011103999466A priority Critical patent/CN102520993A/zh
Publication of CN102520993A publication Critical patent/CN102520993A/zh
Pending legal-status Critical Current

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 = &eth_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驱动程序和以太网驱动程序。
CN2011103999466A 2011-12-06 2011-12-06 在特异硬件平台上移植通用引导装载程序的方法 Pending CN102520993A (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
Title
李翔等: "U-BOOT的启动参数传递与移植分析", 《黑龙江科技信息》 *
陈为军等: "基于U-BOOT的S3C44B0引导程序设计实现", 《微计算机信息(嵌入式与SOC)》 *

Cited By (8)

* Cited by examiner, † Cited by third party
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