Linux内核编译配置(Menuconfig图形化方式)、制作文件系统的步骤
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,则编译内核代码时会将此相关代码编译,此时为静态编译)
选择好后就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)生成
参考链接:
http://blog.csdn.net/HowieXue/article/details/76696631