
Linux内核学习
GeorgeBrian
这个作者很懒,什么都没留下…
展开
-
vim+ctags
Vi大家都很熟悉,某些情况下它是我们在Linux下唯一可用的文本编辑器。其实我们平时所指的VI其实是VIM (ViImproved,VI增强版)。有人常常拿VIM和emacs比较,VIM尽管不象emacs那样有那么多的功能,但是比emacs更方便、好用。VIM简单易用,只要看看VIM自带的vitutor(直接输入vimtutor),大约只要20分钟就能掌握VIM的用法。对于Linux下的C/C++的程序员,使用VIM+ Ctags的组合来写程序也许是最佳的选择。 VI的使用方法这里就不罗嗦了,本文假设大家原创 2011-05-13 17:02:00 · 602 阅读 · 0 评论 -
linux 内存管理之kmalloc
在设备驱动程序中动态开辟内存,不是用malloc,而是kmalloc,或者用get_free_pages直接申请页。释放内存用的是kfree,或free_pages. 对于提供了MMU(存储管理器,辅助操作系统进行内存管理,提供虚实地址转换等硬件支持)的处理器而言,Linux提供了复杂的存储管理系统,使得进程所能访问的内存达到4GB。 进程的4GB内存空间被人为的分为两个部分--用户空间与内核空间。用户空间地址分布从0到3GB(PAGE_OFFSET,在0x86中它等于0xC0000000),3GB到4转载 2011-05-15 17:11:00 · 309 阅读 · 0 评论 -
Linux内核设计与实现-内存管理学习小结
一,页 内存管理以页为基本单位,用 struct page 表示系统中的每个物理页。系统中的每个结构都要分配这样一个结构体,假定系统的物理页为4kb,系统有128M的物理内存,那么系统仅需1MB的内存用来管理就可以了,代价并不高。有个地方还不是很明白,书中说page结构与物理页相关,与虚拟页无关。因此,该结构对页的描述只是暂时的。书中也作解释了,但还不是很明白。 二,区 由于硬件的限制,内核把页划分成了不同的区。 Linux使用了三种区,分别为:ZONE_DMA, ZONE_NORMAL, ZONE原创 2011-05-15 19:57:00 · 590 阅读 · 0 评论 -
( 转 ) Linux内核中常用的汇编
AT&T 汇编语言的相关知识 在 Linux 源代码中,以 .S 为扩展名的文件是“纯”汇编语言的文件。这里,我们结合具体的例子再介绍一些 AT&T 汇编语言的相关知识。 1 . GNU 汇编程序 GAS ( GNU Assembly 和连接程序 当你编写了一个程序后,就需要对其进行汇编( assembly )和连接。在 Linux 下有两种方式,一种是使用汇编程序 GAS 和连接程序 ld ,一种是使用 gcc 。我们先来看一下 GAS 和 ld: GAS 把汇编语言源文件( .o )转换为目标文转载 2011-05-24 20:44:00 · 285 阅读 · 0 评论 -
Linux内存管理基本概念
对于立志从事Linux内核开发的人来说,熟悉Linux内存管理非常重要。地址类型:物理地址,线性地址(虚拟地址),逻辑地址物理地址:是指出现在CPU地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。逻辑地址:是程序代码经过编译后,在汇编程序中使用的地址。线性地址:又名虚拟地址,在32位CPU架构下,可以表示4G的地址空间,用16进制表示就是0x00000000到0xffffffff。CPU要想将一个逻辑地址转换位物理地址,需要两步:首先CPU利用段式内存管理单元,将逻辑地址转换成线性地址,再利用页式原创 2011-05-03 22:11:00 · 322 阅读 · 0 评论 -
Linux内核学习开篇
<br />学习Linux也有些日子了,一直没有时间来写点东西。<br />前段时间在赶着编写驱动,现在工作基本接近尾声了,也想着把知识整理和总结一下。<br />也从来没有踏踏实实地研究过Linux内核,在驱动开发的过程中常常遇到问题而不知其所以然,于是下决心要好好研究下Linux内核了。<br />希望自己能坚持下去,在研究Linux内核的道路上一天比一天有进步有收获。原创 2011-05-03 21:01:00 · 293 阅读 · 0 评论 -
内存寻址
以下是一网友关于内存寻址学习日志,感觉不错。 一,i386的寄存器 http://hi.baidu.com/zhangliulin/blog/item/bc17b3a0db4a318d4710641d.html http://hi.baidu.com/zhangliulin/blog/item/f3380e0942635c36e924881e.html 二,Linux内存地址 http://hi.baidu.com/zhangliulin/blog/item/db1733f294daaa56352原创 2011-05-06 11:02:00 · 331 阅读 · 0 评论 -
Linux内核情景分析——X86系列CPU内存寻址和分析
今天阅读LINUX内核情景分析,终于搞清楚了几个问题,甚是高兴。 一、说一个CPU 是“16位”和“32位”时,到底是指什么呢? 二、intel X86系列处理器中“实模式”和“保护模式”到底是怎么回事? 三、Intel Pentium Pro处理器的内存扩展机制PSE和PAE是如何工作? 一、通常,在人们提到一款处理器是“16位”或“32位”时是指什么呢"? 其实是指:处理器中“算术逻辑单元”(ALU)的宽度。然而一直以来,我都认为是指CPU地址总线的位数,好惭愧啊。比如,16原创 2011-05-09 17:47:00 · 907 阅读 · 0 评论 -
浅析运行Linux内核的PC机的启动过程
概括来讲,运行Linux内核的PC机启动过程是这样的: power on —> bios —> bootloader —> kernel —> init 一、BIOS启动 CPU在上电后处于实地址模式,并且代码段寄存器CS的内容为0xffff,指令寄存器IP的内容为0x0;原创 2011-05-13 16:59:00 · 479 阅读 · 0 评论 -
linux内核并发和竞态学习笔记
linux内核开发中,多线程并发的管理毫无疑问是重中之重;不可避免地,并发的相关缺陷也是最容易制造的,也是最难找的。即使是Linux内核专家也会偶尔制造并发相关的缺陷。为此,我们有必要好好学习和理解内核对并发的管理。原创 2014-01-01 16:15:03 · 502 阅读 · 0 评论 -
linux自旋锁使用时需要注意的几个地方
常常觉得需要写下来的东西,却往往由于没有及时写下来慢慢淡忘了。写了一段时间内核代码,在不断修改错误的同时也多多少少积累了一点经验。暂且把使用自旋锁(spinlock)时需要注意的几个地方写下来。1、在内核多线程编程时,为了保护共享资源通常需要使用锁,而使用的比较多的就是spinlock,但需要注意的是:所有临界区代码都需要加锁保护,否则就达不到保护效果。也就是,访问共享资源的多个线程需要协原创 2014-02-10 23:13:33 · 703 阅读 · 0 评论 -
使用锁的几个重要理念
写过些内核代码后,再次阅读LDD感觉理解就好多了。简单总结了几个使用锁的重要理念。一、锁的设计和使用策略。1、当我们创建了一个可被并行访问的对象时,应该同时定义用来控制访问的锁。锁定模式必须在一开始就安排好,否则其后的改进将会非常困难。先期的时间投入会在调试阶段收益。2、几个函数均需要访问某个受特定锁保护的数据结构时,某给获得锁的函数绝对不能再次调用同样试图获得这个锁的函数,否则就会导原创 2014-02-12 21:36:11 · 349 阅读 · 0 评论 -
解决类似 BUG: soft lockup - CPU#2 stuck for 67s! 问题的思路
编写内核程序,出现soft lockup错误是再常见不过了。刚开始调试内核时,出现这样的错误,往往两眼一麻黑不知道该如何下手了。但其实,这样的问题解决多了,会发现基本就两种情况,死锁和死循环。所以,在出现soft lockup错误时,不用慌张,只要分析相关代码是不是存在死循环,比如 for循环的退出条件弄错了导致循环无法退出,等等;或者就是分析是不是相关代码在使用锁不当导致了死锁。比如,s原创 2014-02-11 23:51:44 · 8846 阅读 · 0 评论 -
如何使用crash工具分析Linux内核崩溃转储文件
使用crash工具分析linux崩溃转储文件,对解决linux内核代码中的bug会起到非常重要的作用。详细使用方法,请参考这篇文章吧,挺详细, http://www.ithov.com/linux/121016.shtml。转载 2014-02-13 21:25:25 · 393 阅读 · 0 评论 -
Linux内核模块的符号导出
http://zh5202.blog.163.com/blog/static/1780251952012112453928908/转载 2014-02-26 21:20:58 · 497 阅读 · 0 评论