- 博客(60)
- 资源 (41)
- 收藏
- 关注
转载 Linux内核源码特殊用法
http://ilinuxkernel.com/files/5/Linux_Kernel_Source_Code.htm1 前言Linux内核源码主要以C语言为主,有一小部分涉及汇编语言,编译器使用的是Gcc。初次看内核源码,会遇到一些难以理解、晦涩的代码;而恰恰是这些晦涩的代码,在内核源码中经常出现。把一些晦涩、常见的代码看懂后,大家会发现看内核代码越来越顺利。本文以x86
2014-07-12 13:34:33
604
转载 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux内核抢占实现机制分析
目录(?)[+]内核抢占概述用户抢占不可抢占内核的特点为什么需要内核抢占什么情况不允许内核抢占内核抢占时机如何支持抢占内核何时需要重新调度参考资料 Linux内核抢占实现机制分析 Sailor_forever sailing_9806@163.com转载请注明http://blog.youkuaiyun.com/sailor_8318/archive/2008/09/
2013-08-08 11:39:18
630
转载 【嵌入式Linux学习七步曲之第五篇 Linux内核及驱动编程】Linux系统调用的实现机制分析
linuxlinux内核编程嵌入式vectorsocket目录(?)[+]系统调用意义APIPOSIXC库的关系系统调用的实现系统调用处理程序系统调用号参数传递参数验证系统调用的返回值添加新系统调用访问系统调用系统调用上下文系统调用访问示例从用户空间直接访问系统调用参考文档附录24 内核Linux系统调用的列表 Linux系统调用的实现机制分
2013-08-08 11:37:01
980
原创 Linux 内核堆栈
所有进程(包括内核进程和普通进程)都有一个内核栈,在x86的32位机器上内核栈大小可以为4KB或8KB,这个可以在编译内核的时候配置。内核栈的用途有两个:1)当进程陷入内核态,即内核代表进程执行系统调用时,系统调用的参数就放在内核栈上,内核栈记录着进程的在内核中的调用链;2)在内核栈被配置成8KB大小的情况下,当中断服务程序中断当前进程时,它将使用当前被中断进程的内核栈。对于用户进程,其既有用
2013-08-07 13:16:58
597
转载 Run-time Power Management Framework
Run-time Power Management Framework for I/O Devices(C) 2009 Rafael J. Wysocki rjw@sisk.pl>, Novell Inc.1. IntroductionSupport for run-time power management (run-time PM) of I/O devices is provid
2013-07-27 12:53:00
952
原创 linux时钟学习__s5pv210 笔记
(1)MACHINE_START //(mach-smdkv210.c) smdkv210_map_io();MACHINE_END(2)smdkv210_map_io——>(3)s5p_init_io(){ s3c_init_cpu(idcode, cpu_ids, ARRAY_SIZE(cpu_ids)); //查看本文件的c
2013-07-18 10:06:23
704
转载 Linux内核时间管理
Linux内核时间管理(1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用。 相对于事件驱动而言,内核中有大量函数是基于时间驱动的。 有些函数是周期执行的,比如每10毫秒刷新一次屏幕; 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务。 要区分: *绝对时间和相对时间
2013-07-17 17:07:55
546
原创 LCD设备驱动 相关结构体
1.fb_info 结构体 帧缓冲设备最关键的一个数据结构体是fb_info 结构体(为了便于记忆,我们把它简称为“FBI”),FBI中包括了关于帧缓冲设备属性和操作的完整描述,这个结构体的定义如代码清单 所示。1 struct fb_info 2 { 3 int node; 4 int flags; 5 struct f
2013-07-17 14:27:17
1043
转载 Linux内核通知链notifier
1.内核通知链表简介(引用网络资料) 大多数内核子系统都是相互独立的,因此某个子系统可能对其它子系统产生的事件感兴趣。为了满足这个需求,也即是让某个子系统在发生某个事件时通知其它的子系统,Linux内核提供了通知链的机制。通知链表只能够在内核的子系统之间使用,而不能够在内核与用户空间之间进行事件的通知。 通知链表是一个函数链表,链表上的每一个节点都注册了一个函数。当某个事情发
2013-07-17 12:17:27
621
转载 Linux Notifier机制
原文 http://blog.sina.com.cn/s/blog_55465b470100knc0.html一:数据结构//notifier.hstruct notifier_block { int (*notifier_call)(struct notifier_block *, unsigned long, void *); struct notif
2013-07-17 12:15:10
1277
转载 USB的VID和PID,以及分类(Class,SubClass,Protocol)
USB的VID和PID,以及分类(Class,SubClass,Protocol)分类: USB/COM2012-08-17 17:41 1730人阅读 评论(2) 收藏 举报class产品原文地址 http://blog.youkuaiyun.com/gaojinshan/article/details/7878330USB(Universal Serial
2013-07-08 21:31:44
1560
转载 input子系统分析
一、input子系统概述 在linux下,按键、触摸屏、鼠标等都可以利用input接口函数来实现设备驱动。 1,linux输入子系统主要分三层: 驱动,输入CORE, 事件处理层。 驱动根据CORE提供的接口,向上报告发生的按键动作。然后CORE根据驱动的类型,分派这个报告给对应的事件处理层进行处事。 事件处理层把数据变化反应到设备模型的文件中(事件缓冲区)。并通知在这些设
2013-06-18 11:55:59
601
转载 kmalloc vmalloc kzalloc malloc 和 get_free_page()
kmalloc vmalloc kzalloc malloc 和 get_free_page()kmalloc vmalloc kzalloc get_free_page()是内核空间申请内存空间函数malloc是用户空间申请内存函数 一 ,kmalloc() 与 kfree() 和get_free_page的区别1,用于申请较小的、连
2013-06-14 12:15:05
409
转载 在Linux中用软件降低CPU的频率
在Linux中用软件降低CPU的频率原文:http://blog.youkuaiyun.com/absurd/article/details/620128linux工作前段时间预研用的实验板的配置为,CPU是500多M的PXA270,内存64M。为了考查软件在不同硬件配置是的性能问题,我们需要降低CPU的频率和内存的大小。调整内存的大小很容易,在linux的起始参数中加上mem=32M
2013-05-27 17:01:32
965
转载 USB驱动程序代码分析——鼠标用作键盘
USB驱动程序代码分析——鼠标用作键盘 /* * drivers\hid\usbhid\usbmouse.c */#include #include #include #include #include #include static struct input_dev *uk_dev;static char *usb_buf;
2013-05-16 17:23:33
695
原创 补码 原码 反码
假设有一个 int 类型的数,值为5,那么,我们知道它在计算机中表示为:00000000 00000000 00000000 000001015转换成二制是101,不过int类型的数占用4字节(32位),所以前面填了一堆0。现在想知道,-5在计算机中如何表示? 在计算机中,负数以原码的补码形式表达。什么叫补码呢?这得从原码,反码说起。 原码:一个正数,按照绝对值大小
2013-05-16 10:12:57
687
转载 request_irq中断模型 共享中断
request_irq中断模型原文 :http://blog.youkuaiyun.com/hsly_support/article/details/7558913Kernel中断处理模型结构图如下:下面简单介绍一下:1. Linux定义了名字为irq_desc的中断例程描述符表:(include/linux/irq.h) struct irqdesc
2013-05-09 12:14:30
1447
转载 共享中断
原文 : http://blog.youkuaiyun.com/jhluroom/article/details/6882365Linux可以让多个设备共享一个中断号,而且共享同一中断的中断处理程序形成一个链表,内核对每个中断处理程序都要执行,那么,没有产生中断的设备本该靠边站的,它的中断处理程序也被执行了。 实际上:共享的处理程序与非共享的处理程序在注册和运行方式上比较相似,但差异主要有
2013-05-09 12:11:25
582
转载 Linux内核I2C子系统驱动(三)
I2C子系统驱动(三) 当适配器加载到内核后,就针对具体设备编写I2C设备驱动。编写设备驱动有两种方法,一种是利用系统提供的i2c-dev.c实现,另一种为i2c编写一个独立的设备驱动。一、i2c-dev.c控制i2c设备 i2c-dev.c没有针对具体设备来设计,提供了通用i2cdev_read()、i2cdev_write()函数来对应用户
2013-04-23 16:57:39
772
转载 Linux驱动之设备模型(5)
6.设备6.1 设备l Linux设备模型中每一个设备用device结构来表示struct device { struct device *parent; /* 父设备,通常是某种总线或者是宿主设备 */ struct device_private *p; /* 私有数据指针:子
2013-04-23 16:54:52
544
转载 探本溯源——深入领略Linux内核绝美风光之系统启动篇(四)
在完成控制台初始化之后,可以看到在arch\x86\boot\Main.c文件的main主函数中接着执行if (cmdline_find_option_bool("debug")),这条if判断语句首先调用cmdline_find_option_bool函数在内核命令行中查找"debug"选项,该函数的实现和在系统启动篇(三)[上]一文中剖析过的cmdline_find_option函数非常相似,
2013-04-23 16:35:15
1403
转载 【连载】系统启动篇(三)[下]——控制台初始化续
接上文:系统启动篇(三)[上]在计算机中,用于数据传输的方式总共分为两种:①串行通信(Serial Communication),传输数据时只用一根线——按位发送和接受字节,速度慢但能够实现远距离通信,使用串行端口的设备有鼠标和USB等。②并行通信(Parallel Communication),使用多条线将每个数据的二进制位同时进行传输,传输速度较快但因为存在干扰而不能实现远距离通信
2013-04-23 16:33:10
1005
转载 系统启动篇(三)[上]
进入main函数后,Linux内核执行硬件检测及初始化工作,即便在此之前BIOS已经对大部分硬件设备进行了相应的初始化,然而Linux并不依赖于BIOS,而是以特定的方式重新初始化相关设备,这样做的目的是为了增强可移植性及健壮性。需要强调的一点是,此时C语言仍旧运行在实模式状态下。拷贝启动参数进入arch\x86\boot\Main.c文件的main函数后,做的第一件事就是将从Ke
2013-04-23 16:31:28
750
转载 探本溯源——深入领略Linux内核绝美风光之系统启动篇(二)
在前文结尾处我们提到内核映像的加载是由专用的bootloader比如LILO或是GRUB来实现的,而在x86架构下Linux内核通常使用其中之一的GRUB,它通过执行initrd文件来识别内核映像所在的文件系统进而执行加载,然而有一个需要注意的问题是,并非所有的物理地址空间对内核而言都是可用的,比如其中的某个物理地址范围可能被映射为I/O设备的共享内存,也可能其中的一个物理页框存放着BIOS数据,
2013-04-23 16:30:06
1056
转载 探本溯源——深入领略Linux内核绝美风光之系统启动篇(一)
从拿到Linux3.1.1版内核源码并搭建好阅读环境开始,到现在大约已经徘徊了两个多月的时间,期间google了大大小小的文章,才刚刚理清了些许思路并找到了阅读的切入口。对于内核初学者来说一个好的指导比什么都重要,有关Linux内核学习的方法论可以参考fudan_abc写的Linux内核修炼之道,作者以其深厚的内核功底加上诙谐幽默的文字对读者娓娓道来,这样的感染力使得我几乎是一口气不断的看完了整个
2013-04-23 16:28:33
878
转载 Linux时间子系统之八:动态时钟框架(CONFIG_NO_HZ、tickless)
在前面章节的讨论中,我们一直基于一个假设:Linux中的时钟事件都是由一个周期时钟提供,不管系统中的clock_event_device是工作于周期触发模式,还是工作于单触发模式,也不管定时器系统是工作于低分辨率模式,还是高精度模式,内核都竭尽所能,用不同的方式提供周期时钟,以产生定期的tick事件,tick事件或者用于全局的时间管理(jiffies和时间的更新),或者用于本地cpu的进程统计、时
2013-04-23 09:26:42
840
转载 Linux时间子系统之七:定时器的应用--msleep(),hrtimer_nanosleep()
我们已经在前面几章介绍了低分辨率定时器和高精度定时器的实现原理,内核为了方便其它子系统,在时间子系统中提供了一些用于延时或调度的API,例如msleep,hrtimer_nanosleep等等,这些API基于低分辨率定时器或高精度定时器来实现,本章的内容就是讨论这些方便、好用的API是如何利用定时器系统来完成所需的功能的。/***********************************
2013-04-23 09:25:55
597
转载 Linux时间子系统之六:高精度定时器(HRTIMER)的原理和实现
上一篇文章,我介绍了传统的低分辨率定时器的实现原理。而随着内核的不断演进,大牛们已经对这种低分辨率定时器的精度不再满足,而且,硬件也在不断地发展,系统中的定时器硬件的精度也越来越高,这也给高分辨率定时器的出现创造了条件。内核从2.6.16开始加入了高精度定时器架构。在实现方式上,内核的高分辨率定时器的实现代码几乎没有借用低分辨率定时器的数据结构和代码,内核文档给出的解释主要有以下几点:
2013-04-23 09:25:18
642
转载 Linux时间子系统之五:低分辨率定时器的原理和实现
利用定时器,我们可以设定在未来的某一时刻,触发一个特定的事件。所谓低分辨率定时器,是指这种定时器的计时单位基于jiffies值的计数,也就是说,它的精度只有1/HZ,假如你的内核配置的HZ是1000,那意味着系统中的低分辨率定时器的精度就是1ms。早期的内核版本中,内核并不支持高精度定时器,理所当然只能使用这种低分辨率定时器,我们有时候把这种基于HZ的定时器机制成为时间轮:time wheel。虽
2013-04-23 09:24:32
567
转载 Linux时间子系统之四:定时器的引擎:clock_event_device
早期的内核版本中,进程的调度基于一个称之为tick的时钟滴答,通常使用时钟中断来定时地产生tick信号,每次tick定时中断都会进行进程的统计和调度,并对tick进行计数,记录在一个jiffies变量中,定时器的设计也是基于jiffies。这时候的内核代码中,几乎所有关于时钟的操作都是在machine级的代码中实现,很多公共的代码要在每个平台上重复实现。随后,随着通用时钟框架的引入,内核需要支持高
2013-04-23 09:23:54
838
转载 Linux时间子系统之三:时间的维护者:timekeeper
本系列文章的前两节讨论了用于计时的时钟源:clocksource,以及内核内部时间的一些表示方法,但是对于真实的用户来说,我们感知的是真实世界的真实时间,也就是所谓的墙上时间,clocksource只能提供一个按给定频率不停递增的周期计数,如何把它和真实的墙上时间相关联?本节的内容正是要讨论这一点。1. 时间的种类内核管理着多种时间,它们分别是:RTC时间 wall time
2013-04-23 09:23:11
572
转载 Linux时间子系统之二:表示时间的单位和结构
分类: Linux内核架构 Linux时间管理系统 2012-09-14 17:18 2019人阅读 评论(0)收藏举报linuxstruct数据结构timer脚本list目录(?)[+]jiffiesstruct timevalstruct timespecstruct ktime人们习惯用于表示时间的方法是:年、月、日、时、分、秒、毫秒、
2013-04-23 09:22:00
527
转载 Linux时间子系统之一:clock source(时钟源)
Linux时间子系统之一:clock source(时钟源)分类: Linux内核架构 Linux时间管理系统 2012-09-13 22:25 2381人阅读 评论(0)收藏举报目录(?)[+]struct clocksource结构rating时钟源的精度read回调函数mult和shift字段clocksource的注册和初始化clocks
2013-04-23 09:18:43
610
转载 Linux时间子系统之四(2):定时器…
4. tick_device当内核没有配置成支持高精度定时器时,系统的tick由tick_device产生,tick_device其实是clock_event_device的简单封装,它内嵌了一个clock_event_device指针和它的工作模式:[cpp] viewplaincopystruct tick_device { s
2013-04-23 09:04:54
726
转载 输入子系统读书笔记 input
原文地址 http://100ask.net/forum/showtopic-3777.aspx###基于内核Linux-2.6.32.32012年4月23日:输入子系统:input子系统 使用别人做好的框架 1、输入子系统框架/drivers/input.c “核心层 ”从入口函数开始分析 err= regis
2013-04-23 09:04:45
573
转载 对输入子系统分析总结
原文链接 http://100ask.net/forum/showtopic-3567.aspx在drivers/input/input.c中: 进入模块入口函数input_init : err= register_chrdev(INPUT_MAJOR, "input",&input_fops)
2013-04-23 09:04:43
482
转载 Linux输入子系统-数据结构关系
原文链接 http://blog.chinaunix.net/uid-26853826-id-3177048.html Linux输入子体统三层结构的关系,如下数据结构关系图,本文以触摸屏设备为例进行分析。 三个全局变量: 1.底层所有的驱动设备input_dev都连接到全局链表input_dev_list中 2.事件处理层所有的处理器input_h
2013-04-23 09:04:41
424
转载 对Linux内核中进程上下文和中断上…
原文链接: http://www.embedu.org/Column/Column240.htm 内核空间和用户空间是操作系统理论的基础之一,即内核功能模块运行在内核空间,而应用程序运行在用户空间。现代的CPU都具有不同的操作模式,代表不同的级别,不同的级别具有不同的功能,在较低的级别中将禁止某些操作。Linux系统设计时利用了这种硬件特性,使用了两个级别,最高级别和最低
2013-04-23 09:04:38
458
转载 进程上下文和中断上下文
进程上下文和中断上下文是操作系统中很重要的两个概念,这两个概念在操作系统课程中不断被提及,是最经常接触、看上去很懂但又说不清楚到底怎么回事。造成这种局面的原因,可能是原来接触到的操作系统课程的教学总停留在一种浅层次的理论层面上,没有深入去研究。 处理器总处于以下状态中的一种:1、内核态,运行于进程上下文,内核代表进程运行于内核空间;2、内核态,运行于中断上下文,内核代表硬件运行
2013-04-23 09:04:36
412
转载 Linux中断(interrupt)子系统之三…
1. 中断流控层简介早期的内核版本中,几乎所有的中断都是由__do_IRQ函数进行处理,但是,因为各种中断请求的电气特性会有所不同,又或者中断控制器的特性也不同,这会导致以下这些处理也会有所不同: 何时对中断控制器发出ack回应;mask_irq和unmask_irq的处理;中断控制器是否需要eoi回应?何时打开cpu的本地irq中断?以便允许irq的嵌套;中断数据结构的同步和
2013-04-23 09:04:34
715
android 360°全方面性能调优.pdf
2023-09-20
Android闹钟内核驱动-完美分析
2014-05-29
智能手机和平板电脑设计中单键开关机和复位智能方案
2014-05-18
微机原理与系统设计 西安电子科技大学
2010-08-11
微机原理 与 系统设计
2010-08-11
项目10_串行口通信-PDA中的串口
2010-08-11
linux_device_driver2
2010-08-11
MySQL 参考手册
2010-08-11
Thinking in C++
2010-08-11
自己动手打造嵌入式Linux软硬开发环境
2010-08-11
一种实现嵌入式Linux的新方法-ramdisk
2010-08-11
数据库 嵌入式 数据库 简介
2010-08-11
嵌入式 Linux 中增加 自己的 设备驱动 程序
2010-08-11
嵌入式 Linux 系统进程 调度
2010-08-11
设备驱动 程序 编译 进嵌入式 Linux内核
2010-08-11
UcLinux 添加 自定义 应用程序 详细过程
2010-08-11
U-Boot 常用命令 详解
2010-08-11
linux 环境变量 配置 实用技巧 配置Linux 操作系统 环境变量
2010-08-11
Linux 环境变量 设置总结
2010-08-11
linux 环境变量 (二)
2010-08-11
programming the arm microprocessor for embedded systems
2010-08-11
C语言 算法 速查手册
2010-08-11
ubuntu桌面基础
2010-07-30
Bash使用 (很详细的讲解)
2010-07-30
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人