操作系统
qingkongyeyue
拼搏到无能为力,坚持到感动自己,有些路走下去很长,很累,但是不走会后悔。人生最大的痛苦,莫过于,坚持了不该坚持的,而放弃了不该放弃的
展开
-
Linux内核设计与实现读书笔记-定时器和时间管理
一、定时器和时间管理HZ节拍率(HZ)是时钟中断的频率,表示的一秒内时钟中断的次数。比如 HZ=100 表示一秒内触发100次时钟中断程序。jiffiesjiffies用来记录自系统启动以来产生的总节拍数。比如系统启动了 N 秒,那么 jiffies就为 N×HZ时间中断处理程序时钟中断处理程序作为系统定时器而注册到内核中,体系结构的不同,可能时钟中断处理程序中处理的内容不同。...原创 2018-07-09 20:32:50 · 902 阅读 · 0 评论 -
linux 内核定时器 timer_list详解
转自http://www.cnblogs.com/leaven/archive/2010/08/19/1803382.htmlLinux内核2.4版中去掉了老版本内核中的静态定时器机制,而只留下动态定时器。相应地在timer_bh()函数中也不再通过run_old_timers()函数来运行老式的静态定时器。动态定时器与静态定时器这二个概念是相对于Linux内核定时器机制的转载 2017-07-10 17:59:11 · 10485 阅读 · 0 评论 -
linux下动态链接库.so文件 静态链接库.a文件创建及使用
转自http://www.cnblogs.com/ggYYa/p/5729227.htmlLinux下文件的类型是不依赖于其后缀名的,但一般来讲: .o,是目标文件,相当于windows中的.obj文件 .so 为共享库,是shared object,用于动态连接的,和dll差不多 .a为静态库,是好多个.o合在一起,用于静态连接 .la为libtool转载 2017-06-19 21:10:53 · 6811 阅读 · 0 评论 -
Linux内核中的Kconfig、Makefile、.config
转自http://www.cnblogs.com/taomaomao/archive/2012/01/05/2312816.htmlKconfig 也可以参考http://blog.csdn.net/yf210yf/article/details/9416045毛毛同学今天学习了驱动程序模块的安装与卸载,在这个过程中毛毛发现,内核的目录中有许多的Kconfig、Makefile转载 2017-06-07 23:11:07 · 452 阅读 · 0 评论 -
字符设备节创建的两种方法
转自http://10274409.blog.51cto.com/10264409/1721711在Linux下,字符设备和块设备都体现了“一切皆为文件”的思想,对于这两种设备而言,他们在Linux系统中都有一个对应的文件来“代表”它们的存在,那就是设备文件。应用程序通过操作某个设备文件,便可以操作对应的硬件。设备有主设备号和次设备号,例如在Linux下通过ls -l /dev/ttyS0命令转载 2017-03-28 17:49:35 · 409 阅读 · 0 评论 -
Linux内核中ioremap映射的透彻理解
转自http://blog.csdn.net/do2jiang/article/details/5450839几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器、状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址。根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I/O映射方式(I/O-mapped) 典型地,如X86转载 2017-03-30 20:02:35 · 780 阅读 · 0 评论 -
ioremap和mmap
ioremap是将物理地址转换为虚拟地址mmap是将设备内存线性地址映射到用户地址空间linux的线程只能访问虚拟地址,不管是不是内核,ioremap应用,比如有个寄存器地址是0xe8000000你要用ioremap映射后,才能访问地址0xe8000000。这两个地址是不同的,mmu会帮你搞定,对你是透明的mmap在内核我用过ops中的mmap方法我写过一个例程,见附件。里面还有用转载 2017-05-15 22:51:11 · 1733 阅读 · 0 评论 -
深入理解Linux中内存管理
转自http://kb.cnblogs.com/page/180830/前一段时间看了《深入理解Linux内核》对其中的内存管理部分花了不少时间,但是还是有很多问题不是很清楚,最近又花了一些时间复习了一下,在这里记录下自己的理解和对Linux中内存管理的一些看法和认识。 我比较喜欢搞清楚一个技术本身的发展历程,简而言之就是这个技术是怎么发展而来的,在这个技术之前存在哪些技术,这些技术转载 2017-05-15 22:15:08 · 300 阅读 · 0 评论 -
cdev 结构体、设备号相关知识解析
转自http://blog.csdn.net/zqixiao_09/article/details/50839042一、字符设备基础知识1、设备驱动分类 Linux系统将设备分为3类:字符设备、块设备、网络设备。使用驱动程序:字符设备:是指只能一个字节一个字节读写的设备,不能随机读取设备内存中的某一数据,读取数据需要按照先后数据。字符设转载 2017-04-22 11:16:26 · 680 阅读 · 0 评论 -
Linux系统调用(syscall)原理
http://blog.csdn.net/nanfenglei23/article/details/41928293版权声明:本文为博主原创文章,未经博主允许不得转载。Linux体系结构内核空间与用户空间是程序执行的两种不同状态,通过系统调用和硬件中断能够完成从用户空间到内核空间的转移。如下图所示:linux 体系结构图从上图得知,Linux转载 2017-05-10 21:41:31 · 16568 阅读 · 0 评论 -
常用系统调用write、read、ioctl
1、write系统调用2、read函数调用原创 2017-04-07 21:41:50 · 1347 阅读 · 0 评论 -
module_platform_driver宏解析
转自http://blog.csdn.net/richu123/article/details/51331081该函数实际是一个宏,它在include/Linux/platform_device.h中定义如下:宏定义中对应3个参数:1个是结构体,另外两个是函数,分别用于注册和注销结构体。[cpp] view plain copy转载 2017-04-04 12:00:04 · 826 阅读 · 0 评论 -
如何使用# ## ... _ _VA_ARGS_ _
转自http://blog.csdn.net/hxxiaopei/article/details/1355364 1.#假如希望在字符串中包含宏参数,ANSI C允许这样作,在类函数宏的替换部分,#符号用作一个预处理运算符,它可以把语言符号转化程字符串。例如,如果x是一个宏参量,那么#x可以把参数名转化成相应的字符串。该过程称为字符串化(stringizing).#incldue转载 2017-04-04 11:02:27 · 336 阅读 · 0 评论 -
linux内核及驱动开发中有关__init,__exit和__initdata的用法
转自http://blog.csdn.net/gao5528/article/details/6337409要了解Linux Kernel代码的分段信息,需要了解一下gcc的__attribute__的编绎属性或定义的函数或数,__attribute__主要用于改变所声明据的特性,它有很多子项,用于改变作用对象的特性。比如对函数,noline将禁止进行内联扩展、noreturn表示没有返回转载 2017-04-04 10:45:06 · 1417 阅读 · 0 评论 -
kernel编译生成Image zImage uImage的区别
转自http://blog.csdn.net/skyflying2012/article/details/35226411内核编译(make)之后会生成两个文件,一个Image,一个zImage,其中Image为内核映像文件,而zImage为内核的一种映像压缩文件,Image大约为4M,而zImage不到2M。 uImage是uboot专用的映像文件,它是在zIma转载 2017-04-12 18:07:41 · 1131 阅读 · 0 评论 -
make menuconfig过程讲解
参考http://blog.csdn.net/a746742897/article/details/52247292cp config_ok .configmake menuconfig中把config_ok拷贝成为.config的原因当我们在执行make menuconfig这个命令时,系统到底帮我们做了哪些工作呢?这里面一共涉及到了一下几个文件我们来一一讲解Linu转载 2016-09-11 12:14:05 · 17951 阅读 · 4 评论 -
Linux下的proc目录详解
转自http://bbs.eeworld.com.cn/thread-477991-1-1.html文章结构:1.什么是proc目录2. 初识proc目录3. 从proc窥看系统详情1.什么是proc目录proc是Linux系统下一个很重要的目录。 它跟/etc, /home等这些系统目录不同, 它不是一个真正的文件系统, 而是一个虚拟的文件系统。 它不存在转载 2017-04-11 18:56:18 · 2697 阅读 · 0 评论 -
ARM MMU工作原理剖析
转自http://blog.chinaunix.net/uid-20698426-id-136197.html一、MMU的产生 许多年以前,当人们还在使用DOS或是更古老的操作系统的时候,计算机的内存还非常小,一般都是以K为单位进行计算,相应的,当时的程序规模也不大,所以内存容量虽然小,但还是可以容纳当时的程序。但随着图形界面的兴起还用用户需求的不断增大,应用程序的规模也随之转载 2017-04-01 23:01:57 · 238 阅读 · 0 评论 -
Linux时钟管理透彻分析
转自http://blog.csdn.net/qq_21792169/article/details/51085111硬件资源越来越庞大和复杂,内核的另一个挑战就是要便捷的管理这些资源。同时,面对如此之多的平台不同的CPU,管理机制需要统一适用,这就需要对资源的管理抽象到更加通用的层次。CPU中各个模块都需要时钟驱动,内核需要一种机制能通用所有的平台,方便的管理CPU上所有的clk转载 2017-07-11 18:53:33 · 2251 阅读 · 0 评论 -
Linux设备驱动中断机制
转自http://www.cnblogs.com/chen-farsight/p/6155503.html【主要内容】Linux设备驱动编程中的中断与定时器处理【正文】一、基础知识1、中断所谓中断是指CPU在执行程序的过程中,出现了某些突发事件急待处理,CPU必须暂停执行当前的程序,转去处理突发事件,处理完毕后CPU又返回程序被中断的位置并继续执行。2、中断的分类转载 2017-07-11 19:39:16 · 1300 阅读 · 0 评论 -
telnet网络登录过程(涉及伪终端)
转自 http://blog.csdn.net/chdhust/article/details/8496199telnet网络登录过程(涉及伪终端)1、 虚拟终端或串口终端的数目是有限的,虚拟终端一般就是/dev/tty1~/dev/tty6六个,串口终端的数目也不超过串口的数目。然而网络终端或图形终端窗口的数目却是不受限制的,这是通过伪终端(Pseudo TTY)实现的。转载 2017-07-02 16:38:22 · 2714 阅读 · 0 评论 -
Linux内核设计与实现读书笔记-虚拟文件系统
一、什么是文件系统?摘自:https://zhidao.baidu.com/question/428228111.html 文件系统是操作系统用于明确磁盘或分区上的文件的方法和数据结构;即在磁盘上组织文件的方法。也指用于存储文件的磁盘或分区,或文件系统种类。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统。文件系统由三部分组成:与文件管理有关软件、被管理文件以及实...原创 2018-07-09 20:23:16 · 842 阅读 · 0 评论 -
移植内核学习笔记1-----框架介绍及简单修改··
内核的源代码可在原创 2016-09-16 15:07:42 · 866 阅读 · 0 评论 -
移植内核学习笔记3-----支持yaffs文件系统
yaffs文件系统是专门为nand flash定义的一种文件系统格式,比jffs更适用于nand flash原创 2016-09-17 15:11:45 · 858 阅读 · 0 评论 -
移植内核学习笔记2-----修改分区及制作根文件系统
1、制作分区(1)分析在上节实验中出现以下问题:无法挂载根文件系统在以前u-boot烧写文件系统时是烧写到某个地方,以前的分区是下面那样划分的,划分为4个分区,但是上面有8个分区分区修改参考(分区是在代码里面写死的,u-boot怎么设置不会影响内核)http://blog.csdn.net/qingkongyeyue/article/details/522011原创 2016-09-17 08:14:34 · 2100 阅读 · 0 评论 -
编译驱动到内核的两种方式
编译驱动模块有两种方法可以编译自己写的驱动程序。第一种方法:直接加入内核1. 将驱动程序放入内核相应的驱动文件夹,例如名字为my_led.c2. 修改此驱动目录下的Kconfig文件,加入对该驱动文件的配置选项:config MY_LEDbool "S3C2410 LED Driver" depens on ARCH_S3C2410help LED dri转载 2017-09-12 10:35:46 · 9419 阅读 · 1 评论 -
虚拟地址到物理地址的映射
转自http://blog.csdn.net/sinat_16790541/article/details/42247907虚拟地址和物理地址========================================= CPU通过地址来访问内存中的单元,地址有虚拟地址和物理地址之分,如果CPU没有MMU(Memory Management Unit, 内存管理单元),或转载 2017-09-06 14:18:31 · 4178 阅读 · 0 评论 -
移植驱动到内核学习笔记1-----DM9000C驱动
1、实验(内核对mini2440已经支持网卡)(1)设置机器ID为Mini2440,启动(2)配置IP,ping一下服务器(3)挂载文件系统2、内核对mini2440已经支持了网卡,对smdk2440不支持。在DM9000.c驱动程序中,先看入口函数,是注册一个platform_driver结构体platform_driver结构体在内核里面原创 2016-09-20 09:45:44 · 1621 阅读 · 0 评论 -
wait_event_interruptible 使用方法
转自http://blog.csdn.net/allen6268198/article/details/8112551. 关于 wait_event_interruptible() 和 wake_up()的使用 读一下wait_event_interruptible()的源码,不难发现这个函数先将 当前进程的状态设置成TASK_INTERRUPTIBLE,然后调用schedu转载 2017-07-29 12:18:58 · 6770 阅读 · 0 评论 -
移植内核学习笔记4-----内核之裁剪及ECC简介及制作补丁
1、裁剪内核(1)查看内核大小(2)裁剪(通过make menuconfig去掉不需要的项)把一些单板文件去掉看.config文件,看一下有哪些东西,如单板:搜索mini2440的单板,如单板AT2440EVB没见过可以在搜索栏中搜索并去掉(输入斜杠进入搜索界面)搜索结果如下,到相应位置去掉不必要项把一些不需要的文件系统去掉前原创 2016-09-18 14:43:39 · 1334 阅读 · 1 评论 -
MMU的通俗理解
转自http://blog.csdn.net/kangear/article/details/8797533MMU的通俗理解 看了两天了MMU,有点眉目,记下来。只说原理,不说具体的寄存器设置。 没有MMU时候,CPU核和外部存储器直接对话。情况是这样的: 有了MMU,CPU核外部存转载 2017-08-10 09:58:35 · 1124 阅读 · 0 评论 -
platform_device与platform_driver
转自http://blog.csdn.net/zhandoushi1982/article/details/5130207 做Linux方面也有三个多月了,对代码中的有些结构一直不是很明白,比如platform_device与platform_driver一直分不清关系。在网上搜了下,做个总结。两者的工作顺序是先定义platform_device -> 注册 platform_dev转载 2017-04-03 11:08:37 · 322 阅读 · 0 评论 -
list_add_tail 双向链表实现分析
转自http://www.xuebuyuan.com/1389026.html在看内核v4l2示例代码driver/media/video/vivi.c时 ,看到list_add_tail()函数,现在对其进行分析:struct list_head { struct list_head *next, *prev;}; list_add_tail(&buf-转载 2017-07-25 17:45:13 · 7587 阅读 · 0 评论 -
Linux利用list_head结构实现双向链表
转自http://www.cnblogs.com/bastard/archive/2012/10/19/2731107.html通常实现双向链表的数据结构:struct list_node1{ struct list_node1 *next,*prev; type1 m1; type2 m2;};struct list_node2{ stru转载 2017-07-24 21:16:32 · 442 阅读 · 0 评论 -
Linux中__init、__exit 、__devinit等初始化宏
转自http://blog.csdn.net/wealoong/article/details/7734087linux下 container_of()宏的简要解析ARRAY_SIZE 宏还是比较有意思的,其实是个c 的编程技巧,这个技巧很有用哦!可以在include/linux/kernel.h 中找到它的定义:#define ARRAY_SIZE(x) (siz转载 2017-06-08 21:57:00 · 11550 阅读 · 0 评论 -
Nand Flash和Nor Flash 启动区别
转自http://blog.163.com/yu_zhi_hui/blog/static/2204511322014678556408/Nor Flash 中有单独的地址线,和数据线是分开的。读取数据时和一般的SRAM相近。而Nand Flash中地址线和数据线是共用的,所以要等程序运行后来控制分析是地址信息还是数据信息。 Nor Flash中有分配地址。开发板上一般外接SDRAM来作转载 2017-06-24 20:40:44 · 678 阅读 · 0 评论 -
linux中/etc/profile 与/etc/environment文件的区别
转自http://www.cnblogs.com/x_wukong/p/4771316.html 先将export LANG=zh_CN加入/etc/profile ,退出系统重新登录,登录提示显示英文。将/etc/profile 中的export LANG=zh_CN删除,将LNAG=zh_CN加入/etc/environment,退出系统重新登录,登录提示显示中文。用户环境建立的过程中转载 2017-06-23 22:39:20 · 8249 阅读 · 1 评论 -
Linux中tty、pty、pts的概念区别
转自http://blog.sina.com.cn/s/blog_638ac15c01012e0v.html基本概念:1> tty(终端设备的统称):tty一词源于Teletypes,或teletypewriters,原来指的是电传打字机,是通过串行线用打印机键盘通过阅读和发送信息的东西,后来这东西被键盘和显示器取代,所以现在叫终端比较合适。终端是一种字符型设备,他有多种类型,转载 2017-07-02 13:20:46 · 2441 阅读 · 0 评论 -
linux模块导出符号 EXPORT_SYMBOL_GPL EXPORT_SYMBOL
转自http://blog.csdn.net/lisan04/article/details/4076013linux2.6的“/prob/kallsyms”文件对应着内核符号表,记录了符号以及符号所在的内存地址。模块可以使用如下宏导出符号到内核符号表:[c-sharp] view plain copy print?EXPORT_SYMBOL(符号名转载 2017-03-25 12:29:24 · 6149 阅读 · 0 评论 -
linux kernel 时钟框架详细介绍
转自http://blog.163.com/huawei_d/blog/static/2116102572012105105657141/前言:在大部分情况下,设备的memory和IRQ资源不足够让驱动正常工作。board setup code 会用device 的platform_data域来为设备提供一些额外的资源。嵌入式系统上的设备会频繁地使用一个或者多个时钟,这些时钟因为转载 2017-03-31 18:15:54 · 3995 阅读 · 0 评论