Presentation is loading. Please wait.

Presentation is loading. Please wait.

配置编译内核.

Similar presentations


Presentation on theme: "配置编译内核."— Presentation transcript:

1 配置编译内核

2 主要内容 Linux内核简介 Linux内核源码结构 Linux内核配置、编译 Linux内核配置系统 内核配置选项

3 Linux内核简介 从技术上说 Linux 是一个内核
“内核”指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功 能的系统软件。一个内核不是一套完整的操作系统。 通常我们使用的 Linux 系统是一个集 Linux 内核、工具集、各种库、桌 面管理器、应用程序等一体的一个发布包 (发行版)‏

4 Linux内核简介 主流的 Linux 发行版 Debian GNU/Linux Red Hat Linux Fedora Core
Ubuntu Linux SUSE Linux Gentoo Linux Asianux Slackware Linux Turbo Linux CentOS

5 Linux内核简介 Linux 内核的特性 可以移植,支持的硬件平台广泛 有MMU和没有MMU的处理器均支持
32 bit 处理器 (arch/ subdirectories)‏:alpha, arm, cris, frv, h8300, i386, m68k, m32r,m68knommu, mips, parisc, ppc, s390, sh, sparc, um, v850 64 处理器:ia64, mips64, ppc64, sh64, sparc64, x86_64 更多的细节看Documentation/<arch>/ (arch为处理器类型如 ”arm“) 高可扩展性 可剪裁、可扩展,可以运行在大型主机,也可以运行在个人计算机上

6 Linux内核简介 高可靠性、稳定性 稳定性是linux鲜明特点,安装了linux系统的主机,连续运行一年不宕机是很平 常的事情
超强的网络功能 真正的多任务,多用户系统 多个用户可以同时登录到系统同时工作 耗费的资源相对较少 模块化设计 模块可以动态加载,卸载,可以减少系统体积,同时可以用来解决冲突问题,模 块调试 遵循GPL开源许可协议的,开放系统 编程更加简单,资源丰富

7 Linux内核简介 GPL相关资料 GPL = General Public License

8 Linux内核简介 Linux内核子系统 进程管理 内存管理 文件系统 网络协议 设备管理

9 Linux内核源码结构 源码获取 https://www.kernel.org/
$ wget -c tar.xz mainline:是主线版本 stable:是稳定版 longterm:是长期支持版

10 Linux内核源码结构

11 Linux内核源码结构 目录 描述 arch/ 体系结构相关的代码,例如:arch/i386, arch/arm,arch/ppc
block/ 部分块设备驱动程序 crypto/ 加密、压缩、CRC校验算法 Documentation/ 内核文档 drivers/ 各种设备驱动程序,例如:drivers/char drivers/block … firmware/ 一些设备运行需要的固件 fs/ 文件系统,例如:fs/ext3/ fs/jffs2 … include/ include/asm是体系结构相关的头文件,它是 include/asm-arm等目录的链接。include/linux是 Linux内核基本的头文件

12 Linux内核源码结构 目录 描述 init/ Linux初始化,例如:main.c ipc/ 进程间通信的代码 kernel/
lib/ 各种库子程序,例如:zlib, crc32 mm/ 内存管理代码 net/ 网络支持代码,主要是网络协议 samples/ 一些内核编程的范例 scripts/ 内部或者外部使用的脚本

13 Linux内核源码结构 目录 描述 security/ SElinux的模块 sound/ 声音驱动的支持 usr/
用户的代码,如cpio的实现 virt/ 内核虚拟机

14 Linux内核配置、编译 查看帮助 生成默认配置并修改配置 $ make ARCH=arm help ……
exynos_defconfig Build for exynos 生成默认配置并修改配置 $ make ARCH=arm exynos_defconfig $ make menuconfig $ cp arch/arm/configs/exynos_defconfig .config

15 Linux内核配置、编译 功 能 配 置 方 式 通过命令行程序更新当前配置 config
功 能 config 通过命令行程序更新当前配置 menuconfig 通过菜单程序更新当前配置(使用sudo apt-get install libncurses5-dev命令安装ncurses 库) xconfig 通过Qt图形界面更新当前配置(使用sudo apt-get install qt4-dev-tools命令安装qt4开发工具) gconfig 通过GTK图形界面更新当前配置(使用sudo apt-get install libglade2-dev命令安装gtk图形库) oldconfig 通过已经提供的.config文件更新当前配置

16 Linux内核配置、编译

17 Linux内核配置、编译

18 Linux内核配置、编译 编译 $ make ARCH=arm uImage -j2 $ make ARCH=arm dtbs
如果不想每次都在命令行中输入ARCH=arm,则可以通过修改顶层的Makefile文件来 实现(也可以设置交叉编译工具链前缀)。 将:ARCH ?= $(SUBARCH) 改为:ARCH ?= arm

19 Linux内核配置、编译 make zImage make uImage make dtbs make modules
make modules_install

20 Linux内核配置、编译 编译生成的文件 vmlinux 未压缩的Linux内核 arch/<arch>/boot/zImage
经zlib压缩后的Linux内核 arch/<arch>/boot/bzImage 经zlib压缩后的Linux内核,b是指big,压缩比更高 arch/<arch>/boot/uImage Uboot格式的内核文件(会用到uboot工具mkimage)

21 Linux内核配置、编译 编译生成的文件 System.map 内核符号地址 modules.order 编译生成的模块名称
/lib/modules/<version> 缺省模块安装路径 modules.dep 模块依赖文件 arch/<arch>/boot/dts/*.dtb 编译生成的设备树文件

22 Linux内核配置、编译 其他编译选项 查看帮助 make help 查看完整命令行 make V = 1 删除生成的文件
make clean 删除全部生成的文件,包括.config make mrproper #执行完该命令后要重新配置内核 生成tags文件 make tags

23 Linux内核配置系统 配置过程和结果 make %config 执行过程 配置结果
顶层Makefile-> scripts/kconfig/Makefile-> $< arch/$(ARCH)/Kconfig $< 为 mconf|conf|qconf|gconf 等 配置结果 .config 保存类似 CONFIG_xxx 的定义,供Makefile使用 顶层Makefile有-include .config include/generated/autoconf.h include/linux/kconfig.h 文件中包含引用了include/generated/autoconf.h文件, 保存类似 #define CONFIG_xxx,#undef CONFIG_xxx的配置

24 Linux内核配置系统 Kconfig 简单语法-菜单 menu 、endmenu menu <prompt>
<menu options> <menu block> endmenu choice、endchoice (例如:arch/arm/Kconfig) choice <choice options> <choice block> endchoice

25 Linux内核配置系统 source source <prompt> 例如:drivers/Kconfig
详细信息参看相关内核文档:Documentation\kbuild

26 Linux内核配置系统 config config MODVERSIONS
bool "Set version information on all module symbols" depends MODULES help Usually, modules have to be recompiled whenever you switch to a new kernel. ... type definition bool/tristate/string/hex/int input prompt prompt <prompt> [if <expr>]

27 Linux内核配置系统 dependencies depends on/requires <expr>
numerical ranges range <symbol> <symbol> [if <expr>] help text help or ---help---

28 Linux内核配置系统 顶层 Makefile .config 文件中CONFIG_XXX=y/m
定义 ARCH CROSS_COMPILE CPPFLAGS SUBDIRS LIBS … vmlinux: include arch/$(ARCH)/Makefile menuconfig: include/linux/version.h symlinks clean:

29 Linux内核配置系统 各层子目录下 Makefile
compiling the dependent objects in the directories obj-y, obj-m obj-$(CONFIG_XXX) += ???.o 递归目录 obj-$(CONFIG_XXX) += subdirname/ 静态编译进内核与编译成动态加载模块 Compiled as a separate module CONFIG_ISO9660_FS=m Driver options CONFIG_USB=y CONFIG_SCSI=y Compiled statically in the kernel CONFIG_PROC_FS=y 详细信息参看相关内核文档:Documentation\kbuild

30 内核配置选项 执行make menuconfig出现的配置菜单。 在各级子菜单项种,选择相应的配置时,有3种选择,它们代表的含义分别 如下。
在各级子菜单项种,选择相应的配置时,有3种选择,它们代表的含义分别 如下。 y-将该功能编译进内核。 n-不将该功能编译进内核。 m-将该功能编译成可以在需要时动态加载到内核中的模块。 可以按下相应的字母键进行选择,也可以使用空格键进行切换

31 内核配置选项 如果使用的是make xconfig,使用鼠标就可以选择对应的选项。
如果使用的是make menuconfig,则需要使用方向键和回车键进行选取。 中括号——可以选y和n 尖括号——可以选y、n和m 圆括号——填入实际的内容(字符串,整数值等)

32 内核配置选项 “General setup”菜单包含通用的一些配置选项 “System Type”菜单包含系统平台列表及其相关的配置选项
CONFIG_CROSS_COMPILE指定交叉编译工具的前缀。 “System Type”菜单包含系统平台列表及其相关的配置选项 CONFIG_ARCH_EXYNOS是三星Exynos系列SoC的配置选项。 “Networking”菜单包含网络协议支持选项 CONFIG_PACKET支持socket接口的功能。 CONFIG_INET选项支持TCP/IP网络协议。 CONFIG_IPV6选项支持IPv6协议的支持。 “Device Drivers”菜单包含各种设备驱动程序 “Network device support”菜单对应drivers/net目录的配置选项,包含各类 网络设备驱动程序。 “MMC/SD Card support”菜单对应drivers/mmc目录的配置选项,包含MMC/SD 卡的驱动程序。

33 内核配置选项 “File systems”菜单包含各种文件系统的支持选项 “Kernel hacking”菜单包含各种内核调试的选项
CONFIG_EXT2_FS选项支持EXT2文件系统。 “DOS/FAT/NT Filesystems”子菜单包含DOS/Windows的一些文件系统类型选项。 “Pseudo filesystems”子菜单包含sysfs procfs等驻留在内存中的伪文件系 统选项。 “Miscellaneous filesystems”子菜单包含JFFS2等其他类型的文件系统。 “Network File Systems”子菜单包含NFS等网络相关的文件系统。 “Kernel hacking”菜单包含各种内核调试的选项


Download ppt "配置编译内核."

Similar presentations


Ads by Google