linux内核开发第3讲:linux内核源码各个目录的功能解说

1.linux内核源码下载

1.1 下载地址:https://mirrors.edge.kernel.org/pub/linux/kernel/
1.2 选择linux-4.9.229.tar.gz压缩包下载
在这里插入图片描述
1.3 解压tar.gz

tar -zxvf linux-4.9.229.tar.gz
z:通过gzip支持压缩或解压缩。还有其他的压缩或解压缩方式,比如j表示bzip2的方式。
x:解压缩。c是压缩。 
v:在压缩或解压缩过程中显示正在处理的文件名
f:f后面必须跟上要处理的文件名。也就是说你不能写成这样 tar -zxfv zhcon-0.2.5.tar.gz 

1.4 查看源码大小

zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229$ du -sh
770M 

2.显示目录

2.1 显示当前目录linux-4.9.229下的一级目录

zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229$ tree -L 1
.
├── arch
├── block
├── certs
├── COPYING
├── CREDITS
├── crypto
├── Documentation
├── drivers
├── firmware
├── fs
├── include
├── init
├── ipc
├── Kbuild
├── Kconfig
├── kernel
├── lib
├── MAINTAINERS
├── Makefile
├── mm
├── Module.symvers
├── net
├── README
├── REPORTING-BUGS
├── samples
├── scripts
├── security
├── sound
├── tools
├── usr
└── virt

22 directories, 9 files

3. arch目录

arch目录:和硬件体系结构相关的代码,因为linux支持多种平台,每种平台占一个相应的目录,
linux目前支持30多种体系结构。
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229$ tree -L 1 ./arch/
./arch/
├── alpha
├── arc
├── arm
├── arm64
├── avr32
├── blackfin
├── c6x
├── cris
├── frv
├── h8300
├── hexagon
├── ia64
├── Kconfig
├── m32r
├── m68k
├── metag
├── microblaze
├── mips
├── mn10300
├── nios2
├── openrisc
├── parisc
├── powerpc
├── s390
├── score
├── sh
├── sparc
├── tile
├── um
├── unicore32
├── x86
└── xtensa

31 directories, 1 file
以arm为例,arm这个平台下面还有很多目录。
比如boot目录,存放着arm平台驱动相关的代码;
mach-开头的目录,不同的公司基于arm芯片出的硬件平台
比如mach-s3c24xx是三星公司基于arm平台出的硬件平台
mach-imx飞思卡尔基于arm平台出的硬件平台
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229/arch/arm$ ls
boot           kernel        mach-bcm        mach-ep93xx      mach-iop32x    mach-mmp      mach-omap2      mach-rpc       mach-stm32      mach-vt8500   plat-iop        vfp
common         kvm           mach-berlin     mach-exynos      mach-iop33x    mach-moxart   mach-orion5x    mach-s3c24xx   mach-sunxi      mach-w90x900  plat-omap       xen
configs        lib           mach-clps711x   mach-footbridge  mach-ixp4xx    mach-mv78xx0  mach-oxnas      mach-s3c64xx   mach-tango      mach-zx       plat-orion
crypto         mach-alpine   mach-cns3xxx    mach-gemini      mach-keystone  mach-mvebu    mach-picoxcell  mach-s5pv210   mach-tegra      mach-zynq     plat-pxa
firmware       mach-artpec   mach-davinci    mach-highbank    mach-ks8695    mach-mxs      mach-prima2     mach-sa1100    mach-u300       Makefile      plat-samsung
include        mach-asm9260  mach-digicolor  mach-hisi        mach-lpc18xx   mach-netx     mach-pxa        mach-shmobile  mach-uniphier   mm            plat-versatile
Kconfig        mach-aspeed   mach-dove       mach-imx         mach-lpc32xx   mach-nomadik  mach-qcom       mach-socfpga   mach-ux500      net           probes
Kconfig.debug  mach-at91     mach-ebsa110    mach-integrator  mach-mediatek  mach-nspire   mach-realview   mach-spear     mach-versatile  nwfpe         tools
Kconfig-nommu  mach-axxia    mach-efm32      mach-iop13xx     mach-meson     mach-omap1    mach-rockchip   mach-sti       mach-vexpress   oprofile      vdso
以下是飞思卡尔基于自己的硬件平台加的代码,里面的.c文件主要是针对自己硬件平台初始化的一些代码
比如cpu,sdcard卡,串口,USB等一些初始化代码
因为不同的硬件平台地址和配置是不同的
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229/arch/arm/mach-imx$ ls
3ds_debugboard.c     cpuidle-imx6sx.c  ehci-imx27.c   iomux-mx21.h         mach-bug.c                 mach-ls1021a.c      mach-pcm043.c  mx31.h                  pm-imx5.c
3ds_debugboard.h     cpu-imx25.c       ehci-imx31.c   iomux-mx27.h         mach-imx1.c                mach-mx21ads.c      mach-qong.c    mx31lilly-db.c          pm-imx6.c
anatop.c             cpu-imx27.c       ehci-imx35.c   iomux-mx2x.h         mach-imx25.c               mach-mx27_3ds.c     mach-vf610.c   mx31lite-db.c           resume-imx6.S
avic.c               cpu-imx31.c       epit.c         iomux-mx35.h         mach-imx27_visstrim_m10.c  mach-mx27ads.c      mach-vpr200.c  mx31moboard-devboard.c  src.c
board-mx31lilly.h    cpu-imx35.c       gpc.c          iomux-mx3.h          mach-imx50.c               mach-mx31_3ds.c     Makefile       mx31moboard-marxbot.c   ssi-fiq-ksym.c
board-mx31lite.h     cpu-imx5.c        hardware.h     iomux-v1.c           mach-imx51.c               mach-mx31ads.c      Makefile.boot  mx31moboard-smartbot.c  ssi-fiq.S
board-mx31moboard.h  crmregs-imx3.h    headsmp.S      iomux-v1.h           mach-imx53.c               mach-mx31lilly.c    mmdc.c         mx35.h                  suspend-imx53.S
common.h             devices           hotplug.c      iomux-v3.c           mach-imx6q.c               mach-mx31lite.c     mm-imx21.c     mx3x.h                  suspend-imx6.S
cpu.c                devices-imx21.h   iim.h          iomux-v3.h           mach-imx6sl.c              mach-mx31moboard.c  mm-imx27.c     mxc.h                   system.c
cpuidle.h            devices-imx27.h   imx27-dt.c     irq-common.c         mach-imx6sx.c              mach-mx35_3ds.c     mm-imx3.c      pcm037.h                tzic.c
cpuidle-imx5.c       devices-imx31.h   imx31-dt.c     irq-common.h         mach-imx6ul.c              mach-pca100.c       mx21.h         platsmp.c               ulpi.h
cpuidle-imx6q.c      devices-imx35.h   imx35-dt.c     Kconfig              mach-imx7d.c               mach-pcm037.c       mx27.h         pm-imx25.c
cpuidle-imx6sl.c     ehci.h            iomux-imx31.c  mach-armadillo5x0.c  mach-kzm_arm11_01.c        mach-pcm037_eet.c   mx2x.h         pm-imx27.c
因此,总结说:
arch目录下是不同的硬件体系结构相关的目录;
arch/arm/mach-是不同公司的硬件初始化代码;

4.document目录

针对内核的一些说明,内核各部分的通用解释和注释。

5.firmware

固件相关代码,比如wifi芯片,flash芯片代码

6.init

内核初始化代码,start_kernel()就位于init/main.c中。
linux系统在启动初始化之后,会启动文件系统,do_mounts用于挂载文件系统
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229/init$ ls
calibrate.c  do_mounts.c  do_mounts.h  do_mounts_initrd.c  do_mounts_md.c  do_mounts_rd.c  initramfs.c  init_task.c  Kconfig  main.c  Makefile  noinitramfs.c  version.c

7. Kconfig

编译系统的一部分

8. security

安全相关代码

9.Usr

一些测试代码,不需要看

10.Block

块设备相关的代码

11.drivers

11.1 drivers目录大小

大概有407M,基本上占据了linux内核源码的一半以上。
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229/drivers$ du -sh
407M 

11.2 drivers目录内容

针对不同类型驱动的代码,比如有input(鼠标,键盘等),gpu,gpio,iommu,video等
zhaoxr@zhaoxr-ThinkPad-E450:~/xiangrui.zhao/linux-4.9.229/drivers$ ls
accessibility  cdrom        dma       hsi         ipack      media     nvdimm    platform    reset  ssb          video
acpi           char         dma-buf   hv          irqchip    memory    nvme      pnp         rpmsg  staging      virt
amba           clk          edac      hwmon       isdn       memstick  nvmem     power       rtc    target       virtio
android        clocksource  eisa      hwspinlock  Kconfig    message   of        powercap    s390   tc           vlynq
ata            connector    extcon    hwtracing   leds       mfd       oprofile  pps         sbus   thermal      vme
atm            cpufreq      firewire  i2c         lguest     misc      parisc    ps3         scsi   thunderbolt  w1
auxdisplay     cpuidle      firmware  ide         lightnvm   mmc       parport   ptp         sfi    tty          watchdog
base           crypto       fmc       idle        macintosh  mtd       pci       pwm         sh     uio          xen
bcma           dax          fpga      iio         mailbox    net       pcmcia    rapidio     sn     usb          zorro
block          dca          gpio      infiniband  Makefile   nfc       perf      ras         soc    uwb
bluetooth      devfreq      gpu       input       mcb        ntb       phy       regulator   spi    vfio
bus            dio          hid       iommu       md         nubus     pinctrl   remoteproc  spmi   vhost

13.fs目录

文件系统相关的代码,文件系统非常重要,文件系统有两重含义:
一个是操作系统启动引导的文件系统;
二是以人类能够理解的方式通过文件目录方式去访问存储设备

14.ipc目录

进程通信相关的代码

15.kernel目录

内核的核心代码,实现linux内核的通用代码。
而arch/arm/kernel中是实现arm体系的通用代码

16. net目录

网络子系统以及驱动相关的代码

17.sound目录

声卡相关的代码

18.crypto目录

加密解密相关的代码

19.include

头文件相关的代码,与系统相关的头文件放置在include/linux目录下

20.lib目录

通用库函数代码

21.mm目录

内存管理相关的代码,页表,页目录表以及页表管理的相关代码

22.scripts目录

配置内核编译内核的脚本

23.总结

linux源码大概800M,其中一半多是驱动(driver)相关代码,还有网络子系统(net),块设备子系统(block)
内核核心代码,体系相关的代码,内核编译过程的代码等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值