自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(60)
  • 资源 (3)
  • 收藏
  • 关注

原创 计算机组成与设计 - 硬件/软件接口 - 第一章

今天开始看这本书,后续都是读书笔记。看的是ARM版。第一章的标题是:计算机的抽象与技术1.1 引言这部分主要概括了计算机的诞生给人类的发展带来的贡献,并且在农业革命、工业革命之后,促进了人类的第三次革命--信息革命,这次革命影响深远,诞生了很多之前只存在于科学幻想中的产物,如车载计算机,手机,人类基因项目,万维网以及搜索引擎等。1.1.1 计算机应用的分类和特点所谓计算机应用的分类,就是按照不同的使用场景,把计算机分为几类。比如个人计算机,服务器,嵌入式计算机等。个人计算机.

2021-02-28 18:17:25 609

原创 计算机体系结构量化方法第六版-chapter 1

从今天开始阅读这本书,并做阅读笔记,本博是第一篇。

2020-08-08 23:00:58 648

原创 Memory Management [LKD 12]

kernel中和user space存在很大不同,从user space角度看,分配/释放内存易如反掌,即便失败了也容易处理,kernel里面不一样。比如有些kernel code不允许sleep,或者失败的时候难以处理等。考虑到kernel种种的复杂性,就需要轻量级效率高的内存管理方式。Pages...

2020-05-28 23:11:36 230

原创 An Introduction to Kernel Synchronization [LKD 09]

kernel中需要对可能被多个thread同时访问的share data做保护,也就是互斥访问,这里说的多个thread,并不只是传统的kernel thread的概念,还包括process(task),interrupt handler,bottom half,以及kernel thread。也就是说凡是能够执行的单元,这里统称为thread。...

2020-05-28 22:46:51 119

原创 Bottom Halves and Deferring Work [LKD 08]

基于kernel 4.15讲解interrupt下半部的实现

2020-05-24 17:34:59 318

原创 Interrupts and Interrupt Handlers [LKD 07]

Interrupts中断是hardware device用来通知CPU的一种机制。在系统上,连接着很多的外设,这些外设速度很慢,并且随时会产生数据需要CPU处理,CPU作为高速运行的部件,不能一直等着外设产生数据,为了提高效率,采用了中断这种机制。当外设需要CPU处理数据时,就向CPU发送电信号,CPU收到电信号以后,就知道哪个设备需要处理了,这个电信号就是中断。中断并不是直接发送给CPU,而是先发送到interrupt controller,也就是中断控制器(一般是8259A),所有的外设都把中断

2020-05-19 23:34:55 947

原创 Kernel Data Structures [LKD 06]

关于kernel中常用的数据结构,这里也不再说了,可以参考本blog中LDD3中相关的章节。

2020-05-18 23:23:39 178

原创 System Calls [LKD 05]

无论什么系统,都会向user space提供一些interface,用来和kernel系统交互,从而可以实现某些特定功能,比如访问硬件,获取系统资源等等。通过定义好的interface访问系统,有助于系统的稳定性。Communicating with the Kernel系统调用是位于用户态程序和kernel/hardware的中间层,这个中间层有三个目标:1. 向user space提供统一的硬件抽象;2. 保证系统的安全性和稳定性;3. 可以实现向用户提供虚拟系统(虚拟内存,虚拟地址

2020-05-18 13:21:55 212

原创 Process Scheduling [LKD 04]

前面一章讲的是process,这一章讲process schedule。进程调度的主要工作就两个:选哪个process开始执行,以及让它执行多长时间。Multitaskinglinux是多任务操作系统,如果有SMP,就有多个process同时在执行,如果是单核,就只有一个process执行。多任务操作系统分为两类:cooperative multitasking和preemptive multitasking。大多数多任务系统都是preemptive multitasking,也就是抢占式的多任

2020-05-15 13:27:26 380

原创 Process Management [LKD 03]

今天开始读Linux Kernel Development这本书。

2020-05-05 16:40:02 297

原创 Debugging Techniques [LDD3 04]

kernel相较于user,debug起来更加困难,原因有很多,比如kernel中代码的执行是并发的,靠event来驱动;而且kernel一旦出现了bug,很容易把整个系统搞挂,导致后面的现场无法trace,本章就介绍了一些kernel中的debug技巧。Debugging Support in the Kernelkernel的发行版都是production code,也就是说里面包含的...

2020-04-20 22:41:39 134

原创 Memory Mapping and DMA [LDD3 15]

Memory Management in LinuxAddress TypesLinux kernel中有很多的地址类型,比如最简单的就是虚拟地址和物理地址。在用户程序中看到的地址都是虚拟地址,和硬件使用的物理地址不同。kernel中的地址类型如下:User virtual addressesuser space programmer看到的地址就是用户态虚拟地址,可能是32bit,...

2020-04-15 13:08:20 740

原创 Linux kernel slub debug

在device driver开发的过程中,有时候会碰到memory相关的问题,比如memory leak,use after free,out of boundary,double free等等。因为device driver运行在kernel环境,kernel是一个global的runtime,driver分配或者释放的memory都是由kernel负责管理,而且所有的device driver...

2020-04-13 14:26:50 1181

原创 The Linux Device Model [LDD3 14]

kernel中的设备模型分为如下几种:Power management and system shutdownCommunications with user spaceHotpluggable devicesDevice classesObject lifecycles以一个鼠标为例,看一下它的设备模型:这个一个简化的模型,设备模型本身比较复杂,kernel内部已...

2020-04-12 18:56:58 291

原创 PCI Drivers [LDD3 12]

因为很多device都是PCI device,所以本章重点看一下。PCI(Peripheral Component Interconnect)。首先明确一点,PCI是总线类型,总线有两种接口类型组成,electrical interface和programming interface,软件层面都属于programming interface。The PCI InterfacePCI由一...

2020-04-11 11:48:47 340

原创 Data Types in the Kernel [LDD3 11]

kernel中各种各样的数据结构,主要三类:1, int等标准的C类型2, 表明大小或者长度的类型,如u32等3, kernel自己的结构体,如pid_t等

2020-04-11 11:02:55 114

原创 Interrupt Handling [LDD3 10]

device的IO region可以用来控制device,但是还不够。一个device,往往会有外界有交互,当外界发生了某个事件,需要device做出某种响应,driver也需要做处理。那就要有一种机制,让device能够通知到driver,这就是中断的作用。driver能做的,其实就是实现一个handler,当device中断产生时,handler能够正确处理这个中断就可以了。在讲中断之前,...

2020-04-08 22:58:37 380

原创 Communicating with Hardware [LDD3 09]

本章开始讲一些跟hardware有关的操作,比如I/O port,register等。device driver的角色要清楚,它只是中间层,向上有kernel,user application,向下就是actual hardware。作为driver,核心功能必然是驱动硬件。I/O Ports and I/O Memory每一个外设都要通过register来控制,大多数设备都有不止一个...

2020-04-08 13:19:34 197

原创 Allocating Memory [LDD3 08]

本章讨论从kernel分配memory的同样方法,并尽可能与架构无关。kmalloc相对来说,是最简单的分配memory的方式,因为用法和user mode的malloc非常相似。kernel的kmalloc分配的memory在物理地址上是连续的,并且里面包含了随机的数据,需要使用者自己清零。#include <linux/slab.h>void *kmalloc(size...

2020-04-06 22:50:57 375

原创 Time Delays and Deferred Work [LDD3 07]

kernel提供了一些跟时间管理相关的函数,device driver中往往需要这些函数来实现driver的部分功能。1, 测量时间和比较时间2, 如何获取当前时间3, 延迟某些操作,直到某个时刻4, 异步函数的调度整个kernel的运行非常的依赖与时间,因为kernel里面很多的工作需要做同步,如果计时器不准确,那kernel运行起来就不可控了。kernel的时间需要靠硬件的...

2020-04-05 17:01:31 192

原创 Advanced Char Driver Operations [LDD3 06]

本章讲的是driver的高级操作,比如:1, 实现了ioctl,device driver可以满足user mode一些特定的操作。2, 和user mode做好sync的几种方式。3, 如何让process进入sleep,以及如何wake up。4, 非阻塞IO操作,以及读写完成以后如何通知user mode。...

2020-04-04 11:33:36 154

原创 Concurrency and Race Conditions [LDD3 05]

Concurrency and Its Management并发和竞争条件,这个计算机操作系统里经典话题,只看文字体会不出什么,如果真正做过devcie driver的人都会深有体会。并发是一个很复杂的场景,复杂到没有人能预测当前的code会是怎么样的环境下执行,看似简答的device driver code,也许正在执行的时候因为时间片用完,CPU被切走了;可能中断发生,CPU处理中断去了;...

2020-04-01 23:23:45 132

原创 Char Drivers [LDD3 03]

本章开始讲解char device drivers.在linux中设备可通过文件进行访问,在/dev目录下,有很多device,通过ls -l可以看到这些device有major/minor number。majoy number用来表明该device和哪个driver关联,minor number被kernel用来确定当前被使用的是哪个device,因为同一个driver可以驱动多个devi...

2020-03-30 13:28:07 228

原创 Linux 学习书籍列表

记录一下准备看的书:1. Linux Device Driver 3rd Edition //在看2. Linux 内核设计与实现3. 深入理解Linux内核4. 深入Linux内核架构

2020-03-29 10:39:37 115

原创 Build and Run Modules [LDD3 02]

模块化是Linux kernel driver的立身之本,几乎所有的device driver都是module driver,在kernel启动的时候动态加载,学会如何编写module driver是编写device driver的必修课。#include <linux/init.h> #include <linux/module.h> MODULE_LICENS...

2020-03-27 22:43:40 310

原创 ubuntu获取特定版本的package

有时候需要安装特定版本的package,如果自己找source code来build会比较麻烦,如果能用apt install来安装,岂不是很方便。操作之前,先update:$sudo apt update根据包名,获取当前操作系统支持的package 版本:$apt-cache policy xserver-xorg-core-hwe-16.04类似于下面的输出:x...

2020-03-26 14:31:27 199

原创 ubuntu kernel panic查看源文件

在驱动开发中,经常会碰到kernel panic的问题,如果快速和高效的定位出问题的位置至关重要。kernel panic出现的位置有两个,一种是在kernel里面,一种是在device driver里面,根据kernel panic的call stack可以看出来,定位源文件的方法也是一样的。首先要有对应的debug symbol,如果是在linux kernel里,就需要安装对应版本的sy...

2020-03-26 14:21:05 517

原创 ubuntu获取发行版linux kernel的debug symbol

有时候碰到了kernel panic,如果stack在linux kernel里,那就需要有linux kernel的debug symbol,如果你的kernel是release的,那就可以直接下载symbol就可以了。1. 从ubuntu keyserver获取keyubuntu 16.04及以后的系统:$sudo apt-key adv --keyserver keyserve...

2020-03-26 13:46:06 1163

原创 ubuntu 发行版 package source code如何修改和build

如何获取source code可以参考这一篇文章。首先需要确认系统里有quilt这个工具,如果没有:$sudo apt install quilt进入source code根目录,在修改source code之前需要创建patch。$quilt new my_patch.patch然后把需要修改的文件告诉quilt:$quilt add my_file_need_modif...

2020-03-26 13:36:01 355

原创 ubuntu 获取 package source code

ubuntu是开源系统,系统里的所有package也都是开源的,如何方便的获取package的source code?1. 修改/etc/apt/sources.list,打开deb-src (默认是注释掉的)2. sudo apt update //更新src source的源3. 获取package 名字在获取source code之前,你需要知道package的名字,可以...

2020-03-26 13:12:11 645

原创 Linux GRUB

通过修改GRUB里控制linux kernel的行为,修改/etc/default/grub的GRUB_CMDLINE_LINUX,添加所需内容,比如:console=tty0 console=ttyS1,115200n8 //可以打开kernel的串口打印intel_iommu=on //可以打开kernel的IOMMU,需要有IOMMU设备支持如果安装有多个系统,可以修改...

2020-03-26 12:58:37 213

原创 introduction to device drivers【LDD3 01】

做Linux下驱动开发有段时间了,但是有时候对Linux kernel涉及到的部分依然不甚明了,所以打算再把kernel相关的一些书籍过一遍,同时分享下自己的理解。既然是做driver,就从ldd3开始吧。今天是第一篇,从导论开始吧,虽然看上去导论很浅显,但是往往能起到提纲挈领的左右,有助于对device driver有个全盘的了解。Linux kernel虽然复杂和庞大,但是最核心的部分仍然...

2020-03-24 23:36:33 270

转载 Learning Path for Machine Learning

Learning Path for Machine Learning数学基础机器学习必要的数学基础主要包括:多元微积分,线性代数Calculus OneCalculus: Single VariableMultivariable CalculusLinear Algebra统计基础Data Analysis and Statistical Inference|课程笔记Introduct

2016-06-21 16:46:38 532

原创 在安卓模拟器中运行OpenGLES相关的App出错

以安卓官方的Sample Code为例,在调用setRenderer(new MyGLRenderer());之前,需要调用setEGLConfigChooser(8,8,8,8,16,0);

2014-03-03 15:06:49 1080

原创 implementation of General Sort Algorithm - mark

#include using namespace std;void print(int value [], int length){ for (size_t i = 0; i < length; i++) { cout << value[i] << " "; } cout << endl;}void exchange(int &a, int &b){ int tem

2013-10-08 15:55:09 580

原创 由NT Service中调用SendInput模拟键盘鼠标事件了解到的

//TODO

2013-05-09 16:23:50 1007

转载 驱动程序与应用程序之间的通信

驱动程序必须与应用程序进行通信,才能最终达到应用程序控制设备的目的,不然驱动有QIU用。要通信就涉及到3个方面: 1.应用程序与驱动程序通信2.驱动程序与应用程序通信3.数据传输下面分别讨论1。应用程序与驱动程序通信1-1 应用程序实现与驱动通信的过程: ---用CreateFile打开设备,然后用DeviceIoControl和驱动通信,包括从驱动读数据和写数据2

2012-11-05 15:25:49 907

原创 C++实现多线程安全的单体模式(Singleton)

单体模式算是最简单的设计模式,不考虑多线程,我们可能会写出这样的代码:class Singleton{public: static Singleton* getInstance();protected: Singleton(){}; ~Singleton(){};private: static Singleton* Instance;};Singleton* Single

2012-09-19 22:54:34 3193

原创 C++ 二叉树的构建,先序/中序/后序的递归/非递归实现

//BinNode.h#ifndef BINNODE_H#define BINNODE_Hclass BinNode {public: BinNode():data(0),lchild(0),rchild(0){}; BinNode *lchild,*rchild; char *data;};#endif//BinTree.h#ifndef BINTREE_H

2012-04-03 13:00:42 1755

原创 内存映射

使用了内存映射,记录一下。文件内容很大时,如果直接使用fopen等标准I/O的话效率会很低,因此考虑使用内存映射的方式来实现大文件到内存的映射。个人对内存映射理解的不是很深入,下面是来自百科的一段话:内存映射文件与虚拟内存有些类似,通过内存映射文件可以保留一个地址空间的区域,同时将物理存储器提交给此区域,只是内存文件映射的物理存储器来自一个已经存在于磁盘上的文件,而非系统的页文件,

2011-12-27 16:23:49 674

Understanding The Linux Virtual Memory Manager

讲解linux kernel中的virtual memory management,作者gorman,linux kernel官方推荐

2020-04-18

TLB 4.2破解版

TLB(True Launch Bar),用于美化任务栏的强大工具……

2010-04-24

win7主题for Leopard

win7下模仿MAC X OS snow leopard..

2010-04-24

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除