分享

内核编程

 WUCANADA 2012-05-30

Neighbour的状态转移

以下内容都基于linux内核2.4.0源码)       在include/net/neighbour.h中定义了ARP有限状态机所对应的各种状态:     27 #define NUD_INCOMPLETE 0x01 28 #define NUD_REACHABLE 0x02 29 #define NUD_STALE 0x04 30 #define NUD_DELAY 0x08 3...
阅读(5) 评论(0)

时钟系统

kernel-2.6.22中的arm arch加入了对dynticks, clocksource/event支持. 找了些kernel  clock及timer子系统近来的变化, 总结一下.  一般来说Soft-Timer (timer wheel / hrtimer)  都是由Hardware-Timer(时钟中断之类)以及相关的clock source(e.g GPT in Soc)驱动...
阅读(7) 评论(0)

page cache 与 page buffer

Linux下对文件的访问和设备的访问通常会被cache起来加快访问速度,这个是系统的默认行为。 而cache需要耗费我们的内存,虽然这个内存最后可以通过echo 3>/proc/sys/vm/drop_caches这样的命令来主动释放。但是有时候我们还是需要理解谁消耗了我们的内存。 我们来先了解下内存的使用情况: [root@my031045 ~]# free...
阅读(6) 评论(0)

linux 页面的回收

关于页面的使用 在之前的一些文章中,我们了解到linux内核会在很多情况下分配页面。 1、内核代码可能调用alloc_pages之类的函数,从管理物理页面的伙伴系统(管理区zone上的free_area空闲链表)上直接分配页面(见 《linux内核内存管理浅析》)。比如:驱动程序可能用这种方式来分配缓存;创建进程时,内核也是通过这种方式分配连续的两个页面,作为进程的 thread_info结构和内...
阅读(5) 评论(0)

系统调用过程分析

系统调用”是操作系统提供给用户程序进行调用的一些服务。这些服务是系统预先提供的函数,在这一点上系统调用与普通的用户程序是没有区别的。而区别则在于“系统调用”是由操作系统提供给用户的,这些服务更接近底层或者要求的安全性更高,因此由操作系统来统一实现和管理。 程序员在写程序的过程中会经常需要调用“系统调用”来完成特定的任务。我们以教学用的类Linux操作系统xv6为例,以打印操作为主线来说明系统...
阅读(9) 评论(0)

Linux中断处理流程

看了一些网络上关于linux中断实现的文章,感觉有一些写的非常好,在这里首先感谢他们的无私付出,然后也想再补充自己对一些问题的理解。先从函数注册引出问题吧。 一、中断注册方法 在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义: int request_irq(unsigned int irq, irq_handler_t...
阅读(9) 评论(0)

模块与变量导出

今天折腾红外模块发现个奇怪的现象,当以模块的方式编译红外源码时,不能通过说hkvs_root_dir undefined,但是以build-in方式编译没有任何问题,起初想不通,正好买了本新书ILDD,第一章就是讲内核模块加载的原理,看了看,明白 了,原来内核的build-in可以看成整个一个大模块,如果红外模块用build-in方式编译的话当然没有问题,他可以访问本模块内的所有全局变量, 但是当红外...
阅读(9) 评论(0)

kmalloc 与vmalloc

kmalloc()和vmalloc()介绍 kmalloc() 用于申请较小的、连续的物理内存 1. 以字节为单位进行分配,在中 2. void *kmalloc(size_t size, int flags)分配的内存物理地址上连续,虚拟地址上自然连续 3. gfp_mask标志:什么时候使用哪种标志?如下: ———————————————————————————————- 情形...
阅读(10) 评论(0)

怎样获取系统时间

在mobile linux中的gettimeofday,按照user layer的定义,是micro second(us)的精度。 但是真的精确么? gettimeofday --> sys_gettimeofday -->do_gettimeofday void do_gettimeofday(struct timeval *tv) {     unsigned long fla...
阅读(10) 评论(0)

kobject的理解

在LINUX中最让人不解的大概就是/sys下面的内容了 下面首先让我们来创建一个简单的platform设备,并从这个设备的视角进行深入,在此篇文章的深入过程中,我们只看kobeject的模型 我所使用的内核版本号为2.6.26,操作系统的内核版本号为2.6.27-7,暂未发现2.6.27-7与2.6.26的重大不同 首先写一个简单的模块 #include #include...
阅读(15) 评论(0)

slab slub和内存管理

内核对象缓冲区管理 Linux 内核在运行过程中,常常会需要经常使用一些内核的数据结构(对象)。例如,当进程的某个线程第一次打开一个文件的时候,内核需要为该文件分配一个称为 file 的数据结构;当该文件被最终关闭的时候,内核必须释放此文件所关联的 file 数据结构。这些小块存储空间并不只在某个内核函数的内部使用,否则就可以使用当前线程的内核栈空间。同时,这些小块存储空间又是动态变化的,不...
阅读(14) 评论(0)

内核空间与用户空间的内存映射

严格来说,对于内核空间不能称为内存映射,应为内存重映射才对,例如将pci设备的内存空间映射到处理器的地址空间,其处理步骤如下: request_mem_region(start,n,name) #define request_mem_region(start,n,name) __request_region(&iomem_resource, (start), (n), (name))...
阅读(21) 评论(0)

内核空间使用open,read,write等系统调用注意事项

大家知道在内核中使用有些系统调用(如打开,写文件等操作)需要使用get_fs,set_fs对他们进行保护。具体使用方法如下: oldfs=get_fs();   set_fs(KERNEL_DS);   filp->f_op->write(filp,buf,size,&filp->f_pos);   set_fs(oldfs);         只有使用上面的方法,才能在内核中使用ope...
阅读(27) 评论(0)

ARM linux hard soft irq

今天在ChinaUnix论坛内核源码版上与linuxfellow网友讨论到hardirq和softirq的问题,虽 然在《深入Linux设备驱动程序内核机制》(以下简称“ILDD”)第5章“中断处理”对此已有详细的解读,但是我觉得还是有必要再花点时间深入探讨一 下这两者的区别。因为此前关于ARM上的中断处理我已经在另一篇帖子解密ARM based Linux内核中断处理框架 中讨论过,所以下面...
阅读(18) 评论(0)

2.6的系统调用

下面的代码大家可以在entry-common.S中找到。  在2.6.21中,认真研究大家会发现,你回避不了这样一个概念,EABI是什么东西?  内核里面谈EABI,OABI,其实相对于系统调用的方式,当然我们所说的系统限于arm系统。  EABI (Extended ABI),说的是这样的一种新的系统调用方式  mov r7, #num  swi 0x0  原来的系统...
阅读(6) 评论(0)

内核调试

1.调试技术 内核编程带来了它自己的,独特的调试挑战。内核代码不能简单地在调试器中执行,也不能被简单地跟踪,因为它是一组不与特定进程相关的功能。内核代码的错误非常难重现并且可能导致整个系统崩溃,因此破坏很多用来发现它们的证据。 本章将介绍在如此恼人的情况下你可以用来监视内核代码和跟踪错误的技术。 1.1.内核中的调试支持 在第二章中,我们建议你编译和安装你自己的内核,而不是运行你所使用的发...
阅读(11) 评论(0)

Linux内核调试技术指南

前两天,完成了ucos在2440上的移植,以及boot的修改。今天突然想到,我在linux下,该如何来编写,调试比较复杂的驱动。我想这个问题应该从如何调试内核入手,先转载两个文字,待西西看来。 系统搭建过程中,对于系统平台搭建工程师在完成Bootloader 的调试之后就进入Kernel 裁减移植的阶段,其中最重要的一步是Kernel 启动的调试,在调试Kernel过程中通常遇到最常见的问题是启...
阅读(54) 评论(0)

内核移植相关

嵌入式Linux内核移植相关代码分析  [转载请注明出处,www.linuxforum.net,作者:张洪耿,patrick_zhg@hotmail.com]   本文通过整理之前研发的一个项目(ARM7TDMI +uCLinux),分析内核启动过程及需要修改的文件,以供内核移植者参考。整理过程中也同时参考了众多网友的帖子,在此谢过。由于整理过程匆忙,难免错误及讲解的不够清楚之处,请各...
阅读(8) 评论(0)

内核同步机制

为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。 Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展 伴随 Linux从单处理器到对称多处理器的过度;伴随着从非抢占内核到抢占内核的过度。锁机制越来越有...
阅读(11) 评论(0)

mtd Nand驱动

大约用了两个礼拜不到的时间为公司的IPcamera系统写了基于MTD的NAND驱动(linux-2.6.22.10内核),目前已可以在该驱动的支持下跑cramfs和jffs2文件系统,另外,该驱动也可以同时支持small page(每页512 Byte)和big page(每页2048 Byte)两种NAND芯片。在此整理一下与NAND驱动相关的概念,结构体,驱动框架和流程,同时分析一下基于M...
阅读(36) 评论(0)

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多