reference: http://blog.sina.com.cn/s/blog_5248460001013dqn.html
文件系统:
文件系统:
1.Uboot:启动内核
2.内核:启动应用程序
3.应用程序,构建:根文件系统;
内核怎样启动第一个应用程序?
1.启动open(/dev/console sys_dup(),sys_dop(0))
2.run_init_process()
ls -l /bin/ls
//
busybox ls
//
应用程序的目的是启动用户程序,启动用户程序的第一个进程是/sbin/init
bosybox-启动->init_main
parse_inittab
file = fopen(INITTAB,"r");
new_init_action()
//1创建一个init_action结构,填充
//2把这个结构放入init_action_list链表;
从默认的new_init_action反推出默认的配置文件;
#inittab格式:
#<id>:<runlevels>:<action>:<process>
new_init_action(ASKFIRST,"-/bin/sh","/dev/tty2");
static void new_init_action(int_action,const char*command,const char *cons)
1创建一个init_action结构,填充
2把这个结构放入init_action_list链表;
查看/example中的inittab;
inittab格式:
<id>:<runlevels>:<action>:<process>
id =>/dev/id, 用作终端:stdin,stdout.......
busybox一共有5相基本要素
1.dev/console
2.init-->busybox
//读取配置文件-->解析配置文件-->启动用户程序;
3./etc/inittab
4.配置文件指定的程序
//最小的文件系统时此条没必要
5.C库
busybox
解压文件中install中描述到:
Building:
=========
The BusyBox build process is similar to the Linux kernelbuild:
//直接make install 会将busybox安装到默认的虚拟机操作系统中,而造成red hat损坏;
//尝试直接Make install 后,生成本目录下文件夹 _install ,即为文件系统;
//尝试直接Make install 后,生成本目录下文件夹 _install ,即为文件系统;
查看red hat系统文件ls /dev/console /dev/null -l
crw------- 1 root root 5, 1 05-20 09:16 /dev/console
crwxrwxrwx 1 root root 1, 3 05-20 09:15 /dev/null
在生成的FS文件夹里面
mkdir dev
cd dev
mknod console c 5 1
//(如果出现权限问题sudo mknodconsole c 5 1) #重中之重,没有这个在编译initramfs时起不来。还找不到是哪的原因。汗
sudo mknod null c 1 3
//同Red Hat里面比较
cd ..
mkdir etc
vi etc/inittab
//内容为console::askfrist:-bin/sh
mkdir lib
//Copy的lib是:(arm的gcc编译器中的交叉编译器的库文件)即:/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib下的*.so动态库;