新闻中心

EEPW首页 > 嵌入式系统 > 设计应用 > linux 基础复习(9)设备驱动入门

linux 基础复习(9)设备驱动入门

作者: 时间:2016-10-08 来源:网络 收藏

· get_free_page:获得一个或几个连续页面。

· get_dma_pages:获得用于DMA传输的页面。

与之相对应的释放内存用也有kfree或free_pages 族。

kmalloc 函数语法要点

所需头文件 #i nclude

函数原型 void *kmalloc(unsigned int len,int flags)

Len:希望申请的字节数

GFP_KERNEL:内核内存的通常分配方法,可能引起睡眠

GFP_BUFFER:用于管理缓冲区高速缓存

函数传入值 flags GFP_ATOMIC:为中断处理程序或其他运行于进程上下文之外的代码分

配内存,且不会引起睡眠

GFP_USER:用户分配内存,可能引起睡眠

GFP_HIGHUSER:优先高端内存分配

_GFP_DMA:DMA数据传输请求内存

_GFP_HIGHMEN:请求高端内存

函数返回值 成功:写入的数据长度

失败:-EFAULT

kfree函数的语法格式

所需头文件 #i nclude

函数原型 void kfree(void * obj)

函数传入值 obj:要释放的内存指针

函数返回值 成功:写入的数据长度

失败:-EFAULT

get_free_ page类函数语法要点

unsigned long get_zeroed_page(int flags)

unsigned long __get_free_page(int flags)

函数原型 unsigned long __get_free_page(int flags,unsigned long order)

unsigned long __get_dma_page(int flags,unsigned long order)

函数传入值 flags:同kmalloc

order:要请求的页面数,以2为底的对数

函数返回值 成功:写入的数据长度

失败:-EFAULT

free_page类函数语法要点

所需头文件 #i nclude

函数原型 unsigned long free_page(unsigned long addr)

unsigned long free_page(unsigned long addr)

函数传入值 flags:同kmalloc

order:要请求的页面数,以2为底的对数

函数返回值 成功:写入的数据长度

失败:-EFAULT

printk类函数语法要点

所需头文件 #i nclude

函数原型 int printk(const char * fmt,…)

KERN_EMERG:紧急时间消息

KERN_ALERT:需要立即采取动作的情况

KERN_CRIT:临界状态,通常涉及严重的硬件或软件操作失败

KERN_ERR:错误报告

函数传入值 fmt: KERN_WARNING:对可能出现的问题提出警告

日志级别 KERN_NOTICE:有必要进行提示的正常情况

KERN_INFO:提示性信息

KERN_DEBUG:调试信息

…:如printf一样的格式说明

函数返回值 成功:0

失败:-1

这些不同优先级的信息可以输出到控制台上、/var/log/messages 里。其中,对输出给控制台的信息有一个特定的优先级console_loglevel。若优先级小于这个整数值时,则消息才能显示到控制台上,否则,消息会显示在/var/log/messages 里。若不加任何优先级选项,则消息默认输出到/var/log/messages 文件中。

要开启klogd和syslogd服务,消息才能正常输出。

proc 文件系统

/proc 文件系统是一个伪文件系统,它是一种内核和内核模块用来向进程发送信息的机制。这个伪文件系统让用户可以和内核内部数据结构进行交互,获取有关进程的有用信息,在运行时通过改变内核参数改变设置。与其他文件系统不同,/proc存在于内存之中而不是硬盘上。读者可以通过“ls”查看/proc文件系统的内容。

/proc文件系统主要目录内容

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} onclick=if(!this.resized) {return true;} else {window.open(this.src);} alt= src=http://blogimg.chinaunix.net/blog/upfile2/080413215654.jpg onload=if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} border=0>

除此之外,还有一些是以数字命名的目录,它们是进程目录。系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的PID 号为目录名,它们是读取进程信息的接口。进程目录的结构如下

screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.style.cursor='hand'; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} onclick=if(!this.resized) {return true;} else {window.open(this.src);} alt= src=http://blogimg.chinaunix.net/blog/upfile2/080413215720.jpg onload=if(this.width>screen.width*0.7) {this.resized=true; this.width=screen.width*0.7; this.alt='Click here to open new windownCTRL+Mouse wheel to zoom in/out';} border=0>

用户可以使用cat命令来查看其中的内容。

可以看到,/proc文件系统体现了内核及进程运行的内容,在加载模块成功后,读者可以使用查看/proc/device文件获得相关设备的主设备号。


上一页 1 2 3 下一页

关键词:

评论


相关推荐

技术专区

关闭