![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
嵌入式驱动
文章平均质量分 83
finleyzhang
Everything you can do I can do better
展开
-
struct inode 和 struct file
1、struct inode──字符设备驱动相关的重要结构介绍内核中用inode结构表示具体的文件,而用file结构表示打开的文件描述符。Linux2.6.27内核中,inode结构体具体定义如下:struct inode {struct hlist_node i_hash;struct list_head i_list;struct list_head原创 2014-01-02 19:10:23 · 549 阅读 · 0 评论 -
软中断/tasklet/工作队列
软中断、tasklet和工作队列并不是Linux内核中一直存在的机制,而是由更早版本的内核中的“下半部”(bottom half)演变而来。下半部的机制实际上包括五种,但2.6版本的内核中,下半部和任务队列的函数都消失了,只剩下了前三者。本文重点在于介绍这三者之间的关系。(函数细节将不会在本文中出现,可以参考文献,点这里) (1)上半部和下半部的区别上半部指的是中断处理程序,下半部则指转载 2014-10-09 18:46:09 · 407 阅读 · 0 评论 -
linux中的热插拔和mdev机制
mdev是busybox自带的一个简化版的udev,作用是在系统启动和热插拔或动态加载驱动程序时,自动产生驱动程序所需的节点文件,在文件系统中的/dev目录下的设备节点都是由mdev创建的mdev扫描/sys/class和/sys/block中所有的类设备目录,如果在目录中含有名为"dev"的文件,且文件中包含的是设备号,则mdev就利用这些信息为这个设备在/dev下创建设备节点用法:转载 2014-09-28 15:45:00 · 515 阅读 · 0 评论 -
uboot和内核分区的修改
uboot和内核中如何修改分区的大小原创 2014-06-03 19:24:40 · 2419 阅读 · 0 评论 -
poll机制的实现流程
所有的系统调用,基于都可以在它的名字前加上“sys_”前缀,这就是它在内核中对应的函数。比如系统调用open、read、write、poll,与之对应的内核函数为:sys_open、sys_read、sys_write、sys_poll。一、内核框架:对于系统调用poll或select,它们对应的内核函数都是sys_poll。分析sys_poll,即可理解poll机制。1. s原创 2014-03-26 11:13:05 · 561 阅读 · 0 评论 -
wait_event_interruptible() 和 wake_up()的使用
1. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedule(), 而schedule()会将位于TASK_INTERRUPTIBLE状态的当前进程从runqueue转载 2014-03-26 08:20:19 · 938 阅读 · 0 评论 -
container_of
container_of的函数实现:[cpp] view plaincopy#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER) /** * container_of - cast a member of a structure out to the co转载 2014-04-01 14:55:15 · 486 阅读 · 0 评论 -
list_for_each_entry
在Linux内核源码中,经常要对链表进行操作,其中一个很重要的宏是list_for_each_entry:意思大体如下: 假设下面几个结点,则第一个member代表head,list_for_each_entry的作用就是循环遍历每一个pos中的member子项。list_for_each_entry应用: 它实际上是一个 for 循转载 2014-04-01 14:54:04 · 639 阅读 · 0 评论 -
static inline内嵌函数的理解
内联函数有些类似于宏。内联函数的代码会被直接嵌入在它被调用的地方,调用几次就嵌入几次,没有使用call指令。这样省去了函数调用时的一些额外开销,比如保存和恢复函数返回地址等,可以加快速度。不过调用次数多的话,会使可执行文件变大,这样会降低速度。相比起宏来说,内核开发者一般更喜欢使用内联函数。因为内联函数没有长度限制,格式限制。编译器还可以检查函数调用方式,以防止其被误用。static inli原创 2014-03-13 15:56:58 · 760 阅读 · 0 评论 -
等待队列
问题:进程是如何组织起来的?我们知道,进程是有很多种状态的:include/linux/sched.h#define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2#define __TASK_STOPPED 4#define __TAS转载 2014-01-03 08:48:01 · 505 阅读 · 0 评论 -
Linux_Struct_inode() 结构体详解
*索引节点对象由inode结构体表示,定义文件在linux/fs.h中*/struct inode { struct hlist_node i_hash; /* 哈希表 */ struct list_head i_list; /* 索引节点链表 */ stru转载 2014-01-02 19:04:30 · 1669 阅读 · 0 评论 -
等待队列
问题:进程是如何组织起来的?我们知道,进程是有很多种状态的:include/linux/sched.h#define TASK_RUNNING 0#define TASK_INTERRUPTIBLE 1#define TASK_UNINTERRUPTIBLE 2#define __TASK_STOPPED 4#define转载 2014-01-03 09:18:26 · 670 阅读 · 0 评论 -
内核中module_init()是被如何调用
static int __init initialization_function(void){/*初始化代码*/}module_init(initialization_function);初始化函数应当声明成静态的,因为它们不会在特定文件之外可见。上述定义中的__init标志可能看起来有点陌生,它对内核来讲是一个暗示,表明该函数只是在初始化时使用。模块加载器在模块加载后会丢掉这个转载 2013-12-19 15:01:36 · 4498 阅读 · 1 评论 -
linux内核空间和用户空间的是怎样区别的,如何交互,如何从用户空间进入内核空间
linux驱动程序一般工作在内核空间,但也可以工作在用户空间。下面我们将详细解析,什么是内核空间,什么是用户空间,以及如何判断他们。 Linux简化了分段机制,使得虚拟地址与线性地址总是一致,因此,Linux的虚拟地址空间也为0~4G.Linux内核将这4G字节的空间分为两部分。将最高的1G字节(从虚拟地址0xC0000000到0xFFFFFFFF),供内核使用,称为"内核空间".而将较转载 2014-10-30 19:19:26 · 520 阅读 · 0 评论