Linux内核学习(一)编译内核并运行一个最小系统
目录
- 写在前面
- 整体环境
- 学习笔记
- 内核源码文件夹介绍
- 内核编译
- 编译过程中遇到的问题
- ①缺少进入菜单进行调整的指令
- ②制作镜像文件那部分过于模糊
- ③挂载硬盘镜像需要检查
写在前面
之前做项目的时候,有前辈告诉自己,要去学一下Linux内核,对很多方面都有帮助,现在闲下来,来花时间学一下这一部分的知识点,也算是一个学习笔记
目前跟着B站UP主——简说linux 的教程《Linux内核开发100讲》学习,链接如下:
简说linux个人空间
还有简书的一个教程
使用 qemu 搭建内核开发环境
整体环境
为了学习代码,我们需要一个一套Linux环境,因为为了方便自己记笔记和学习,没有用双系统,直接在windows10下面用VMware建了一个虚拟机进行试验。
UP主用的是
但我图方便,之前装过18的虚拟机,不想装别的了,我直接用18.04跑的linux-4.9.229
由于虚拟机的配置的时候,遇到了许多问题,把这些博客都记录下来,超链接如下:便于以后自己解决问题(注:我的虚拟机安装的Ubuntu18.04的最省略的版本,即基本上没有任何函数包和其他文本、视频软件)
Ubuntu18.04虚拟机连接不上网络
使用VMware+Ubuntu,无法切换大小写的异常处理
由于自己的Ubuntu基本上没有装库,所以还需要装几个后续在编译Linux内核中需要使用的库
sudo apt-get install libncurses5-dev #内核编译进行配置的一个文本窗口界面
sudo apt-get install build-essential #编译需要的重要函数库
学习笔记
内核源码文件夹介绍
由于Linux的内核代码非常庞大,比如4.9.229的内核大小就有797M,所以需要知道不同的目录有啥意义
进入Linux内核源码之后,会有很多文件夹,下面是目录对应的功能的大概了解
-arch 可以支持的CPU体系的相关的代码,内核移植基本上这个文件夹有关
|–x86 支持x86体系相关的代码
|—kernel 对应体系下的通用代码
|—boot 启动相关的 所有平台相关的启动代码
|—mach-xxx 代表了不同的公司针对不同的硬件平台的代码,其目录下的不同.c基本上和硬件平台启动相关的代码
|—net 网络相关的
-Documentation 开发中参考的第一手的资料文件
-firmware 固件相关代码
-init 内核启动及其初始化相关代码。整个内核首先以一段汇编代码开始,然后跳入C语言的start_kernel函数
-tools 内核的相关工具
-usr 测试相关的代码
-block 与块(存储)设备相关的代码
-drivers (代码中最多的部分,重要)内核对外设的支持包括鼠标、键盘、GPU、视频设备等等,与驱动相关的代码
|–i2C… 对不同类型外设的驱动
-ipc 进程通信相关代码
-security 安全相关的代码
-net 协议相关的代码
-sound 声音相关代码
-fs 文件系统相关的代码
|–sysfs… 虚拟文件系统等
-kernel 内核核心相关代码,与内核进程 调用相关的代码
-crypto 加密解密相关代码
-include 头文件相关代码
-lib 通用库
-mm(重要) 内存管理相关的代码
-scripts 内核编译相关的脚本
内核编译
了解完了基本的知识点之后,我们就开始编译一下我们自己的环境吧。
学习内核的第一步,我们先了解一下这个Linux内核,我们先从一个直观的了解方式——编译一个内核来了解它。
从源码编译linux-4.9内核并运行一个最小的busybox文件系统(最新整理版)
这里面还包含了一个busybox文件系统,这个文件系统里面有很多很实用的库,便于我们后续去使用
编译过程中遇到的问题
因为是初学Linux内核,有一些地方还是要手把手的教,在学习这个教程的过程当中,发现了教程中有一些缺漏的地方,将其补上
①缺少进入菜单进行调整的指令
第三步中缺少了进入菜单进行微调的指令
应该加上一句 make menuconfig
②制作镜像文件那部分过于模糊
up主的那片文章中对qemu的介绍实在太过于模糊,像我这样的新手很容易不知其所云,又找到了一篇讲的很清楚的,链接如下:这个链接很重要! 虽然有些地方还是有些模糊,但是很多知识已经解释的比up主的那一篇清楚很多了
https://www.jianshu.com/p/e1a4b5b808e0
③挂载硬盘镜像需要检查
在这一步中,分一块内存为硬盘,并挂载镜像文件这一步特别的重要,他是内核的文件系统的位置
挂载完了之后(我的路径有稍微一点点区别,我放在桌面了),在Linux内核的文件中,能发现img右下角有一个硬盘的标志
安装完busybox和内核模块中,在挂载的硬盘中应该有这些文件
etc其实就是格式化硬盘的时候产生的,我在编译的过程当中,一直在纠结这个里面的/etc是什么文件,后来发现就是mount硬盘之后产生的etc文件
最后终于跑起来啦 呜呜 学习Linux内核第一步完成
Linux内核学习(一)编译内核并运行一个最小系统相关推荐
- 最小的linux内核代码,带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统...
要学习linux内核,先要能够编译内核,还需要了解内核如何启动根文件系统.这样你才能在修改linux内核代码之后,完成验证的过程. 本文教你完成下列过程: 1.下载linux并编译linux内核源码 ...
- [奔跑吧 Linux内核][学习记录]编译内核-实验1-2-[环境以及参考]
1.下载的版本 VMware workstation player v16.2.4 Ubuntu v22.04.1 Linux kernel v5.19 2.参考的文章 环境安装 [干货]win10 ...
- 编译linux内核分区,Ubuntu编译内核及grub的一些笔记
最近心态不稳定,不怎么想发表文章,但看了看之前写了的笔记,想想还是整理出来吧,其实我写文章,也有一部分原因是为了心里的慰藉--当年游戏打不过别人,关注点便转向其它方面.这里整理的是以前编译内核.引导启 ...
- 新增linux驱动并重新编译内核,【转】配置并编译内核[更新到linux-2.6.29.2]
有关内核精简的内容,看3楼. 一.下载源代码和编译软件准备下载内核源代码:http://www.kernel.org/ 注意,点击2.6.29内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命 ...
- Linux实验 | Ubuntu20.04编译内核并添加一个系统调用
实验环境 Ubuntu 20.04 LTS VMware Workstation Pro 16 Linux Kernel 5.10.2 存储空间至少留55GB,我第一次做就因为空间不够编译失败,最后编 ...
- 【LinuxOS学习】编译内核
记录原内核版本 alin@alin:/usr/src/linux-5.15.26$ uname -a Linux alin 5.13.0-30-generic #33~20.04.1-Ubuntu S ...
- 学习LSM(Linux security module)之二:编写并运行一个简单的demo
转自:cnblog 各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c #in ...
- 内核管理 之 编译内核操作流程 ──为新手指南
作者:北南南北 来自:LinuxSir.Org 提要: 编译内核主要是通过内核实现某些功能,比如iptables 需要内支持:所有的硬件的支持也是通过内核实现的:本文只是简单的给初学者讲一下编译内核的 ...
- 内核编程入门——编译内核
Linux内核编译安装笔记 内核版本与下载 版本号 4.9.16 下载地址 预备知识 menuconfig与Makefile Linux内核根目录下的scripts文件夹 scripts文件夹存放的是 ...
- 【pygame学习+实战】第一篇:游戏最小系统
14天学习训练营导师课程: 李宁<Python Pygame游戏开发入门与实战> 李宁<计算机视觉OpenCV Python项目实战>1 李宁<计算机视觉OpenCV P ...
最新文章
- 第100天:CSS3中animation动画详解
- 软件项目管理的内在定律
- 你一定听过这些不太标准的技术圈发音...
- dedecms提取某栏目及子栏目名称到首页怎么弄
- 2017上海金马五校 购买装备 贪心+二分Check
- 5404. 用栈操作构建数组
- 分数加减法 http://acm.nyist.net/JudgeOnline/problem.php?pid=111
- (43)Xilinx RAM IP核配置(四)(第9天)
- 幸运抽奖游戏系统带后台源码
- linux启动和grub修复
- 【全面详解】影响酐铁性能的多种元素
- 空间金字塔模型与池化
- 前端Javascript第一天知识点:数据类型(重要)
- 潜在数学中 放眼数学外——记中国科学院院士、复旦大学教授李大潜zz
- 对 COMP 通证经济模型的一般性评价
- 数据结构、数据、数据元素、数据项的区别
- c++ 字符串流 sstream(常用于格式转换)
- 线条边框简笔画图片大全_每天学一幅简笔画生活小物简笔画图片大全!
- 详解Java操作符 instanceof
- 框架Framework
热门文章
- Oracle 12c PDB数据库的基本操作积累
- WinPE 安装系统
- 安卓自定义Toast的原理及实现
- android toast 怎么用,Android学习 Android Toast的使用
- SYBASE公司的PowerDesigner下载与安装
- android11 tts,Android 11 使用 TextToSpeech 实现文字转换语音 相关 bug:speak failed: not bound to TTS engine...
- 综合影响力模型InfG算法
- 动易html在线编辑器,动易CMS静态页调用FCK编辑器的代码
- 【DBA | IT人生】数据库解惑系列
- linux权限百度贴吧,api接口权限控制