目录

  • 写在前面
  • 整体环境
  • 学习笔记
    • 内核源码文件夹介绍
    • 内核编译
      • 编译过程中遇到的问题
        • ①缺少进入菜单进行调整的指令
        • ②制作镜像文件那部分过于模糊
        • ③挂载硬盘镜像需要检查

写在前面

之前做项目的时候,有前辈告诉自己,要去学一下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内核学习(一)编译内核并运行一个最小系统相关推荐

  1. 最小的linux内核代码,带你阅读linux内核源码:下载源码、编译内核并运行一个最小系统...

    要学习linux内核,先要能够编译内核,还需要了解内核如何启动根文件系统.这样你才能在修改linux内核代码之后,完成验证的过程. 本文教你完成下列过程: 1.下载linux并编译linux内核源码 ...

  2. [奔跑吧 Linux内核][学习记录]编译内核-实验1-2-[环境以及参考]

    1.下载的版本 VMware  workstation player v16.2.4 Ubuntu v22.04.1 Linux kernel v5.19 2.参考的文章 环境安装 [干货]win10 ...

  3. 编译linux内核分区,Ubuntu编译内核及grub的一些笔记

    最近心态不稳定,不怎么想发表文章,但看了看之前写了的笔记,想想还是整理出来吧,其实我写文章,也有一部分原因是为了心里的慰藉--当年游戏打不过别人,关注点便转向其它方面.这里整理的是以前编译内核.引导启 ...

  4. 新增linux驱动并重新编译内核,【转】配置并编译内核[更新到linux-2.6.29.2]

    有关内核精简的内容,看3楼. 一.下载源代码和编译软件准备下载内核源代码:http://www.kernel.org/ 注意,点击2.6.29内核的F版,即完整版. 如果你懒得去网站点联接,运行下列命 ...

  5. Linux实验 | Ubuntu20.04编译内核并添加一个系统调用

    实验环境 Ubuntu 20.04 LTS VMware Workstation Pro 16 Linux Kernel 5.10.2 存储空间至少留55GB,我第一次做就因为空间不够编译失败,最后编 ...

  6. 【LinuxOS学习】编译内核

    记录原内核版本 alin@alin:/usr/src/linux-5.15.26$ uname -a Linux alin 5.13.0-30-generic #33~20.04.1-Ubuntu S ...

  7. 学习LSM(Linux security module)之二:编写并运行一个简单的demo

    转自:cnblog 各种折腾,经过了一个蛋疼的周末,终于在Ubuntu14.04上运行了一个基于LSM的简单demo程序. 一:程序编写 先简单的看一下这个demo: //demo_lsm.c #in ...

  8. 内核管理 之 编译内核操作流程 ──为新手指南

    作者:北南南北 来自:LinuxSir.Org 提要: 编译内核主要是通过内核实现某些功能,比如iptables 需要内支持:所有的硬件的支持也是通过内核实现的:本文只是简单的给初学者讲一下编译内核的 ...

  9. 内核编程入门——编译内核

    Linux内核编译安装笔记 内核版本与下载 版本号 4.9.16 下载地址 预备知识 menuconfig与Makefile Linux内核根目录下的scripts文件夹 scripts文件夹存放的是 ...

  10. 【pygame学习+实战】第一篇:游戏最小系统

    14天学习训练营导师课程: 李宁<Python Pygame游戏开发入门与实战> 李宁<计算机视觉OpenCV Python项目实战>1 李宁<计算机视觉OpenCV P ...

最新文章

  1. 第100天:CSS3中animation动画详解
  2. 软件项目管理的内在定律
  3. 你一定听过这些不太标准的技术圈发音...
  4. dedecms提取某栏目及子栏目名称到首页怎么弄
  5. 2017上海金马五校 购买装备 贪心+二分Check
  6. 5404. 用栈操作构建数组
  7. 分数加减法 http://acm.nyist.net/JudgeOnline/problem.php?pid=111
  8. (43)Xilinx RAM IP核配置(四)(第9天)
  9. 幸运抽奖游戏系统带后台源码
  10. linux启动和grub修复
  11. 【全面详解】影响酐铁性能的多种元素
  12. 空间金字塔模型与池化
  13. 前端Javascript第一天知识点:数据类型(重要)
  14. 潜在数学中 放眼数学外——记中国科学院院士、复旦大学教授李大潜zz
  15. 对 COMP 通证经济模型的一般性评价
  16. 数据结构、数据、数据元素、数据项的区别
  17. c++ 字符串流 sstream(常用于格式转换)
  18. 线条边框简笔画图片大全_每天学一幅简笔画生活小物简笔画图片大全!
  19. 详解Java操作符 instanceof
  20. 框架Framework

热门文章

  1. Oracle 12c PDB数据库的基本操作积累
  2. WinPE 安装系统
  3. 安卓自定义Toast的原理及实现
  4. android toast 怎么用,Android学习 Android Toast的使用
  5. SYBASE公司的PowerDesigner下载与安装
  6. android11 tts,Android 11 使用 TextToSpeech 实现文字转换语音 相关 bug:speak failed: not bound to TTS engine...
  7. 综合影响力模型InfG算法
  8. 动易html在线编辑器,动易CMS静态页调用FCK编辑器的代码
  9. 【DBA | IT人生】数据库解惑系列
  10. linux权限百度贴吧,api接口权限控制