linux_driver_base
文章平均质量分 67
slj_win
这个作者很懒,什么都没留下…
展开
-
container_of()宏
在学习Linux驱动的过程中,遇到一个宏叫做container_of。该宏定义在include/linux/kernel.h中,首先来贴出它的代码:/** * container_of - cast a member of a structure out to the containing structure * @ptr: the pointer to the member.转载 2011-12-09 11:42:13 · 490 阅读 · 0 评论 -
linux线程浅析
关于linux线程在许多经典的操作系统教科书中, 总是把进程定义为程序的执行实例, 它并不执行什么, 只是维护应用程序所需的各种资源. 而线程则是真正的执行实体. 为了让进程完成一定的工作, 进程必须至少包含一个线程. 如图1.进程所维护的是程序所包含的资源(静态资源), 如: 地址空间, 打开的文件句柄集, 文件系统状态, 信号处理handler, 等;线程所维护的运行相转载 2011-12-16 09:57:40 · 575 阅读 · 0 评论 -
Linux内核2.6和2.4中内核堆栈的比较
Linux内核 2.4和2.6的进程内核堆栈和task描述符存储不太一样,这儿总结一下。在内核2.4中堆栈是这么定义的:union task_union { struct task_struct task; unsigned long stack[INIT_TASK_SIZE/sizeof(long)]; };而INIT_TASK_SI转载 2011-12-16 09:38:45 · 498 阅读 · 0 评论 -
进程上下文和中断上下文
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行于转载 2011-12-15 14:38:01 · 485 阅读 · 0 评论 -
error: 'TASK_INTERRUPTIBLE' undeclared (first use in this function)
make -C /opt/FriendlyARM/linux-2.6.32.2 M=/opt/FriendlyARM/linux-arm-modules/plat_buttons modulesmake[1]: Entering directory `/opt/FriendlyARM/linux-2.6.32.2' CC [M] /opt/FriendlyARM/linux-arm转载 2011-12-21 11:36:41 · 15446 阅读 · 3 评论 -
warning: control reaches end of non-void function
warning: control reaches end of non-void function 某个函数没有return, 而函数返回值是非void的.转载 2011-12-21 11:12:56 · 1791 阅读 · 0 评论 -
static int getch(void)函数中的if(!isatty(STDIN_FILENO)详解
关于函数 isatty( ) #include int isatty(int filedes);返回值:若为终端设备则返回1(真),否则返回0(假)如下程序,isatty函数的实现只使用了一个终端专用的函数 tcgetattr (如果成功执行,它不改变任何东西),并取其返回值。#include int isatty(int fd){ struct转载 2011-12-12 17:43:16 · 764 阅读 · 0 评论 -
spinlock理解
原创 关于内核中spinlock的一些个人理解收藏新一篇: Windows程序中的字符编码 | 旧一篇: 主流显卡Linux系统驱动安装--intel、ATi篇由于2.6内核可以抢占,应该在驱动程序中使用 preempt_disable() 和 preempt_enable(),从而保护代码段不被抢占(禁止 IRQ 同时也就隐式地禁止了抢占)。preempt_disable和preempt_ena转载 2011-12-12 14:56:27 · 662 阅读 · 0 评论 -
内核中的 likely() 与 unlikely()
在 2.6 内核中,随处可以见到 likely() 和 unlikely() 的身影,那么为什么要用它们?它们之间有什么区别? 首先要明确: if(likely(value)) 等价于 if(value) if(unlikely(value)) 也等价于 if(value)也就是说 likely() 和 unlikely() 从阅转载 2011-12-12 13:38:56 · 464 阅读 · 0 评论 -
micro2440驱动分析1——LED驱动
micro2440采用S3C2440处理器(和S3C2410区别不大),在其Linux源码中,和这个平台相关的代码主要在arch/arm/mach-s3c2410和include/asm-arm/arch-s3c2410中,相关驱动在drivers目录中。(1)DM9000 网卡驱动kernel-2.6.13/drivers/net/dm9000x.c(2)串口(包括三个串口驱动0,1转载 2011-12-12 11:41:06 · 626 阅读 · 0 评论 -
信号量与自旋锁 |Linux,信号量,自旋锁,睡眠锁,spinlock,semaphore
内核同步措施为了避免并发,防止竞争。内核提供了一组同步方法来提供对共享数据的保护。 我们的重点不是介绍这些方法的详细用法,而是强调为什么使用这些方法和它们之间的差别。Linux 使用的同步机制可以说从2.0到2.6以来不断发展完善。从最初的原子操作,到后来的信号量,从大内核锁到今天的自旋锁。这些同步机制的发展伴随 Linux从单处理器到对称多处理器的过度;伴随着从非抢占内核到抢占内核的转载 2011-12-08 17:26:43 · 733 阅读 · 0 评论 -
error: ‘struct device’ has no member named ‘bus_id’
在新版本的内核中struct device 已经没有bus_id成员,取而代之的是通过dev_name和dev_set_name对设备的名字进行操作。 dev_name和dev_set_name在2.6.35.6内核中的源代码如下: static inline const char *dev_name(const struct device *dev)转载 2011-12-16 17:07:38 · 4963 阅读 · 0 评论