嵌入式Linux中文站

内核中断,异常,抢占总结篇

阅读(221)

一、基本概念 中断分为同步中断和异步中断。同步中断是由CPU控制单元产生的,同步是指只有在一条指令执行完毕后,CPU才会发出中断,而不是发生在代码指令执行期间,比如系统调用。而异步中断是由其他硬件设备依照CPU时钟信号产生的,即意味着中断能够在指令之间发生,例如键盘中断。 按照Intel的微处理器手册,同步中断和异步中断也分别称为异常(或者软件中断)和中断。中断大家都比较熟悉,是由硬件设备产生的。异常的产生源有两种:一种是由程序的错误产生的,内核通过发送一个Unix程序员都熟悉的信号来处理异常;第二种时内

硬中断和软中断

阅读(242)

概述 从本质上来讲,中断是一种电信号,当设备有某种事件发生时,它就会产生中断,通过总线把电信号发送给中断控制器。 如果中断的线是激活的,中断控制器就把电信号发送给处理器的某个特定引脚。处理器于是立即停止自己正在做的事, 跳到中断处理程序的入口点,进行中断处理。 (1) 硬中断 由与系统相连的外设(比如网卡、硬盘)自动产生的。主要是用来通知操作系统系统外设状态的变化。比如当网卡收到数据包 的时候,就会发出一个中断。我们通常所说的中断指的是硬中断(hardirq)。 (2) 软中断 为了满足实时系统的要求,中

Linux的notifier机制在TP中的应用

阅读(167)

在linux内核系统中,各个模块、子系统之间是相互独立的。Linux内核可以通过通知链机制来获取由其它模块或子系统产生的它感兴趣的某些事件。 notifier_block结构体在include/linux/notifier.h中定义: struct notifier_block { notifier_fn_t notifier_call; struct notifier_block __rcu *next; int priority; }; priority用来定义优先级,高优先级的处理例程将被优先执行,

Linux RTC驱动模型分析之rtc-sysfs.c

阅读(169)

rtc节点 rtc-sysfs文件主要的操作就是在sys下创建rtc的属性节点,可以方便用户方便快捷的访问,查找问题。下来大概看看sys下的rtc节点,有个直观的认识。 [root@test ~]# cat /sys/class/rtc/rtc0/ date hctosys power/ time dev max_user_freq since_epoch uevent device/ name subsystem/ wakealarm 这是手机上rtc的节点属性,可以看到手机上只有一个rtc0设备。也可

Linux内核使用gdb调试

阅读(224)

这里记录平时使用gdb调试内核KE的步骤和方法. 有不足的地方也请大家指出和完善. 1 必备工具和文件 Gdb,addr2line,vmlinux以及内核coredump文件 在64位平台,gdb和addr2line 分别使用aarch64-linux-android-gdb aarch64-linux-android-addr2line. 2. 调试过程 MTK平台core

LINUX内核定时器(高精度&低精度)

阅读(229)

引言:linux从内核2.6.16开始引入了高精度定时器,达到ns级别。自此,内核拥有两套并行计时器,低精度和高精度。如果高精度没有开启,即使使用高精度函数,默认使用的仍旧是低精度。 高精度: 虽然内核已经支持高精度,但是对于不少产品而言,由于内核是裁剪的,配置的时候并没有加入编译进去,虽然对应的内核源码中有相关代码。如果想支持,那么可以进入内核源码,执行make menuconfig。去查看当前系统是否支持高精度,(备注:因为里面选项比较多,还可以直接去查看编译好的.config文件,看里面是否有CON

Linux电源管理-休眠与唤醒

阅读(182)

1.休眠方式 在内核中,休眠方式有很多种,可以通过下面命令查看 # cat /sys/power/state //来得到内核支持哪几种休眠方式. 常用的休眠方式有 freeze,standby, mem, disk freeze: 冻结I/O设备,将它们置于低功耗状态,使处理器进入空闲状态,唤醒最快,耗电比其它standby, mem, disk方式高 standby: 除了冻结I/O设备外,还会暂停系统,唤醒较快,耗电比其它 mem, disk方式高 mem: 将运行状态数据存到内存,并关闭外设,进入等

V4L2驱动开发要点

阅读(136)

首先来看Read/Write,如果VIDIOC_QUERYCAP调用返回的v4l2_capability参数中,V4L2_CAP_READWRITE被设置成真了的话,就说明支持Read/Write I/O。这是最简单最原始的方法,它需要进行数据的拷贝(而不是像memory map那样只需要进行指针的交换),而且不会交换元数据(比如说帧计数器和时间戳之类的可用于识别帧丢失和进行帧同步),虽然它是最原始的方法,但因为其简单,所以对于简单的应用程序比如只需要capture静态图像是很有用的。 如果使用Read/