linux内核学习-3 init函数(关注新浪微博:寂寞侵蚀的岁月(4000多篇技术分享))

来源:互联网 发布:最新生活网络投资理财 编辑:程序博客网 时间:2024/04/28 04:04
void init(void)
169 {
170 int pid,i;
171
172 setup((void *) &drive_info); // 读取硬盘参数包括分区表信息并建立虚拟盘和
// 安装根文件系统设备。(kernel/blk_drv/hd.c,71)
173 (void) open("/dev/tty0",O_RDWR,0); // 用读写访问方式打开设备“/dev/tty0”,
// 这里对应终端控制台。
// 返回的句柄号0 -- stdin 标准输入设备。
174 (void) dup(0); // 复制句柄,产生句柄1 号 -- stdout 标准输出设备。
175 (void) dup(0); // 复制句柄,产生句柄2 号 -- stderr 标准出错输出设备。
176 printf("%d buffers = %d bytes buffer space\n\r",NR_BUFFERS,
177 NR_BUFFERS*BLOCK_SIZE); // 打印缓冲区块数和总字节数,每块1024 字节。
178 printf("Free mem: %d bytes\n\r",memory_end-main_memory_start); //空闲内存字节数。
// 下面fork()用于创建一个子进程(子任务)。对于被创建的子进程,fork()将返回0 值,
// 对于原(父进程)将返回子进程的进程号。所以180-184 句是子进程执行的内容。该子进程
// 关闭了句柄0(stdin),以只读方式打开/etc/rc 文件,并执行/bin/sh 程序,所带参数和
// 环境变量分别由argv_rc 和envp_rc 数组给出。参见后面的描述。
179 if (!(pid=fork())) {
180 close(0);
181 if (open("/etc/rc",O_RDONLY,0))
182 _exit(1); // 如果打开文件失败,则退出(/lib/_exit.c,10)。
183 execve("/bin/sh",argv_rc,envp_rc); // 装入/bin/sh 程序并执行。
184 _exit(2);
185 }
// 下面是父进程执行的语句。wait()是等待子进程停止或终止,其返回值应是子进程的进程号(pid)。
// 这三句的作用是父进程等待子进程的结束。&i 是存放返回状态信息的位置。如果wait()返回值不
// 等于子进程号,则继续等待。
186 if (pid>0)
187 while (pid != wait(&i))
188 /* nothing */;
// 如果执行到这里,说明刚创建的子进程的执行已停止或终止了。下面循环中首先再创建一个子进程,
// 如果出错,则显示“初始化程序创建子进程失败”的信息并继续执行。对于所创建的子进程关闭所

// 以前还遗留的句柄(stdin, stdout, stderr),新创建一个会话并设置进程组号,然后重新打开
// /dev/tty0 作为stdin,并复制成stdout 和stderr。再次执行系统解释程序/bin/sh。但这次执行所
// 选用的参数和环境数组另选了一套(见上面165-167 行)。然后父进程再次运行wait()等待。如果
// 子进程又停止了执行,则在标准输出上显示出错信息“子进程pid 停止了运行,返回码是i”,然后
// 继续重试下去…,形成“大”死循环。
189 while (1) {
190 if ((pid=fork())<0) {
191 printf("Fork failed in init\r\n");
更多电子书教程下载请登陆http://down.zzbaike.com/ebook
本站提供的电子书教程均为网上搜集,如果该教程涉及或侵害到您的版权请联系我们。
第4 章 初始化程序 linux/init/
67
192 continue;
193 }
194 if (!pid) {
195 close(0);close(1);close(2);
196 setsid();
197 (void) open("/dev/tty0",O_RDWR,0);
198 (void) dup(0);
199 (void) dup(0);
200 _exit(execve("/bin/sh",argv,envp));
201 }
202 while (1)
203 if (pid == wait(&i))
204 break;
205 printf("\n\rchild %d died with code %04x\n\r",pid,i);
206 sync();
207 }

208 _exit(0);

}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 手机网盘下载速度慢怎么办插件 笔记本电脑显示连接不可用怎么办 蓝魔手机充电慢怎么办 360f4手机充电慢怎么办 vivo卡了怎么办小窍门 白色衣服用84泡后变黄怎么办 用祛斑霜脱皮了怎么办 用祛斑霜脸一直蜕皮怎么办 吃热的就流鼻涕怎么办 键盘qaz失灵其他都没事怎么办 时时彩代理抓了怎么办 6p升级ios11卡顿怎么办 微信弄没了又换号了怎么办 快手账号异常请去激活怎么办 九游账号被转移怎么办 绝地求生刺激战场闪退怎么办 qq回执编号忘了怎么办 电脑开机要用户名和密码怎么办 电脑忘记用户名和密码怎么办 微信账号密码忘了怎么办 开发者账号密保忘记怎么办 华为账号忘记密保问题怎么办 fiyme账号忘记密保怎么办 id忘了密保问题怎么办 vivo账号密码忘记了怎么办 步步高账号密码忘了怎么办 步步高手机账号密码忘了怎么办 康佳电视通行证忘了怎么办 尚游通行证忘了怎么办 深圳免限行通行证忘了截图怎么办 电脑把管理员账号删除了怎么办 uc新浪加载失败怎么办红包还 微信忘记账号和密码怎么办 苹果手机忘记id密码怎么办 购买游戏账号被找回怎么办 交易猫账号忘了怎么办 爱奇艺账号怎么修改不了密码怎么办 论文目录显示错误未定义书签怎么办 银行账号被冻结了怎么办 哈罗单车账号被冻结怎么办 麻袋赚赚账号被冻结怎么办