- 博客(75)
- 资源 (4)
- 收藏
- 关注
原创 入职4个月
好久没写文章了,一是时间上的确很不够,特别是工作后,太忙。大学期间悠闲的时候还蛮喜欢写写的,想想4个月的公司生活的确就在弹指间。回忆期大学,从技术角度讲,自己掌握了不少东西,至少我有拼命的去喜欢一样东西,记得当初疯狂的在PKU网站上刷题,为了得到accept,我可以晚点吃饭晚点睡觉;记得参加google、百度网络比赛的那些日子,我很怀念,那时我真的有种自由翱翔的感觉。 现在工作了,从事的是
2011-11-24 20:14:53 1746 8
原创 被小看struct,很贼的%$#
先来个测试-------------------------- struct stru1{ char m1; double m2;};struct stru2{ int n1; stru1 n2; char * pn3;};sizeof(stru1)=?sizeof(stru2)=?这个问题时
2011-03-15 16:39:00 1243 3
原创 linux内核学习(23)设备模型之第二层driver_register
<br />终于说到最后一个注册了,今天也是年末了,可是我依然战斗在一线的感觉!说完这个,我也得放松一会儿。学习内核也接近大半个月了,收获颇多,不过还有太多东西需要我在继续努力了,虽然博客的流量不是很理想,表明关注我博客的网友不是很多,但是我相信,就会在不久,linux成为千家万户都在关注的对象时,我博客将成为初学者很好的入门资料,这也是我写这些文章的一个出发点,希望以后在来回味自己走过linux的路程时有所感慨!<br /><br />来自:drivers/base/driver.c:<br />int
2011-02-27 17:59:00 1617 6
原创 linux内核学习(23)设备模型之第二层driver_register
终于说到最后一个注册了,今天也是年末了,可是我依然战斗在一线的感觉!说完这个,我也得放松一会儿。学习内核也接近大半个月了,收获颇多,不过还有太多东西需要我在继续努力了,虽然博客的流量不是很理想,表明关注我博客的网友不是很多,但是我相信,就会在不久,linux成为千家万户都在关注的对象时,我博客将成为初学者很好的入门资料,这也是我写这些文章的一个出发点,希望以后在来回味自己走过linux的路程时有
2011-02-27 17:59:00 1110
原创 linux内核学习(22)设备模型之第二层bus_register
<br />注册总线。<br /><br />来自:dirvers/base/bus.c:<br />int bus_register(struct bus_type *bus)<br />{<br /> int retval;<br /> struct bus_type_private *priv;<br /><br /> priv = kzalloc(sizeof(struct bus_type_private), GFP_KERNEL); <br /> if (
2011-02-24 22:27:00 1378
原创 linux内核学习(22)设备模型之第二层bus_register
注册总线。来自:dirvers/base/bus.c:int bus_register(struct bus_type *bus){ int retval; struct bus_type_private *priv; priv = kzalloc(sizeof(struct bus_type_private), GFP_KERNEL);
2011-02-24 22:27:00 3058
原创 linux内核学习(21)设备模型之第二层device_register
这篇文章将那个3个注册函数说说,把整个设备模型框架搭建起来,当然,是重点部分了。在这之前希望你已经懂得总线、设备、驱动的数据结构及其里面的有关数据结构。关于调用的函数,如果显示为粗体,那么在下面我有分析。来自:drivers/base/core.cint device_register(struct device *dev){ device_initialize(dev)
2011-02-23 10:42:00 2651 2
原创 linux内核学习(21)设备模型之第二层device_register
<br />这篇文章将那个3个注册函数说说,把整个设备模型框架搭建起来,当然,是重点部分了。在这之前希望你已经懂得总线、设备、驱动的数据结构及其里面的有关数据结构。关于调用的函数,如果显示为粗体,那么在下面我有分析。<br /><br />来自:drivers/base/core.c<br />int device_register(struct device *dev)<br />{<br /> device_initialize(dev);<br />//初始化设备<br /> return
2011-02-23 10:40:00 1620
原创 linux内核学习(20)设备模型第二层之一
设备模型第二层也是非常重要的一层,为各种设备打好了基础,由于我之前在分析的过程中发现,如果每个细节都一起抠,可能很难将设备模型的概貌理解清楚,因此,我将采用从整体到局部的方法分析设备模型第二层,还是因为里面的东西太过于复杂。那么我们将哪些给踢掉呢,当然为了将设备模型的重点给捋出来,我可是费了不少功夫。我们将设备模型中关于sysfs、class 、attribute、电源管理等给踢掉,剩下的
2011-02-22 13:08:00 830
原创 linux内核学习(20)设备模型第二层之一
<br />设备模型第二层也是非常重要的一层,为各种设备打好了基础,由于我之前在分析的过程中发现,如果每个细节都一起抠,可能很难将设备模型的概貌理解清楚,因此,我将采用从整体到局部的方法分析设备模型第二层,还是因为里面的东西太过于复杂。那么我们将哪些给踢掉呢,当然为了将设备模型的重点给捋出来,我可是费了不少功夫。<br /><br />我们将设备模型中关于sysfs、class 、attribute、电源管理等给踢掉,剩下的基本就简单多了,等我们将重点分析完后,在回过头来分析这每个部分,那将非常简单了。好了
2011-02-22 13:04:00 1353
原创 linux内核学习(19)内核编程基本功之内核同步与互斥锁mutex
Pro-II、内核同步与互斥锁:1、理解互斥锁?互斥锁的使用也是保持内核临界区的同步的,互斥锁可以说源于信号量,信号量设置计数器可以容许n个进程并发的访问临界区,而互斥锁不行,只能容许每次一个进程访问,也就是计数器值为1的信号量,可以这么理解。互斥锁和自旋锁有不同(显然的),互斥锁在中断处理程序中和可延迟函数中都不能使用,因为它是可以睡眠的,只能在进程上下文或者软中断上下文才能使用。
2011-01-10 11:09:00 1959
原创 linux内核学习(19)内核编程基本功之内核同步与互斥锁mutex
<br />Pro-II、内核同步与互斥锁:<br />1、理解互斥锁?<br />互斥锁的使用也是保持内核临界区的同步的,互斥锁可以说源于信号量,信号量设置计数器可以容许n个进程并发的访问临界区,而互斥锁不行,只能容许每次一个进程访问,也就是计数器值为1的信号量,可以这么理解。互斥锁和自旋锁有不同(显然的),互斥锁在中断处理程序中和可延迟函数中都不能使用,因为它是可以睡眠的,只能在进程上下文或者软中断上下文才能使用。<br /><br /><br />2、如何实现互斥锁?<br /><br /><br /
2011-01-10 11:07:00 2215
原创 linux内核学习(18)设备模型之第一层sysfs关系图
很就没跟大家聊天了,上次聊还是分析完内核启动全过程的事情。这几次发的都是我目前学习设备模型的心得,把它都总结了起来,然后放到博客中供大家学习与探讨。如果你还记得当时分析到了driver_init()这个函数,那么太好了,因为下面的内容就是对这个函数进行简要分析的。如果你没关注过,那么也不用太那个什么,因为这个函数和内核启动全过程基本没什么联系,看看它在哪里就知道了。drivers/base
2011-01-10 09:43:00 1169
原创 linux内核学习(18)设备模型之第一层sysfs关系图
<br />很就没跟大家聊天了,上次聊还是分析完内核启动全过程的事情。这几次发的都是我目前学习设备模型的心得,把它都总结了起来,然后放到博客中供大家学习与探讨。<br /><br />如果你还记得当时分析到了driver_init()这个函数,那么太好了,因为下面的内容就是对这个函数进行简要分析的。如果你没关注过,那么也不用太那个什么,因为这个函数和内核启动全过程基本没什么联系,看看它在哪里就知道了。drivers/base/init.c文件中,看看目录就知道,我们开始进入设备模型这块内容了,而base/这
2011-01-10 09:37:00 2775
原创 linux内核学习(17)内核编程基本功之内核链表list_entry
<br />内核中链表的使用非常广泛,这里将linux/list.h中的部分,也是最常用的宏定义给总结了。<br /><br />Pro-III、内核链表:<br /> <br />1、定义+初始化:<br />#define LIST_HEAD_INIT(name) { &(name), &(name) }<br />#define LIST_HEAD(name) /<br />struct list_head name = LIST_HEAD_INIT(name)<br /> <br />static
2011-01-09 20:38:00 1503
原创 linux内核学习(17)内核编程基本功之内核链表list_entry
内核中链表的使用非常广泛,这里将linux/list.h中的部分,也是最常用的宏定义给总结了。Pro-III、内核链表: 1、定义+初始化:#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) /struct list_head name = LIST_HEAD_INIT(n
2011-01-09 20:37:00 996
原创 linux内核学习(16)设备模型第一层
设备模型第一层: 一、重要结构体概述: 1、kobject对象:struct kobject { const char *name; //名字struct list_head entry; //作为父对象的链表节点struct kobject *parent; //父对象struct kset *kset; //属于哪个对象集合struct kobj
2011-01-09 17:08:00 895
原创 linux内核学习(16)设备模型第一层
<br />设备模型第一层:<br /> <br />一、重要结构体概述:<br /> <br />1、kobject对象:<br />struct kobject { <br />const char *name; //名字<br />struct list_head entry; //作为父对象的链表节点<br />struct kobject *parent; //父对象<br />struct kset *kset; //属于哪个对象集合<br />struct kobj_type *ktype;
2011-01-09 17:06:00 1494
原创 linux内核学习(15)内核编程基本功之内核同步与自旋锁spinlock_t
Pro-I、内核同步与自旋锁:1、为什么要使用内核同步?同步使得共享数据结构(相对应的代码块—临界区)可以有节奏的被读/写。主要是由于内核控制路径的改变,而且它的改变是随机的。那么我们所要做的就是要保证在任意时刻只有一个内核控制路径处于临界区。如果在单CPU的情况下,只需禁止内核抢占即可实现不会发生内核控制路线的改变,如果在多CPU的情况下,就需要用到自旋锁了,它可以保证多个CPU的运行轨
2011-01-09 12:20:00 1072
原创 linux内核学习(15)内核编程基本功之内核同步与自旋锁spinlock_t
<br />Pro-I、内核同步与自旋锁:<br />1、为什么要使用内核同步?<br />同步使得共享数据结构(相对应的代码块—临界区)可以有节奏的被读/写。主要是由于内核控制路径的改变,而且它的改变是随机的。那么我们所要做的就是要保证在任意时刻只有一个内核控制路径处于临界区。如果在单CPU的情况下,只需禁止内核抢占即可实现不会发生内核控制路线的改变,如果在多CPU的情况下,就需要用到自旋锁了,它可以保证多个CPU的运行轨迹同步。当要进入临界区时,一定要得到关于这块临界区的锁,如果已经锁住,说明已经有CP
2011-01-09 12:18:00 3729
原创 linux内核学习(14)好无聊的代码
<br />现在我们还在关于机器代码里晃悠呢,昨天分析了arch/x86/kernel/head_32.S里面的代码,汇编的时代已经过去了,现在起,代码都是C的,很爽啊。我们离大本营越来越近了,设备模型就在前方不远处,不过还没继续分析完,估计你还在迷糊,在哪里呢?呵呵,很快的,这一切会在一瞬间就走完,不要太过于留恋太多无聊的东西。现在该是时候跳到昨天说的那里了。<br /><br />来自arch/x86/kernel/head32.c:<br />void __init i386_start_kernel
2011-01-08 18:12:00 1561
原创 linux内核学习(14)好无聊的代码
现在我们还在关于机器代码里晃悠呢,昨天分析了arch/x86/kernel/head_32.S里面的代码,汇编的时代已经过去了,现在起,代码都是C的,很爽啊。我们离大本营越来越近了,设备模型就在前方不远处,不过还没继续分析完,估计你还在迷糊,在哪里呢?呵呵,很快的,这一切会在一瞬间就走完,不要太过于留恋太多无聊的东西。现在该是时候跳到昨天说的那里了。来自arch/x86/kernel/he
2011-01-08 10:19:00 1278
原创 linux内核学习(13)我们开始慢慢地往上爬...
<br />这个题目取得好,好像底层离我们越来越远了,因为内核在一步一步脱壳,很快漂亮的形状就会展现在我们眼前,在这之前,我们得屏气凝神,静静地等待这一时刻的到来。进入真实内核的第一个文件是arch/x86/kernel/head_32.S。<br /><br />/*<br /> * 32-bit kernel entrypoint; only used by the boot CPU. On entry,<br /> * %esi points to the real-mode code as a 3
2011-01-08 10:15:00 1955
原创 linux内核学习(13)我们开始慢慢地往上爬...(下)
# 下面先设置几个后面可能会用的着的中断向量.macro set_early_handler handler,trapno lea /handler,%edx movl $(__KERNEL_CS movw %dx,%ax movw $0x8E00,%dx /* interrupt gate - dpl=0, present */
2011-01-07 17:29:00 1313
原创 linux内核学习(13)我们开始慢慢地往上爬...(上)
这个题目取得好,好像底层离我们越来越远了,因为内核在一步一步脱壳,很快漂亮的形状就会展现在我们眼前,在这之前,我们得屏气凝神,静静地等待这一时刻的到来。进入真实内核的第一个文件是arch/x86/kernel/head_32.S。/* * 32-bit kernel entrypoint; only used by the boot CPU. On entry, * %esi p
2011-01-07 17:23:00 1354
原创 linux内核学习(12)启动全过程概述之三
<br />进入了vmlinux内核映像部分,就进入了arch/x86/compressed/head_32.S。这个文件主要工作就是解压了,将真正的内核给释放出来,不过还得把这个文件分析完,内核才能出世。<br /><br />来自arch/x86/compressed/head_32.S:<br /><br />........省略了头文件......<br /><br />__HEAD<br />ENTRY(startup_32)<br /> cld /*di,si++*/<
2011-01-07 17:16:00 1431
原创 linux内核学习(11)启动全过程概述之二
<br />这次该进入main函数了,在arch/x86/boot/main.c中。<br /><br />void main(void)<br />{<br /> /* First, copy the boot header into the "zeropage" */<br /> copy_boot_params(); # 将hdr的参数拷贝到结构体boot_params.hdr中,在文件boot/bootparam.h里<br /><br />
2011-01-07 14:13:00 1853
原创 linux内核学习(10)启动全过程概述之一
<br />下面这段时间,我要好好分析一下内核启动过程的源代码,怎么来分析,而且更好的和网友们进行交流,我想,最好的方式莫过于采用赵炯博士编著的《linux内核完全注释》一书的编写规范。将中文注释夹杂在代码中是最好的方式了吧。我将采用分段注释,以免代码太长导致读了后面的忘记了前面的,在其中会有些重要的知识点也是我们要好好学习的。<br /><br />要找到第一个源代码文件不是太困难,它就是始源,注意我们这里全是在x86机器上,内核版本为2.6.36.2。那么arch/x86/boot目录则是我
2011-01-07 10:10:00 2730
原创 linux内核学习(9)启动全过程概述之内核映像结构
<br />启动过程这块内容还蛮多的,因此得慢慢来分析,在此之前我也收集到了很多资料,这里将这些整理加上自己的一些理解。好不容易啊,总算开始内核源代码之旅了,我们要珍惜这来之不易的这个时刻。<br /><br />要得到内核结构,我们有很多种方法,比如查看kbuild Makefile、Documentation,但是我选择了在网络上找,因为我们关注的重点是在于怎么分析源代码,特别是后面要分析设备驱动那块。<br /><br />我们以bzImage大内核映像为例,它由setup.elf和vml
2011-01-06 12:14:00 2469
原创 多线程实现凸壳算法的动画演示(2)类设计
在C++语言中,类是非常重要的角色,而Qt开发,更讲究类了,一个好的C++应用程序,好的类设计是免不了的。当然,对于我的这个算是个软件吧,也需要类设计,今天粗略的画了画,别说,还挺多的,不过草稿吗,可能总有些设计不是很合理的地方,后面会慢慢纠正的。先把类图凉出来,后面在做分析,看看这样的设计是否合理。相信大家看后来是比较清楚的知道,我的类设计得解释一下。先来看最主要的一个类MainWin,这个类里面涵盖了基本整个程序的所有内容。这个类里面包含了很多类,而且继承了一个自定义的类。MainWin类维护着很多,比
2011-01-05 21:52:00 1163
原创 多线程实现凸壳算法的动画演示(1)需求分析
<br />其实没有那么正式啦,我的需求分析目的非常的明确,就是把界面大致给勾勒出来,后面在类设计阶段就好理思路些。<br /> <br />熟悉Qt编程的都喜欢将QMainWindow作为主界面,当然,我也不例外了,在主界面上我会装上些部件:<br />菜单、工具栏、主视图、状态栏。<br /> <br />一 菜单:<br />这里面我想了想,还是有些东西的。我列出了4个功能菜单。<br /> <br />1 文件:<br />文件菜单还蛮重要的,首先就是可以保存用户输入的点,这样用户下
2011-01-05 15:21:00 1248
原创 多线程实现凸壳算法的动画演示(0)引子
<br />为什么有这个想法呢?一个不小心的意外,很久以前,我写了个凸壳算法,想起了我学习这个算法时的过程,发现如果能有动画的演示,也就是外面的壳怎么形成的,因为在形成的过程中会有选择,将整个过程放慢,绝对看得清清楚楚。<br /> <br />萌生了这个想法后,我发现要想达到我预想的那种效果还不是一件简单的事情,如果将事情简单点,可以现将外壳的每条线段给求出来,然后在利用定时效果,比如每隔1s画一条线。其实如果熟悉凸壳算法的应该知道,这样来演示估计对于初学此算法的完全就是白搭。于是,我极力演示处整个过程,
2011-01-05 10:26:00 1001
原创 linux内核学习(8)如何生成vmlinux?简单走走
<br />我们应该了解,内核编译出vmlinux还不算数,最后这个ELF格式的文件会被压缩成bzImage。不过那无关紧要。这次我要说说vmlinux的产生流程,当然只是简单走走,里面kbuild复杂语法,连Makefile自带的很多规则都是比较复杂的,恐怕要全部搞懂,得费很大劲,毕竟这对于我研究的方向没有多大帮助。我们知道要产生可执行文件要经过这样几个步骤:xx.c->xx.o、xx.o->xx,即先编译在链接,最终xx就是我们要的文件,那么内核源代码怎么有序的形成这样的模式呢,靠的就是kb
2011-01-04 15:48:00 12065 1
原创 linux内核学习(7)粗略走走kbuild Makefile编译流程
<br />今天看Makefile文件,我头大了,此Makefile非彼Makefile,里面多了很多内置命令,比如origin、patsubst等等啦,这些都没听说过,更可恶的是,连网上都没有,可见,这是一件多么伤人的事情,分析这样的,真是让人折寿啊!没办法,大半天都没找出个头绪来,于是我也没什么办法了,只好利用跟踪的分析方法,就是按照安装的步骤来,通过make命令来找到突破口。这种方法的确好使。没用多久,我就稍微有了点头绪,也算今天没白白浪费掉。<br /><br />先来个“make
2011-01-04 12:40:00 10938 1
转载 linux内核学习(6)Kbuild Makefile语法分析
<br />实际文档位置:linux-2.6.XX.yy/Documentation/kbuild/makefiles.txt,此为翻译稿。<br /><br />*******************************************************************************<br />Linux内核的Makefile<br /><br />=== 目录<br /><br /> === 1 概述<br /> === 2 用户与作用<
2011-01-04 09:46:00 5460
原创 linux内核学习(5)山重水复疑无路*
<br />上次说到00-INDEX文件,然后把kbuild.txt说完,但是我们的还有多么遥远。说到这儿,肯定很多看了我文章的朋友会想,你到底想干嘛,对,我也疑惑!这样的分析是否正确,不过,对于没多少见识的初学者---我,来讲,好像这样的分析方法更好,至少我环节把握得还不错,先把主要知识点给揪出来,然后在各个击破,我喜欢这样的思路。每个人看待和解决的方式不一样,这是非常正常的。那么还有个问题,我必须要在这里说了,我的最终目标是什么?当然了,目标有是好的,目标也要分长和短吧!<br /><br
2011-01-03 09:40:00 1733
原创 linux内核学习(4)老法子---
<br />我又回来了,上次不是说到~Documentation/kbuild/kconfig.txt中去看看吗,顾名思义,就是配置文件。先别急,我发现这个kbuild目录下面有个也有个00-INDEX文件,显然,肯定又是将该目录下文件作用的,应该先瞅瞅这个。<br />00-INDEX<br /> - this file: info on the kernel build process<br />kbuild.txt<br /> - developer information
2011-01-02 21:52:00 2979
原创 linux内核学习(3)我在寻找中...
<br />通过翻译README文件,至少我知道了Documentation目录很重要,那个目录里包含了linux设计的各个方面。其实按照习惯,我应该直接学习Documentation目录里的东西,但是考虑到README文件还有些内容没有深入分析,还不敢下手,我得将README文件看完才行!<br />条目:<br />1、WHAT IS LINUX?(介绍一下,没什么看的)<br />2、ON WHAT HARDWARE DOES IT RUN?(关于跑在哪些arch上,sorry,我没兴
2011-01-02 16:19:00 1342
原创 linux内核学习(2)继续翻译...
<br />之前我将~/README文件给粗略的翻译了一下,果真阿,通过阅读,我发现效果不错哦~。README文件中有这段文字:<br /> There are various README files in the Documentation/ subdirectory:<br /> these typically contain kernel-specific installation notes for some <br /> drivers for example. See
2011-01-02 12:48:00 3095
原创 linux内核学习,从README开始!
<br />一个初学者如何可以在浩瀚的linux海洋里找到自己的小舟,遨游其中。我就是在寻觅的其中一员,希望你也是。接触linux内核,学习源代码,学习大师们的杰作,这就是我的原动力,网上太多如何学习linux源代码的方法,可能适合一部分人,每个人都有自己的方法。而我,经过很常时间的思考,于是下定决心,先攻破晦涩的英语这关,因为代码注释都是英文。我希望和有兴趣的初学者一起完成我们的遨游,那是无比的快乐和幸福!我英语只过了4级,翻译得很烂,只是将我以为必要的翻译了,希望有爱好者能有时间将它补充完整
2011-01-02 12:28:00 4600 2
libc库简单搭建
2012-07-07
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人