学习ARM开发(9)

导读:
  学习ARM开发(9)
  上一次把引导的汇编看完,已经准备C的运行环境,下面就开始学习C的源程序,从start.S文件里到跳文件
  lib_arm/board.c里运行.
  /*
  引导程序从汇编start.S里跳到这里执行。
  蔡军生 2005/07/19
  */
  void start_armboot (void)
  {
  /* 声明一个全局指针,它是指向一个数据结构,用于保存参数。
  并且它占用r8寄存器,用它来保存内存地址,达到全局使用目的。
  */
  DECLARE_GLOBAL_DATA_PTR;
  ulong size;
  init_fnc_t **init_fnc_ptr;
  char *s;
  #if defined(CONFIG_VFD) || defined(CONFIG_LCD)
  unsigned long addr;
  #endif
  /* gd指针可写,因为已经分配一个寄存器给它作为变量。
  这里就相当于把后面算出来的地址保存到r8寄存器.
  */
  gd = (gd_t*)(_armboot_start - CFG_MALLOC_LEN - sizeof(gd_t));
  /* 下面一句是阻止3.4以上版本的GCC进行代码优化,把后面的代码删除掉。 */
  __asm__ __volatile__("": : :"memory");
  /* 清空gd指向的结构 */
  memset ((void*)gd, 0, sizeof (gd_t));
  /* */
  gd->bd = (bd_t*)((char*)gd - sizeof(bd_t));
  memset (gd->bd, 0, sizeof (bd_t));
  monitor_flash_len = _bss_start - _armboot_start;
  这一段准备好保存参数的全局变量区.
  后面就是一系列的初始化和获取正确的参数.
  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值