
Linux kernel
文章平均质量分 60
wang6077160
这个作者很懒,什么都没留下…
展开
-
解决死锁的方法
解决死锁的方法:1. 认真审查代码,看看lock与unlock是否配对,特别要看看return之前是否忘记了unlock了2. 可以通过在上锁前、上锁后以及解锁后进行打印或者写日志文件(推荐),来查找死锁的位置。这个时候,计数器是个很好的选择。3. 看看是否滥用了Linux系统的信号,信号也可能导致死锁。转载 2012-08-09 16:33:29 · 325 阅读 · 0 评论 -
内核入门
针对好多Linux 爱好者对内核很有兴趣却无从下口,本文旨在介绍一种解读linux内核源码的入门方法,而不是解说linux复杂的内核机制; (参考资料来源:飞凌 http://www.witech.com.cn/)一.核心源程序的文件组织: 1.Linux核心源程序通常都安装在/usr/src/linux下,而且它有一个非常简单的编号约定:任何偶数的核心(例如2.0.30)都是一个稳定地转载 2012-08-19 15:43:36 · 400 阅读 · 0 评论 -
Debugging the kernel using Ftrace---http://lwn.net/Articles/365835/
1. Setting up FtraceFor the purpose of debugging, the kernel configuration parameters that should be enabled are: CONFIG_FUNCTION_TRACER CONFIG_FUNCTION_GRAPH_TRACER CONFIG_STACK_TRAC转载 2012-08-03 09:49:24 · 384 阅读 · 0 评论 -
https://training.linuxfoundation.org/
https://training.linuxfoundation.org/原创 2012-08-24 18:20:58 · 640 阅读 · 0 评论 -
PCI device about MMC/SD host controller
include/linux/mod_devicetable.h#ifdef __KERNEL__#include typedef unsigned long kernel_ulong_t;#endif#define PCI_ANY_ID (~0)struct pci_device_id { __u32 vendor, device; /原创 2012-08-16 13:32:47 · 1579 阅读 · 0 评论 -
module_pci_driver()
/** * module_pci_driver() - Helper macro for registering a PCI driver * @__pci_driver: pci_driver struct * * Helper macro for PCI drivers which do not do anything special in module * init/ex原创 2012-09-01 20:40:48 · 5073 阅读 · 0 评论 -
Debugging the kernel using Ftrace
Ftrace is a tracing utility built directly into the Linux kernel. Many distributions already have various configurations of Ftrace enabled in their most recent releases. One of the benefits that Ftrac转载 2012-08-02 09:57:10 · 512 阅读 · 0 评论 -
/proc/sys/vm/
1) /proc/sys/vm/block_dump该文件表示是否打开Block Debug模式,用于记录所有的读写及Dirty Block写回动作。缺省设置:0,禁用Block Debug模式2) /proc/sys/vm/dirty_background_ratio该文件表示脏数据到达系统整体内存的百分比,此时触发pdflush进程把脏数据写回磁盘。缺省设置:10转载 2012-08-09 17:11:49 · 390 阅读 · 0 评论 -
使用vim+ctags+cscope阅读内核源码
有网络的时候,使用LXR(The Linux Cross Referencer)在线阅读源码固然是一件很爽的事情。在无网络的情况下,只通过vim进入内核源码那样查找就显得有些勉强。接下来,本文将介绍一种快速定位源码的工具:ctags和cscope。通过vim编辑器,再配合使用上述两种工具就可以快速定位想要查看的源码。好了,开始吧!1.下载最新内核源码包,解压至主目录下接下来的步骤当然可以在转载 2012-08-27 09:05:38 · 424 阅读 · 0 评论 -
update kernel
info -f grub -n 'Simple configuration'cat /etc/default/grubcat /boot/grub/grub.cfgupdate-grub======在linux要想使用NFS必须安装nfs-utils包:apt-get install nfs-common原创 2012-09-12 10:40:12 · 484 阅读 · 0 评论 -
Linux的双链表list_head
双链表在include/linux/types.h中定义struct list_head { struct list_head *next, *prev;};include/linux/list.h中定义了链表的操作。这个结构经常作为成员与其他数据类型一起组成一个新的结构体(后文若无特别提示,“新结构体”均指类似下面举例的嵌套型结构体),比如:转载 2012-08-27 13:22:51 · 3499 阅读 · 0 评论 -
PCI device(二)
include/linux/pci.h/* * The pci_dev structure is used to describe PCI devices. */struct pci_dev { struct list_head bus_list; /* node in per-bus list */ struct pci_bus原创 2012-08-16 15:27:28 · 1485 阅读 · 0 评论 -
printf到printk的转变
昨天下午stepbystep的为其他同学演示了内核模块编程hello,kernel!在陈老师的指导下,先为大家演示了最基本的C程序hello,world。然后又一步步的转换成内核模块程序。在这一步步的转变过程中,我也发现了自己在学习内核模块中的不足,下面将下午遇到的一些问题总结如下。一个简单的hello,world程序如下: 1#include转载 2012-08-27 12:50:33 · 492 阅读 · 0 评论 -
中断
从物理角度来看,中断请求是由外部硬件设备产生的一种电信号,外部设备首先将这种电信号发给中断控制器,接着中断控制器将此电信号发送给CPU。CPU检查到该中断信号后再通知内核,然后由内核完成后续的一些列处理工作。显然,内核不需要定期去检查设备,从而提高了CPU利用率。通过以上的描述,你应该对中断有了一个大致的了解,不过想要更具体的了解中断必须搞清楚以下的知识点。1.中断的分类早期以及一般情转载 2012-08-27 10:35:13 · 762 阅读 · 0 评论 -
在内核中新增驱动代码目录
在开始向加入驱动代码之前,我们先了解三项基本步骤:(1)将编好的源代码复制到Linux内核源代码的相应目录(2)在目录的Kconfig文件中增加新源代码对应项目的编译配置选项(3)在目录的Makefile文件中增加对新源代码的编译条目在完成上述三项工作之前,我们先看一下我们要新增的驱动的树形结构。比如我们写的驱动程序均放在edsionteDriver目录,在此目录中包含Kconfi转载 2012-08-27 10:27:56 · 723 阅读 · 0 评论 -
遍历目录 nftw and ftw
· ftw()相关函数:opendir表头文件:#include 定义函数:int ftw(const char *dir, int (*fn) (const *file, const struct stat *sb, int flag), int depth)函数说明:ftw()会从参数dir指定的目录开始,往下一层层地递归式遍历子目录。ftw()会传三个参数给转载 2012-07-31 14:41:00 · 801 阅读 · 0 评论 -
copy_from_user and copy_to_user
在内核的学习中会遇到很多挺有意思的函数,而且能沿着一个函数扯出来很多个相关的函数。copy_to_user和copy_from_user就是在进行驱动相关程序设计的时候,要经常遇到的两个函数。由于内核空间与用户空间的内存不能直接互访,因此借助函数copy_to_user()完成用户空间到内核空间的复制,函数copy_from_user()完成内核空间到用户空间的复制。下面我们来仔细的理一下这两个函转载 2012-07-31 14:38:40 · 478 阅读 · 0 评论 -
中断处理和中断的下半部
1. 注册中断处理函数,当cpu收到中断变运行中断处理函数2. 中断处理要求快速,所以一些工作为延迟执行,作为中断的下半部分。 a) 软中断: 系统调用就是一个软中断实现的,是一个cpu的异常。 b) tasklet : 是由软中断实现的。tasklet_schedule() 调度一个task struct (将其标记为挂起,在下次调用do_softirq() 时,执行该原创 2012-03-26 19:35:57 · 11110 阅读 · 0 评论 -
进程管理
1. 创建一个进程 fork()系统调用通过复制一个现有的进程来创建一个新进程。 fork()系统调用从内核返回了2次,一次回到父进程,一次回到子进程。fork() 实际上是由clone()系统调用来实现的。 vfork()除了不拷贝父进程的页表项外,和fork功能相同 2. Linux把进程的列表放在叫做任务队列(task list)的双向循环链表中。链表中的每一项都是类型为tas原创 2012-03-27 09:02:48 · 373 阅读 · 0 评论 -
工作队列
工作队列(work queue)是Linux kernel中将工作推后执行的一种机制。这种机制和BH或Tasklets不同之处在于工作队列是把推后的工作交由一个内核线程去执行,因此工作队列的优势就在于它允许重新调度甚至睡眠。工作队列是2.6内核开始引入的机制,在2.6.20之后,工作队列的数据结构发生了一些变化,因此本文分成两个部分对2.6.20之前和之后的版本分别做介绍。1、2.6.0~转载 2012-07-31 14:49:25 · 384 阅读 · 0 评论 -
ftrace 的使用
ftrace 的使用ftrace 在内核态工作,用户通过 debugfs 接口来控制和使用 ftrace 。从 2.6.30 开始,ftrace 支持两大类 tracer:传统 tracer 和 Non-Tracer Tracer 。下面将分别介绍他们的使用。传统 Tracer 的使用使用传统的 ftrace 需要如下几个步骤:选择一种 tracer使能 ftrace执行需转载 2012-07-31 14:45:14 · 5005 阅读 · 0 评论 -
工具链
▫readelf#elf格式分析工具,可以查看section,符号表等;▫Objdump#反编译工具,可以用来反编译elf格式文件,分析编译结果代码;▫Objcopy#elf文件转换工具,可以用来生成bin文件,添加,删除symble,section等;▫As#汇编代码编译工具▫Ld#链接器,链接.o文件▫Ar#库制作工具,可以把多个.o文件制作为静态库,也可以把静态库分解为多转载 2012-07-31 15:18:20 · 459 阅读 · 0 评论 -
字节序问题
差不多所有的linux内核设备驱动都可以运行在不止一种处理器上。这仅仅因为设备驱动作者遵循一些重要规则。这些规则包括使用合适的变量类型,而不是依赖于特定内存页大小,提防外部数据的大小端模式,设立合适的数据对齐并通过合适接口访问设备内存位置。本文解释了这些规则,展示了依据这些的重要性并给出了使用的例子。内核内部数据类型要牢记的其中一个重要的基本规则就是在写可移植代码时要注意你的变量有多大转载 2012-07-25 14:31:46 · 1803 阅读 · 0 评论 -
理解嵌入式开发中的一些硬件相关的概念
理解嵌入式开发中的一些硬件相关的概念 做嵌入式系统开发,经常要接触硬件。做嵌入式开发对数字电路和模拟电路要有一定的了解。这样才能深入的研究下去。下面我们简单的介绍嵌入式开发中的一些硬件相关的概念。电平(Level) 在数字电路中,分为高电平和低电平,分别用1和0表示。一个数字电路的管脚,总是存在一个电平的,要么高要么低,或者说要么1要到0(其实,还有另一转载 2012-07-20 14:47:06 · 975 阅读 · 0 评论 -
内核数据结构:链表,队列,映射二叉树
链表代码在中声明,其数据结构很简单:struct list_head { struct list_head *next; struct list_head *prev;};#define LIST_HEAD_INIT(name) { &(name), &(name) }#define LIST_HEAD(name) \ str原创 2012-03-26 19:30:17 · 490 阅读 · 0 评论 -
DMA直接存储器访问
DMA原理:DMA(Direct Memory Access,直接内存存取) 是所有现代电脑的重要特色,他允许不同速度的硬件装置来沟通,而不需要依于 CPU 的大量 中断 负载。否则,CPU 需要从 来源 把每一片段的资料复制到 暂存器,然后把他们再次写回到新的地方。在这个时间中,CPU 对于其他的工作来说就无法使用。 DMA 传输将数据从一个地址空间复制到另外一个地址空间。当 CPU 初始化原创 2012-03-28 15:23:00 · 1266 阅读 · 0 评论 -
如何加入Linux kernel mailing list
比较简单的方法:http://vger.kernel.org/vger-lists.html列出了linux内核的邮件列表,点击"subscribe / unsubscribe",你要的应该是http://vger.kernel.org/vger-lists.html#linux-kernel 向majordomo@vger.kernel.org发送邮件,邮件内容为:subscribe l原创 2012-03-26 19:58:15 · 3991 阅读 · 0 评论