冀博
本科数学专业,对数学有着浓厚兴趣,擅长逻辑推理,喜欢模糊数学。
研究生计算机专业,方向为系统结构中的嵌入式设计。喜欢C,汇编,C ,嵌入式,uc/os.Linux内核,熟悉ARM7和ARM9内核。
工作方向:1)驱动开发
2)网络设备研发(边界设备)
兴趣爱好:
1)经济学,数学,历史。
2)喜欢咖啡,调酒,酿酒,品茶,厨艺
3)Linux内核,网络安全,加解密,DPDK,MTCP,fstack
4) 区块链研究
展开
-
kmalloc/kfree,vmalloc/vfree函数用法和区别
kmalloc/kfree,vmalloc/vfree函数用法和区别1.kmalloc1>kmalloc内存分配和malloc相似,除非被阻塞否则他执行的速度非常快,而且不对获得空间清零.tiger说明:在用kmalloc申请函数后,要对起清零用memset()函数对申请的内存进行清零。> 2>kamlloc函数原型:#includeVoid *kmalloc(size_t size, int f原创 2011-05-11 20:13:00 · 34693 阅读 · 4 评论 -
linux内核的三种调度方法
linux内核的三种调度方法:1,SCHED_OTHER 分时调度策略,2,SCHED_FIFO实时调度策略,先到先服务3,SCHED_RR实时调度策略,时间片轮转 实时进程将得到优先调用,实时进程根据实时优先级决定调度权值,分时进程则通过nice和counter值决定权值,n转载 2011-10-07 15:57:44 · 5714 阅读 · 0 评论 -
Linux 中断学习之小试牛刀篇
Linux中断内核编程前言在前面分析了中断的基本原理后,就可以写一个内核中断程序来体验以下,也可以借此程序继续深入来了解内核中断的执行过程一.内核中断程序:我们还是来看一看成程序:在看程序之前,要熟悉如何进行模块编程,和了解module_pararm()的用法。如果不熟悉的话请大家看,module_param()的学习和Linux内核模块编程,在此不作解释。1.程序interrupt.c 1 /* 2 *file name :interrupt.c 3 *atuthor :原创 2010-12-11 14:08:00 · 18150 阅读 · 16 评论 -
Linux字符设设备编程(四)之可爱的misc
字符设备编程(四)之可爱的misc在我们前面所学的字符设备编程中,当我们写好字符设备驱动并加载成功后;要使我们所写的驱动层程序和应用层程序之间搭建起通信桥梁,要通过设备节点。很多时候,我们都是利用mknod命令手动创建设备节点;应用层程序通过设备节点(open(“/dev/globalmem”,O_RDWR))和驱动层程序之间进行通话。。我们先来看看如何创建一个设备节点呢?To user the driver,first create the proper device files .To do that,原创 2011-05-29 18:06:00 · 8888 阅读 · 3 评论 -
Linux字符设备编程(五)之struct class
<br /><br />Linux字符设备编程(五)之struct class<br />在前面我们已经介绍了两种方法来实现在编写设备驱动程序时由系统自动给我们创建设备文件的方法。现在我们接着讲解第三种方法.<br />一.前言<br />内核中定义了struct class结构体,一个struct class 结构体类型变量对应一个类,内核同时提供了class_create()函数,可以用它来创建一个类,这个类存放于sysfs下面,一旦创建了这个类,再调用device_create()函数在/dev目录下原创 2011-05-29 21:44:00 · 13030 阅读 · 1 评论 -
构建内核树
<br /> <br /> <br />够建内核树<br />1.下载内核源代码<br />apt-cachesearch linux-source <br />其中显示的有:linux-source-2.6.20,没有和我的内核版本完全匹配,不过也没关系,直接下载就可以了:<br />apt-getinstall linux-source-2.6.20 <br />2.下载后,在/usr/src/目录下有压缩包解压<br />tar-jxvf linux-sourc原创 2011-05-17 11:11:00 · 3387 阅读 · 0 评论 -
Linux 中断学习之前言篇
中断学习之原理篇前言:中断是计算机发展中一个重要的技术,它的出现很大程度上解放了CPU,提高了CPU的执行效率。在中断出现之前,CPU对IO采用的是轮询的方式进行服务,这使的CPU纠结在某一个IO上,一直在等待它的响应,如果它不响应,CPU就在原地一直的等下去。这样就导致了,其他IO口也再等待着CPU的服务,如果某个IO出现了很重要很紧急的事情,CPU也不能去响应。为了解决这个纠结的问题就------>出现了中断中断控制的主要优点是只有在IO接口需要服务时才去响应它,原创 2010-12-10 11:21:00 · 8141 阅读 · 4 评论 -
Linux字符设备驱动(一)
Linux字符设备驱动之概述篇1.在Linux中有一句哲学“Linux下皆文件”,既把设备看做文件处理。那么设备和普通文件之间又有什么区分呢?先看看两个图:普通文件:-rw-r--r-- 1 stella stella 3699 2011-05-10 16:02 my_USBTMCAPP.c-rwxr-xr-x 1 stella stella 8763 2011-05-08 11:27 tiger-rw-r--r-- 1 stella stella 441 2011-05-08 11:2原创 2011-05-11 17:01:00 · 9554 阅读 · 11 评论 -
Linux字符设备驱动之register_chrdev_region()系列
<br />Linux字符设备驱动之 register_chrdev_region()函数系列<br />1.内核中所有已分配的字符设备编号都记录在一个名为 chrdevs 散列表里。该散列表中的每一个元素是一个 char_device_struct 结构,它的定义如下:<br />static struct char_device_struct {<br />struct char_device_struct *next; // 指向散列冲突链表中的下一个元素的指针<br />unsigned int m原创 2011-05-11 18:11:00 · 24462 阅读 · 2 评论 -
Linux内核开发之将驱动程序添加到内核
<br /> 驱动程序添加到内核<br /> <br />一.概述:<br />在linux内核中增加程序需要完成以下三项工作:<br />1.将编写的源代码复制到Linux内核源代码的相应目录<br />2.在目录的Kconfig文件中增加新源代码对应项目的编译配置选项<br />3.在目录的Makefile文件中增加对新源代码的编译条目<br />二.实例<br />1.先把驱动代码usbtmc(文件夹)赋值到/usr/src原创 2011-05-17 10:45:00 · 18572 阅读 · 11 评论 -
Linux字符设备驱动之cdev_init()系列
<br />字符设备驱动之cdev_init()系列函数<br />1.内核中每个字符设备都对应一个 cdev 结构的变量,下面是它的定义:<br />linux-2.6.22/include/linux/cdev.h<br />struct cdev {<br /> 13 struct kobject kobj;<br /> 14 struct module *owner;<br /> 15 const struct file_operations *ops原创 2011-05-11 17:54:00 · 13468 阅读 · 0 评论 -
Linux字符设备驱动(三)
字符设备驱动之体验篇三.字符设备编程篇通过程序来体验字符设备驱动编程的过程在Linux系统中,字符设备驱动由如下几个部分组成:(1)字符设备驱动模块加载与卸载函数(2)字符设备驱动的file_operations结构体中成员函数file_operations结构体中成员函数是字符设备驱动与内核的接口,是用户空间对Linux进行系统调用最终的实现着。(3)在字符设备驱动中,需要定义一个file_operations的实例,并将具体设备驱动的函数赋值给file_operations的成员。1.设备驱动的头文件,原创 2011-05-11 17:39:00 · 7485 阅读 · 5 评论 -
Linux字符设备驱动(二)
字符设备驱动之结构体二.字符设备驱动的结构体大部分基本的驱动程序操作涉及及到三个重要的内核数据结构,分别是file_operations、file和inode,它们的定义都在。1.file_operations:是一个函数指针的集合1>应用程序和VFS之间的接口是系统调用,而VFS与磁盘文件系统以及普通设备之间的接口是file_operations结构体成员函数,这个结构体包含对文件打开,关闭,读写,控制的一系列成员函数。2>由于字符设备的上层没有磁盘文件系统,所以字符设备的file_operations成原创 2011-05-11 17:13:00 · 6004 阅读 · 1 评论 -
Linux 内核源码中likely()和unlikely()
ikely()与unlikely()在2.6内核中,随处可见,那为什么要用它们?它们之间有什么区别呢?首先明确:if (likely(value))等价于if (value)if (likely(a>b)) {fun1();if (unlikely(value))等价于if (value)也就是说likely()和unlikely()从阅读和理解的角度是一样的。这两个宏在内核中定义如下:#defi转载 2012-12-10 17:36:28 · 28051 阅读 · 0 评论 -
offset宏的讲解
1.offset宏讲解#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE*)0)->MEMBER)对这个宏的讲解我们大致可以分为以下4步进行讲解:1>( (TYPE *)0 ) 0地址强制 "转换" 为 TYPE结构类型的指针;2>((TYPE *)0)->MEMBER 访问TYPE结构中的MEMBER数据成员;3>&( ( (TYPE *)0原创 2012-12-15 19:19:29 · 9180 阅读 · 4 评论 -
container_of分析
1.container_of宏1> Container_of在Linux内核中是一个常用的宏,用于从包含在某个结构中的指针获得结构本身的指针,通俗地讲就是通过结构体变量中某个成员的首地址进而获得整个结构体变量的首地址。2>接口:container_of(ptr, type, member) ptr:表示结构体中member的地址 type:表示结构体类型 member:表示结构体中的成员通原创 2012-12-15 19:23:17 · 45127 阅读 · 10 评论 -
Linux内核链表的研究与应用
Linux内核链表的研究与应用(“2012年度优快云博客之星”评选,欢迎为我投上一票,多谢)Author:tiger-johnTime:2012-12-20Mail:jibo.tiger@gmail.comBlog:http://blog.youkuaiyun.com/tigerjb/article/details/8299599转载请注明出处。前言:在Linux内核中使用了大量的链表来组织其数据,其采用了原创 2012-12-15 19:46:13 · 15347 阅读 · 16 评论 -
内核线程和进程的区别
前言:从内核的角度来说,它并没有线程这个概念。Linux把所有线程都当做进程来实现。内核并没有准备特别的调度算法或者定义特别的数据结构来表示线程。相反,线程仅仅被视为一个与其他进程共享某些资源的进程。每个线程都拥有唯一属于自己的task_struct,所以在内核中,它看起来就像是一个普通的进程(只是该进程和其他一些进程共享某些资源,如地址空间)一.内核线程1.内核经常需要在后台执行一些操作。这种任原创 2012-12-15 20:03:51 · 16160 阅读 · 0 评论 -
OS 调度算法及优先级反转
在多进程、多线程并发的环境里,从概念上看,有多个进程或者多个线程在同时执行,具体到单个CPU级别,实际上任何时刻只能有一个进程或者线程处于执行状态;因此OS需要决定哪个进程执行,哪些进程等待,也就是进程的调度。一、调度的目标1、首先要区分程序使用CPU的三种模式:IO密集型、计算密集型和平衡型。对于IO密集型程序来说,响应时间非常重要;对于CPU密集型来说,CPU的周转时间就比较重要;对于平衡型程转载 2012-10-31 16:34:14 · 4398 阅读 · 0 评论 -
Linux 内核编程之文件系统(一)
Linux文件编程之虚拟文件系统(VFS)Linux 之所以能支持除了Ext2文件系统之外的各种文件系统,是因为Linux提供了一种统一的框架,就是所谓的虚拟文件系统转换(Virtual FilesystemSwitch),简称虚拟文件系统(VFS)。这样,用户程序可以通过同一个文件系统界面,也就是同一组系统调用,能够对各种不同的文件系统以及文件进行操作。一.VFS的概念1.在上面提到Linux中支持几十种文件系统,它是怎么管理的呢,它都管理什么呢?首先,VFS 只对挂载到文件系统种的文件系统进行管理,即它原创 2010-11-17 18:21:00 · 5728 阅读 · 3 评论 -
Linux 内核编程之文件系统(二)
VFS中的目录项对象和文件对象一.VFS 中的目录项对象1.为了方便查找,VFS引入了目录项,每个dentry代表路径中的一个特定部分。目录项也可包括安装点。2.目录项对象由dentry结构体表示,定义在文件linux/dcache.h 头文件中。 89struct dentry { 90 atomic_t d_count; //使用计数 91 unsigned int d_flags; //目录项标时 92原创 2010-11-20 00:29:00 · 4125 阅读 · 2 评论 -
Linux内核哈希表分析与应用
Linux内核哈希表分析与应用Author:tiger-johnTime:2012-12-20mail:jibo.tiger@gmail.comBlog:http://blog.youkuaiyun.com/tigerjb/article/details/8450995转载请注明出处。前言:1.基本概念:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。原创 2012-12-29 17:21:57 · 22847 阅读 · 14 评论 -
内核模块编程之模块工具的使用
本文主要介绍了在内核模块中,如何使用模块工具加载模块驱动、卸载模块驱动、显示已经加载的内核模块信息,以及如何通过模块工具查看内核模块之间的依赖关系、以及如何查看模块的附加信息。并讲解了insmod和modprobe的区别以及rmmod和modprobe的区别。原创 2013-08-01 23:25:30 · 4896 阅读 · 0 评论