![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
linux驱动
徐行而致--浅唱而归
梦想一旦坚持了就停不下来
展开
-
关于EXPORT_SYMBOL
linux2.6的“/proc/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。 模块可以使用如下宏导出符号到内核符号表: [c-sharp] view plaincopy EXPORT_SYMBOL(符号名); EXPORT_SYMBOL_GPL(符号名) 导出的符号可以被其他模块使用,不过使用之转载 2013-09-13 15:57:45 · 988 阅读 · 0 评论 -
Linux中__init、__devinit等初始化宏
内核使用了大量不同的宏来标记具有不同作用的函数和数据结构。如宏__init 、__devinit 等。这些宏在include/linux/init.h 头文件中定义。编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。 下面是一些常用的宏: ? ?__init ,标记内核启动时使用的初始化代码,内核启动完成后不再需要。以此标记的代码位于.init.text转载 2013-09-20 20:20:34 · 867 阅读 · 0 评论 -
platform_device与platform_driver
做Linux方面也有三个多月了,对代码中的有些结构一直不是很明白,比如platform_device与platform_driver一直分不清关系。在网上搜了下,做个总结。两者的工作顺序是先定义platform_device -> 注册 platform_device->,再定义 platform_driver-> 注册 platform_driver。 (1)platform_devic转载 2013-09-21 02:02:14 · 762 阅读 · 0 评论 -
ioctl compat_ioctl与unlock_ioctl
区别: ioctl 和 unlock_ioctl ioctl 不会lock_kernel() compat_ioctl被使用在用户空间为32位模式,而内核运行在64位模式时。这时候,需要将64位转成32位。 引用 http://blog.chinaunix.net/u1/38994/showart_2248151.html 对几个ioctl执行顺序的分析 关于i转载 2013-09-21 11:32:57 · 1891 阅读 · 0 评论 -
关于subsys_initcall
在linux内核代码里, 到处充满了subsys_initcall,这个调用是用来干吗的呢?有人回答是系统启动时候用来初始化某些系统的,具体怎么初始化的呢,说起来还是有点复杂。以2.6.21内核作为例子。 在linux/init.h里,有这样一段代码: #define pure_initcall(fn) __define_initcall("0",fn,1) #define core_转载 2013-09-26 13:16:02 · 730 阅读 · 0 评论