linux内核开发
dandelionj
这个作者很懒,什么都没留下…
展开
-
解读PTR_ERR,ERR_PTR,IS_ERR
我们知道内核有些函数是返回指针的,如Kmalloc分配内存,如果分配不到内核就会返回NULL指针,这样我们可以通过判断是否是NULL指针来判断Kmalloc执行成功与否。但是有些函数返回错误时,我们不仅需要知道函数错了,还需要知道错在哪里了,也就是说我们要或得错误码。在用户空间编程的时候,因为每个线程都有一个error变量,我们可以通过访问这个变量来得到错误码。但是在内核就没有这个变量,所以不能这转载 2013-01-24 10:51:46 · 651 阅读 · 0 评论 -
以太网概述及以太网帧格式
很多人将局域网(Local Area Network,LAN)和以太网(Ethernet)混为一谈,这个误解大概是因为和其他局域网技术比较起来,以太网技术使用得是如此普遍、发展得是如此地迅速,以至于人们将"以太网"当作了"局域网"的代名词。本节将讨论"局域网"和"以太网"二者之间的关系以及相关的一些基础知识。1 以太网概述 1973年,施乐公司(Xerox)开发出了一个设备互转载 2013-09-17 00:15:09 · 1516 阅读 · 0 评论 -
Linux2.6PCI驱动加载原理
Linux2.6PCI驱动加载原理pci设备上电时,硬件保持未激活状态。设备不会有内存和I/O端口映射到计算机的地址空间。每个PCI主板上都配备有能够处理PCI的BIOS、NVRAM或PROM等固件。这些固件通过读写PCI控制器中的寄存器,提供了对设备配置地址空间的访问。系统引导时,固件在每个PCI设备上执行配置事务,以便为它提供的每个地址区域分配一个安全的位置。当驱动程序访问设备时,它的转载 2013-08-25 13:42:15 · 793 阅读 · 0 评论 -
netlink宏定义
在linux/netlink.h中定义了一些方便对消息进行处理的宏,这些宏包括:#define NLMSG_ALIGNTO 4 #define NLMSG_ALIGN(len) ( ((len)+NLMSG_ALIGNTO-1) & ~(NLMSG_ALIGNTO-1) ) 宏NLMSG_ALIGN(len)用于得到不小于len且字节转载 2013-08-01 00:09:52 · 554 阅读 · 0 评论 -
关于中断上下文为什么不能睡眠?
这个问题有很多人问过,我看了下Linux得内核代码,原因如下:(当然我不能保证一定对,如果有牛人理解得更好,欢迎指正)1、 中断处理的时候,不应该发生进程切换,因为在中断context中,唯一能打断当前中断handler的只有更高优先级的中断,它不会被进程打断,如果在 中断context中休眠,则没有办法唤醒它,因为所有的wake_up_xxx都是针对某个进程而言的,而在中断context转载 2013-07-21 23:59:57 · 7636 阅读 · 2 评论 -
Eclipse CDT + QEMU 调试linux内核
有关调试的好处我想大家都不言自明了。本文章摘自原文,但加入了原文中没有说明的一些细节内容。我的系统环境是:Ubuntu 9.10 + eclipse-cpp-galileo-SR1-linux-gtk.tar.gz + QEMU 0.11.0Ubuntu 在安装时,如同大部分 Linux 发行版一样,都会同时安装 GNU 版本的 Java。这个 Java 的实用程度太低,尤其对于开转载 2013-07-19 21:22:07 · 975 阅读 · 0 评论 -
dropwatch 网络协议栈丢包检查利器
源码:http://git.fedorahosted.org/cgit/dropwatch.git资料博客:http://blog.yufeng.info/archives/2497原创 2013-03-25 21:13:23 · 1160 阅读 · 0 评论 -
对齐
文章最后本人做了一幅图,一看就明白了,这个问题网上讲的不少,但是都没有把问题说透。 一、概念 对齐跟数据在内存中的位置有关。如果一个变量的内存地址正好位于它长度的整数倍,他就被称做自然对齐。比如在32位cpu下,假设一个整型变量的地址为0x00000004,那它就是自然对齐的。 二、为什么要字节对齐 需要字节对齐的根本原因在于CPU访转载 2013-03-21 17:14:40 · 477 阅读 · 0 评论 -
panic
login: BUG: unable to handle kernel NULL pointer dereference at 00000010IP: [] xfrm_output_resume+0x74/0x130*pdpt = 000000000f4b9001 *pde = 0000000000000000 Oops: 0000 [#1] SMP原创 2013-03-19 18:04:48 · 762 阅读 · 0 评论 -
linux内存管理
1. 内核初始化: * 内核建立好内核页目录页表数据库,假设物理内存大小为len,则建立了[3G--3G+len]::[0--len]这样的虚地址vaddr和物理地址paddr的线性对应关系; * 内核建立一个page数组,page数组和物理页面系列完全是线性对应,page用来管理该物理页面状态,每个物理页面的虚地址保存在page->virtual中; * 内核建转载 2013-03-19 10:43:39 · 470 阅读 · 0 评论 -
Linux kernel panic解决方法
Linux kernel panic解决方法kernel panic错误表现kernel panic 主要有以下几个出错提示:Kernel panic-not syncing fatal exception in interruptkernel panic - not syncing: Attempted to kill the idle task!kernel panic -转载 2013-03-18 14:44:40 · 1727 阅读 · 0 评论 -
linux源码阅读
一 linux内核源码阅读工具windows下当然首选source insight, 但是linux下就没有source insight这么优秀的工具了,但是也有不少的替代品,但觉绝对部分人会选择vim+ctags+cscope的组合,还有部分人或选择wine中的 source insight或选择navigatror,当然对于代码阅读来说vim+ctags+cscope的组合还是比较好的转载 2013-03-13 21:43:33 · 1083 阅读 · 0 评论 -
中断发生时用户堆栈和内核堆栈的切换
如果一个中断产生时任务正在用户代码中执行,那么该中断会引起CPU特权级从3到0的变化,此时CPU就会运行用户态堆栈到内核态堆栈的切换操作。CPU会从当前任务的任务状态段TSS中取得新堆栈的段选择符和偏移量。因为中断服务程序在内核中,属于0级特权级代码,所以48位的内核态堆栈指针会从TSS的ss0和esp0字段中获得。在定位了新堆栈(内核态堆栈)之后,CPU就会首先把原用户态堆栈指针ss和esp压入转载 2014-07-18 16:57:56 · 5686 阅读 · 0 评论