详解Linux内核编译配置(menuconfig)、文件系统制做

Linux内核配置原理

Menuconfig主要功能选项介绍

编译配置内核步骤

制做文件系统步骤

文件系统和根文件系统区别联系

1、Linux内核配置原理

Linux内核的配置系统由三个部分组成,分别是:

一、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;

二、配置文件(config.in):给用户提供配置选择的功能;

三、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。html

Linux 内核的编译菜单有3中方法:

1)make config:进入命令行,能够一行一行的配置,这不方便使用,但用命令执行一遍会对编译过程有更深了解,这里不具体介绍。

2)make menuconfig:进入咱们熟悉的 menuconfig 菜单,图形化界面选择配置

3)make xconfig:在2.4.X 以及之前版本中 xconfig 菜单是基于 TCL/TK 的图形库的,没有接触过。。貌似淘汰了。linux

Menuconfig配置内核原理:

在Linux里面咱们所看到的menuconfig界面是经过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析Kconfig。

一般会在Kconfig里面编写如下四项:

一、模块的名字,用module开头;

二、选项,一般设为bool(二选一)或者trastate(三选一);

三、默认选项;

四、帮助说明。

关于KConfig 详细介绍可参考 http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.htmlandroid

2、Menuconfig主要功能选项介绍:

在源码目录键入# make menuconfig ARCH=arm 后出现下面Menu:(Menuconfig主界面)

c3cd96e2784ce994a3a3bc2749931e9d.pngweb

其中General setup 中重要的选项包括:windows

Cross-compiler tool prefix 交叉编译工具前缀(如arm-linux-);

Local version - append to kernel release 内核显示的版本信息;

System V IPC 表示系统的进程间通讯Inter Process

Communication,它用于处理器在程序之间同步和交换信息

Enable eventpoll support:支持事件轮循的系统调用。

二、Enable loadable module support 重要的选项包括:(内核模块配置)安全

Module unloading 容许卸载已经加载的模块

Module versioning support 容许使用其余内核版本的模块(可能会出问题)

Source checksum for all modules 为全部的模块校验源码,若是你不是本身编写内核模块就不须要它这个功能。

三、Enable the block layer 块设备支持,使用硬盘/USB/SCSI设备者必选这选项使得块设备能够从内核移除。。重要的选项包括:网络

Support for large (2TB+) block devices and files 仅在使用大于2TB的块设备时须要

Block layer bio throttling support 可用于限制设备的IO速度

IO Schedulers IO调度器I/O是输入输出带宽控制,主要针对硬盘,是核心的必须的东西。这里提供了三个IO调度器。

四、Processor type and features (处理器类型及特色)app

Symmetric multi-processing support 对称多处理器支持,若是你有多个CPU或者使用的是多核CPU就选上

Processor family (Pentium-Pro)处理器系列, 请按照实际使用的CPU选择,这里是处理器的类型

Generic x86 support 这一选项针对x86系列的CPU使用更多的常规优化。若是你在上面一项选的是i38六、i586之类的才选这个通用x86支持,

Multi-core scheduler support 针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选

五、 Power management and ACPI options (电源管理相关)

六、Bus options(PCI 、ISA 等总线的支持和配置.)

七、Executable file formats / Emulations (没用过,不大了解)

八、Networking support (网络配置,重要)less

Networking options 网络协议和网络包参数配置(其中TCP/IP相关协议必须打开)

Wireless 使用无线网卡支持

RF switch subsystem support RF 切换设备

九、Device Drivers (设备驱动)svg

Generic Driver Options

Block devices 想要支持的块设备,好比ramdisk , 磁盘阵列,CD/DVD 刻录等

Misc devices 须要支持的杂项设备

SCSI device support SCSI 设备驱动

Serial ATA and Parallel ATA drivers SATA 设备驱动

IEEE 1394 (FireWire) support

Network device support 如Ethernet (1000 Mbit) 选择本身对应的硬件

Character devices 字符设备,通常本身写的传感器类驱动都是字符型,须要在里面配置,包括串口TTY等。

SPI/I2C support

Sound card support 声卡

十、Firmware Drivers (BIOS相关,部分系统管理工具可能会用到 )

十一、File systems (文件系统支持,重要!)

The Extended 4 (ext4) filesystem

Ext4 Security Labels <=== 取消 SELinux 支持

XFS filesystem support

ISO 9660 CDROM file system support

NTFS file system support

十二、Kernel hacking (内核调试相关,木有用过)

1三、Security options (安全相关选项)

Cryptographic API —> // 加密API ,这部分选项会根据此前的优化自动调整

3、编译配置内核步骤

以Linux3.5内核版本为例,先解压linux-3.5源码,

而后cd到目录中输入:

make menuconfig ARCH=arm

c13fafd77fb3fd7dee71b6dd46a8bd9a.png

根据硬件选择处理器选型(配置):

b2d8c8cdd38633fe2738d3467c0e8078.png

网络协议配置(可根据软硬件需求对其进行裁剪):

ef4c4ff25b84c429807c201e01f1cf43.png

ce89a77407c85fda9f03001e4f6f5c25.png

设备驱动:图是网卡驱动

581359a4336ad6ed1df36de45706c4c7.png

根据本身的芯片选择相应的网卡驱动

413c921548a1da28591d341495e2458b.png

文件系统选择:好比系统想使用ex4文件系统 就空格勾选上

fc0c42e4e084e56d38c03bfdbd6cfb9d.png

图中取值方式:<>为不选择, 则压缩到内核映像zImage放到内存中运行,< M>为编译成moudule内核模块,存放在ROM中,使用时由zImage调用动态加载到内存

在makemenuconfig里面选中的 都会在.config文件中查询到:(相关Cofig配置成y,则编译内核代码时会将此相关代码编译,此时为静态编译)

3f246548d61c9d74b0d1e2f4056a3c47.png

f1cb9d804c7d9841bd74232cdd5bd030.png

选择好后就make进行编译内核,编译完成会在arch/arm/boot目录下生成zImage,这就是内核映像文件,直接能够烧进板子(SD卡或者USB)

4、文件系统制做步骤

首先安装工具包linux_tools.tgz

tar xvzf linux_tools.tgz -C /

而后生成文件系统镜像文件(qtopia_qt4.img)

make_ext4fs -s -l 314572800 -a root -L linux rootfs_qtopia_qt4.img rootfs_qtopia_qt4

执行make_ext4fs命令以后即会将rootfs_qtopia_qt4文件打包成 rootfs_qtopia_qt4.img 文件系统镜像。

l314572800“是分区大小 -s就是生成ext4的S模式制做;

314572800/1024/1024 = 300M

-a root 是指这个img用于Linux系统(若为-a system即表示为android系统,挂载点便是/system。

./rootfs_qtopia_qt4.img 表示在当前目录下生成镜像文件。

./rootfs_qtopia_qt4 指定根文件系统源路径

能够把本身写的应用程序放到rootfs_qtopia_qt4这个里面,而后打包成ext4文件系统镜像文件,这样应用程序就在固定在系统里,不用再二次安装了。

重点解释下:make_ext4fs 命令用来制做ext4文件系统的镜像,首先要把工具包解压到usr/bin 。使用方法参考:

make_ext4fs -s -l 512M -a system system_new.img system

512M表分区大小 第一个system表示挂载点为/system, 第二个system表示system目录。

新生成的system_new.img就能够用来烧写了。

5、文件系统和根文件系统区别联系

不少人分不清文件系统和根文件系统的区别和联系:

我的理解,所谓**根文件系统(Root Filesytem)**就是要包括linux启动时所必须的目录和关键性的文件、命令,所组成整个文件目录结构,即为根文件系统。

例如linux启动时所须要的init文件 linuxrc 挂载分区时linux去找的/etc/fstab 这个挂载文件等,根文件系统还包括许多应用程序bin、sbin目录等。

根文件系统能够用busybox直接生成

所谓文件系统(File System):指的是用来方便管理文件存储和数据组织的一种方法。常见的linux文件系统:NFS 网络根文件系统、YAFFS2针对nandflash, EXT3,EXT4 等。还有如你们熟悉的Windows下FAT、FAT3二、NTFS系统等

文件系统须要根据系统类型和硬件支持,使用打包工具(如Make_ext4)生成

欢迎转载,Howie原创做品,本文地址:

http://blog.csdn.net/HowieXue/article/details/76696631

谢谢

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐