文章目录
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)
内核核心代码,体系相关的代码,内核编译过程的代码等。