第三课 熟悉内核源代码

赵连讯 + 原创作品转载请注明出处 + 《Linux内核分析》MOOC课程http://mooc.study.163.com/course/USTC-1000029000

linux源代码目录结构

为了熟悉操作系统,我们首先查看linux的源代码目录结构

  • arch是各种架构的芯片的总目录
    进入ls后,可以进一步的看到,我们常见的芯片架构。比如我们正在学习的x86的芯片架构,常见的嵌入式的控制芯片arm架构的芯片,mips的架构芯片。
  • boot目录是用来生成可执行文件的目录。
    我们编译x86架构的内核后,生成的镜像文件bzImage就是在这个目录下。

  • include文件夹下是编译过程中使用的头文件,同样在我们基于内核编译驱动文件时也要使用到这些头文件,才能保持一致性。在include/asm/下就能看到很多头文件。以gpio.h为例子。内部其实包含了linux/gpio.h而已。说明我们以后基于x86的平台编译gpio相关的程序时,并不需要包含此处asm/gpio.h而是使用通用的linux/gpio.h即可。
    在setup.c中就定义了setup_arch这个函数的实现。这是与架构启动有关的代码。在启动过程中被调用。

  • mm文件夹有内存管理有关。mmap与内存的映射有关。
  • drivers管理linux下所有驱动实现
  • fs是文件系统的管理,包括虚拟文件系统
  • include是常用的包含文件目录
  • ipc进程间通信
  • kernel目录和arch目录下的kernnel目录不同。以一个文件为例子。比如此目录下没有setup.c,不和具体的架构相关。但是都有signal.c。而且都被编译到内核中,至于两者是不是有相同的函数,如何调用的,以后再研究,本报告中不查看了。
  • init目录是linux的启动目录,第一个函数在main.c中start_kernel函数。此外还有各种mount的文件,这些文件与是linux 内核启动成功之后,去mount到文件系统的。现在最主要关系的是main.c文件。也是我们跟踪的文件。

除了上述分析之外,我们在嵌入式工作中,使用的平台是arm处理器。这里也列出与嵌入式处理器相关的目录。

  • arm下的目录结构比x86的架构下的目录更多。在arm下能够看到多出了不同的mach。个人理解,由相同的arm架构形成了不同的芯片类型。比如TI的芯片归类mach-omap2,比如三星的mach-s3c24xx。这里的omap2并不单指一个芯片而是一类芯片。在此目录下再细分。此外还有平台相关代码。plat-omap是针对omap类型的芯片的公共性代码。i2c.c完成了平台下的总线注册和设备添加功能。

start_kernel

start_kernel是操作系统中的入口函数,在这个函数中最后调用的一个函数是rest_init。

在rest_init函数中完成了线程的创建。首先创建了用户空间的1号进程,处理函数叫做init。应用空间所有的函数都从此进程派生出来。

随后创建了内核进程kthreadd进程。创建结束后自己作为0号进程进入到空闲状态。

cpu_startup_entry函数中会进入到while(1)循环中。

实验

按照实验要求,设置第一个断点,让程序停止在start_kernel的入口函数中 。
图示:
这里写图片描述

kernel文件夹下的部分文件列表
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值