Linux内核函数Start_kernel()的功能

转载 2007年09月26日 12:36:00
Start_kernel()中调用了一系列初始化函数,以完成kernel本身的设置。这些动作有的是公共的,有的则是需要配置的才会执行的。

 

在start_kernel()函数中,

输出Linux版本信息(printk(linux_banner))

设置与体系结构相关的环境(setup_arch())

页表结构初始化(paging_init())

使用"arch/alpha/kernel/entry.S"中的入口点设置系统自陷入口(trap_init())

使用alpha_mv结构和entry.S入口初始化系统IRQ(init_IRQ())

核心进程调度器初始化(包括初始化几个缺省的Bottom-half,sched_init())

时间、定时器初始化(包括读取CMOS时钟、估测主频、初始化定时器中断等,time_init())

提取并分析核心启动参数(从环境变量中读取参数,设置相应标志位等待处理,(parse_options())

控制台初始化(为输出信息而先于PCI初始化,console_init())

剖析器数据结构初始化(prof_buffer和prof_len变量)

核心Cache初始化(描述Cache信息的Cache,kmem_cache_init())

延迟校准(获得时钟jiffies与CPU主频ticks的延迟,calibrate_delay())

内存初始化(设置内存上下界和页表项初始值,mem_init())

创建和设置内部及通用cache("slab_cache",kmem_cache_sizes_init())

创建uid taskcount SLAB cache("uid_cache",uidcache_init())

创建文件cache("files_cache",filescache_init())

创建目录cache("dentry_cache",dcache_init())

创建与虚存相关的cache("vm_area_struct","mm_struct",vma_init())

块设备读写缓冲区初始化(同时创建"buffer_head"cache用户加速访问,buffer_init())

创建页cache(内存页hash表初始化,page_cache_init())

创建信号队列cache("signal_queue",signals_init())

初始化内存inode表(inode_init())

创建内存文件描述符表("filp_cache",file_table_init())

检查体系结构漏洞(对于alpha,此函数为空,check_bugs())

SMP机器其余CPU(除当前引导CPU)初始化(对于没有配置SMP的内核,此函数为空,smp_init())

启动init过程(创建第一个核心线程,调用init()函数,原执行序列调用cpu_idle() 等待调度,init())

至此start_kernel()结束,基本的核心环境已经建立起来了。 

 

linux内核初始化及启动之start_kernel

Linux的源代码可以从www.kernel.org得到,或者你可以查看linux代码交叉引用网站:http://lxr.linux.no/ 进行在线的代码查看,这是一个很好的工具网站。  ...
  • hushup
  • hushup
  • 2014年04月29日 23:23
  • 913

android启动之linux内核启动

移动终端,基本上可以分成两种:一种是传统手机(feature phone);另一种是智能手机(smart phone)。智能手机具有传统手机的基本功能,并有以下特点:开放的操作系统、硬件和软件可扩充性...
  • w2865673691
  • w2865673691
  • 2014年04月25日 09:02
  • 1636

start_kernel()分析(一)

从某种意义上,函数start_kernel就好像一般可执行程序中的主函数main,系统进入这个函数之前已经进行了一些最低限度的初始化,再往前研究就涉及很多硬件相关及编程语言了,这里是较高层次的初始化,...
  • njufeng
  • njufeng
  • 2014年06月09日 22:14
  • 6964

分析Linux内核启动过程:从start_kernel到init

郑德伦 原创作品转载请注明出处《Linux内核分析》MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 STEP1:在自己的linux...
  • a363344923
  • a363344923
  • 2015年03月17日 20:05
  • 7067

ARM Linux启动流程分析——start_kernel前启动阶段(汇编部分)

本文整理了ARM Linxu启动流程的第二阶段——start_kernel前启动阶段(汇编部分),内核版本为3.12.35。我以手上的树莓派b(ARM11)为平台示例来分析Linux内核在自解压后到跳...
  • luckyapple1028
  • luckyapple1028
  • 2015年04月26日 13:08
  • 2848

Linux内核---41.arm 内存初始化

Linux内核---41.arm 内存初始化
  • wangcong02345
  • wangcong02345
  • 2016年07月09日 10:20
  • 809

arm-linux内存页表创建

linux的内存(正式)页表是在内核代码执行到start_kernel函数后执行paging _init函数建立的,这里要注意一个事情就是说,这里paging_init函数可以正常创建内存页表的条件...
  • u010246947
  • u010246947
  • 2013年08月08日 15:32
  • 3533

利用gdb分析从start_kernel到init启动的过程

徐晨 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000 ” 今天我们分析一下L...
  • umika
  • umika
  • 2016年03月13日 23:05
  • 991

内核初始化-从start_kernel到init

如图所示,内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、ke...
  • wh8_2011
  • wh8_2011
  • 2016年01月30日 21:33
  • 751

Linux内核页表初始化

Linux在内核启动过程中start_kernel->setup_arch会调用如下两个函数对页表进行初始化和建立。 static inline void prepare_page_table(vo...
  • glmwu
  • glmwu
  • 2014年02月23日 17:04
  • 1340
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Linux内核函数Start_kernel()的功能
举报原因:
原因补充:

(最多只允许输入30个字)