一、背景
目前,很多嵌入式Linux开发为了调试方便移植了adb到Linux,官方也有相应的patch。作为产品方基于安全考虑,可以在量产时关闭adb;如果需要保留,那么应该在adb登陆系统时验证密码。
二、adb登录流程
在使用adb shell命令登陆系统时,adb服务(adbd)为我们fork一个子shell作为终端,源码如下:
// core/adbd/services.c
#define SHELL_COMMAND "/bin/sh" static int create_subproc_thread(const char *name) { stinfo *sti; adb_thread_t t; int ret_fd; pid_t pid; if(name) { ret_fd = create_subprocess(SHELL_COMMAND, "-c", name, &pid); } else { ret_fd = create_subprocess(SHELL_COMMAND, "-", 0, &pid); } D("create_subprocess() ret_fd=%d pid=%d\n", ret_fd, pid); ....... } static int create_subprocess(const char *cmd,