- 博客(70)
- 收藏
- 关注
原创 centos8 内核热补丁kpatch制作详解
0x00 测试环境发行版:CentOS Linux release 8.0.1905 (Core)内核版本:4.18.0-305.10.2.el8_4.x86_640x01. 准备kpatch1.先从github上把kpatch工具下载一下git clone GitHub - dynup/kpatch: kpatch - live kernel patching2.进入到kpacth目录执行买这一步会安装好kpatch所需的依赖:source test/integrati
2022-01-10 14:49:03 2039
原创 关于用户进程页表和内核页表
普通用户进程的页表也是存在内核空间的。这很容易理解,比较页表没有VMA来对应。在应用进程创建的时候,task_struct->m_struct描述内存信息,mm->gpd指定页表基地址。页表的分配是通过调用内核伙伴算法接口分配到物理内存,内核在启动阶段已经创建了内核页表,用户进程的页表可以分为两个部分,其指定了不仅有0-3GB(传统32位系统)的用户空间映射(也可能还没建立映射),...
2020-03-20 18:58:06 2950
翻译 【翻译】ARM虚拟化软件和架构支持的设计,实现和评估
这是一篇论文:https://academiccommons.columbia.edu/doi/10.7916/D8D238J2/download学习ARM虚拟化非常好的材料,这里翻译了其中几个章节。------------------------------------------------------------------------------------------------...
2019-09-03 16:24:29 1310 2
原创 自旋锁的核心思想
1.背景在linux内核中,经常遇到自旋锁。自旋锁的核心思想是:在设置标记变量的时候,获取与设置整合为一个指令。避免在获取之后设置之前被打断,从而造成同时进入竞争区的问题。...
2019-08-12 10:02:49 200
原创 [翻译] Operating System-There Easy Pieces 4.进程的抽象
进程的抽象在本文中,我们将讨论操作系统为用户提供的最基本的抽象之一:进程。 非正式地定义一个进程非常简单:它是一个正在运行的程序。程序本身是一个没有生命的东西:它只是存储在磁盘上的一堆指令(也许还有一些静态数据),等待开始行动。 操作系统采用这些字节并使它们运行,将程序转换为有用的东西。事实证明,人们经常想要同时运行多个程序; 例如,您可能希望在笔记本或者PC上同时运行Web浏览器,邮件程...
2019-07-04 08:04:33 275
原创 vmtouch实现原理解析
vmtouch是一个很好用的小工具,可以用来查询文件是否在内存中的有缓存,也可以将文件导入缓存或者锁定缓存。工具源码:https://github.com/hoytech/vmtouch1.vmtouch的使用先来看看这个工具如何使用的2.vmtouch原理首先我们来看vmtouch.c文件,这个工具就这一个源码文件,可见有多简洁。main函数很简单,先进行参数...
2019-02-27 21:41:46 2709 1
原创 VFS机制-01概论
由于种种原因,公司内不能使用登录csdn,所有的技术类文档都保存在公司内部服务器上。现在趁春节放假这几天,可以在csdn上面记录一下我假期学习的内容了。这个假期一共十一天,打算学习一下Linux内核的VFS机制和块设备驱动原理。VFS就是虚拟文件系统,是Linux内核的一个完整的子系统。有了VFS之后,Linux就可以兼容各种个样的文件系统,比如Linux正统的ext4,基于flash的y
2017-01-25 22:19:40 754
原创 yaffs2 启动挂载流程
1.概述yaffs2是yaffs的改进,主要是为了支持2KB pagesize的Nand Flash。本文主要探究yaffs2在linux中的初始化以及挂载过程。2.初始化过程linux要使用yaffs2文件系统,或者说要支持yaffs文件系统,首先要再内核配置环节选择支持yaffs(当然如果内核源码内没有yaffs,还需要完成移植的过程)。首先看到yaffs_vfs.c这
2016-08-27 08:03:59 4613
原创 c指针在函数调用过程中的问题
#include #include int *c;void f(int *b){ int a = 10; b = &a; }int main(){ int tmp; f(&tmp); printf("%d\n",tmp); return 0;}上面这段代码打印的结果是:稍微改一下:#include #include int *c;void f(int
2015-12-01 09:34:04 830
原创 日常积累
使用gdb时出现的错误:没有符号表被读取。请使用 "file" 命令。gcc中-g选项是为了获得有关调试信息,要用gdb进行调试,必须使用-g生成二进制可执行文件,gcc -g example.c -o example
2015-11-16 15:56:24 536
原创 深入理解linux内核poll机制
深入理解linux内核poll机制前言:以下内容,部分参考网络资料poll机制实现的是多路io转接,简单讲就是多个文件进行监控,对应到应用层是select函数#include int select (int maxfdp1, fd_set *restict readfds, fd_set *restrict writefds,/ fd_set *restrict exp
2015-09-11 15:22:54 1775
转载 什么是进程上下文,什么是中断上下文
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间
2015-07-23 09:25:18 555
原创 无题
void write_number(uchar x,uchar y,uint num){ uchar t[10]; char i=0; if(y==0) write_com(0x80+x); else write_com(0xc0+x); if(num == 0) goto zero; while(num>0) { t[i] = num%10; i++; n
2015-04-23 16:14:52 557
原创 笔试之c语言
个人总结,欢迎指正~二分法:#include int main(){ int a[10]={1,2,3,4,5,6,7,8,9,10}; int num,max,min; printf("Input a num which you wang to find out\n"); scanf("%d",&num); max = sizeof(a); min = 0; whil
2015-03-20 18:22:51 598
转载 Linux 进程虚拟内存的问题
Linux中用户进程线性地址能寻址的范围是0 - 3G,那么是不是需要提前先把这3G虚拟内存的页表都建立好呢?一般情况下,物理内存是远远小于3G的,加上同时有很多进程都在运行,根本无法给每个进程提前建立3G的线性地址页表。Linux利用CPU的一个机制解决了这个问题。进程创建后我们可以给页目录表的表项值都填0,CPU在查找页表时,如果表项的内容为0,则会引发一个缺页异常,进程暂停执行,Linux内
2015-03-20 08:58:11 659
原创 s3c6410外部中断号与引脚问题
在编写Linux驱动程序时,我想用某一个引脚做外部中断。但是在调用int request_irq(unsigned int irq, void (*handler)(int irq, void *dev_id, struct pt_regs *regs ),unsigned long irqflags, const char * devname, void *dev_id)
2015-03-15 09:39:39 1761
转载 内核崩溃分析
oops是英语口语"糟糕"的意思,当LINUX 内核发生严重错误时,比如内存段错误时,将会提示一大段信息。就提示 Oops(也称 panic),因此得名,Oops提示信息相当多,包括出问题时的,各个常用寄存器的值,调用的堆栈,以及出错的可能原因1.oops 的格式 内核的文档里的详细的Oops的说明,的名字是 Documentation/oops-tracing
2014-12-24 22:34:23 1490
转载 进程上下文和中断上下文
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于内核空间
2014-12-21 10:49:30 555
转载 linux内核cdev_init系列函数(字符设备的注册)
内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:linux-2.6.22/include/linux/cdev.hstruct cdev { struct kobject kobj; // 每个 cdev 都是一个 kobject struct module *owner; // 指向实现驱动的模块 const
2014-07-12 15:19:12 889
转载 拷贝构造函数(浅拷贝、深拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。 #include iostream>using namespace std;class CExample {private: int a;pub
2014-06-15 14:00:23 685
转载 内存字节对齐
写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的变量总长度要大,这是怎么回事呢?讲讲字节对齐吧./******************************分割线如果体系结构是不对齐的,A中的成员将会一个挨一个存储,从而sizeof(a)为11。显然对齐更浪费了空间。那么为什么要使用对齐呢?体系结构的对齐和不对齐,是在时间
2014-06-15 09:21:56 547
转载 指针详解
指针的指针void FindCredit(int **);main() { int vals[]={7,6,5,-4,3,2,1,0}; int *fp=vals; FindCredit(&fp); printf("%d\n",*fp);
2014-06-02 13:45:33 902
转载 Qt中 int ,float ,double转换为QString
Qt中 int ,float ,double转换为QString有两种方法1.使用QString::number();如:[cpp]view plaincopyprint?long a = 63; QString s = QString::number(a, 10); //
2014-05-14 11:22:09 921
转载 linux设备文件和普通文件
很多人认为文件是一些存储在磁盘上的数据,但是Linux采用了一种更为抽象的方法。将设备抽象成文件。设备文件和普通文件一样具有文件名、另一个i节点号、一个文件所有者、一个权限位集合和最近修改时间。平时了解的和文件有关的所有内容都将被运用于终端和其他的设备。 普通文件,即常用的磁盘文件由字节组成,磁盘文件中的字节数就是文件大小。而设备文件是链接,不是容器。键盘和鼠标不存储点击数:)设备文件的i
2014-05-13 14:20:48 1513
转载 Qt4.7 在开发板上的中文显示问题
摘要: QT4.7.0在移植到开发板上的时候,中文支持是必不可少的,如何让QT支持中文,如何制作QT支持的字体文件,如何使QT UI编辑器中的字号与开发板中的字号一致。作者通过实验进行了一一验证。介绍: 1、初体验: QT程序中指明的字体和字号在/fonts目录下没有对应的字库文件时,QT会选择某一个存在的字库文件来显示;那么,如果你的系统中只有需要一种字体和字号,
2014-05-10 09:01:00 1146
转载 Qt, QT/E, Qtopia 的区别
Qt泛指Qt的所有桌面版本,比如Qt/X11,Qt Windows,Qt Mac等。由于Qt最早是在Linux中随着KDE流行开来的,因此通常很多人说的Qt都指用于Linux/Unix的Qt/X11。一般命名以qt-x11-opensource-xxx!QT/E -> Qtopia-core -> Qt-embedded-opensource(同一种鸟):Qt 在刚出现的时候,对于Linu
2014-04-20 09:52:37 825
转载 堆和栈的区别
一、预备知识―程序的内存分配 一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)― 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) ― 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态
2014-04-19 22:21:36 955
转载 t和printf的缓冲机制
众所周知,cout和buffer都是有缓冲的(网上很多把cout和printf混用出错归结为一个有缓冲,一个无缓冲,事实会在下面说明)cout和printf的输出是先从右往左读入缓冲区,再从top到bottem输出对,这里的缓冲区相当于堆 栈的效果a = 1; b = 2; c = 3;coutbuffer:|3|2|1|output:|3|2|
2014-04-19 16:33:34 1026
转载 linux驱动之 platform分析
z在设备驱动程序中经常会见到和platform相关的字段,分布在驱动程序的多个角落,这也是2.6内核中比较重要的一种机制,把它的原理弄懂了,对以后分析驱动程序很有帮助,下面简单介绍一下: 在linux2.6设备模型中,关心总线,设备,驱动这三个实体,总线将设备和驱动绑定,在系统每注册一个设备的时候,会寻找与之匹配的驱动。相反,在系统每注册一个驱动的时候,寻找与之匹配的设备,匹
2014-04-17 21:38:32 972
转载 关于 CONFIG_SERIAL_SAMSUNG_UARTS
1.在linux串口驱动程序中,在/drivers/serial/samsung.c里有这么一个定义CONFIG_SERIAL_SAMSUNG_UARTS,它的意思为串口数量,但是这个宏没有定义在.c或.h文件里,而是定义在/include/linux/serial/Kconfig里面。详细如下:config SERIAL_SAMSUNG_UARTSint
2014-04-14 20:39:11 1691
转载 程序员的自我修养
什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒
2014-04-13 15:24:27 902
转载 深入分析request_irq的dev_id参数作用
request_irq的作用是申请使用IRQ并注册中断处理程序。request_irq()函数的原型如下:/* kernel/irq/manage.c */int request_irq(unsigned int irq, irqreturn_t (*handler)(int, void *, struct pt_regs *), unsigne
2014-04-13 14:52:53 846
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人