uboot源码分析——启动linux内核

如果板子启动以后不按任何键,将会默认启动Linux内核。

我们回到/common/main.c中,首先

s = getenv ("bootcmd");

然后

run_command (s, 0);

bootcmd是一个环境变量,它的值对应一些命令,用来启动linux

"bootcmd="	CONFIG_BOOTCOMMAND	 "\0"

/include/configs/mini2440.h

#define CONFIG_BOOTCOMMAND	"nfs 0x30008000 192.168.0.1:/home/tekkaman/working/nfs/zImage.img;bootm"

Nfs这种情况先不讨论,更一般的是这种:

#define CONFIG_BOOTCOMMAND	"nand read.jffs2 0x30007FC0 kernel; bootm 0x30007FC0;bootm"

这是两个命令,先看nand read.jffs2 0x30007FC0 kernel,这个命令的作用是从nandflashkernel分区中读取数据到SDRAM中的0x30007FC0

对于mini2440,将整块nandflash分成了很多个区:

/include/configs/mini2440.h

#define MTDPARTS_DEFAULT "mtdparts=nandflash0:384k(bootloader)," \
"128k(params)," \
"5m(kernel)," \
"-(root)" 

所以从nand0地址开始:384KBuboot128KBparams5M的内核,然后是root

   还有另一条命令bootm,解析bootmuboot最终执行do_bootm函数(uboot怎么样对命令解析并执行的,前面讲过了)。

/common/cmd_bootm.c

/*******************************************************************/
/* bootm - boot application image from image in memory */
/*******************************************************************/
 
<p>int do_bootm (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])</p><p>{</p><p>...</p><p>}</p>

参数:

cmdtp,命令结构体指针,指向bootm对应的命令结构体

flag,不了解

argc,参数的个数

argv,指向参数

 

do_bootm

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值