
kernel
文章平均质量分 82
shuai_wen
这个作者很懒,什么都没留下…
展开
-
qcom platform 子系统(7)
/******************************************************************************//*---用户空间:subsystem_ramdumpservice ss_ramdump /system/bin/subsystem_ramdump 2 class late_start group syste原创 2016-11-02 10:34:55 · 1811 阅读 · 0 评论 -
可重入内核
可重入内核所有的Unix内核都是可重入的,这意味着若干个进程可以同时在内核态下执行提供可重入的一种方式是编写函数,以编写这些函数只能修改局部变量,而不能修改全局数据结构,这样的函数叫可重入函数。但是可重入内核不仅仅局限于这样的可重入函数。相反,可重入内核可以包含非重入函数,并且利用锁机制保证一次只有一个进程执行一个非重入函数。 如果一个硬件中断发生,可重入内核挂起当前正在执转载 2014-02-12 10:14:02 · 907 阅读 · 0 评论 -
Arm linux 系统调用分析
Arm linux 系统调用分析概述操作系统为在用户态运行的进程与硬件设备进行交互,提供操作系统的系统服务,提供了一组接口。在应用程序和硬件之间,内核提供的系统服务设置一个额外层具有很多优点。首先,这使得编程更加容易,把用户从学习硬件设备的低级编程特性中解放出来。其次,这极大地提高了系统的安全性,因为内核在试图满足某个请求之前在接口级就可以检查这种请求的正确性。最后, 更重要的转载 2014-01-21 13:49:28 · 1085 阅读 · 0 评论 -
如何成为优秀的驱动开发工程师
或许这样的标题,应该是由像Linus或Greg KH这样的大师级的高手才有资格写的吧。但是作为我来说,也许我更想把这个标题作为一个疑问句来使用,整理一下自己的认识,用来勉励自己,和大家一起努力实现这个目标。认识肤浅的地方,还请大家见谅。何谓优秀的驱动开发工程师 首先要定义,我所认为的一个优秀的驱动开发工程师,应该具备什么样的能力,这里列一下按照从易到难的顺序,个人认为应该会有几个转载 2014-01-27 18:27:32 · 1556 阅读 · 0 评论 -
进程的创建: fork/execve
应用层怎样使用fork and execve/**************************************************************************/main(){ int ret_from_fork,mypid; mypid = getPid(); printf("before:my pid is d%\原创 2014-01-26 14:49:02 · 2769 阅读 · 0 评论 -
Linux进程切换以及内核线程的返回值
inux中的进程是个最基本的概念,进程从运行队列到开始运行有两个开始的地方,一个就是switch_to宏中的标号1:"1:/t",另 一个就是ret_form_fork,只要不是新创建的进程,几乎都是从上面的那个标号1开始的,而switch_to宏则是除了内核本身,所有的进程要 想运行都要经过的地方,这样看来,虽然linux的进程体系以及进程调度非常复杂,但是总体看来就是一个沙漏状,而switch转载 2014-01-26 13:45:18 · 796 阅读 · 0 评论 -
linux c语言 fork() 和 exec 函数的简介和用法
假如我们在编写1个c程序时想调用1个shell脚本或者执行1段 bash shell命令, 应该如何实现呢? 其实在 这个头文件中包含了1个调用shell命令或者脚本的函数 system();直接把 shell命令作为参数传入 system函数就可以了, 的确很方便. 关于system 有一段这样的介绍: system 执行时内部会自动启用fork() 新建1个进程, 效率没有转载 2014-01-24 15:44:21 · 1808 阅读 · 0 评论 -
进程名字的赋值
如下所示,每个进程都有名字:crash> ps -k PID PPID CPU TASK ST %MEM VSZ RSS COMM 743 2 1 ee1c9400 IN 0.0 0 0 [BPLOGwqL1] 744 2 1 ee144000 IN 0.0原创 2014-01-23 17:29:41 · 768 阅读 · 0 评论 -
系统调用的过程
系统调用是实现是应用程序调用swi, 进入swi 异常处理模式:crash> dis -l vector_swi/* 保存寄存器系统调用和进程切换上下文保存的内容,有什么不同?系统调用对应的数据结构是pt_regs,而进程调度使用的是thread_info -> cpu_context_save **/0xc000e100 : sub sp,原创 2014-01-23 14:57:55 · 1373 阅读 · 0 评论 -
switch_to
arch/arm/kernel/entry-armv.Sarm架构相关的 swtich_to代码/* * Register switch for ARMv3 and ARMv4 processors * r0 = previous task_struct, r1 = previous thread_info, r2 = next thread_info * previous原创 2014-01-23 11:23:47 · 1196 阅读 · 1 评论 -
ARM Linux为什么要引进Device Tree
1. 原因 A lot of very similar C code to support each and every board. Linux kernel老的Probing机制 关键是: 要提供一个board file,用于registers SOC的各个设备. 要提供一个SOC file转载 2014-01-10 18:11:29 · 1105 阅读 · 0 评论 -
ARM Linux 3.x的设备树(Device Tree)
1. ARM Device Tree起源Linus Torvalds在2011年3月17日的ARM Linux邮件列表宣称“this whole ARM thing is a f*cking pain in the ass”,引发ARM Linux社区的地震,随后ARM社区进行了一系列的重大修正。在过去的ARM Linux中,arch/arm/plat-xxx和arch/arm/mach转载 2014-01-10 18:13:47 · 805 阅读 · 0 评论 -
怎样使用timer
crash> timer_liststruct timer_list { struct list_head entry; unsigned long expires; struct tvec_base *base; void (*function)(unsigned long); unsigned long data; int sla原创 2013-12-21 14:47:59 · 798 阅读 · 0 评论 -
poll 系统调用(1)
1.用户空间/********************************************************************************** * include/asm-generic/poll.h * These are specified by iBCS2#define POLLIN 0x0001#define POL原创 2013-08-07 09:57:47 · 1585 阅读 · 0 评论 -
wait_event
Linux中是怎样实现wait 一个事件的?1】定义一个wait queue headstatic DECLARE_WAIT_QUEUE_HEAD(tty_ldisc_wait);2】等待某个事件,当wakeup waitqueue时判断这个事件,也就是condition: a C expression for the event to wait forstruct原创 2013-10-31 14:15:48 · 1017 阅读 · 0 评论 -
内核日志:API 及实现
使用日志进行调试的方法由来已久。日志不仅在理解系统的内部操作方面很有用,而且对于通过时间标记的日志中按时间顺序排列的消息所记录的系统活动的计时和关系也非常有用。本文首先通过介绍用于配置和收集日志信息的应用程序接口(API)来说明了内核的日志(见图 1 关于总结框架和组件的示意图)。然后,本文介绍了日志数据从内核到用户空间的移动过程。最后,本文还介绍了基于内核的日志数据的目标:用户空间中使用转载 2013-10-18 13:28:14 · 1049 阅读 · 0 评论 -
kernel crash 发生后的那些事(一)
本文根据 echo c > /pro/sysrq-trigger 触发的 Kernel crash 为例,分析kernel crash 处理的过程。当代码访问虚拟地址0时,会发生data abort,这是由MMU决定的,没有把virtual address 0 map 到任何有访问权限的物理地址。当发生data abort时,PC 会跳转到W(b) vector_dabt + s原创 2013-07-08 13:42:33 · 8383 阅读 · 0 评论 -
内核日志及printk结构浅析
这段时间复习了一下内核调试系统,注意看了一下printk的实现以及内核日志的相关知识,这里做一下总结。一、printk概述 对于做Linux内核开发的人来说,printk实在是再熟悉不过了。内核启动时显示的各种信息大部分都是通过她来实现的,在做内核驱动调试的时候大部分时候使用她就足矣。她之所以用得如此广泛,一个是由于她使用方便,还有一个重要的原因是她的健壮性。它使转载 2013-10-18 13:34:20 · 1064 阅读 · 1 评论 -
中断处理过程
本文的初衷是搞清楚:当中断发生后,硬件会关闭中断,但何时会打开?为这个问题,从中断发生到从中断返回遍历了一遍。1.异常矢量表/*****************************************************************/当异常发生时跳转到矢量表处,这里只是一个跳转指令: .globl __vectors_start__v原创 2013-10-10 16:59:15 · 2761 阅读 · 5 评论 -
work queue(1)
未完成/* * Global per-cpu workqueue. There's one and only one for each cpu * and all works are queued and processed here regardless of their * target workqueues. */struct global_cwq { s原创 2013-09-18 14:26:14 · 1586 阅读 · 0 评论 -
qcom platform 子系统(6)
/******************************************************************************//*---用户空间:ssr_setup: 设置子系统的restart_level: system or related--- * 这个文件感觉没做什么,且写入的是related, 而实际是RELATED,但log确输出了, *原创 2016-11-02 10:33:51 · 1380 阅读 · 0 评论 -
qcom platform 子系统(5)
******************************************************************************//*------------------------------ramdump_device--------------------------------*//************************************原创 2016-11-02 10:32:29 · 1336 阅读 · 0 评论 -
qcom platform 子系统(4)
/*************************************************************//*-subsystem的创建: 哪里调用了对应的subsys_register-*//*************************************************************/1. wifi:子系统,kernel/driv原创 2016-11-02 10:30:51 · 3194 阅读 · 0 评论 -
qcom platform 子系统(3)
/******************************************************************************//*怎样重启 子系统?*//******************************************************************************/root@gemini:/sys/kern原创 2016-11-02 10:29:39 · 599 阅读 · 0 评论 -
qcom platform 子系统(2)
/******************************************************************************//***以subsys_register为线索: 和驱动架构里的subsys_registet的名字是重复的,driver framework中的是static的****//***************************原创 2016-11-02 10:27:00 · 2001 阅读 · 0 评论 -
qcom platform 子系统(1)
/******************************************************************************//***用户接口:****//******************************************************************************/kernel/include/soc/q原创 2016-11-02 10:25:24 · 1319 阅读 · 0 评论 -
kernel 异常重启的log输出
异常处理函数,在底层【汇编代码】做一些处理后,最后调用C接口函数。即使是C函数,内核异常的处理函数还是CPU架构相关的,就是函数在arch下的不同目录下实现。未定义指令的处理:当发生指令异常时,汇编代码的处理是[以64位ARMV8架构为例]:对应的汇编代码在文件kernel/arch/arm64/kernel/entry.S中,el1_undef:/** Undef原创 2016-07-15 13:24:06 · 6359 阅读 · 0 评论 -
wait_queue
/*************************************************************/引入的数据结构: wait_queue_head and wait_queue/*************************************************************/struct __wait_queue_head {s原创 2016-03-16 22:21:53 · 462 阅读 · 0 评论 -
/dev/mem
这几天研究了下/dev/mem,发现功能很神奇,通过mmap可以将物理地址映射到用户空间的虚拟地址上,在用户空间完成对设备寄存器的操作,于是上网搜了一些/dev/mem的资料。网上的说法也很统一,/dev/mem是物理内存的全映像,可以用来访问物理内存,一般用法是open("/dev/mem",O_RDWR|O_SYNC),接着就可以用mmap来访问物理内存以及外设的IO资源,这就是实现用户空间驱转载 2015-12-14 22:32:06 · 969 阅读 · 2 评论 -
wait_queue的实现和使用
/*************************************************************/引入的数据结构: wait_queue_head and wait_queue/*************************************************************/struct __wait_queue_head {原创 2015-05-26 08:27:31 · 2503 阅读 · 0 评论 -
何时进行调度
/%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%//* * __schedule() is the main原创 2015-05-27 21:52:20 · 965 阅读 · 2 评论 -
Linux内核剖析 之 内核同步
主要内容 1、内核请求何时以交错(interleave)的方式执行以及交错程度如何。 2、内核所实现的基本同步机制。 3、通常情况下如何使用内核提供的同步机制。内核如何为不同的请求服务 哪些服务? ====>>> 为了更好地理解内核是如何执行的,我们把内核看做必须满足两种请求的侍者:一种请求来自顾客,另一种请求来自数量有限的几转载 2015-05-28 08:48:52 · 2686 阅读 · 2 评论 -
CFS 调度
Linux支持三种进程调度策略,分别是SCHED_FIFO、 SCHED_RR和SCHED_NORMAL。Linux支持两种类型的进程,实时进程和普通进程。实时进程可以采用SCHED_FIFO和SCHED_RR调度策略;普通进程采用SCHED_NORMAL调度策略。 本文主要讨论普通进程的调度算法,为了描述方便,后面章节中的“进程”指“普通进程”。 从Lin转载 2015-05-28 07:44:55 · 1803 阅读 · 1 评论 -
nohz动态时钟
Most of the contents is from the book, but as it based on 2.6 kernel. I analysis the a new version 3.1.1. So there are some changes. ====================================Dynamic Ticks:cont转载 2015-05-27 08:24:47 · 1653 阅读 · 0 评论 -
有关rootfs
http://blog.youkuaiyun.com/ruixj/article/details/3772752http://blog.youkuaiyun.com/lizhiguo0532/article/details/5946690原创 2015-03-22 23:23:50 · 738 阅读 · 10 评论 -
Linux 驱动学习笔记2 -- Timer
Linux内核定时器一、定义/include/linux/timer.h[cpp] view plaincopyprint?struct timer_list { struct list_head entry; unsigned long expires; void (*function)(unsigned lo转载 2014-10-27 21:47:00 · 798 阅读 · 0 评论 -
workqueue (2)
有关workqueue 数据结构是怎样组织的?/************************************************************************/首先是per-cpu变量:struct global_cwq:赋值为:实际上per-cpu变量是global变量,可以直接得到 INIT_LIST_HEAD(&gcwq->原创 2013-11-01 11:21:18 · 8644 阅读 · 0 评论 -
memory 异常处理
Memory 异常入口点/* * Data abort dispatcher * Enter in ABT mode, spsr = USR CPSR, lr = USR PC */ vector_stub dabt, ABT_MODE, 8 .long __dabt_usr @ 0 (USR_26 / USR_32原创 2013-10-17 18:14:10 · 5558 阅读 · 2 评论 -
linux中断处理浅析
linux中断处理浅析最近在研究异步消息处理, 突然想起linux内核的中断处理, 里面由始至终都贯穿着"重要的事马上做, 不重要的事推后做"的异步处理思想. 于是整理一下~第一阶段--获取中断号每个CPU都有响应中断的能力, 每个CPU响应中断时都走相同的流程. 这个流程就是内核提供的中断服务程序.在进入中断服务程序时, CPU已经自动禁止了本CPU上的中断响应, 因为C转载 2013-10-10 09:10:56 · 849 阅读 · 0 评论 -
schedule mm_struct and CPU register
/******************/进程切换函数schedule在文件 kernel/sched/core.c中,asmlinkage void __sched schedule(void){ struct task_struct *tsk = current; sched_submit_work(tsk);/*不关注该函数*/ __sc原创 2013-08-20 18:34:08 · 1391 阅读 · 0 评论