1.文件系统启动第一个程序
内核怎样启动第一个应用程序
(1)open(/dev/console)//即终端
sys_dup(0) sys_dup(0)
(2)run_init_process(execute_command)
而execute_command在命令行或者下面四个目录中的一个获得:
if(execute_command)
{run_init_process(execute_command)
printK("Failed");
}
run_init_process("/sbin/init");
run_init_process("/etc/init");
run_init_process("/bin/init");
run_init_process("/bin/sh");
2.第二节构建文件系统之init进程分析(就是分析busybox源码)
ls=busybox ls
ls -l /bin/ls 可以查看到ls的链接
cp命令对应在内核有个cp_main()函数
最小根文件系统必须的东西有:
(1)/dev/console /dev/null (创建设备mknod console c 5 1)
(2)/etc/inittab (在里面写入console::askfirst:~/bin/sh)
(3)配置文件里指定的应用程序
(4)库
(5)init本身,即busybox
busybox->init_main
parse_inittab 解析配置文件
file=fopen(INITTAB,"r"); //打开配置文件/etc/inittab
inittab格式:
<id>:<runlevels>:<action>:<process>
id=>/dev/id,用作终端:stdin,stdout,stderr:printf,scanf,err
runlevels:忽略
action:执行时机
#包括:sysinit,respawn,askfirst,wait,once,restart,ctrlatdel,shutdown.
process:应用程序或脚本
3.新建souceinsight工程,选择添加所以文件,再选择同步。
4.用busybox创建根文件系统就像配置内核一样:
(1)make menuconfig,选择需要哪些命令
(2)make
(3)make install
5 .a静态库 .so 动态库 cp *.so* / -d 加上-d参数就不会把链接拷过去,没这么大
6.目录/proc为虚拟文件系统,mount -t proc none /proc(写/etc/init.d/rcS文件)
或者:mount -a(链接/etc/fstab脚本)
在fstab里面可以写入挂载哪些文件系统
7.udev:自动创建/dev目录下的设备节点
mdev:是udev的缩减版,功能和udev类似
8.echo hello > test.txta 创建文本文件,内容为hello
9.挂载NFS
(1)从flash启动后,用mount手动挂载
(2)系统直接从NFS启动,在u-boot中设置
#set bootargs noinitrd root=/dev/nfs ..........;