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

详解Linux内核编译配置(menuconfig)、文件系统制作Linux内核编译流程(Menuconfig图形化方式)Menuconfig配置内核原理:在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入makemenuconfig命令的时候系统会读取Makefile来解析Kconfig。  通常会在Kconfig里面编写以下四项:  1、模块的名字,用module开头;  2、选项,通常设为bool

大家好,又见面了,我是你们的朋友全栈君。

更多技术干货,欢迎扫码关注博主微信公众号:HowieXue,一起学习探讨软硬件技术知识经验,关注就有海量学习资料免费领哦:
在这里插入图片描述



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

  • Linux内核配置原理
  • Menuconfig主要功能选项介绍
  • 编译配置内核步骤
  • 制作文件系统步骤
  • 文件系统和根文件系统区别联系

一、Linux内核配置原理

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

分别是:
1、Makefile:分布在 Linux 内核源代码根目录及各层目录中,定义 Linux 内核的编译规则;
2、配置文件(config.in):给用户提供配置选择的功能;
3、配置工具:包括配置命令解释器(对配置脚本中使用的配置命令进行解释)和配置用户界面(提供基于字符界面、基于 Ncurses 图形界面以及基于 Xwindows 图形界面的用户配置界面,各自对应于 Make config、Make menuconfig 和 make xconfig)。

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

1)make config:进入命令行,可以一行一行的配置,这不方便使用,但用命令执行一遍会对编译过程有更深了解,这里不具体介绍。
2)make menuconfig:进入我们熟悉的 menuconfig 菜单,图形化界面选择配置
3)make xconfig:在2.4.X 以及以前版本中 xconfig 菜单是基于 TCL/TK 的图形库的,没有接触过。。貌似淘汰了。

Menuconfig配置内核原理:

在Linux里面我们所看到的menuconfig界面是通过配置内核顶层的Kconfig产生的,而当输入make menuconfig命令的时候系统会读取Makefile来解析Kconfig。
  通常会在Kconfig里面编写以下四项:
  1、模块的名字,用module开头;
  2、选项,通常设为bool(二选一)或者trastate(三选一);
  3、默认选项;
  4、帮助说明。
关于KConfig 详细介绍可参考 http://blog.sina.com.cn/s/blog_4ba5b45e0102e6vp.html


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

在源码目录键入# make menuconfig ARCH=arm 后出现下面Menu:(Menuconfig主界面)
这里写图片描述

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

  • Cross-compiler tool prefix 交叉编译工具前缀(如arm-linux-);
  • Local version – append to kernel release 内核显示的版本信息;
  • System V IPC 表示系统的进程间通信Inter Process
  • Communication,它用于处理器在程序之间同步和交换信息
  • Enable eventpoll support:支持事件轮循的系统调用。

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

  • Module unloading 允许卸载已经加载的模块
  • Module versioning support 允许使用其他内核版本的模块(可能会出问题)
  • Source checksum for all modules 为所有的模块校验源码,如果你不是自己编写内核模块就不需要它这个功能。

3、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调度器。

4、Processor type and features (处理器类型及特点)

  • Symmetric multi-processing support 对称多处理器支持,如果你有多个CPU或者使用的是多核CPU就选上
  • Processor family (Pentium-Pro)处理器系列, 请按照实际使用的CPU选择,这里是处理器的类型
  • Generic x86 support 这一选项针对x86系列的CPU使用更多的常规优化。如果你在上面一项选的是i386、i586之类的才选这个通用x86支持,
  • Multi-core scheduler support 针对多核CPU进行调度策略优化多核调度机制支持,双核的CPU要选

5、 Power management and ACPI options (电源管理相关)
6、Bus options(PCI 、ISA 等总线的支持和配置.)
7、Executable file formats / Emulations (没用过,不大了解)
8、Networking support (网络配置,重要)

  • Networking options 网络协议和网络包参数配置(其中TCP/IP相关协议必须打开)
  • Wireless 使用无线网卡支持
    RF switch subsystem support RF 切换设备

9、Device Drivers (设备驱动)

  • 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 声卡

10、Firmware Drivers (BIOS相关,部分系统管理工具可能会用到 )
11、File systems (文件系统支持,重要!)

  • The Extended 4 (ext4) filesystem
  • Ext4 Security Labels <=== 取消 SELinux 支持
  • XFS filesystem support
  • ISO 9660 CDROM file system support
  • NTFS file system support

12、Kernel hacking (内核调试相关,木有用过)
13、Security options (安全相关选项)

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

三、编译配置内核步骤

以Linux3.5内核版本为例,先解压linux-3.5源码,
然后cd到目录中输入:

make menuconfig ARCH=arm

这里写图片描述

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

这里写图片描述
网络协议配置(可根据软硬件需求对其进行裁剪):

这里写图片描述

这里写图片描述

设备驱动:图是网卡驱动
这里写图片描述
根据自己的芯片选择相应的网卡驱动
这里写图片描述

文件系统选择:比如系统想使用ex4文件系统 就空格勾选上
这里写图片描述
图中取值方式:<>为不选择, <*> 则压缩到内核映像zImage放到内存中运行,< M>为编译成moudule内核模块,存放在ROM中,使用时由zImage调用动态加载到内存

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

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

这里写图片描述

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


四、文件系统制作步骤

首先安装工具包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就可以用来烧写了。


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

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

个人理解,所谓**根文件系统(Root Filesytem)**就是要包括linux启动时所必须的目录和关键性的文件、命令,所组成整个文件目录结构,即为根文件系统。
例如linux启动时所需要的init文件 linuxrc 挂载分区时linux去找的/etc/fstab 这个挂载文件等,根文件系统还包括许多应用程序bin、sbin目录等。
根文件系统可以用busybox直接生成

所谓文件系统(File System):指的是用来方便管理文件存储和数据组织的一种方法。常见的linux文件系统:NFS 网络根文件系统、YAFFS2针对nandflash, EXT3,EXT4 等。还有如大家熟悉的Windows下FAT、FAT32、NTFS系统等
文件系统需要根据系统类型和硬件支持,使用打包工具(如Make_ext4)生成


博主热门文章推荐:

一篇读懂系列:

LoRa Mesh系列:

网络安全系列:

嵌入式开发系列:

AI / 机器学习系列:


在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/130110.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java 高级程序员_如何才能成为java高级程序员?「建议收藏」

    java 高级程序员_如何才能成为java高级程序员?「建议收藏」身为程序员,一旦进入技术行列,就开启了持续学习的道路,更迭迅速的互联网时代,技术自然也是一代一代的更新,在技术进阶的道路上,要不断吸收新的想法和技术知识。牛逼的人总是让人羡慕,但如何才能让自己成为牛逼的人对我们来说更重要,本文分享的是如何才能成为java高级程序员,你和java高级程序员只差这一篇鸡汤!干了这碗鸡汤,未来不可限量!1、离开舒适区,提高个人代码能力不安于现状,高级程序员一般都具有丰富…

    2022年10月28日
    1
  • install scim to ubuntu

    install scim to ubuntu

    2021年4月23日
    178
  • 类UNIX操作系统概念

    摘要:对unixos上的一些基本概念做一个统一的梳理,以下内容转自互联网和相关书籍一进程组、会话、控制终端进程组进程组是一个或多个进程的集合。每个进程组有一个称为组长的进程,组长进程就是其进

    2021年12月25日
    41
  • ubuntu16安装中文输入法「建议收藏」

    ubuntu16安装中文输入法「建议收藏」参考自:https://jingyan.baidu.com/article/bad08e1ef4b2f109c85121b7.html原材料:ubuntu16步骤:1.在桌面的最左边选择设置(SystemSettings)2.在设置中选择LanguageSupport3.在弹出的窗口选择Install/RemoveLanguages…4.选择Ch…

    2022年9月26日
    0
  • sql server 2012 报表开发(2) reporting service 中制作分组折叠式报表

    sql server 2012 报表开发(2) reporting service 中制作分组折叠式报表前面我们学习了sqlserver2012如何使用ReportingService2012制作报表,对ReportingService制作报表,有了初步的了解,这里我主要记录一下,如何做一个分组折叠式的报表.1. 创建一个报表tb_Bills.rdl,添加一个数据集2.在当前报表中,添加一个列表3.在当前列表中,添加一个父组。选择需要分组字段的分组依据,

    2022年10月20日
    0
  • 帝国时代之国家崛起_崛起于帝国时代

    帝国时代之国家崛起_崛起于帝国时代01关系数据库帝国现在是公元2009年,关系帝国已经统治了我们30多年,实在是太久了。1970年,科德提出关系模型,1974年张伯伦和博伊斯制造出了SQL,帝国迅速建立起了统治。从北美到…

    2022年9月24日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号