内核如何启动第一个程序:
1.open(/dev/console);
其中有两个sys_dup(0);
2.run_init_process启动应用程序(命令行中的init = “xxx”)
如果命令行中没有设置该命令,则按照以下顺序启动
if (execute_command) {
run_init_process(execute_command);
printk(KERN_WARNING "Failed to execute %s. Attempting "
"defaults...\n", execute_command);
}
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
busybox:
包括了ls cd cp等命令,是busybox的链接
使用ls相当于使用busybox ls
内核启动sbin/init也是bin/busybox链接
配置、编译busybox:
init程序:
配置文件;
解析配置文件;
执行(用户程序)
最小根文件系统必须条件:
(1) /dec/console /dev/null
(2) init程序(来源于busybox)
(3) /etc/inittab(该文件中定义了某些必要的应用程序)
(4) 配置文件指定的应用程序
(5) 必要的库
安装busybox:
解压busybox (tar xjf 压缩文件)
make menuconfig(生成.config )
make (编译)
make CONFIG_PREFIX=/work/nfs_root/first_fs install(交叉编译并安装在指定目录,不要直接使用inatall会损坏pc机)
创建dev/console和dev/null
创建etc文件夹,文件夹中建立inittab文件,里面加入console::askfirst:-/bin/sh
只执行askfirst bin/sh 标准输入标准输出和标准错误定位到console中去;
必要的库
在根文件系统中创建lib文件夹,并将必要的库赋值到该文件夹下
最小根文件系统建立完成:
烧入到开发板中:
制作yaffs映像文件:
然后通过usb将yaffs映像文件烧入开发板,启动开发板可以看到
开发板中的根文件系统
优化根文件系统:
参考博文