内核编程入门——编译内核
Linux内核编译安装笔记
内核版本与下载
- 版本号 4.9.16
- 下载地址
预备知识
- menuconfig与Makefile
Linux内核根目录下的
scripts
文件夹
scripts
文件夹存放的是跟make menuconfig
配置界面的图形绘制相关的文件arch/$ARCH/Kconfig
文件、各层目录下的Kconfig
文件
用于不同硬件平台生成整个配置界面选项(Kconfig是整个linux配置机制的核心)Linux内核根目录下的的
.config
文件、arch/$ARCH/configs/
下的文件
通过读取arch/$ARCH/configs/
下的一个预定义的配置文件生成界面,在手动配置后生成根目录下的.config
文件,用于最终的编译配置Linux内核根目录下的
include/generated/autoconf.h
文件
当配置保存退出后,会根据.config
的信息生成一些make时需要的宏信息,这些宏信息就保存在include/generated/autoconf.h
中,用于预编译。Linux内核根目录下的makefile文件、各层目录下的makefile文件
当我们增加一个功能模块时,在生成include/generated/autoconf.h
中的预编译信息的同时,还需要生成编译该功能模块的makefile,并修改它的上层makefile文件。
准备工作
- 安装make
- 安装gcc
- 安装ncurses
编译内核
清理源代码树
执行make mrproper
命令清理源代码树,包括过去曾经配置的内核配置文件.config
都将被清除。即进行新的编译工作时将原来老的配置文件给删除,以免影响新的内核编译。(但是一般情况也可以不执行这条命令,因为内核编译是增量编译,清除之后又要从头开始编译,浪费时间).配置内核
执行make menuconfig
以图形界面配置内核。
以second extended fs suppor
为例,使用上下方向键移动光标,拍打空格进行编译进内核
、模块
、不选择
进行功能制定,对应的图标变化为*
、M
、(空格)。进入界面中移动光标选中file system
项目,回车进入其中,上下移动光标到second extended fs suppor
,使用空格将*
改成M
,使用左右键去选择保存,。。。退出。生成依赖关系
执行make dep
开始编译
执行make -j4
安装模块和内核
安装模块
执行make -j4 modules_install
。此过程是将模块文件复制到文件系统中相应的目录下。安装内核
执行make install
。此过程将在目录/boot
下生成- 内核引导镜像文件
vmlinuz
,该文件就是对应版本的内核系统,由vmlinux
压缩而来。 - 初始RAM磁盘镜像文件
initrd
,该文件是一个临时根文件系统,用来支持灵活正确的加载真正的内核系统vmlinuz
。
- 内核引导镜像文件
修改默认启动版本
- 列出当前启动版本
grub2-editenv list
- 列出所有的启动版本
grep ^menuentry /boot/grub2/grub.cfg | cut -d "'" -f2
- 修改启动版本
grub2-set-default "CentOS Linux ... 7 (Core)"
遇到的问题
CentOS
中使用yum install [xxx]
安装
- 需要
bc
的程序,尚且不知道那个功能模块需要。 - 需要
openssl-devel
开发库,过滤.config
文件后,尚且不知道哪个功能模块需要。
内核编程入门——编译内核相关推荐
- 由尚德linux内核编程进阶教材,由尚德老师Linux内核编程入门视频教程
由尚德老师讲解的Linux内核编程教程入门课程,此课程学完后可以接着学进阶篇,下载地址:http://blog.csdn.net/congxue/archive/2009/05/17/4194112. ...
- 编译linux内核分区,Ubuntu编译内核及grub的一些笔记
最近心态不稳定,不怎么想发表文章,但看了看之前写了的笔记,想想还是整理出来吧,其实我写文章,也有一部分原因是为了心里的慰藉--当年游戏打不过别人,关注点便转向其它方面.这里整理的是以前编译内核.引导启 ...
- 内核管理 之 编译内核操作流程 ──为新手指南
作者:北南南北 来自:LinuxSir.Org 提要: 编译内核主要是通过内核实现某些功能,比如iptables 需要内支持:所有的硬件的支持也是通过内核实现的:本文只是简单的给初学者讲一下编译内核的 ...
- [奔跑吧 Linux内核][学习记录]编译内核-实验1-2-[环境以及参考]
1.下载的版本 VMware workstation player v16.2.4 Ubuntu v22.04.1 Linux kernel v5.19 2.参考的文章 环境安装 [干货]win10 ...
- linux内核编程(一)
这些天在学习linux内核编程,就在这里小小的show以下. 首先编写如下的linux代码.并命名为hello.c 这里你应该注意亮点: 第一.linux内核编程,不同于普通的用户态下的编程:有一个入 ...
- 【linux内核-源码编译之centos7】
linux内核-源码编译之centos7 一. 为什么要编译内核 二.疑难杂症 三.演示环境 四.下载源码 4.1.两者源码区别 4.2.将获取到的源码放在/usr/src/kernels/ 下 五. ...
- 如何在编译内核时添加缺少的固件(以intel wireless 5100 AGN的 iwlwifi 为例)
不知大家在笔记本使用 Linux 时编译内核后无线wifi 能不能用,我的本本是"联想 Y450"一款足够老的本本,配的无线网卡是: $ lspci | grep Wireless ...
- 一文带你Linux系统编程入门
文件和文件系统 文件是linux系统中最重要的抽象,大多数情况下你可以把linux系统中的任何东西都理解为文件,很多的交互操作其实都是通过文件的读写来实现的. 文件描述符 在linux内核中,文件是用 ...
- deepin编译Linux内核,为Deepin编译Linux 5.10内核的悲伤故事经历:从入门到卸载
简介 目的 解决Linux Deepin在更新内核到5.10后无法使用蓝牙的问题. 硬件:联想小新13 Pro 2020 AMD R5 4600U OS: win 10 + deepin 20 原因 ...
最新文章
- GitHub 官方终于出 App 了!
- 11.3 人工合成数据-机器学习笔记-斯坦福吴恩达教授
- 不用卷积也能生成清晰图像,用两个Transformer构建一个GAN
- 小程序 wx.getBackgroundAudioManager() 手机黑屏后,让控制音频停止
- xfce4截图的快捷键设置
- Java:集合for高级循环遍历
- 逻辑回归 - sklearn (LR、LRCV、MLP、RLR)- Python代码实现
- 计算机c盘丢失,电脑C盘丢失的视频文件怎么恢复?方法讲解,轻松搞定
- Adobe illustrator 设置字体和微调 - 连载 10
- .NET 5中的EF Core 5数据迁移:在单独的库中并自动部署
- php pager,fleaphp常用方法分页之Pager使用方法
- AI为传统零售行业赋能,自助收银推动无人零售发展
- Shell脚本基础语法教程
- 生存或毁灭? 国内DIY现状大型调查分析
- 低成本快速开发 LoRa 终端:从 1 到 10000
- 超声波测距仪编程_超声波测距仪程序
- 转:CRF++总结1
- LeetCode刷题——快慢指针
- 居家办公101:你的“办公室”必备设备有哪些?
- MACH3 G代码自动循环加工简单例子
热门文章
- 现代软件工程 第7-9章作业 第3题 --原旭莹
- 大春天的,兰州竟然下了一场大雪!
- cmd运行Java jar包
- Android 源码 图形系统概述
- CS5210设计HDMI to VGA方案 CS5210方案
- java 文件的md5值_Java计算文件的MD5值
- win10无法修改mac地址_为什么淘宝运费模板无法修改发货地址?发货地址改不了是什么原因?...
- 日落20181024001 - Unity组件应用之Animator
- ARP简介及ARP病毒原理
- python3语法 余数不等于0_python 基础语法学习笔记 0-3