Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3548140
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: 嵌入式

2015-04-01 09:33:32

前言:    
    在移植 uboot 的时候,最核心的工作是引导启动内核,那么uboot是如何进入倒数,启动内核的呢。

一,进入倒数,启动内核
    在 文件  common/main.c 中的 main_loop 函数有如下判断:

点击(此处)折叠或打开

  1. s = getenv ("bootcmd");

  2.     debug ("### main_loop: bootcmd=\"%s\"\n", s ? s : "");

  3.     if (bootdelay >= 0 && s && !abortboot (bootdelay)) {
    char * s;
    则只有单 S != NULL 时,才有效


      在文件 common/env_common.c 中定义了如下数组:

点击(此处)折叠或打开

  1. const uchar default_environment[] = {
  2. #ifdef CONFIG_BOOTARGS
  3.     "bootargs=" CONFIG_BOOTARGS "\0"
  4. #endif
  5. #ifdef CONFIG_BOOTCOMMAND
  6.     "bootcmd=" CONFIG_BOOTCOMMAND "\0"
  7. #endif
  8. #ifdef CONFIG_RAMBOOTCOMMAND
  9.     "ramboot=" CONFIG_RAMBOOTCOMMAND "\0"
  10. #endif
  11. #ifdef CONFIG_NFSBOOTCOMMAND
  12.     "nfsboot=" CONFIG_NFSBOOTCOMMAND "\0"
  13. #endif
  14. #if defined(CONFIG_BOOTDELAY) && (CONFIG_BOOTDELAY >= 0)
  15.     "bootdelay=" MK_STR(CONFIG_BOOTDELAY) "\0"
  16. #endif
  17. #if defined(CONFIG_BAUDRATE) && (CONFIG_BAUDRATE >= 0)
  18.     "baudrate=" MK_STR(CONFIG_BAUDRATE) "\0"
  19. #endif
  20. #ifdef CONFIG_LOADS_ECHO
  21.     "loads_echo=" MK_STR(CONFIG_LOADS_ECHO) "\0"
  22. #endif
  23. #ifdef CONFIG_ETHADDR
  24.     "ethaddr=" MK_STR(CONFIG_ETHADDR) "\0"
  25. #endif
  26. #ifdef CONFIG_ETH1ADDR
  27.     "eth1addr=" MK_STR(CONFIG_ETH1ADDR) "\0"
  28. #endif
  29. #ifdef CONFIG_ETH2ADDR
  30.     "eth2addr=" MK_STR(CONFIG_ETH2ADDR) "\0"
  31. #endif
  32. #ifdef CONFIG_ETH3ADDR
  33.     "eth3addr=" MK_STR(CONFIG_ETH3ADDR) "\0"
  34. #endif
  35. #ifdef CONFIG_ETH4ADDR
  36.     "eth4addr=" MK_STR(CONFIG_ETH4ADDR) "\0"
  37. #endif
  38. #ifdef CONFIG_ETH5ADDR
  39.     "eth5addr=" MK_STR(CONFIG_ETH5ADDR) "\0"
  40. #endif
  41. #ifdef CONFIG_IPADDR
  42.     "ipaddr=" MK_STR(CONFIG_IPADDR) "\0"
  43. #endif
  44. #ifdef CONFIG_SERVERIP
  45.     "serverip=" MK_STR(CONFIG_SERVERIP) "\0"
  46. #endif
  47. #ifdef CONFIG_SYS_AUTOLOAD
  48.     "autoload=" CONFIG_SYS_AUTOLOAD "\0"
  49. #endif
  50. #ifdef CONFIG_PREBOOT
  51.     "preboot=" CONFIG_PREBOOT "\0"
  52. #endif
  53. #ifdef CONFIG_ROOTPATH
  54.     "rootpath=" CONFIG_ROOTPATH "\0"
  55. #endif
  56. #ifdef CONFIG_GATEWAYIP
  57.     "gatewayip=" MK_STR(CONFIG_GATEWAYIP) "\0"
  58. #endif
  59. #ifdef CONFIG_NETMASK
  60.     "netmask=" MK_STR(CONFIG_NETMASK) "\0"
  61. #endif
  62. #ifdef CONFIG_HOSTNAME
  63.     "hostname=" MK_STR(CONFIG_HOSTNAME) "\0"
  64. #endif
  65. #ifdef CONFIG_BOOTFILE
  66.     "bootfile=" CONFIG_BOOTFILE "\0"
  67. #endif
  68. #ifdef CONFIG_LOADADDR
  69.     "loadaddr=" MK_STR(CONFIG_LOADADDR) "\0"
  70. #endif
  71. #ifdef CONFIG_CLOCKS_IN_MHZ
  72.     "clocks_in_mhz=1\0"
  73. #endif
  74. #if defined(CONFIG_PCI_BOOTDELAY) && (CONFIG_PCI_BOOTDELAY > 0)
  75.     "pcidelay=" MK_STR(CONFIG_PCI_BOOTDELAY) "\0"
  76. #endif
  77. #ifdef CONFIG_EXTRA_ENV_SETTINGS
  78.     CONFIG_EXTRA_ENV_SETTINGS
  79. #endif
  80.     "\0"
  81. }

    因此,要在  include\configs下的相关板子 *.h 文件中添加如下

点击(此处)折叠或打开

  1. /* uboot 启动之后,是根据以下参数来启动内核的
  2.  * 从nand flash 中读内核映像文件,
  3.  * 从nand 的 0x00060000 地址开始读到SDRAM 中,读的长度为0x200000
  4.  * 在从 SDRAM 中启动内核
  5.  *
  6.  * 如果不定义这个宏,uboot不会主动调整到内核的启动,
  7.  * 必须手动复制内核映像文件到sdram中,在用bootm命令来启动
  8.  */
  9. #define    CONFIG_BOOTCOMMAND    "nand read 30000000 0x00060000 0x200000;bootm 30000000"




    
    
阅读(646) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~