- 博客(28)
- 收藏
- 关注
转载 详解Linux中断处理中的hardirq与softirq机制
今天在ChinaUnix论坛内核源码版上与linuxfellow网友讨论到hardirq和softirq的问题,虽然在《深入Linux设备驱动程序内核机制》(以下简称“ILDD”)第5章“中断处理”对此已有详细的解读,但是我觉得还是有必要再花点时间深入探讨一下这两者的区别。因为此前关于ARM上的中断处理我已经在另一篇帖子解密ARM based Linux内核中断处理框架 中讨论过,所以下面的讨
2013-09-30 18:10:04 2069 1
转载 Linux中断处理体系结构分析(二)
1.中断处理的体系结构 我们知道编写设备驱动程序一定要用到中断处理函数,这在驱动程序的编写中,占据很重要的一部分。在响应一个特定的中断的时候,内核会执行一个函数,该函数叫做中断处理程序(interrupt handler)或中断服务例程(interrupt service routine ,ISP).产生中断的每个设备都有一个相应的中断处理程序,中断处理程序通常不和特定的设备关联,而是
2013-09-30 18:08:57 814
转载 Linux中断处理体系结构分析(一)
异常,就是可以打断CPU正常运行流程的一些事情,比如外部中断、未定义指令、试图修改只读的数据、执行swi指令(Software Interrupt Instruction ,软件中断指令)等。当这些事情发生时,CPU暂停当前的程序,先处理异常事件,然后再继续执行被中断的程序。操作系统中经常通过异常来完成一些特定的功能。其中的中断也占有很大的一部分。例如下面的这几种情况:当CPU执行未定义的
2013-09-30 18:07:54 828
转载 Android 安全架构及权限控制机制剖析
Android 层次化安全架构Android 作为一个移动设备的平台,其软件层次结构包括了一个操作系统(OS),中间件(MiddleWare)和应用程序(Application)。根据 Android 的软件框图,其软件层次结构自下而上分为以下几个层次:操作系统层(OS)各种库(Libraries)和 Android 运行环境(RunTime)应用程序框架(Application Fr
2013-09-30 16:09:07 1184
转载 浅析Android权限机制(一) —— Android的权限机制
第一章 Android的权限机制 Android是基于Linux的系统,其权限访问控制自然离不开Linux的权限访问控制,而在第一章当中,将分成两个部分来剖析Android的权限控制系统。一. Linux权限机制 Linux的权限访问是由进程(访问者)和文件(被访问者)两部分组成的。其中相当一部分内容参考至APUE[1]。1.1 Llinux文件权限 我们
2013-09-30 16:07:52 1018
转载 Linux开发者需要知道的10个技巧--转自IBM developerworks
Lazy Linux: 10 essential tricks for adminsHow to be a more productive Linux systems administratorVallard Benincosa, Certified Technical Sales Specialist, IBMSummary: Learn these 10
2013-09-30 15:56:23 2303
转载 kernel学习之ftrace环境搭设及使用(包括buildroot的使用)
Updated(2012/04/23): 刚看了elc2012的一篇关于使用ftrace调试性能问题的文章,也很不错https://events.linuxfoundation.org/images/stories/pdf/lf_elc12_kobayashi.pdf同时, 推荐下面这篇关于在ARM体系结构下使用Ftrace的文章http://elinux.org/Ftrace
2013-09-30 15:53:12 1497
原创 kernel cannot startup
引子:通过OTG连接USB 键盘,启动到这里就不再输出log也不能通过串口输入,但此时系统没有死掉,还响应中断。[ 15.809686:0] ALSA device list:[ 15.812931:0] #0: ns115-audio假设系统死锁在某个地方,如果此时能触发一个crash,就能分析出那个进程被中断打断,就是这个进程的进入了死锁状态;[
2013-09-24 11:27:14 1794
原创 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 1554
原创 soft irq and tasklet
创建 ksoftirqdearly_initcall(spawn_ksoftirqd);static __init int spawn_ksoftirqd(void){ void *cpu = (void *)(long)smp_processor_id(); int err = cpu_callback(&cpu_nfb, CPU_UP_PREPARE, cp
2013-09-17 15:16:27 1242
转载 C语言运算符优先级 详细列表
恩,问这个问题的人太多了,懒得继续回答,直接贴上来自己看。。。优先级运算符名称或含义使用形式结合方向说明1[]数组下标数组名[常量表达式]左到右 ()圆括号(表达式)/函数名(形参表)
2013-09-17 14:52:01 788
转载 shell循环,判断介绍,以及实例
shell的循环主要有3种,for,while,untilshell的分支判断主要有2种,if,case一,for循环查看复制打印?#!/bin/bash for file in $(ls /tmp/test/mytest |grep sh) //for in格式是shell for的基本格式,根js的for in类似 do
2013-09-17 10:05:56 1166
原创 中断处理流程
大家都说在中断处理函数中不能调度,或者说睡眠。这到底为什么?下面看中断处理的过程,从中是否能找到原因。中断发生后会调到__irq_svc: .align 5__irq_svc: svc_entry irq_handler ---- svc_exit r5 @ return from exception UNWIND(.fn
2013-09-16 13:55:15 2402 2
转载 再思linux内核在中断路径内不能睡眠/调度的原因(2010)
Linux内核中断路径中不能睡眠,为什么? 这里就行了很深入的讨论,值得一看:http://bbs2.chinaunix.net/viewthread.php?tid=1618430 但是,他们的讨论最后没有得出一个明确的结论。其中,cskyrain在8楼的思考触及到了一个要点,但是没有深入展开: [c-sharp] view plaincopy1楼
2013-09-16 13:21:03 975
转载 解析 Linux 中的 VFS 文件系统机制
1. 摘要本文阐述 Linux 中的文件系统部分,源代码来自基于 IA32 的 2.4.20 内核。总体上说 Linux 下的文件系统主要可分为三大块:一是上层的文件系统的系统调用,二是虚拟文件系统 VFS(Virtual Filesystem Switch),三是挂载到 VFS 中的各实际文件系统,例如 ext2,jffs 等。本文侧重于通过具体的代码分析来解释 Linux 内核中 VFS
2013-09-16 09:33:19 863
转载 解密ARM based Linux内核中断处理框架
本贴试图从硬件到软件以全方位角度来剖析基于ARM的Linux内核中如何处理一个完整的外部设备中断流程。第一部分:硬件的行为ARM的中断向量表如下:从上图知道,对于IRQ中断类型(ARM平台下大约99%的外部设备使用IRQ中断,也是驱动程序员打交道最多的中断类型),其低端地址为0x0000_0018,高端地址为0xFFFF_0018(ARM处理器在IRQ中断发生时,到低端地址还是
2013-09-16 09:28:15 1400
原创 A soft watchdog of tty driver
引子:运行一个tty相关的应用程序,出现softlockup,有关软件看门狗的原理,看另一文章。有解决这个问题,有些信息是必须的:1.log 要打印出时间戳;2.判断是否死锁在某个信号量,或者说看某个进程卡在哪里不调度,ps -l可以看出没个进程的进入和退出时间,不知为什么不支持; 另外的方法,打开ftrace让它监测sched_switch 事件也是可以的。
2013-09-15 09:03:49 1384
原创 how to use ftrace
How to configure ftrace into kernel?1. Debug Filesystem2. tracers: kernel function tracer kernel function Graph tracertracing mini-HOWTO:# mount -t debugfs nodev /sys/kernel/d
2013-09-13 11:26:23 1811 3
原创 softlock机制
kernel/watchdog.c有关lockup_detector初始化创建kick_timer and watchdog threadvoid __init lockup_detector_init(void){ void *cpu = (void *)(long)smp_processor_id(); int err; err = cpu_c
2013-09-10 14:05:14 1882
转载 浅谈linux的死锁检测
死锁:就是多个进程(≥2)因为争夺资源而相互等待的一种现象,若无外力推动,将无法继续运行下去。注意,只有在多进程或者多线程之间或者他们与中断之间相互通讯或者共享资源才有可能发生死锁,单线程或者进程之间没有联系的话,一般不会发生死锁。锁的种类比较多,这里主要说自旋锁和信号量。两者的差别就在于前者获得不到资源时的动作是不断的资源(即忙转浪费cpu的cycles)而后者则表现为睡眠等待。死锁的基
2013-09-10 14:00:14 1389 5
原创 USB gadget driver: adb
1. init clue:/* 1]create data structure: adb_dev * 2]调用misc_register(&adb_device); **/struct adb_data { bool opened; bool enabled;};struct adb_dev { struct usb_function
2013-09-06 16:51:39 2246
原创 USB gadget driver: mass storage
1. based on init function clue;struct mass_storage_function_config { struct fsg_config fsg; struct fsg_common *common;}; struct fsg_config { unsigned nluns; st
2013-09-06 13:23:44 3943 4
转载 如何通过kill命令干掉内核线程?
如何通过kill命令干掉内核线程?如题。我用kill -9 pid杀不掉,是不是内核线程命令有特别的?回复 #1 tbwises 的帖子以前内核是通过block所有的信号,现在是通过SIG_IGN忽略信号,即使是SIGKILL,SIGSTOP所以发送一个SIGKILL到内核线程的后果和发送一个sig到忽略它的用户进程是类似的内核线程是内核因需要而创建的,内核线程知道自己什么时候该做
2013-09-06 08:44:16 7090 1
原创 USB gadget driver: ACM
以 init为线索:acm_function_init -> gserial_setup(cdev->gadget, MAX_ACM_INSTANCES);int gserial_setup(struct usb_gadget *g, unsigned count){ struct usb_cdc_line_coding coding; for (i =
2013-09-05 14:32:29 5798
原创 USB gadget driver framework
USB gadget driver的框架可分为三部分:UDC-core, composite.c and android.c,其中 composite.c是核心,其他两部分都要bind 到 composit上。1. UDC-core结构体usb_gadget中包含指向usb_ep的link head,通过该link head,可以访问所有的usb_ep, usb_ep中包含了具体的,最
2013-09-04 15:42:05 3561 1
转载 在 Linux 下用户空间与内核空间数据交换的方式,第 2 部分: procfs、seq_file、debugfs和relayfs
一、procfsprocfs是比较老的一种用户态与内核态的数据交换方式,内核的很多数据都是通过这种方式出口给用户的,内核的很多参数也是通过这种方式来让用户方便设置的。除了sysctl出口到/proc下的参数,procfs提供的大部分内核参数是只读的。实际上,很多应用严重地依赖于procfs,因此它几乎是必不可少的组件。前面部分的几个例子实际上已经使用它来出口内核数据,但是并没有讲解如何使用,本
2013-09-02 18:23:02 704
转载 Linux中C语言open函数打开或创建文件详细讲解
头文件:#include #include #include函数原型:int open( const char * pathname, int flags);int open( const char * pathname,int flags, mode_t mode);作用:以各种方式打开文件返回值:返回打开的文件句柄,-1打开失败函数说明参数pathn
2013-09-02 15:53:29 3711
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人