
Liux Kernel Function
Tommy_wxie
Tommy_wxie
展开
-
Request_irq和setup_irq的区别
Linux 内核提供了两个注册中断处理函数的接口:setup_irq和request_irq。这两个函数都定义在kernel/irq/manage.c里。 /* * Internal function to register an irqaction - typically used to * allocate special interrupts that are pa原创 2012-03-26 11:51:25 · 1549 阅读 · 0 评论 -
[经典]Linux内核中ioremap映射的透彻理解
几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86处理器为外设专门实现了一个单独的地址空间,称为"I/O地址空间"或者"I/O端口空间",CPU通过专门的I/O指令(如X86的转载 2013-01-30 18:39:47 · 1097 阅读 · 0 评论 -
read 系统调用剖析
https://www.ibm.com/developerworks/cn/linux/l-cn-read/简介: 大部分程序员可能会有这样的疑问:当在程序中调用库函数 read 时,这个请求是经过哪些处理最终到达磁盘的呢,数据又是怎么被拷贝到用户缓存区的呢?本文介绍了从 read 系统调用发出到结束处理的全过程。该过程包括两个部分:用户空间的处理、核心空间的处理。用户空间处理部分转载 2013-02-02 11:21:41 · 1122 阅读 · 0 评论 -
FrameBuffer 之 fb_fix_screeninfo 、fb_var_screeninfo
fb_fix_screeninfo 和 fb_var_screeninfo 都和 frame buffer 有关,详细的数据结构含义可以参考 kernel 头文件,这里只列出几个重要成员的含义。fb_fix_screeninfo 的 line_length 成员,含义是一行的 size,以字节数表示,就是屏幕的宽度。结 构fb_var_screeninfo定义了视频硬件一些可变的特转载 2013-02-27 19:30:22 · 2426 阅读 · 0 评论 -
关于daemonize()
lock_kernel();siginitsetinv(¤t->blocked, SHUTDOWN_SIGS);daemonize();target_data.thread_id = current;unlock_kernel();注:SHUTDOWN_SIGS前面定义为# define SHUTDOWN_SIGS (sigmask(SIGKILL)|sigmask(SIGIN转载 2013-04-13 10:00:50 · 2529 阅读 · 0 评论 -
Linux命令:cp (copy)复制文件或目录
功能: 复制文件或目录说明: cp指令用于复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到此目录中。若同时指定多个文件或目录,而最后的目的地并非一个已存在的目录,则会出现错误信息参数: -a 或 --archive 此参数的效果和同时指定"-dpR"参数相同 -b 或 --backup转载 2013-04-24 10:22:33 · 1187 阅读 · 0 评论 -
Linux内核中64位除法函数do_div
使用asm/div64.h中宏do_div #include unsigned long long x,y,result;unsigned long mod;mod = do_div(x,y);result = x; 64 bit division 结果保存在x中;余数保存在返回结果中。转载 2013-05-04 13:43:37 · 13560 阅读 · 0 评论 -
kthread_create与kernel_thread的区别
kernel thread可以用kernel_thread创建,但是在执行函数里面必须用daemonize释放资源并挂到init下,还需要用completion等待这一过程的完成。 kthread_create是比较正牌的创建函数,这个不必要调用daemonize,用这个创建的kernel thread都挂在了kthread线程下。从表面上来看,这两个函数非常的类似,但是实现却是相差甚远。转载 2013-05-08 21:19:41 · 2511 阅读 · 0 评论 -
gpio_request gpio_direction_output gpio_set_value
遇到pgio_request这个函数,始终不知道其什么意思,看了几遍源代码才有了点感觉。现将其关键部分再此说明一下,以备自己以后复习,或是路客参考。 一般gpio_request封装了mem_request(),起保护作用,最后要调用mem_free之类的。主要是告诉内核这地址被占用了。当其它地方调用同一地址的gpio_request就会报告错误,该地址已被申请。在/proc/mem应该会转载 2013-06-27 14:47:31 · 4558 阅读 · 0 评论 -
linux下查找字符串的命令
1. set命令可以显示出当前shell下所有全局参量定义及其值; 2. 查找并删除当前目录下小文件:find . -type f -size -10k -exec rm {} \;说明: www.2cto.com -type f 查找文件-size -10k,小于10k的。"+"是表示要求系统只列出大于指定大小的文件,而使用"-"则表示要求系统列出小于指定大小的文件转载 2013-06-28 09:52:38 · 2929 阅读 · 0 评论 -
select,poll,epoll区别
select的本质是采用32个整数的32位,即32*32= 1024来标识,fd值为1-1024。当fd的值超过1024限制时,就必须修改FD_SETSIZE的大小。这个时候就可以标识32*max值范围的fd。对于单进程多线程,每个线程处理多个fd的情况,select是不适合的。1.所有的线程均是从1-32*max进行扫描,每个线程处理的均是一段fd值,这样做有点浪费2.1024上限问转载 2013-07-04 19:17:54 · 1182 阅读 · 0 评论 -
Linux内核驱动基础(一)常用宏定义
__init和__initdata :仅用于模块初始化,在初始化结束后会丢弃,__init用来描述函数__initdata用来描述数据,比如说当内核启动完毕之后会打印如下语句Freeing unused kernel memory: 664k freed,多半就是__init宏和__initdata宏干的 __exit和__exitdata:会使那些内建到内核的模块省略掉clean转载 2013-07-23 19:04:29 · 3925 阅读 · 0 评论 -
Linux内核驱动之GPIO子系统(一)GPIO的使用
一 概述 Linux内核中gpio是最简单,最常用的资源(和 interrupt ,dma,timer一样)驱动程序,应用程序都能够通过相应的接口使用gpio,gpio使用0~MAX_INT之间的整数标识,不能使用负数,gpio与硬件体系密切相关的,不过linux有一个框架处理gpio,能够使用统一的接口来操作gpio.在讲gpio核心(gpiolib.c)之前先来看看gpio是怎么使用转载 2013-07-23 18:58:10 · 2560 阅读 · 1 评论 -
Linux 固件子系统----如何更新固件
在一般的使用中,可能会需要使用到升级固件这个功能,在linux的系统中提供了固件子系统这个设备模型来帮助快速的升级固件。在这里先将linux中提供的常用的接口来说明下:内核的固件接口:[cpp] view plaincopy#include int request_firmware(const struct firmware **转载 2013-07-24 15:49:42 · 1988 阅读 · 0 评论 -
linux 共享内存—内存映射mmap
共享内存—内存映射mmap 共 享内存可以说是最有用的进程间通信方式,也是最快的IPC形式。两个不同进程A、B共享内存的意思是,同一块物理内存被映射到进程A、B各自的进程地址空 间。进程A可以即时看到进程B对共享内存中数据的更新,反之亦然。由于多个进程共享同一块内存区域,必然需要某种同步机制,互斥锁和信号量都可以。采用共享内存通信的一个显而易 见的好处是效率高,因为进程可以直接读写内存转载 2013-01-30 18:26:12 · 1674 阅读 · 0 评论 -
linux中字符串转换函数 simple_strtoul
Linux内核中提供的一些字符串转换函数:lib/vsprintf.c 1. unsigned long long simple_strtoull(const char *cp, char **endp, unsigned int base) 2. unsigned long simple_strtoul(const char *cp, char **endp, u转载 2012-04-20 09:30:41 · 49735 阅读 · 0 评论 -
platform_device_add()函数分析
int platform_device_add(struct platform_device *pdev){int i, ret = 0;if (!pdev) /*验证指针的有效性 */ return -EINVAL;if (!pdev->dev.parent)/*都说总线有两个链表,一个是设备链表(通过device 内嵌)一个是驱动链表(通过device_drive转载 2012-03-31 11:00:26 · 4254 阅读 · 0 评论 -
kzalloc
在内核中许多分配内存空间采用的是kzalloc函数,当时不理解为什么用这个函数呢,而不用kmalloc这个函数呢kzalloc和kmalloc差异kzalloc在include/linux/slab.h中定义static inline void *kzalloc(size_t size, gfp_t flags){return kmalloc(size, flags | _原创 2012-04-04 11:45:23 · 5227 阅读 · 0 评论 -
task_struct和mm_struct和vm_area_struct和vm_operation_struct
1. MM_STRUCT结构 mm_strcut 用来描述一个进程的虚拟地址空间,在/include/linux/sched.h 中描述如下:struct mm_struct { struct vm_area_struct * mmap; /*指向虚拟区间(VMA)链表 */ rb_root_t mm_rb; /原创 2012-04-04 21:39:25 · 11036 阅读 · 0 评论 -
模块参数module_param
/*Linux驱动源码hellop.c*/#include#include#include static char *whom="bufan";static int howmany=1;static int paramA[] = {1,2,3,4,5,6,7,8};static int paramA_no = 1;module转载 2012-04-04 11:50:43 · 1499 阅读 · 0 评论 -
signal_pending(current)
signal_pending(current)检查当前进程是否有信号处理,返回不为0表示有信号需要处理。返回 -ERESTARTSYS 表示信号函数处理完毕后重新执行信号函数前的某个系统调用。也就是说,如果信号函数前有发生系统调用,在调度信号处理函数之前,内核会检查系统调用的返回值,看看是不是因为这个信号而中断了系统调用.如果返回值-ERESTARTSYS,并且当前调度的信号具备-ER原创 2012-03-22 12:34:04 · 2448 阅读 · 0 评论 -
linux中 likely与unlikely
看内核时总遇到if(likely( )){}或是if(unlikely( ))这样的语句,最初不解其意,现在有所了解,所以也想介绍一下。likely() 与 unlikely()是内核(我看的是2.6.22.6版本,2.6的版本应该都有)中定义的两个宏。位于/include/linux/compiler.h中,具体定义如下:#define likely(x) __builtin_e原创 2012-03-22 19:57:29 · 47353 阅读 · 8 评论 -
ARM Linux系统调用的原理
ARM Linux系统调用的原理操作系统为在用户态运行的进程与硬件设备进行交互提供了一组接口。在应用程序和硬件之间设置一个额外层具有很多优点。首先,这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。最后,更重要的是这些接口使得程序具有可移植性,因为只要内核所提供的一组接口相同,那原创 2012-05-28 17:46:05 · 6758 阅读 · 1 评论 -
request_irq中断注册
在linux内核中用于申请中断的函数是request_irq(),函数原型在Kernel/irq/manage.c中定义:int request_irq(unsigned int irq, irq_handler_t handler, unsigned long irqflags, const char *devname, void *dev原创 2012-04-05 12:09:24 · 2102 阅读 · 0 评论 -
Linux系统调用--fcntl函数详解
功能描述:根据文件描述词来操作文件的特性。 用法: int fcntl(int fd, int cmd); int fcntl(int fd, int cmd, long arg); int fcntl(int fd, int cmd, struct flock *lock); 参数: fd:文件描述词。 cmd:操作命令。 arg:原创 2012-06-08 16:15:59 · 1150 阅读 · 0 评论 -
usb_register_dev
一个USBinterface对应一种USB逻辑设备,比如鼠标、键盘、音频流。所以,在USB范畴中,device一般就是指一个interface。一个驱动只控制一个interface。这样,usb_register_dev自然是注册一个interface,所以usb_register_dev的第一个参数是interface(usb_interface类型)。 usb_register_dev原创 2012-06-14 14:43:06 · 6532 阅读 · 0 评论 -
usb_register_dev
一个USBinterface对应一种USB逻辑设备,比如鼠标、键盘、音频流。所以,在USB范畴中,device一般就是指一个interface。一个驱动只控制一个interface。这样,usb_register_dev自然是注册一个interface,所以usb_register_dev的第一个参数是interface(usb_interface类型)。 usb_register_dev原创 2012-06-14 14:42:38 · 2453 阅读 · 0 评论 -
linux kernel isspace()
isspace函数 原型:extern int isspace(int c) 用法:#include 功能:判断字符c是否为空白符 说明:当c为空白符时,返回非零值,否则返回零。(空白符指空格、水平制表、垂直制表、换页、回车和换行符。) 举例:[cpp] view plaincopyprint?/*issp转载 2013-01-30 14:51:50 · 2324 阅读 · 0 评论 -
linux kernel 错误返回
使用错误返回等与err相关的定义与操作,需包含头文件:#include 常见的err说明include/asm-generic/errno-base.h#define EPERM 1 /* Operation not permitted */ #define ENOENT 2 /* No such file or dire原创 2013-01-30 13:53:14 · 10859 阅读 · 0 评论 -
Linux curses库使用
相信您在网路上一定用过如 tin,elm 等工具, 这些软体有项共同的特色, 即他们能利用上下左右等方向键来控制游标的位置. 除此之外, 这些程式的画面也较为美观. 对Programming 有兴趣的朋友一定对此感到好奇, 也许他能在 PC上用Turbo C轻易地写出类似的程式, 然而, 但当他将相同的程式一字不变地移到工作站上来编译时, 却出现一堆抓也抓不完的错误. 其实, 原因很简单, 他转载 2017-08-09 15:57:17 · 2668 阅读 · 0 评论