Linux-init
wh8_2011
这个作者很懒,什么都没留下…
展开
-
内核初始化-从start_kernel到init
如图所示,内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。 图 内核初始化 本节接下来的内容会结合内核代码,对内核初始化过程转载 2016-01-30 21:33:03 · 1706 阅读 · 0 评论 -
如何解读vmlinux.lds.S文件
vmlinux.lds.S用于对ld的输出进行组版,这个文件的格式在ld.info手册中有详细的说明。vmlinux.lds.S的主要目的是对输出文件中段进行排序,并定义相关的符号名,以下是简要注释。/* ld script to make i386 Linux kernel * Written by Martin Mares ; */OUTPUT_转载 2016-10-11 10:34:47 · 1106 阅读 · 0 评论 -
Linux学习之源码2:start_kernel流程
一、X86的流程可以参考http://www.kerneltravel.net/kernel-book/第十三章%20启动系统/13.5.htm二、arm的流程,在http://www.cnblogs.com/gangsaleisi/archive/2013/01/09/2851734.html基础上进行分析。 并且是在3.9.7版本上进行分析的,差别不是太大。转载 2016-01-30 21:37:15 · 670 阅读 · 0 评论 -
Linux系统下init进程的前世今生
Linux系统中的init进程(pid=1)是除了idle进程(pid=0,也就是init_task)之外另一个比较特殊的进程,它是Linux内核开始建立起进程概念时第一个通过kernel_thread产生的进程,其开始在内核态执行,然后通过一个系统调用,开始执行用户空间的/sbin/init程序,期间Linux内核也经历了从内核态到用户态的特权级转变,/sbin/init极有可能产生出了shel转载 2016-05-23 13:40:25 · 669 阅读 · 0 评论 -
启用伙伴算法
5.8 初始化内存管理回到start_kernel,下一个函数执行mm_init()。这个函数很重要了,来自同一个文件。 static void __init mm_init(void){ /* * page_cgroup requires countinous pages as memmap * and it's转载 2016-05-10 08:00:43 · 718 阅读 · 0 评论 -
Linux内核中的PID散列表实例
开发平台:基于虚拟机的Ubuntu 11.04 内核源码:linux-2.6.38.8.tar.bz2 目标平台:ARM体系结构 参考文献:《深入Linux内核架构》 关于散列表的概念可以参考博文《散列表的基本概念及其运算》。 1、PID散列表 PID散列表是在系统启动过程中通过pidhash_init转载 2016-05-09 10:03:44 · 485 阅读 · 0 评论 -
Linux启动参数及实现 __setup与early_param
#define __setup_param(str, unique_id, fn, early) / static char __setup_str_##unique_id[] __initdata = str; / static struct obs_kernel_param __setup_##unique_id / __转载 2016-05-09 08:05:01 · 765 阅读 · 0 评论 -
初始化0号进程
arch/x86/kernel/head_32.S的336行,进入分页后的内核代码段,执行lss stack_start,%esp指令,立即为进程0建立内核态堆栈。stack_start定义在657行:657 ENTRY(stack_start)658 .long init_thread_union+THREAD_SIZE659 .long __BOOT_D转载 2016-05-11 07:37:44 · 567 阅读 · 0 评论 -
初始化定时器中断
5.10.4 初始化定时器中断回到start_kernel,612行time_init函数:void __init time_init(void){ late_time_init = x86_late_time_init;} 函数x86_late_time_init实际上是初始化tsc时钟源。在time_init中只是把该函数转载 2016-05-10 23:05:29 · 1461 阅读 · 0 评论 -
初始化调度程序
5.9 初始化调度程序回到start_kernel函数中,mm_init()执行后,所有的绝大多数内存管理的初始化都完毕,后面的代码可以开开心心的使用Linux复杂、庞大而又高效的内存管理器了。来看下一个函数,超级重点的进程调度初始化函数sched_init()。不过自从Linux 2.6.23(2007年5月),内核引入了一种所谓的完全公平调度程序(Completely Fair Sched转载 2016-05-10 18:47:07 · 572 阅读 · 0 评论 -
走进start_kernel尾声
5.11 走进start_kernel尾声中断体系建立起来后,虽然后面还有很多行代码,但是都是些比较好理解的初始化函数了,也就是说start_kernel进入尾声了。5.11.1 初始化slab的后续工作继续分析start_kenel的下一个函数,613行,profile_init函数,用于对系统剖析做相关初始化,系统剖析用于系统调用: int __ref pr转载 2016-05-10 10:11:33 · 669 阅读 · 0 评论 -
Linux3.2.8系统启动过程及启动延时初步分析
一、vmlinux、zImage与uImage之间的关系vmlinux是编译出来的最原始的内核文件,未压缩;zImage是经过gzip压缩后的文件;uImage是u-boot专用的映像文件,它是在zImage之前加上一个长度为64字节的tag。注:影响系统启动速度的关键因素分析看到这,我本想不压缩以提升启动速度,但是实验发现,影响系统启动速度的关键因素还转载 2016-02-18 11:55:53 · 561 阅读 · 0 评论 -
vmlinux_32.lds.S
本文简单的介绍了理解内核链接脚本需要的链接器知识和链接脚本语法,从vmlinux_32.lds.S文件分析了内核image的构成,并着重讲解了使用自定义section配合链接脚本动态创建表的方法。这里或许有一些你经常看到但不了解原理的东西,例如“内核导出符号表是如何创建的?”、“__initcall修饰的函数在什么时候被内核调用?”、“__initdata是否会被释放?”等。1. 什么是链转载 2016-10-11 10:41:45 · 524 阅读 · 0 评论