- 博客(15)
- 资源 (4)
- 收藏
- 关注
原创 单向链表的简单使用
一、单向链表的概念 单向链表是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始。链表是使用指针进行构造的列表,并且是由一个个结点组装起来的,因此又称为结点列表。其中每个结点都有指针成员变量指向列表中的下一个结点,head指针指向第一个结点称为表头,而终止于最后一个指向nuLL的指针。 结点的数据结构typedef struct _LINK_N
2016-09-28 20:52:25 14929 2
原创 函数指针简介
一、什么是函数指针 我们都知道,数组名就是指向数组第一个元素的常量指针。同理,对于一个函数而言,函数名也是指向函数第一条指令的常量指针。而编译器要做的就是在程序编译之后,为每个函数分配一个首地址,即该函数第一条指令的地址。一般情况下,我们可以用一个指针来保存这个地址,而这个指针就是函数指针,该指针可以看作是它指向的函数的别名,所以我们可以用该指针来调用这个函数。 二、如
2016-09-26 21:52:04 351
原创 中断下半部之工作队列
一、中断的顶半部和底半部 设备的中断会打断内核中进程的正常调度和运行,而系统对更高吞吐率的追求势必要求中断服务程序尽可能地短小精悍。但是,这个良好的愿望往往与现实并不吻合。在大多数真实的系统中,当中断到来时,要完成的工作往往并不会是短小的,它可能要进行较大量的耗时处理,由于中断的优先级最高,这时候就会影响到其他进程的实时性。 为了在中断执行时间尽可能短和中断处理需完成大量工作之
2016-09-24 16:03:49 2527 1
原创 SD卡、TF卡、MMC卡以及eMMC芯片的介绍
一、SD卡 1、简介 SD卡为Secure Digital Memory Card, 即安全数码卡,是一种基于半导体快闪记忆器的新一代记忆设备。它在MMC的基础上发展而来,增加了两个主要特色:SD卡强调数据的安全,可以设定所储存的使用权限,防止数据被他人复制;另外一个特色就是传输速度比2.11版的MMC卡快。 2、外观及引脚定义 3、特性
2016-09-23 21:25:01 40615 3
原创 循环队列的c语言实现
一、什么是循环队列 1、基本概念 队列就是一个能够实现“先进先出”的存储结构,队列分为链式队列和静态队列。静态队列一般用数组来实现,但此时的队列必须是循环队列,否则会造成巨大的内存浪费;链式队列是用链表来实现队列的。说白了循环队列就是一个数组,我们把这个数组当成首尾相连来使用(写到数组的末尾后从头开始写)。 2、结构体typedef char Item;
2016-09-23 21:04:46 6750 1
原创 initramfs文件系统的介绍与制作
一、什么是initramfs文件系统 initramfs最初的想法是Linus提出的,把cache当作文件系统装载。他在一个叫ramfs的cache实现上加了一层很薄的封装,其它内核开发人员编写了一个改进版tmpfs,这个文件系统上的数据可以写出到交换分区,而且可以设定一个tmpfs装载点的最大尺寸以免耗尽内存。 initramfs就是tmpfs的一个应用。 ramdisk是一
2016-09-23 20:55:17 6142
原创 ramdisk文件系统的介绍与制作
一、文件系统与根文件系统 1、文件系统 文件系统是操作系统用于明确存储设备(常见的是磁盘,也有基于NAND Flash的固态硬盘)分区上的文件的存储方法和数据结构,即在存储设备上组织文件的方法。 看了这个概念如果有些懵,下面用两个例子来说明。 a、ext2文件系统 一个分区格式化成ext2文件系统后,分区里会
2016-09-23 20:21:57 13665 1
转载 netfilter:开发一个match模块
一、说明 下图说明了Netfilter模块是如何运行的,它指出我们需要开发两个东西,一个是用户态的共享库so,一个是内核态的内核库ko。命名规则有讲究,如果模块叫Mymodules,那么内核态源代码一般命名为ipt_Mymodules.c,头文件为ipt_Mymodules.h,用户态源代码为libipt_Mymodules.c。 用户态和内核态的模块各有什么作用?用户态的
2016-09-20 20:46:39 1548
转载 netfilter:开发一个hook函数
一、什么是hook函数 netfilter架构其实就是在一个packet流经系统时的多个关键点处设置了钩子,程序员可以为每一个钩子点注册一个监听器(即钩子函数,就是在packet流经这个钩子点时的一段处理代码),钩子函数将决定packet的下一个动作是什么!在钩子函数的代码最后需要决定netfiler框架接下来需要怎么处理packet,可以返回以下5种值: NF_ACCEP
2016-09-20 20:02:15 1583
原创 等待队列的简单使用
一、什么是等待队列 1、概念 等待队列是一种实现阻塞和唤醒的内核机制,很早就作为一个基本的功能单位出现在Linux内核中,它以队列为基础数据结构,与进程调度机制紧密结合,能够用于实现内核中的异步事件通知机制。 2、数据结构 a、等待队列头 struct __wait_queue_head {
2016-09-20 19:39:15 8124
原创 驱动调试之proc文件系统
一、思维导读 我们知道在/proc目录下存在一些文件,我们可以使用cat、echo命令来查询和设置一些系统的信息(比如查看内存的信息和cpu的信息等),可见/proc目录下的文件提供给我们和内核交互的功能。那么如果我们的驱动也有对应的proc文件,我们就可以和驱动进行交互,实时读取和修改驱动中变量的值,这样一来驱动调试就非常方便了!本文会给出proc的一些基本概念来加深对proc文件系统
2016-09-20 19:18:00 2528
转载 iptables防火墙原理详解
原文地址http://seanlook.com/2014/02/26/iptables-example/1. netfilter与iptablesNetfilter是由Rusty Russell提出的Linux 2.4内核防火墙框架,该框架既简洁又灵活,可实现安全策略应用中的许多功能,如数据包过滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address Tra
2016-09-19 19:20:58 6152
原创 container_of宏介绍
1、功能 根据一个结构体变量中的一个域成员变量的指针来获取指向整个结构体变量的指针。 2、定义 #define container_of(ptr, type, member) ({ \ const typeof( ((type *)0)->member ) *__mptr = (ptr); \
2016-09-18 21:41:21 589
原创 select机制的驱动实现及原理
一、驱动实现select机制的步骤 1、首先初始化一个等待队列头 2、在驱动中实现poll函数,该函数只需做两件事情 a、使用poll_wait()函数将等待队列添加到poll_table中。 b、返回描述设备是否可读或可写的掩码。 3、在驱动的相应地方调用wake_up()函数,唤醒等待队列。 两点说明:
2016-09-18 20:40:40 3883 2
原创 select函数使用浅析
一、函数原型及参数说明 int select(int maxfdp, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); 返回值 : 负值:select错误,正值:某些文件可读写或出错,0:等待超时,没有可读写或错误的文件。 maxf
2016-09-18 19:32:58 6133
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人