
linux kernel learning
文章平均质量分 81
奔跑的码仔
心有多大,舞台就有多大
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Linux内核基础数据结构-双链表
链表概述链表作为一种基本的数据结构,得益于其简单的结构、优良的性能(双向链表的插入和删除复杂度都是O(1)),被广泛的应用于各种程序设计中。链表一般分为单向链表和双向链表。对于单向链表,其删除和插入的一般复杂度都是O(n),所以,工程上一般很少使用,下面介绍的所有链表都是双向链表。常见的双向链表数据结构定义如下:struct list_node_xxx{ struct list_node_xxx *prev,*next; //具体的数据,比如一个char数组 char data[100];};原创 2020-07-19 19:32:12 · 1221 阅读 · 1 评论 -
copy_{to,from}_user Vs memcpy
Linux地址空间熟悉Linux内核的开发人员都知道,Linux下的进程地址空间分为内核空间和用户空间,对于32bit系统来说,典型的空间划分为:1G(内核空间)+3G(用户空间),对于这种划分来说,内核空间地址范围:0xC000 0000 ~0xFFFF FFFF,用户空间地址范围为:0x0000 0000 ~ 0xBFFF FFFF。当然,为了需要,我们可以将地址空间配置成其他方式,比如2G:2G等等。Linux虚拟地址机制大家知道,Linux进程中使用的地址是虚拟地址,进程在操作这些地址时,MM原创 2020-06-29 23:01:10 · 2242 阅读 · 0 评论 -
Linux内核开发基础-低精度timer_list和高精度hrtimer定时器
Linux内核定时器开发-低精度和高精度定时器上篇文章讲解了如何正确的使用内核延时函数,在进行驱动开发时,可能会经常用到精确地延时操作。除此之外,如果要实现一个定时任务,那就需要用到定时器。作为一项基础功能需求,Linux内核提供了定时器相关的实现。下面就具体看一下,Linux内核所提供的定时器实现。定时器种类为了适应不同的应用场景,Linux内核提供了两种定时器:低精度和高精度定时器。低精度定时器基于硬件的周期性中断实现,其定时周期的粒度为1/HZms,例如,内核HZ为1000,那么低精度的定时器最原创 2020-06-18 09:54:02 · 4503 阅读 · 4 评论 -
Linux内核学习四库全书
原文出处:http://blog.youkuaiyun.com/21aspnet/article/details/6585602关于内核学习我建议不要上来就读内核而是先了解内核的构成和特性,然后通过思考发现疑问这时再去读内核源码。即先了解概貌在读局部细节。而且内核分成好多部分,不要只是按照顺序去读,应该针对某一部分比如内存管理或进程管理横向读几本书,这样可以理解很全面。Linux Kernel转载 2013-12-20 19:42:16 · 1192 阅读 · 0 评论 -
望闻问切诊断问题
本文出处:http://tech.uc.cn/?p=355概述广大攻城狮经常会遇到问题:用户投诉、告警、网页打不开等,如何快速诊断是解决问题的关键。诊断问题就像看病一样,应该多方面多角度观察,开阔思路,准确把握,避免误诊或进入死胡同,可借鉴一下中医的“望闻问切”。《古今医统》:“望闻问切四字,诚为医之纲领。”望闻问切是中医用语,就是指望诊,闻诊,问诊和切脉四转载 2014-01-18 21:39:58 · 1537 阅读 · 0 评论 -
虚拟网卡 TUN/TAP 驱动程序设计原理
原文出处:http://www.ibm.com/developerworks/cn/linux/l-tuntap/简介虚拟网卡Tun/tap驱动是一个开源项目,支持很多的类UNIX平台,OpenVPN和Vtun都是基于它实现隧道包封装。本文将介绍tun/tap驱动的使用并分析虚拟网卡tun/tap驱动程序在linux环境下的设计思路。tun/tap驱动程序实现了虚拟网卡转载 2013-12-18 20:33:44 · 3031 阅读 · 0 评论 -
PF_RING浅析
PF_RING架构PF_RING的主要框架包括如下几部分:内核数据包加速处理模块负责提供拷贝底层的数据包到PF_RING环中用户空间PF_RINGSDK负责透明的为用户空间应用程序提供PF_RING技术支持特殊定制的PF_RING相关的网卡驱动网卡驱动不通过linux内核任何的数据结构一大到进一步加强数据包的抓取效率的目的。PF_RING可以与任何NIC驱动程序原创 2014-05-19 19:47:42 · 8039 阅读 · 0 评论 -
Ubuntu 14.04 差点重装,崩溃!
1,Ctrl+alt+T启动终端或者Ctrl+alt+F1登录字符界面,执行以下命令重新安装Ubuntuunity:sudoapt-getinstallubuntu-desktopsudoapt-getinstallunitysudoapt-getinstallunity-commonsudoapt-getinstal原创 2014-09-21 20:45:34 · 2977 阅读 · 1 评论 -
Linux内核之pinctrl子系统
1. 前言2. 软件框架2.1. pinctrl-core2.2. pinctrl-driver2.3. pinctrl-client1. 前言众所周知,ARM SoC提供了十分丰富的硬件接口,而接口物理上的表现就是一个个的pin(或者叫做pad, finger等)。为了实现丰富的硬件功能,SoC的pin需要实现复用功能,即单独的pin需要提供不同功能,例如,pi...原创 2018-09-16 11:01:37 · 4454 阅读 · 3 评论 -
gpio-key驱动分析
文章目录前言测试平台架构DTS配置基本数据结构设备注册设备probe流程设备资源解析按键注册中断处理中断处理-top level中断处理-bottom level应用测试设备DTS配置gpio-keys驱动使能按键事件应用测试总结前言Linux内核中的gpio-keys.c(driver/input/keyboard/gpio-keys.c)统一了所有关于按键的驱动实现方式。其良好的代码架构可...原创 2018-09-29 09:30:40 · 10144 阅读 · 9 评论 -
Linux系统提供的time详解
Linux系统提供了很多关于time的处理API,这些API各自的功能和使用场景都有所不同。对于初学者有时会混淆它们,对于API的具体含义理解不到位。本文总结各类time相关的API的使用方式。分类的标准按照函数的具体功能进行划分。时间获取、设置time函数原型:time_t time(time_t *t);基本功能描述time()的基本功能为返回相对于UTC(1970-01-01...原创 2019-01-10 16:11:22 · 6906 阅读 · 0 评论 -
Linux 同步机制比较与联系
操作系统提供的同步原语包括:互斥锁、读写锁、条件变量、信号量,支持多任务的OS一般都会实现上述几种同步方式。Linux作为多任务、多用户系统,同样实现了上述几种同步方式。对于在Linux系统下编程的程序员来说,可能都或多或少的使用或者听说过这几种方式,对于它们的基本使用方式可能都大体的解了。但是,这里有一个问题,不知道大家是不是想过,系统为何会同时提供如此之多的同步方式,它们之间的区别和联系是什...原创 2019-01-08 16:41:23 · 958 阅读 · 0 评论 -
linux内核hmac-sha1使用
最近开发IPSec模块时,需要用到内核中hmac-sha1算法下面为hmac-sha1的简单使用方式#include #include #include #include #include #include static void hexdump(char *data, int len){ int i = 0; for(; i < len; i++){ if((len原创 2013-12-05 21:14:30 · 5663 阅读 · 0 评论 -
GCC编译优化指南
GCC编译优化指南作者:金步国原文出处:http://lamp.linux.gov.cn/Linux/optimize_guide.html版权声明本文作者是一位自由软件爱好者,所以本文虽然不是软件,但是本着 GPL 的精神发布。任何人都可以自由使用、转载、复制和再分发,但必须保留作者署名,亦不得对声明中的任何条款作任何形式的修改,也不得附加任何其它条件。您可以自由链接、下转载 2013-12-02 23:05:20 · 1611 阅读 · 0 评论 -
linux 内核学习之内核栈
内核栈不比用户空间的栈,在用户空间栈的大小可以很大,并且可以动态的增长。但是,在内核栈却小而固定。每隔进程的内核栈的大小取决于体系结构,同时业余编译选项有关。历史上,每个进程都有两页的内核栈。所以,在32位或64位体系机构的下,内核栈的大小分别为4kB和8kB。 在任意一个函数中,你都必须尽量节省栈资源。只要在具体的函数中让所有的局部变量的大小之合不超过几百个字节。在内核中,进原创 2012-12-31 15:07:17 · 1135 阅读 · 0 评论 -
Linux Why and How to use NetLink
Kernel Korner - Why and How to Use Netlink SocketBy Kevin He on Wed, 2005-01-05 02:00. SysAdmin Use this bidirectional, versatile method to passdata between kernel and user space.Due原创 2012-12-31 22:31:36 · 1219 阅读 · 0 评论 -
No module ata_piix found的解决方法
我升级CentOS内核到2.6.18时,make install 或者利用mkinitrd创建文件系统时提示No module ata_piix found,Device Drivers --> SCSI device support --> SCSCI low-level drivers --> [M] Serial ATA (SATA) support --> [M] Intel PIIX原创 2013-01-06 21:53:04 · 2054 阅读 · 2 评论 -
linux netem简介
netemBy Linux Foundatio... - November 19, 2009 - 10:23amnetworkingnetem provides Network Emulation functionality for testing protocols by emulating the properties of wide area原创 2013-01-11 23:52:05 · 4454 阅读 · 10 评论 -
Linux Netfilter简介
NetfilterFrom Wikipedia, the free encyclopediaJump to: navigation, searchNetfilterStable releaseLinux 3.1 / 2011-10-24Development statusActiveWritten inCO原创 2013-01-11 23:56:21 · 3390 阅读 · 0 评论 -
unlikely和likely的使用
首先,无论在何处,当我们遇到宏likely和宏unlikely时,都要明确一点: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value) 也就是说 ,当value值为真时执行if分支,为假时执行else分支,从阅读和理解代码的角度来看,是一样的!!! 以下为这两个宏的一般定义:#def转载 2013-01-20 16:27:03 · 2747 阅读 · 0 评论 -
linux内核 同步方法
1.完成变量(相当于条件变量)如果在内核中一个任务需要发出信息号通知另一任务发生了某个特定事件,利用完成变量(completion variable)是使两个任务得以同步的简单方法。2.BLK(大内核锁)一种用于完成Linux内核从最初的SMP向细粒度枷锁机制的过度的全局自旋锁。3.顺序锁2.6内核新引进的锁机制。它提供了一种很简单的机制,用于读写共享数据。其实现主要依靠一个序原创 2012-12-02 22:23:26 · 915 阅读 · 0 评论 -
Linux netfilter 深度解析-对比Cisco 的ACL
在前面0.1.本文不涉及具体实现,也不涉及源代码,不剖析代码0.2.本文不争辩Linux或者Cisco IOS不同版本之间的实现细节0.3.本文不正确处请指出Cisco无疑是网络领域的领跑者,而Linux则是最具活力的操作系统内核,Linux几乎可以实现网络方面的所有特性,然而肯定还有一定的优化空间,本文首先向Cisco看齐,然后从不同的角度分析Netfilter的对应特性,最终提转载 2013-01-20 18:01:14 · 1716 阅读 · 0 评论 -
进程地址空间的布局以及进程堆栈帧的结构
前言从逻辑上讲进程的堆栈是由多个堆栈帧构成的,其中每个堆栈帧都对应一个函数调用。当函数调用发生时,新的堆栈帧被压入堆栈;当函数返回时,相应的堆栈帧从堆栈中弹出。尽管堆栈帧结构的引入为在高级语言中实现函数或过程这样的概念提供了直接的硬件支持,但是由于将函数返回地址这样的重要数据保存在程序员可见的堆栈中,因此也给系统安全带来了极大的隐患。历史上最著名的缓冲区溢出攻击可能要算是1988年11月2转载 2013-07-23 23:30:21 · 1943 阅读 · 0 评论 -
CentOS Kernel Source Install
CentOS Kernel Source InstallMar 12th, 2012 | Comments CentOS kernel source install, first off if you are just trying to build something or compile a tool on CentOS then you probably only need转载 2013-09-23 15:29:38 · 5422 阅读 · 0 评论 -
Installing the Graphical Window System (X.org-X11) and the Default Desktop Environment on CentOS 6
Installing the Graphical Window System (X.org-X11) and the Default Desktop Environment on CentOS 6Posted 09-06-2011 at 01:12 PM by gearge Updated 11-26-2011 at 02:29 PM by geargeTags centos转载 2013-09-23 12:42:26 · 1595 阅读 · 0 评论 -
linux 网络协议栈-队列机制
Packet queues are a core component of any network stack or device. They allow for asynchronous modules to communicate, increase performance and have the side effect of impacting latency. This article翻译 2013-09-28 11:51:04 · 3725 阅读 · 0 评论 -
memset()的效率以及源码分析
void *memset(void *s, int ch, size_t n);作用:将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作。不知道有没有像我一样把memset当作万能的初始化工具,例如:int arr[n];memset(arr,1,n*sizeof(int));这样得到的a转载 2013-11-26 20:56:35 · 1500 阅读 · 0 评论 -
Linux 内核工作原理
本文发表于Linux Format magazine杂志,作者从技术深度上解释了Linux Kernel是如何工作的。相信对Linux开发者来说有不小的帮助。牛津字典中对"kernel"一词的定义是:"较软的、通常是一个坚果可食用的部分。"当然还有第二种定义:"某个东西核心或者最重要的部分。"对Linux来说,它的Kernel无疑属于第二种解释。让我们来看看这个重要的东西是如何工作的,先从原创 2012-12-27 22:01:02 · 4773 阅读 · 0 评论