目录
- 写在前面
- 整体环境
- 学习笔记
-
- 操作系统和内核简介
- `printf()`和`prinfk()`
- 应用层对内核的调用
-
- 从例子看原理:应用层的`write()`如何调用内核中的`write()`
-
- 调用过程实践
- 实现原理
- 学习笔记
写在前面
之前做项目的时候,有前辈告诉自己,要去学一下Linux内核,对很多方面都有帮助,现在闲下来,来花时间学一下这一部分的知识点,也算是一个学习笔记
目前跟着B站UP主——简说linux 的教程《Linux内核开发100讲》学习,链接如下:
简说linux个人空间
本章学习参考链接:
printk和printf的区别
《Linux内核设计与实现》
在学习的过程中,我也会对遇到的各种问题进行深一步学习, 从而总结知识点到博客当中,这就会出现内容可能会四处跳跃,但是这种跳跃符合我的学习过程。
整体环境
为了学习代码,我们需要一个一套Linux环境,因为为了方便自己记笔记和学习,没有用双系统,直接在windows10下面用VMware建了一个虚拟机进行试验。
开发环境:VMWare虚拟机 Ubuntu 18.04
Linux源码版本:linux4.9.229
学习笔记
这一章是关于Linux内核的一个总体印象,以及应用层和驱动层之间相互调用的逻辑关系。
操作系统和内核简介
在《Linux内核设计与实现》中认为,操作系统是指在整个系统中负责完成最基本功能和系统管理的那些部分。这些部分应该包括内核、设备驱动程序、启动引导程序、命令行Shell或者其他种类的用户界面、基本的文件管理工具和系统工具。
而内核时操作系统的核心所在,系统的其他部分都必须依靠内核这部分软件提供的服务,比如管理硬件设备、分配系统资源等等。
对于提供保护机制的现代系统来说,内核独立于普通应用程序,一般处于系统态,拥有受保护的内存空间和访问硬件设备的所有权限,这种系统态被保护起来的内存空间,统称为内核空间。
而与这个相对的是应用程序在用户空间执行。只能看到允许它们使用的部分系统资源,不能直接访问硬件,也不能访问其他人的内存范围。执行一个应用程序的时候,系统将以用户态进入用户空间执行。
系统中运行的应用程序通过系统调用来实现与内核通信。具体的图如下:
然后我们来运行这个运行这个程序
我们先按照最基本的C语言的流程,编译它。然后我们运行它
但我们发现它无法打开文件,返回以下错误
其原因是,虽然我们在内核里面注册了我们的内核驱动,但是我们在应用层里面没有建立这样的一个文设备件。虽然在现在的Linux内核可以自动生成这样的设备文件,但UP主给我们演示了具体的实现过程:
首先,我们需要创建一个设备文件,需要使用命令,其用法如下:TYPE是设备的类型,MAJOR和MINOR指的是主设备 和次设备
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!