android lk解读 (6)--shell环境的准备

来源:互联网 发布:预防电信网络诈骗 编辑:程序博客网 时间:2024/04/29 10:43

  基本上机台在开机转圈圈 的时候,shell环境就好了,那这个环境是什么时候准备的呢,下面看一看

APP_START(shell).init = shell_init,.entry = shell_entry,APP_END
也是在app 里做

static void shell_init(const struct app_descriptor *app){console_init();}
再看看

int console_init(void){printf("console_init: entry\n");/* add all the statically defined commands to the list */cmd_block *block;for (block = &__commands_start; block != &__commands_end; block++) {  //这里的<span style="font-family: Arial, Helvetica, sans-serif;">__commands_start在bootable/bootloader/lk/arch/arm/system-twosegment.ld里</span>
<span style="font-family:Arial, Helvetica, sans-serif;"></span>console_register_commands(block);}return 0;}
接着

void console_register_commands(cmd_block *block){ASSERT(block);ASSERT(block->next == NULL);block->next = command_list;command_list = block;}
上面的两个函数看起来是把commands start到end的一些command放到这个block中
下面的函数是外界输入comd时候匹配执行

static const cmd *match_command(const char *command){cmd_block *block;size_t i;for (block = command_list; block != NULL; block = block->next) {const cmd *curr_cmd = block->list;for (i = 0; i < block->count; i++) {if (strcmp(command, curr_cmd[i].cmd_str) == 0) {return &curr_cmd[i];}}}return NULL;}

这个app里有很多经典的c函数



0 0
原创粉丝点击