Linux内核配置编译

时间:2021-07-20 16:35:54

一.内核简介:
1.系统架构
(1)Linux是由用户空间和内核空间构成的
(2)用户空间主要是用户应用程序以及一些C库文件,配置文件。一般是看得见的。
(3)内核空间主要是系统调用接口,狭义上的内核,处理器架构相关的代码。
(4)划分两个空间的理由:处理器有不同的工作模式,不同的模式权限不一样,可以运行的指令不一样。两个空间对应不同的工作模式(操作级别),程序执行的两种不同的状态。可以起到系统保护作用。比如用户空间级别较低,内核空间级别高。
(5)通过系统调用和硬件中断可以在两种空间相互切换。
2.内核架构(狭义上内核,纯代码)
(1)系统调用接口
(2)进程管理(创建进程—fork,exec,停止进程–kill,exit,控制通信—signal,POSIX机制,共享CPU–进程调度)
(3)存储管理(内存分配,回收,控制多个进程安全的共享内存区域)
(4)CPU架构相关代码(为的是提高至移植性)
(5)设备驱动程序
(6)网络协议栈(只是协议,与硬件无关)
(7)虚拟文件系统(隐藏各种文件系统的具体操作细节,提供统一的文件操作接口)
3.源代码目录简介
(1)ARCH:存放体系结构相关的代码。下设子目录,分别对应具体的CPU,每个子目录还有boot,mm,以及kernel三个子目录,分别对应系统引导以及存储管理,和系统调用
(2)documentation:内核文档,包含帮助信息,修改信息等
(3)drivers:设备驱动目录
(4)include:内核所需要的头文件目录。与平台无关的头文件在/include/linux子目录下。平台相关的则放在include相应的子目录中。
(5)fs:存放各种文件系统的实现代码。每个子目录对应一种文件系统。公用的源代码则用于实现VFS。
(6)net:网络协议的实现目录。
(7)管理源代码:SourceInsight软件。
二.内核配置
1.配置原因:根据嵌入式系统软硬件可裁剪的特性,即根据你项目软硬件的实际需求,对内核的相关模块进行裁剪。
2.配置命令:
(1)make config—–》交互式
(2)make menuconfig—-》菜单式
(3)运行配置和编译命令都是在顶层目录进行的。
3.一般要用到的大项
(1)处理器类型(Process type)
–process family
–具体CPU
(2)Networking Suport
(3)Devices Drivers
(4)File Systems
4.利用已存在的配置文件(一般在已存在的Linux系统的/boot目录下),来提高配置效率,一般在arch/$cpu/configs子目录(或者使用默认的配置文件)。
5.<>—对应三种取值方式
(1)*——-编译进uImage(内核映像文件运行在内存里面,一开机就调进内存)
(2)空格—-舍弃不用该功能
(3)M——-编译成模块(.ko)存放在硬盘,等到系统需要的时候再调用,节省内存。
6.[]—–只有两个取值,*和空格。
7.配置结果保存在.config文件,默认情况是隐藏的。
(1)后面的Y对应选择时候的*
(2)M对应选择时候的M
(3)可在menuconfig中选中某一项然后通过help选项可以查看该项在.config文件中的对应项。且是双向对应的,即可以修改.config文件来改变menuconfig的菜单界面的选择。
8.解压tar.xz文件
有两种解压方法:

xz -d **.tar.xz
tar -xv -f **.tar
#######################################################################
tar -Jxv -f **.tar.xz(大写的J)

9.配置当前系统准备升级的内核
(1)备份原来的.config文件
mv ./.config ./.config——bak
(2)复制当前系统配置文件
cp /boot/config-2.6.32-279.el6.i686 ./.config
三.内核编译
1.编译命令
(1)make zImage —–只能用于小于512K的内核
(2)make bzImage —通用性较强
(3)如果想要在编译过程中显示详细信息,则需要在后面加上 V=1选项。
(4)编译好的内核映像文件在/arch/ cpu/boot.1.makemodules2./lib/modulesmakemodulesinstall便 version以及**。
五.制作ramdisk
运行命令:#mkinitrd initrd- version version
version/lib/modules.1.cparch/ cpu/boot/bzImage /boot/vmlinuz- version2.cpinitrd version /boot/
(这里不需要在initrd-$version前面加上路径,系统会自动搜索,但是不要在内核源代码目录执行,最好在home执行,则会在当前路径产生一个ramdisk文件。)
3.修改/etc/grub.conf文件,从titile一直复制到最后,然后修改版本相关信息以及内核模块打包的文件名。为的是在启动的时候可以选择用什么版本的内核启动。
4.下次启动的时候要快速按下回车键,进入启动选择菜单,然后选择新安装的版本启动。进入系统以后用#uname -r查看当前使用的内核版本。
七。清理内核
1.只清理中间的.o文件,用make clean即可
2.要把所有中间文件和配置文件都清除,就要用make distclean
3.建议在拿到一套新代码的时候都做一下make distclean再进行配置和编译。
八.嵌入式内核制作
1.清除原有配置和中间文件
make distclean
2.配置内核
make menuconfig(参考已有的配置文件)ARCH=arm(因为默认是X86平台)
3.编译内核
make uImage ARCH=arm CROSS_COMPILE=arm-linux-
4.如果提示说缺少工具,就把之前编译uboot/tools的mkimage复制到当前操作系统的/bin目录。用来加文件头。