linux kernel
文章平均质量分 69
三叶草的嵌入式实验室
从事语音网关设备开发现阶段业余时间做android应用开发
展开
-
__init、__initdata、__exit、__exitdata
__init 宏常用在驱动模块初始化函数的定义处,其目的是将驱动模块的初始化函数放入名叫.init.text的输入段。当内核启动完毕后,这个段中的内存会被释放掉供其他使用。__initdata宏用于数据定义,目的是将数据放入名叫.init.data的输入段。其它几个宏也类似。__exit只在模块卸载时使用。如果模块被直接编进内核则该函数就不会被调用。如果内核编译时没有包含该模块,则此函数将原创 2013-09-29 23:36:32 · 1007 阅读 · 0 评论 -
DM9000驱动详细分析(二)
虚拟总线,没有对应的硬件设备,主要用于管理系统的外设资源。内核假设所有的设备都挂载到platform总线上来进行统一的管理,提高了驱动和资源管理的独立性,并且拥有较好的可移植性和安全性。Platform_device 和 Platform_driver分别用以表示设备和驱动,使用platform机制开发底层驱动大致流程:调用函数platform_add_devices注册platform_de原创 2013-10-01 00:48:40 · 939 阅读 · 0 评论 -
提供给DM9000的platform总线注册接口(platform_driver_register)
/** * platform_driver_register * @drv: platform driver structure */int platform_driver_register(struct platform_driver *drv){ drv->driver.bus = &platform_bus_type; if (drv->probe) drv->driver原创 2013-10-01 17:35:25 · 758 阅读 · 0 评论 -
linux内核中的fastcall和asmlinkage宏
内核版本:2.6.14在linux内核中我们都会经常见到FASTCALL和armlinkage,它们各有什么不同呢?下面我们来具体分析一下。在标准C系中函数的形参在实际传入参数的时候会涉及到参数存放的问题,那么这些参数存放在哪里呢?对x86比较了解的话,应该知道这些函数参数和函数内部局部变量一起被分配到了函数的局部堆栈中。linux操作系统支持多种CPU架构,比如x86、ppc和a转载 2013-09-20 10:49:27 · 895 阅读 · 0 评论 -
DM9000驱动详细分析(一)
1 驱动入口1.1 模块的初始化和退出函数module_init(dm9000_init);module_exit(dm9000_cleanup);系统启动时会执行dm9000_init进行driver初始化,具体解释如下: module_init(x)下面是相关宏定义:#define module_init(x) __initcall(原创 2013-09-27 00:52:16 · 876 阅读 · 0 评论