微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 嵌入式Linux设备驱动开发之:字符设备驱动编程

嵌入式Linux设备驱动开发之:字符设备驱动编程

时间:09-13 来源:互联网 点击:

len:希望申请的字节数

flags

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

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

GFP_ATOMIC:为中断处理程序或其他运行于进程上下文之外的代码分配内存,且不会引起睡眠

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

GFP_HIGHUSER:优先高端内存分配

__GFP_DMA:DMA数据传输请求内存

__GFP_HIGHMEN:请求高端内存

函数返回值

成功:写入的数据长度
失败:-EFAULT

表11.9给出了kfree()函数的语法格式。

表11.9 kfree()函数语法要点

所需头文件

#includelinux/malloc.h>

函数原型

voidkfree(void*obj)

函数传入值

obj:要释放的内存指针

函数返回值

成功:写入的数据长度
失败:-EFAULT

表11.10给出了以页为单位的分配函数get_free_page类函数的语法格式。

表11.10 get_free_page类函数语法要点

所需头文件

#includelinux/malloc.h>

函数原型

unsignedlongget_zeroed_page(intflags)
unsignedlong__get_free_page(intflags)
unsignedlong__get_free_page(intflags,unsignedlongorder)
unsignedlong__get_dma_page(intflags,unsignedlongorder)

函数传入值

flags:同kmalloc()

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

函数返回值

成功:返回指向新分配的页面的指针
失败:-EFAULT

表11.11给出了基于页的内存释放函数free_page族函数的语法格式。

表11.11 free_page类函数语法要点

所需头文件

#includelinux/malloc.h>

函数原型

unsignedlongfree_page(unsignedlongaddr)
unsignedlongfree_pages(unsignedlongaddr,unsignedlongorder)

函数传入值

addr:要释放的内存起始地址

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

函数返回值

成功:写入的数据长度
失败:-EFAULT

(9)打印信息。

就如同在编写用户空间的应用程序,打印信息有时是很好的调试手段,也是在代码中很常用的组成部分。但是与用户空间不同,在内核空间要用函数printk()而不能用平常的函数printf()。printk()和printf()很类似,都可以按照一定的格式打印消息,所不同的是,printk()还可以定义打印消息的优先级。

表11.12给出了printk()函数的语法格式。

表11.12 printk类函数语法要点

所需头文件

#includelinux/kernel>

函数原型

intprintk(constchar*fmt,…)

函数传入值

fmt:
日志级别

KERN_EMERG:紧急时间消息

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

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

KERN_ERR:错误报告

KERN_WARNING:对可能出现的问题提出警告

KERN_NOTICE:有必要进行提示的正常情况

KERN_INFO:提示性信息

KERN_DEBUG:调试信息

…:与printf()相同

函数返回值

成功:0
失败:-1

这些不同优先级的信息输出到系统日志文件(例如:“/var/log/messages”),有时也可以输出到虚拟控制台上。其中,对输出给控制台的信息有一个特定的优先级console_loglevel。只有打印信息的优先级小于这个整数值,信息才能被输出到虚拟控制台上,否则,信息仅仅被写入到系统日志文件中。若不加任何优先级选项,则消息默认输出到系统日志文件中。

注意

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

4.proc文件系统

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

表11.13列出了/proc文件系统的主要目录内容。

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

目录名称

目录内容

目录名称

目录内容

apm

高级电源管理信息

locks

内核锁

cmdline

内核命令行

meminfo

内存信息

cpuinfo

CPU相关信息

misc

杂项

devices

设备信息(块设备/字符设备)

modules

加载模块列表

dma

使用的DMA通道信息

mounts

加载的文件系统

filesystems

支持的文件系统信息

partitions

系统识别的分区表

interrupts

中断的使用信息

rtc

实时时钟

ioports

I/O端口的使用信息

stat

全面统计状态表

kcore

内核映像

swaps

对换空间的利用情况

kmsg

内核消息

version

内核版本

ksyms

内核符号表

uptime

系统正常运行时间

loadavg

负载均衡

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

表11.14 /proc中进程目录结构

目录名称

目录内容

目录名称

目录内容

cmdline

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top