自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(114)
  • 资源 (2)
  • 收藏
  • 关注

原创 C语言的attribute机制

在Linux内核中经常会遇到这么一类的定义:就是在函数、变量、或者数据类型里面添加__attribute__,对于内核的初学者来说,往往不懂这些定义是什么意思,遇到此类的定义往往需要查找半天,导致学习进度延误。下面就从__attribute__的作用,约束方法以及使用方法和使用实例上来给大家讲解。__attribute__的作用: 设置函数、变量以及数据类型的属性。之前大家可能会遇到过:...

2019-11-06 19:03:29 3375

原创 解决ld可以链接并且生成可执行文件但是执行不了可执行文件问题

问题现象:如下代码://file name: test.c#include <stdio.h>#include <stdlib.h>int main(void){ printf("hello world\n"); exit(0);}对其执行:gcc -S test.cas -o test.o test.sld -o t...

2019-08-20 09:52:32 1184 5

原创 gnu编译器指定函数入口

实验环境:ubuntu 14.04 i386实验代码:#include <stdio.h>#include <stdlib.h>int teststart(void){ printf("hello world\n"); exit(0);}实验目的:实现teststart 代替main函数作为函数执行入口点。实验过程...

2019-08-19 11:01:44 1006 2

原创 Linux内核系统调用原理

最近在研究X86汇编,经过研究发现在Linux中使用汇编调用诸如read/write/open/close etc的系统调用都是如下格式:# this is for testing write.section .dataoutput: .asciz "the test string\n"output_len: .int .-output.section ...

2019-07-28 18:09:39 480

原创 Linux VFS文件系统 ----mount命令介绍(二)

在上一篇文章里面介绍了mount命令的基本应用,这篇文章主要介绍mount命令的复杂应用:shared subtree(共享子树)。所谓的共享子树就是mount挂载的传播路径,可以这么理解。我们想象一下在不同的mount命名空间或者mount绑定文件夹(前提是文件夹是挂载点)的时候如果A被挂载在B下,在A里面又挂载或者绑定了一个设备或者文件,在B里面是否能够看得到呢?这就牵扯到一个挂载树的传播...

2019-05-24 14:07:44 870

原创 linux VFS文件系统 ----mount命令介绍(一)

mount翻译过来称为挂载,是linux 中比较重要的命令,尤其是对于文件系统来说,它是文件系统注册之后访问磁盘的基石。它可以将普通的目录文件或者挂载点或者磁盘文件挂载到目录供操作系统访问。1. 基本的mount命令在基本的mount命令介绍时候分为三部分:磁盘的挂载目录绑定远程计算机目录挂载(或者叫绑定)1.1 磁盘的挂载mount实现之初的目的很简单:挂载磁盘。通过mount操...

2019-05-24 09:24:53 813

原创 Linux块设备总结(九)向内核中增加通用磁盘操作

前一章我们介绍了通用磁盘结构体struct gendisk的申请操作,本章我们将要介绍申请完通用块结构体之后怎么把通用块结构体增加到内核空间去,并且使内核认识到:哦…这就是我们的磁盘啊! 使用此操作之后我们便可以随心所欲的操作我们的磁盘了。主要函数把通用磁盘结构体struct gendisk增加到内核的操作十分简单就是一个函数:add_disk。先说明一下这个函数的大体功能:add_disk...

2019-04-08 20:21:53 878

原创 Linux块设备总结(八)申请通用块设备操作

我们已经知道通用块层是一个内核组件,她处理来自系统中的所有块设备发出的请求。她的主要作用是:1.将数据缓存放在高端内存,2.通过一些附加手段显现所谓的零-复制模式3.管理一个逻辑卷LVM RAID等4.发挥大部分新磁盘控制器的高级特性。以上这些我们都不讨论,只讨论在内存中申请struct gendisk操作。申请gendisk操作非常简单,如下所示:struct gendisk *...

2019-04-07 12:45:18 381

原创 Linux驱动模型----class类的实现

设备模型的引入在Linux系统中存在成千上万的驱动代码,试想一下:每一个驱动对应着一个硬件设备,那样每增加一个硬件设备就需要重新修改驱动的所操作的硬件地址去适配这个硬件,这样有两个麻烦:1.对于驱动的适配修改增加了工作量。2.不利于后期统一维护,这样在大规模的系统中增加了不必要的工作量。所以就引入了驱动模型的概念,这样减少了驱动的适配的工作量。其主要思想是把硬件设备和驱动分离的设计概念。...

2019-04-06 14:44:27 833

原创 设备模型类的迭代器(struct class_dev_inter结构)

上一章我们讲解了struct klist结构,并且知道这个结构怎么使用的问题,这一章中我们讲解struct klist结构在内核中的具体使用,也可能是在内核中唯一使用klist结构部分----类-设备迭代器(class_dev_inter),也就是我们在文章题目中所说的struct class_dev_inter结构。首先说明一下类迭代器的使用场景:在内核中有一种设备模型为:类。每一个类设备模...

2019-04-03 21:42:34 536

原创 内核klist结构分析

进来学习块设备驱动时候偶然遇到在genhd_device_init中看到class_register调用中有关klist链表有关的问题,经过今天一天业余时间研究终于发现klist的重要作用,下面介绍有关klist有关的数据结构,函数,以及klist申请有关的一些函数。数据结构klist主要有一个链表头结点以及若干个链表节点组成的,主要数据结构如下:struct klist { ...

2019-04-02 20:59:27 611

原创 Linux块设备总结(七)块设备的注册

上一章中讲完了块设备的初始化,总体来说比较复杂,与其数据结构一起串讲会有一种比较豁然开朗的感觉。本章主要讲解块设备的注册入口,试想一下,在块设备注册过程中间没有入口我们怎么把块设备注册进入内核呢?我们的块设备的注册入口比较简单:register_blkdevint register_blkdev(unsigned int major, const char *name){ s...

2019-04-01 22:28:45 973

原创 Linux块设备总结(六)块设备子系统初始化

在上两篇博客中我们学习了块设备子系统数据组织结构,但是块设备子系统的总体上的初始化还没有涉及到,本章就开始学习块设备子系统的一系列初始化。块设备子系统简而言之是Linux中管理块设备的一个子系统,是Linux中一个重要的子系统,没有块设备子系统我们的硬盘,光驱,USB在我们的linux 系统中都不可能感知,更别提热插拔的USB了。...

2019-04-01 21:52:28 972

原创 Linux块设备总结(五)块设备数据的组织结构

在上一篇文章中《linux块设备总结(四) 块设备数据组织》[link][https://blog.csdn.net/weixin_37867857/article/details/88856550]我们看到了数组的组织结构,下面对于上一章中做一个总结,同时也会引申一个重要的数据结构struct gen_hd,同时也作为一个承上启下的作用,为以后我们介绍块设备的重要的函数做一一个承接。在上一篇文...

2019-03-31 15:37:00 677

原创 linux块设备总结(四) 块设备数据组织

回顾在[<Linux块设备总结(二)>][https://blog.csdn.net/weixin_37867857/article/details/88322091]中我们讨论初步认识了linux块设备的架构并且讨论了各个层的作用,下面我们讨论一下在Linux块设备的几个重要的块设备的数据组织形式。回顾一下[<Linux块设备总结(二)>][https://blog....

2019-03-28 20:01:15 1096

原创 LOOP块设备

在Linux系统中存在一种特殊的块设备,这种设备本身以一般文件的形式存在于一般文件系统中,但是又可以被制作成其他文件系统从而被mount上。这种理解方式比较绕,举个例子:在ext4文件系统中存在一个文件为loop_dev.img的文件其大小为1000Kib,但是其又可以作为一个独立的块设备被挂载在系统的某一目录下面,比如mount。这种设备也称作LOOP设备。本质上来说loop设备的文件盘以普通...

2019-03-24 21:09:33 475

原创 Linux块设备总结(三)

bdev文件系统在上一章中讲解了Linux块设备驱动架构以及块设备驱动的一些入门的部分,也提及这一章中主要讲解bdev文件系统。bdev文件系统是一个内核文件系统也叫做伪文件系统,在应用层或者叫做用户层是不可见的。这样对于读者来说理解起来比较吃力的,bdev文件系统实际上就是按照文件系统的组织方式来呈现给内核的,没有什么特殊的含义,如果说从功能上来说的话对于读者比较好理解:bdev文件系统主要...

2019-03-14 20:41:01 2002

原创 Linux块设备总结(二)

上一篇博客中《Linux内核块设备总结(一)》[link][https://blog.csdn.net/weixin_37867857/article/details/88316757]介绍了从qemu中启动增加块设备的方法。最后一步gdb调试中提及了blkdev_open函数的系统调用,但是只是提及了系统调用,并没有深度的去解析这个函数。只是我们提及在执行cat /dev/sda操作之后gdb调...

2019-03-07 22:44:04 3079 1

原创 Linux内核块设备总结(一)

在分析块设备驱动之前,整体规划如下: 1. 介绍qemu使Linux内核挂载块设备。 2. 介绍块设备驱动挂载过程。 3. 介绍块设备驱动运行过程。

2019-03-07 18:41:27 2849

原创 test73

待更新

2019-03-06 21:13:23 1469

原创 test72

待更新

2019-03-06 21:12:42 1457

原创 test71

待更新

2019-03-06 21:12:11 1460

原创 test70

待更新

2019-03-06 21:11:51 1538

原创 test69

待更新

2019-03-06 21:11:05 2158

原创 test68

待更新

2019-03-06 21:10:45 1485

原创 test67

待更新

2019-03-06 21:10:27 1472

原创 test66

待更新

2019-03-06 21:10:06 1489

原创 test65

待更新

2019-03-06 21:09:44 1443

原创 test64

待更新

2019-03-06 21:09:21 1521

原创 test63

待更新

2019-03-06 21:09:00 1501

原创 test62

待更新

2019-03-06 21:08:38 1526

原创 test61

待更新

2019-03-06 21:08:14 1443

原创 test60

待更新

2019-03-06 21:07:52 1553

原创 test59

待更新

2019-03-06 21:07:32 1599

原创 test58

待更新

2019-03-06 21:07:09 1559

原创 test57

待更新

2019-03-06 21:06:47 1514

原创 test56

待更新

2019-03-06 21:06:16 1459

原创 test55

待更新

2019-03-06 21:05:54 1613

原创 test54

待更新

2019-03-06 21:05:28 1444

原创 test53

待更新

2019-03-06 21:05:06 1582

linux内核字符设备驱动

描述了字符设备驱动的执行过程以及原理,以及struct file的执行过程

2018-10-22

linux内核模块思维导图

本资源是对于linux操作系统module_init的描述,如果写的不好的地方请指摘

2018-10-19

空空如也

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

TA关注的人

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