ppcboot 添加命令

Author-------Dansen-----xzd2734@163.com

因为每次修改内核添加打印信息需要调试,重新加载内核,不过挺烦的,
需要输入3条命令,为了调试内核方便,所以要在ppcboot中添加一条简单
命令来执行这3条命令,这样调试内核的时候会方便很多了。
先到ppcboot-2.0.0/common/main.c下看看主循环是怎样处理输入的命令的
 for (;;)
 {
  len = readline (CFG_PROMPT);   //把输入的命令读到console_buffer中
  flag = 0;         //并返回所输入的长度
  if (len > 0)
   strcpy (lastcommand, console_buffer);
  else if (len == 0)
   flag |= CMD_FLAG_REPEAT;

  if (len == -1)
   printf ("<INTERRUPT>/n");
  else
   rc = run_command (lastcommand, flag);
  if (rc <= 0) lastcommand[0] = 0;
 }
显然是由run_command这个函数去执行输入的命令了,在run_command中对输入的命令行进行参数分解,分解的参数由argv指示。
  if ((cmdtp = find_cmd(argv[0])) == NULL) {
   printf ("Unknown command '%s' - try 'help'/n", argv[0]);
   return -1; /* give up after bad command */
  }
通过find_cmd去命令表中,这样我们就需要在命令表中去添加自己的命令
ppcboot-2.0.0/common/command.c中找到了find_cmd函数,还有命令表。
cmd_tbl_t cmd_tbl[] = {
 CMD_TBL_ASKENV
 CMD_TBL_ASM
....................}
这样我们就可以在其中添加自己的命令了,我就在最上面添加了CMD_TBL_DANSEN,显然这是一个宏,
所以还要找到宏的定义,参考其它的宏定义,把CMD_TBL_DANSEN的定义为
#define CMD_TBL_DANSEN  MK_CMD_TBL_ENTRY(    /
 "dansen", 3, CFG_MAXARGS, 0, do_dansen,  /
 "dansen  - do tftp 30008000 zImage/n"     /
 "        tftp 30800000 ramdisk.image.gz/n"    /
 "       go 30008000/n",      /
 "enter dansen or more than dan,it is eazy,hehe/n"   /
),
为了方便我们可以直接把CMD_TBL_DANSEN定义在command.c中,可以看到,在command.c中也有类似的表项定义的。然后还要添加命令真正的执行函数do_dansen
int do_dansen   (cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
{
 run_command("tftp 30008000 zImage",0);
 run_command("tftp 30800000 ramdisk.image.gz",0);
 run_command("go 30008000",0);
 return 1;
}
编译以后可以烧到flash中,ok
不过还可以再方便点,我在没入主循环前添加代码,
这样只要在启动时判断输入的键就可以了。不输入或输入是y的话从flash启动,输入d的话是从主机tftp启动,其他的话就进入命令行
bootm:
  if(c == 'y'||c == 'Y')
  {
   strcpy(lastcommand , "bootm 30008000 30800000");
   flag = 0;
   rc = run_command (lastcommand, flag);
   if (rc <= 0)
   {
    lastcommand[0] = 0;
   }
  }
  else
  {
   printf("/n/n");
  }
修改上面的代码为
bootm:
  if(c == 'y'||c == 'Y')
  {
   strcpy(lastcommand , "bootm 30008000 30800000");
   flag = 0;
   rc = run_command (lastcommand, flag);
   if (rc <= 0)
   {
    lastcommand[0] = 0;
   }
  }
  else if(c == 'd'||c == 'Y')
  {
   strcpy(lastcommand , "tftp 30008000 zImage");
   run_command(lastcommand,0);
   strcpy(lastcommand , "tftp 30800000 ramdisk.image.gz");
   run_command(lastcommand,0);
   strcpy(lastcommand , "go 30008000");
   run_command(lastcommand,0);
  }
  else
  {
   printf("/n/n");
  }
这样调试可以方便好多了,千万别把ppcboot弄坏了,不然又要用JTAG重新烧写,要等好久.用ppcboot自己更新自己方便多了.
ppcboot的一些参数可以在ppcboot-2.0.0/include/configs/smdk2410.h中修改.
 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值