这是在上篇博文的基础上又新增了一个任务,两个任务通过时钟中断交替运行。 编译器:nasm 虚拟机:bochs 操作系统:macosx github interrupt源码 参考:赵炯《Linux内核完全剖析》 init.s...

第十章 内核同步方法

内核

  

2019-11-09 20:19:58

原子操作 原子正数操作 定义一个 atomic_t 类型的数据方法很平常,你还可以在定义它时给它设定初值: 1 2 3 4 5 还可以用原子整数操作原子地执行一个操作并检查结果,一个常见的例子就是: 1 原子位操作 由于原子位操作是对普通的指针进行的操作,所以不像原子整数操作类型对应 atomic_t ,这里没有特殊的数据类型。 1 2 3 4 5 6 7 8 9 自旋锁 spin lock的特点...

上半部的局限性: 中断处理程序以异步方式执行,并且它有可能打断其他重要代码(甚至包括其他中断处理程序)的执行,因此中断处理程序应该越快越好。 如果当前有一个中断处理程序正在执行,在最好的情况下(如果IRQF_DISABLED没有被设置),与该中断同级的其他中断被屏蔽,在最坏的情况下(设置了IRQF_DISABLED),当前处理器上所有其他中断都会被屏蔽。因为禁止中断后硬件与操作系统无法通信,因此,...

Linux内核

内核

  

2019-12-31 10:55:08

Linux Kernel 单内核体系设计、但充分借鉴了微内核设计体系的优点,为内核引入模块化机制。 内核的组成部分: kernel:内核核心,一般为bzImage,通常在/boot目录下,名称为vmlinuz-VERSION-RELEASE kernel object:内核对象,一般放置在/lib/modules/VERSION-RELEASE 辅助文件:ramdisk uname命令 -n:显示...

升级Linux内核

内核

  

2020-03-25 11:47:51

升级Linux内核 要求为虚拟机 server0安装升级版的新内核: 步骤 步骤一:下载新版本内核的安装文件 1)确认新版内核的下载地址 如果给定的下载地址中未包含kernel-…rpm文件路径,则打开firefox浏览器,访问指定的网址(如图-5所示)。 在打开的网页上找到需要的内核文件,右击对应的链接,选择“Copy Link Location”复制下载地...

调整内核printk的打印级别

内核

  

2020-04-01 03:17:14

    有时调试内核模块,打印信息太多,可以通过修改 /proc/sys/kernel/printk文件内容来调整输出。数值越小,优先级越高。 以上四个值在kernel/printk/printk.c中定义,如下: 内核的日志等级: 示例:手动屏蔽所有的内核printk打印。...

编译内核其实本质上就是熟悉流程与配置的更改,本文暂时只介绍流程,对于更改,以后详谈。 一点要注意 :需要先安装arm-linux-gcc 交叉编译器!切记! 获取内核源码 如果你有开发板,那么商家大多会给你资料,其中就有对应该开发板SOC的linux内核,如果里面没有对应的linux内核源码,那么本文不适合你了,你需要移植或自己找对应的内核源码。 开始制作镜像 既然已经获得了源码包,经过ubunt...

内核对象HOOK

内核

  

2020-05-19 16:59:30

内核对象HOOK 内核对象的结构 首先我们来了解一下内核对象的基本结构,每一个内核对象都是由对象头和对象体组成,对象头都是一样的,对象体 不同的内核对象是不一样的。该结构体请参考内核结构体。 内核对象的获取 获取ObTypeIndexTable首地址, 地址在ObGetObjectType函数内部中出现,因此, 取函数首地址, 加上一定偏移就能得到该表的首地址.在win7 32系统下, 该表在函数...

3.2. 进程描述符 为了管理进程,内核必须对每个进程正在做什么有一个清晰的画面。比如,它必须知道进程的优先级、它是正在运行还是被某个事件阻塞、它的地址空间是多少、它被允许访问哪些地址等等。进程描述符发挥了这些作用,它是一个task_struct类型的结构,包含与单个进程有关的所有信息。正因为存放了这么多信息,进程描述符是非常复杂的。除了大量的包含进程属性的字段,文件描述符还包含若干个指向其他数据...

TI的LCD控制器驱动是非常完善的,共通的地方已经由驱动封装好了,与按键一样,我们可以通过DTS配置完成LCD的显示。下面,我们来讨论下使用DTS方式配置内核完成LCD驱动的思路。 (1)初步分析 由于TQ335x使用的芯片是AM335x,故仍然可以参考am335x-evm.dts。当然,am335x-evmsk.dts、am335x-beagbone.dts都可以。本文以am335x-evm.d...

printk

内核

  

2020-06-08 04:39:45

内核中共提供了八种不同的日志级别,在include/linux/printk.h 中有相应的宏对应 分别是: #define KERN_EMERG “<0>” /* system is unusable */ #define KERN_ALERT “<1>” /* action must be taken immediatel...

APUE 进程环境

内核

  

2020-06-24 14:23:18

本文使用golang的syscall,os,golang.org/x/sys/unix包 1.main函数 main是程序的入口,golang中也亦是如此 启动一个程序时启动例程负责从内核获取命令行参数和环境变量,维护到程序的内存布局中(后文描述) 2.exit 使程序主动退出,令退出码为指定值code,程序正常结束时返回码为0 (在一般的shell中使用$?获取) 执行exit时 会使标准I/O...

字符设备驱动(二)

内核

  

2020-06-26 06:58:03

在字符设备驱动(一)那节中,我们学习了一个字符设备驱动程序设计的大体框架。但是字符设备驱动是如何实现的呢,这节我们就来深入理解一下内核驱动是怎么和应用程序联系在一起的。 首先我们在linux中创建一个read_mem.c的文件,如下图。 然后对其静态链接 然后对其反汇编,并将其放到dump文件中 打开dump 找到read函数执行的部分,发现首先将各类参数放到通用寄存器r1—-r4中,...