Linux内核是一个开源的操作系统内核,它是全世界许多操作系统的基础,其中最著名的就是红帽linux。红帽linux作为一个商业公司,经常发布更新的版本和服务。Linux内核在运行时,会经历许多不同的阶段,其中最重要的一个阶段就是start_kernel这一步骤。
在Linux内核启动的过程中,start_kernel函数是整个启动流程的起始点。该函数会执行一系列操作,完成环境的初始化,加载必要            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-03-29 10:12:34
                            
                                81阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在ARM架构的Linux系统中,start_kernel函数是整个内核启动的关键函数之一。它负责初始化和准备内核数据结构,同时启动系统的各种服务和模块。在本文中,我们将重点讨论ARM架构下start_kernel函数的作用和实现过程。
start_kernel函数的作用是在Linux内核启动时进行一系列的初始化工作,为系统的正常运行做好准备。在ARM架构下,start_kernel函数的具体实现            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-03-26 10:19:46
                            
                                102阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            4.2 内核初始化
如图4.6所示,内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2011-03-10 16:59:53
                            
                                1035阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            el过程中所有的函数调用,并非最新内核版本。            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-06-15 13:55:31
                            
                                134阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            了解完kernel启动以前的汇编之后我们来看看正式的c语言启动代码,也就是我们的start_kernel函数了。start_kernel相当大,里面每一个调用到的函数都足够我们伤脑筋了,我这里只是浅尝辄止的描述一下函数的功能,从而对kernel启动的过程有一个比较直观的了解。很多函数真正理解需要对linux相关体系有很深的了解,暂时没有时间深入,留待以后了。                
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2024-05-18 16:24:33
                            
                                35阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前置:这里使用的linux版本是4.8,x86体系。 local_irq_disable(); 这个函数是做了关闭中断操作。和后面的local_irq_enable相对应。说明启动的下面函数是不允许被中断抢占的。这个函数追下去会发现下面的代码: 这个写法是linux的内联汇编写法。在C语言中写汇编语            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-01-18 11:51:57
                            
                                328阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            前置:这里使用的linux版本是4.8,x86体系。 start_kernel是过了引导阶段,进入到了内核启动阶段的入口。函数在init/main.c中。 set_task_stack_end_magic(&init_task); 这个函数是设置操作系统的第一个进程init。 这个init_task            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2022-01-18 11:52:57
                            
                                276阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            start_kernel启动函数机器上电后,会进行BIOS自检,之后是系统引导,内核加载,最后是初始化阶段。我们这里主要关心的是初始化阶段(start_kernel)的事情,而从上电到初始化之前的事情直接忽略了。                       
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-17 11:35:32
                            
                                354阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            start_kernel函数做的主要工作: (1)打印了一些信息; (2)内核工作需要的模块的初始化被依次调用(譬如内存管理、调度系统、异常处理···); (3)需要重点了解的就是setup_arch中做的2件事情:机器码架构的查找并且执行架构相关的硬件的初始化、uboot给内核的传参cmdline ...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2021-07-26 23:19:00
                            
                                152阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            如果以为到了c代码可以松一口气的话,就大错特措了,linux的c也不比汇编好懂多少,相反到掩盖了汇编的一些和机器相关的部分,有时候更难懂。其实作为编写操作系统的c代码,只不过是汇编的另一种写法,和机器代码的是...            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2014-01-02 18:19:00
                            
                                272阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            全部任务都具有自己的内存,启动阶段中的当前任务必须具备属于自己的内存。 mm_init_owner()函数传递init_mm和init_task參数 mm/init-mm.c struct mm_struct init_mm = { .mm_rb = RB_ROOT, .pgd = swapper_            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-06 15:02:50
                            
                                540阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            在启动初期须要关闭CPU的IRQ,原因: 因为尚未对中断代码。向量表,中断处理器进行初始化,所以必须关闭中断。 我的源码里面定义了 CONFIG_TRACE_IRQFLAGS_SUPPORT,所以调用的是 include/linux/irqflags.h #define local_irq_disa            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2016-02-28 09:44:00
                            
                                377阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            start_kernel函数是内核的入口函数,定义在init/main.c文件中。我们来一个一个函数看。asmlinkage __visible void __init start_kernel(void){        char *command_line;        char *after_dashes;         set_task_stack_end_magic(&ini...            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2021-08-17 11:53:27
                            
                                1926阅读
                            
                                                                             
                 
                
                             
         
            
            
            
             本文针对arm linux, 从kernel的第一条指令开始分析,一直分析到进入start_kernel()函数. 我们当前以linux-2.6.19内核版本作为范例来分析,本文中所有的代码,前面都会加上行号以便于和源码进行对照,       例:       在文件init/main.c中:       00478: asmlinkage void __init start_kernel(vo            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2014-03-29 16:45:00
                            
                                248阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            赶得早,不如赶得巧 - 古语start_kernel
 前几年穿越题材很火爆,如神话,宫,步步惊心等,可是这些剧都有一些共性,那就是总是穿越到了过去! 为什么穿越一定要到过去呢?在我看来无非就是觉得回到过去题材丰富,因为在中国科幻题材很难火爆,题材有限!换言之就是,中国人总是喜欢活在过去,我祖上怎样怎样..我去年买了个表啊!在看看国外人家穿越基本都是现在穿到未来,未来穿到现在!就这么任性的穿来穿去            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2023-09-06 10:45:37
                            
                                113阅读
                            
                                                                             
                 
                
                                
                     
                                    
                             
         
            
            
            
            内核的人口是stext,这个是在arch/arm/kernel/vmlinux.lds.s定义
 而符号stext是在arch/arm/kernel/head.S中定义的
其主线大致为:
1、确定processor type
通过cp15协处理器的c0寄存器来获取processor id的指令,跳转到__lookup_processor_type
__lookup_proces            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2012-03-17 23:08:49
                            
                                1177阅读
                            
                                                        
                                点赞
                            
                                                                             
                 
                
                             
         
            
            
            
            Linux是一款备受赞誉的开源操作系统,其核心组件之一就是内核(kernel)。Linux内核的启动过程可以说是整个操作系统启动的关键步骤,而其中的“linux start kernel”便是这个过程中的重要环节。
Linux内核的启动过程一般可以分为5个阶段:运行BIOS、加载bootloader、执行bootloader、启动内核、初始化用户空间。而在这5个阶段中,“linux start            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2024-02-27 11:20:13
                            
                                43阅读
                            
                                                                             
                 
                
                             
         
            
            
            
            本文中所有的代码,前面都会加上行号以便于和源码进行对照.例:在文件init/main.c中:00478: asmlinkage void __init start_kernel(void)前面的"00478:" 表示478行,冒号后面的内容就是源码了.在分析代码的过程中,我们使用缩进来表示各个代码的调用层次.由于启动部分有一些代码是平台特定            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2012-04-02 14:58:00
                            
                                200阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            转自:https://blog..net/luckyapple1028/article/details/45287617?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-8.channel_param            
                
                    
                        
                                                            
                                                                        
                                                                                        转载
                                                                                    
                            2020-10-16 10:36:00
                            
                                344阅读
                            
                                                                                    
                                2评论
                            
                                                 
                 
                
                             
         
            
            
            
            前置:这里使用的linux版本是4.8,x86体系。 聊这个函数就需要先了解cgroup。            
                
                    
                        
                                                            
                                                                        
                                                                                        原创
                                                                                    
                            2022-01-18 11:52:33
                            
                                374阅读