Linux内核学习(入门)
@HDS
NULL
展开
-
C标准库 POSIX库 glibc库有什么关系
C标准库 POSIX库 glibc库C 标准函数库(C standard library,缩写:libc)。标准函数库通常会随附在编译器上。windows系统和Linux系统下都可以尽情使用。是最基本的C函数库,也叫ANSI C。ANSI C共包括15个头文件。1995年,Normative Addendum 1 (NA1)批准了3个头文件(iso646.h、wchar.h和wctype.h)...原创 2020-03-16 22:18:54 · 5144 阅读 · 1 评论 -
Linux ELF装载过程及64位地址空间布局
Linux ELF装载过程及64位地址空间布局一个可执行文件被执行的同时也伴随着一个新的进程的创建。OS会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。一个可执行的文件包含可执行的二进制指令和待处理的数据。在可执行的文件的内部,划分出了一些专门的段,有...原创 2020-03-09 21:21:56 · 2270 阅读 · 0 评论 -
Linux可执行文件与进程的虚拟地址空间
Linux可执行文件与进程的虚拟地址空间一个可执行文件被执行的同时也伴随着一个新的进程的创建。Linux会为这个进程创建一个新的虚拟地址空间,然后会读取可执行文件的文件头,建立虚拟地址空间与可执行文件的映射关系,然后将CPU的指令指针寄存器设置成可执行文件的入口地址,然后CPU就会从这里取指令执行。一个可执行文件包含可被CPU执行的指令和待处理的数据,上CPU之前,指令和数据全部被翻译成成二进...原创 2020-05-03 18:33:31 · 927 阅读 · 0 评论 -
魔幻数字7C00
为什么BIOS在x86中将MBR加载到0x7C00中?x86架构BIOS引导加载程序中的奥秘“ 0x7C00”“ 0x7C00”首次出现在IBM PC 5150 ROM BIOS INT 19h处理程序中。0x7C00的起源为什么该CPU Monitor的引导加载程序将MBR插入“ 0x200”?问:谁决定“ 0x7C00”?-答:IBM PC 5150 BIOS开发人员团队问:“ 0x7C00 ...翻译 2020-03-09 18:06:24 · 851 阅读 · 0 评论 -
X86段页式内存寻址学习
X86段页式内存寻址学习Intel所有型号的处理器在启动时或者reset后,都处于实模式,而今几乎所有的操作系统都工作在保护模式下。实模式和保护模式都使用分段的方式管理程序的代码和数据,但是他们却有着本质的不同。实模式下的内存寻址8086/8088的时代没有保护模式的概念,它们送上地址总线的都是物理地址。8086的片外总线位宽一共20位,从AD0~AD19,这20位总线是被地址总线,数据总线...原创 2020-04-19 19:21:58 · 493 阅读 · 0 评论 -
内核模块打印task_struct的进程号,优先级,调度策略,状态,CPU和进程名
打印task_struct的进程号,优先级,调度策略,状态,CPU和进程名pcb.c#include <linux/kernel.h>#include <linux/module.h>#include <linux/init.h>#include <linux/sched.h>#include "policy.h"#include ...原创 2020-03-17 22:35:31 · 785 阅读 · 1 评论 -
使用sparse进行类型安全检查
Linux内核开发文档:Using sparse for typecheckingStack Overflow:What does the__attribute__((force)) do?原创 2020-05-07 12:00:19 · 247 阅读 · 0 评论 -
内核第一宏
内核第一宏list_entry()有着内核第一宏的美称,它被设计用来通过结构体成员的指针来返回结构类型的指针。现在就让我们通过一步步的分析,来揭开它的神秘面纱,感受内核第一宏设计的精妙之处。整理分析的思路list_entry()在内核源代码/include/linux目录下的list.h中被定义,如下:#define list_entry(ptr, type, member) \ ...原创 2019-08-29 13:45:38 · 208 阅读 · 0 评论 -
记录编写一个简单的内核模块
构造和运行模块的过程模块源代码 hds.c文件# include <linux/module.h> //任何模块都必须包含,定义了可动态加载到内核的模块所需要的必要信息# include <linux/init.h> //必须包含,包含了宏__init(指定初始化函数)和__exit(指定清除函数)# include <linux/kernel....原创 2019-07-05 15:30:40 · 3970 阅读 · 4 评论 -
在终端输出模块的打印信息
tail -f /var/log/kern.log 新开一个终端输入该命令,即可在终端中查看模块打印的消息tail -f 表示循环读取 /var/log/kern.log 文件中的消息并显示在当前终端。----解释来自牧野星辰如果想在当前终端输出模块打印的消息,就在当前终端中输入如下命令:tail -f /var/log/kern.log &仅仅是将这条指令放在当前...原创 2019-07-03 13:36:48 · 357 阅读 · 0 评论 -
Linux内核目录结构名称
今天要开启学习Linux内核的旅程了,Linux内核很庞大,在下载完内核源码树之后,会发现它是由很多目录组成,而大多数目录又包含更多的子目录。那么,在学习内核源码之前,我认为对内核源码树有一个大体的认识是必要的,至少了解下每个根目录都是包含什么类型的代码。下面给出内核源码树的根目录描述。下面的源码目录描述列表援引自由陈莉君老师所译的《Linux内核设计与实现》一书内核源码树的根目录...原创 2019-06-21 20:48:32 · 272 阅读 · 0 评论