Linux 内核构建
文章目录
- 前言
- 构建Linux内核
- Linux内核文件组织结构
- Linux内核文件说明
- Linux内核的makefile文件
- Make命令
- 内核源代码的获取方式
- 编译内核过程
- 第1步,预处理
- 第2步,配置内核
- 第3步,生成内核
- 第4步,安装内核
- 第5步,建立模块
- 管理多内核
- 第6步 配置grub引导和测试
- 总结
前言
- Linux集成套件包括多种内核,能够处理各种机器。通过编译内核,选择符合硬件类型的驱动等,可以调整Linux系统,使其更合理地安装到计算机中。
- 重新编译内核以便实现一些新功能,如将Linux系统设置为一个临时路由器。
- 使得全世界内核设计者提供的各种为改进性能而设计的内核得到充分利用。
构建Linux内核
Linux官方源代码发布网址:www.kernel.org
gzip压缩的.tar.gz包,bzip2压缩的.tar.bz2。
Linux源代码分为:
与系统结构相关的部分
与系统结构无关的部分
文档和工具
Linux内核文件组织结构
Linux内核文件说明
- arch:包含了所有和体系结构相关的核心代码,它的每一个子目录都代表一种被支持的体系结构。
- include:包含编译核心所需要的大部分头文件,与平台无关的头文件放在 include/linux子目录中。
- init:包含核心的初始化代码。
- mm:包含所有独立于CPU体系结构的内存管理代码。
- kernel:主要的核心代码,实现大多数Linux系统的内核函数,包括进程调度、系统调用等
- drivers:系统所有的设备驱动程序,每种驱动程序各占用一个子目录。
- 其它:lib放置核心的库代码;net放置核心与网络相关的代码;lpc包含核心的进程间通信的代码;fs包含文件系统代码;scripts包含用于配置核心的脚本文件。
Linux内核的makefile文件
- 源代码树的每个子目录下都有一个makefile文件。
- 在源代码树的根目录下执行make,则调用顶层makefile文件,它定义了随后要输出到其他makefile的变量,以及向子目录中的每个makefile发出make调用。
- Script/makefile.build中定义了makefile向下级子目录递归并编译的规则。
Make命令
一个软件不会仅有一个程序文件,而是由一大堆程序代码。所以除了每个程序与子程序需要写一条编译过程的命令外,还需要写上最终的链接程序。因此使用make这个命令的相关功能可以进行编译过程的简化。
当执行make时,make会在当前的目录下查找Makefile文本文件,Makefile里面记录和源代码如何编译的详细信息。make会自动判别源代码是否经过变动,自动更新执行文件。
内核源代码的获取方式
- 原Linux发行版提供的内核源代码文件
- 获取最新的稳定版内核源代码
内核官网: http://www.kernel.org/
清华大学镜像:https://mirrors.tuna.Tsinghua.edu.cn/kernel
- 获取最新的稳定版内核源代码
- 保留原本设置:利用patch升级内核源代码
编译内核过程
第1步,预处理
- Linux内核源文件缺省位置:/usr/src/
从Internet下载最新版本到你创建的主目录。
如~wxdh - 清除以前试图建立内核过程遗留下的多余文件。
make mrproper
第2步,配置内核
- make config:手工逐项配置
- make menuconfig:菜单选项配置
- make xconfig: XWindow配置
- 修改配置文件/linux/.config
- 注意,make mrproper命令要删除这个文件,可以从/linux/arch/i386/defconfig拷贝复制一个。
第3步,生成内核
- 1、make dep:生成相关性
例如:如果激活“Set Version Information For All Symbols On Modules”选项,那么它为所建立的模块确定其版本信息。 - 2、make clean:清除一些目录中现有文件,将存储创建的新文件。
- 3、make bzImage:编译内核本身,花费时间长。对于新内核规模小,可以使用make zImage,如果不确定,最好还是使用bzImage。
建立/linux/arch/i386/boot/bzImage
第4步,安装内核
- 有些集成套件使用LILO作为引导装入程序。
- /etc/lilo.conf文件中的“image=”
- su命令超级用户登录,把刚创建的bzImage拷贝到/boot中。
- cp ~wxdh/linux/arch/i386/boot/bzImage /boot/vmLinuz
- 修改lilo.conf文件中“image”行。
- 告诉LILO更新其配置信息:/sbin/lilo
第5步,建立模块
- 配置Linux内核时,可将许多选项配置为模块而不是直接放进内核。
- 每个模块可以分别装入和卸载。
- /linux目录下
make modules:创建在配置过程中要求的模块,但是并不安装。
Make modules_install:将已经完成的模块拷贝到对应该内核版本的/lib/modules/子目录中。
管理多内核
- 不同的情况使用不同的内核,lilo.conf文件:
……
delay=15 #15-second delay
……
image=/boot/vnlinux
label=Linux
……
image=/home/wxdh/bzImage
Label=TestKernel
最后,执行/sbin/lilo
Added Linux * (表示Linux标记为缺省内核)
Added TestKernel(表示添加新内核)
第6步 配置grub引导和测试
- 配置grub引导程序
/boot/grub/grub.cfg
设置默认从新内核镜像启动系统 - 测试
系统重启,测试当前的内核版本
uname -a
总结
构建Linux内核
Linux内核文件组织结构
Linux内核文件说明
Linux内核的makefile文件
Make命令
内核源代码的获取方式
编译内核过程
第1步,预处理
第2步,配置内核
第3步,生成内核
第4步,安装内核
第5步,建立模块
管理多内核
第6步 配置grub引导和测试
Linux 内核构建相关推荐
- Linux内核构建与开发
Linux内核构建与开发 rtoax 2021年3月 1. Linux 内核的构建 1.1. 介绍 我不会告诉你怎么在自己的电脑上去构建.安装一个定制化的 Linux 内核,这样的资料太多了,它们会对 ...
- 直播回顾:如何基于Linux内核构建起商用密码基础设施?| 龙蜥技术
编者按:本文整理自龙蜥大讲堂技术解读,分享主题为<构建商用密码操作系统>,直播视频回放已上线至龙蜥社区官网(文末阅读原文直接跳转):首页-支持-视频,欢迎观看. 作者张天佳,来⾃阿⾥云操作 ...
- Linux内核构建系统之六
转自:http://www.juliantec.info/julblog/yihect/linux-kernel-build-system-6 Linux内核构建系统之六 yihect | 10 元月 ...
- Linux内核构建之vmlinux.bin
转载于 https://book.2cto.com/201309/33426.html 构建vmlinux.bin的规则在arch/x86/boot目录下的Makefile中: /arch/x86/b ...
- java的linux内核构建,构建一个Docker 的Java编译环境
用Dockerfile 构建一个Java的编译环境 1.包括以下软件包 Ubuntu jdk maven svn 2.jdk.maven 需要手动下载,下载之后分别为 jdk-8u51-linux-x ...
- linux 内核编译_如何在21世纪编译Linux内核
linux 内核编译 在计算中,内核是处理与硬件和一般系统协调通信的低级软件. 除了计算机主板上内置的一些初始固件之外,启动计算机时,内核还使您意识到它具有硬盘驱动器,屏幕,键盘和网卡. 确保为每个组 ...
- 嵌入式Linux(二十二)Linux内核分析及移植
1. 编译linux内核 NXP从linux官网下载内核,然后移植到自己的CPU,我们的移植是基于NXP,再移植到自己的开发板. 制作一个sh: #!/bin/sh make ARCH=arm C ...
- 优化Linux内核参数/etc/sysctl.conf sysctl 《高性能Linux服务器构建实战:运维监控、性能调优与集群应用》...
优化Linux内核参数/etc/sysctl.conf sysctl <高性能Linux服务器构建实战:运维监控.性能调优与集群应用> http://book.51cto.com/ar ...
- 24小时学通Linux内核之构建Linux内核
今天是腊八节,说好的女票要给我做的腊八粥就这样泡汤了,好伤心,好心酸呀,看来代码写久了真的是惹人烦滴,所以告诫各位技术男敲醒警钟,不要想我看齐,不然就只能和代码为伴了的~~话说没了腊八粥但还是有代码, ...
最新文章
- MFC滑块的使用方式
- smc数显压力表设定方法_压力控制器工作原理与设定方法
- java开发 中台
- kali入侵windows
- Nacos配置中心-命名空间与配置分组
- C#调用ORACLE存储过程返回结果集及函数
- 前端学习(3192):react第一个案例
- [OJ#40]后宫佳丽
- MySQL索引的Index method中btree和hash的优缺点
- 100并发 - 千万并发,阿里淘宝的 14 次架构演进之路
- 希捷“固件门”,影响深远啊
- ASP.NET Core 进程内(InProcess)托管
- QQ桌球瞄准器开发(1)桌球瞄准器介绍与使用方法
- 省市区三级联动sql
- 多项式拟合缺点_常见算法优缺点
- 电脑声音出现变声的问题
- 【Kaggle】Titanic - Machine Learning from Disaster(二)
- 有没有免费的视频剪辑软件?快来看看这些视频裁剪软件
- 菜圈的codewars(一),codewars的注册
- FCPX插件:视频转场插件Stupid Raisins Panel Pop
热门文章
- 增广拉格朗日乘子法、ADMM
- 容器化Docker原理和场景
- 【其他】接口设计文档模板
- jQuery 中的 39 个技巧
- python 中的“_,“有什么用途
- 单机诛仙3服务器正在维护,【运营版】诛仙3单机版天界一键MSSQL端修复大量BUG+视频教程+GM工具...
- python读取grib格式数据
- Linux内核编译出错
- 【C标准库】详解feof函数与EOF
- No module named 'exceptions'