对应《韦东山Linux视频第1期》第11课。
应用程序位于---根文件系统。
问1:内核怎么启动应用程序?
答:1.1打开设备文件
sys_open("/dev/console") //第0个文件
sys_dup(0); // 复制第0个文件,所以是第1个文件
sys_dup(0); // 也是复制第0个文件,所以是第2个文件
我们写程序时,经常用到以下几个函数:
标准输出:printf()
标准输入:scanf()
标准错误:err()
以上3个文件就分别代表标准输入、标准输出、标准错误。"/dev/console"---是终端,这里是串口0.
1.2 执行run_init_process(xxx)
xxx 是命令行输入的 init=xxx ;或者 /sbin/inti
这些命令都对应一个程序,因为有很多的命令,如果一个个找到它的源码再编译,显然是件很费劲的事件。但是已经有牛人编出一个软件----busybox,它包含了很多命令。当我们执行ls、cp时都会链接到这个程序。验证一下:#ls -l /bin/ls (查看/bin/ls 程序链接到哪里) 可以看到最终链接到了busybox
执行命令:#ls /sbin/init -l 可以看到第一个程序 /sbin/init 也是链接到busybox.所以要分析init进程,就要分析 这个busybox源码。
init程序要做的事情:
1. 读取配置文件:/etc/inittab
配置文件做哪些设置呢?
1.1 指定执行哪个程序
1.2 何时执行 由<action>指定
2. 解析配置文件
3. 执行 用户程序
① /dev/console ; /dev/null (对应没指定id的init_action)
② init进程 ---> busybox
③ /etc/inittab 配置文件
④ 配置文件中指定的程序
⑤ C库
BusyBox init的启动过程,也可查看这篇文章: BusyBox init的启动过程
yaffs2 根文件系统制作,可想看这篇文章:Yaffs2根文件系统制作
yaffs1是给小页512字节的nand flash用的。
yaffs2是给大页2k的nand flash用的。
挂载NFS根文件系统:
①服务器“允许”那个目录可被挂接
nfs服务,设备文件/etc/exports
② 单板去挂接
挂载NFS根文件系统,可以查看这篇文章:ARM开发板挂接NFS网络文件系统
1.构建根文件系统之启动第1个程序
u-boot----->启动内核----->启动应用程序应用程序位于---根文件系统。
问1:内核怎么启动应用程序?
答:1.1打开设备文件
sys_open("/dev/console") //第0个文件
sys_dup(0); // 复制第0个文件,所以是第1个文件
sys_dup(0); // 也是复制第0个文件,所以是第2个文件
我们写程序时,经常用到以下几个函数:
标准输出:printf()
标准输入:scanf()
标准错误:err()
以上3个文件就分别代表标准输入、标准输出、标准错误。"/dev/console"---是终端,这里是串口0.
1.2 执行run_init_process(xxx)
xxx 是命令行输入的 init=xxx ;或者 /sbin/inti
2.构建根文件系统之init进程分析
在根文件系统下有很多命令,如cp,ls等。这些命令都对应一个程序,因为有很多的命令,如果一个个找到它的源码再编译,显然是件很费劲的事件。但是已经有牛人编出一个软件----busybox,它包含了很多命令。当我们执行ls、cp时都会链接到这个程序。验证一下:#ls -l /bin/ls (查看/bin/ls 程序链接到哪里) 可以看到最终链接到了busybox
执行命令:#ls /sbin/init -l 可以看到第一个程序 /sbin/init 也是链接到busybox.所以要分析init进程,就要分析 这个busybox源码。
init程序要做的事情:
1. 读取配置文件:/etc/inittab
配置文件做哪些设置呢?
1.1 指定执行哪个程序
1.2 何时执行 由<action>指定
2. 解析配置文件
3. 执行 用户程序
inittab格式:
<id>:<reunlevels>:<action>:<process>
id => /dev/id,用作终端:stdin,stdout,stderr:printf,scanf,err
runlevels:忽略
action: 执行时机:sysinit,respawn,askfirst,wait,once,restart,ctrlaltdel,and shutdown
process:应用程序脚本
最小根文件系统的必需元素:
① /dev/console ; /dev/null (对应没指定id的init_action)
② init进程 ---> busybox
③ /etc/inittab 配置文件
④ 配置文件中指定的程序
⑤ C库
BusyBox init的启动过程,也可查看这篇文章: BusyBox init的启动过程
3. 构建根文件系统之busybox
这部分讲配置、编译busybox。可以查看这篇文章:BusyBox的交叉编译4.构建根文件系统之构建根文件系统
可以查看这篇文章:基于BusyBox的默认配置来构建文件系统yaffs2 根文件系统制作,可想看这篇文章:Yaffs2根文件系统制作
yaffs1是给小页512字节的nand flash用的。
yaffs2是给大页2k的nand flash用的。
挂载NFS根文件系统:
①服务器“允许”那个目录可被挂接
nfs服务,设备文件/etc/exports
② 单板去挂接
挂载NFS根文件系统,可以查看这篇文章:ARM开发板挂接NFS网络文件系统