linux
goodluckwhh
这个作者很懒,什么都没留下…
展开
-
嵌入式 Linux 启动时间优化
1 简介本章包含的话题有启动时间的测量、分析、人因工程(human factors)、初始化技术和优化技巧等。产品花在启动方面的时间直接影响终端用户对该产品的第一印象。一个消费电子设备不管如何引人注目或者设计得怎么好,设备从关机状态到可交互的使用状态所需的时间对于获得正面的用户体验尤为关键。案例 #1 就是在关机状态从头启动一个设备的例子。启动一个设备涉及到许多步骤和一系列的事件。...转载 2018-11-01 12:40:07 · 6569 阅读 · 0 评论 -
linux内核内存管理学习之一(基本概念,分页及初始化)
一、概述1.虚拟地址空间内存是通过指针寻址的,因而CPU的字长决定了CPU所能管理的地址空间的大小,该地址空间就被称为虚拟地址空间,因此32位CPU的虚拟地址空间大小为4G,这和实际的物理内存数量无关。Linux内核将虚拟地址空间分成了两部分:一部分是用户进程可用的,这部分地址是地址空间的低地址部分,从0到TASK_SIZE,称为用户空间一部分是由内核保留使用的,这部分地址是地原创 2013-08-14 20:54:44 · 9924 阅读 · 0 评论 -
linux内核“任务”之定时器、内核线程、系统调用
一、内核定时器1.基本概念在某些场景下,我们需要在特定的时间后做某些动作,但是又不想一直等待而浪费CPU,这个时候定时器是非常合适的机制。定时器用于在将来的某个时间点执行某个函数以完成特定的任务。内核定时器告诉内核在指定的时间点使用特定的参数来调用特定的函数。定时器是异步运行于其注册者的,定时器运行时,注册该定时器的任务可能在休眠也可能在其它处理器上运行,甚至可能已经退出。linu原创 2013-06-01 21:10:58 · 9525 阅读 · 0 评论 -
linux内核“任务”之中断
linux内核中也存在多任务,这些任务可能是不同的类型,它们之间可能也需要进行同步和互斥,在讨论linux内核中的同步和互斥之前有必要先讨论下linux内核中的“任务”类型。linux内核中的任务包括:中断和异常软中断和taskletworkqueue内核定时器内核线程系统调用一、中断和异常1.中断和异常的基本概念1. 中断:指当需要时CPU暂时停止当前程序的执行转而执行处理新原创 2013-05-31 23:44:39 · 4737 阅读 · 0 评论 -
linux内核数据结构以及内核调试
一、可移植性1.1 数据类型可移植性由于内核可能运行在不同的架构上,不同的架构具有不同的机器字长,因而可移植性对内核编程非常重要。内核数据使用的数据类型分为 3 个主要类型标准C类型明确大小的类型用作特定内核对象的类型1.1.1 标准 C 类型使用标准C类型时,必须知道它们的长度在不同架构上可能是会变的,标准C对每种类型的长度没有一个很严格的规定,对于很多类型,它们的长度都原创 2013-11-19 21:51:10 · 3419 阅读 · 0 评论 -
linux内核内存管理学习之二(物理内存管理--伙伴系统)
linux使用伙伴系统来管理物理内存页。一、伙伴系统原理1. 伙伴关系定义:由一个母实体分成的两个各方面属性一致的两个子实体,这两个子实体就处于伙伴关系。在操作系统分配内存的过程中,一个内存块常常被分成两个大小相等的内存块,这两个大小相等的内存块就处于伙伴关系。它满足 3 个条件 : 两个块具有相同大小记为 2^K 它们的物理地址是连续的 从同一个大块中拆分出来2. 伙原创 2013-08-16 20:36:58 · 18344 阅读 · 0 评论 -
ubuntu命令备忘
一、修改文件的默认打开方式1.1 相关配置文件ubuntu和文件打开方式有关的配置文件包括:全局配置文件/etc/gnome/defaults.list /usr/share/applications/mimeinfo.cache 个人配置 ~/.local/share/applications/mimeapps.list ~/.local/share/applica...原创 2013-10-15 22:16:47 · 1282 阅读 · 0 评论 -
STM32学习:存储器组织
一、存储结构 STM32F1有四种存储单元,依次是SRAM、Flash、FSMC和AHB到APB桥(挂载各种外设)。二、存储组织程序存储器、数据存储器、寄存器和输入输出端口被组织在同一个4GB的线性地址空间内。数据字节以小端格式存放在存储器中。一个字里的最低地址字节被认为是该字的最低有效字节,而最高地址字节是最高有效字节。 可访问的存储器空间被分成8个主要块,每个块为512MB...转载 2019-01-23 20:17:24 · 899 阅读 · 0 评论 -
STM32存储结构(2)
当我们在完成某一个实验,当我们正庆幸的时候,我们不由得产生一种不安的想法——我们是否已经少许明白其中的种种细节?尤其,当我们所有的事情都依赖于编译环境或Firmware,抑或他人的程序,而自己仅仅是Copy和Modify,以致Using。当你还是一个初学者的时候,或许不会太过于关注于此,但是要想提高自己对单片机、处理器原理的理解,并且希望走得更远的时候,您就需要关注更为详细的内部知识,您需要明...转载 2019-01-23 20:44:09 · 1176 阅读 · 0 评论 -
深入嵌入式系统的 BootLoader
一、简介 本文将从 BootLoader 的概念、BootLoader 的主要任务、BootLoader 的框架结构以及 BootLoader 的安装等四个方面来讨论嵌入式系统的 BootLoader。 引导加载程序 。包括固化在固件 (firmware) 中的 boot 代码 ( 可选 ) ,和 Boot Loader 两大部分。 Linux 内核 。特定于嵌入式板子的定制内核...转载 2019-01-23 20:54:42 · 368 阅读 · 0 评论 -
嵌入式系统启动例程
通常PC在开机之后,会进入带有PC机厂商信息的BIOS画面,并且会显示出当前PC机的硬件信息,比如:内存大小,CPU信息等,它其实是PC机启动之后运行的第一段程序,它主要完成一些基本硬件初始化操作和硬件检测工作,保证拥有操作系统正常运行的软硬件环境,随后会加载并且启动操作系统。该段小程序是烧制到主板上的BIOS存储硬件里的。由此可见计算机系统在启动过程中必须依赖软硬件,在嵌入式系统中同样需要软硬件...转载 2019-01-23 21:32:02 · 943 阅读 · 0 评论 -
vim配置及插件安装管理(超级详细)
转自:https://www.cnblogs.com/snowbook/p/5923770.html 1 写在前面 Linux下编程一直被诟病的一点是: 没有一个好用的IDE, 但是听说Linux牛人, 黑客之类的也都不用IDE. 但是对我等从Windows平台转移过来的Coder来说, 一个好用的IDE是何等的重要啊, 估计很多人就是卡在这个门槛上了, "工欲善其事,...转载 2019-01-28 12:49:55 · 8932 阅读 · 0 评论 -
驱动和class
一、设备驱动相比较设备、总想,设备驱动能够抽象的要少些,它的更多内容都是特定于硬件的,因而linux驱动模型中的驱动部分相对也比较简单。1.1 数据结构linux内核的设备驱动子系统使用数据结构struct device_driver来表示一个设备驱动,请定义如下:struct device_driver {const char *name;struct bus_typ原创 2014-01-27 23:32:42 · 1795 阅读 · 0 评论 -
linux内核时钟机制及延时
时钟时间维护和利用是操作系统的一个基础任务。操作系统中的时间相关的服务包括:时间维护时钟同步time-of-day的表示下一个事件的调度处理器以及内核定时器进程统计进程度量linux最初的实现包括了对这些服务的支持。其模型如图所示(TOD:time of day):这种实现下每一种架构都有自己的一套时钟实现方案代码,同时也只支持低分辨率定时器,无法支持高分辨率定时器原创 2013-06-08 00:46:50 · 8660 阅读 · 0 评论 -
kobject和kset
一、kobjectkobject是linux内核做的一个抽象,它本身不具备实际的含义。它被嵌入到各种数据结构中,因而只要我们具有kobject就可以获取并访问它所嵌入的宿主数据结构。这样就提供了良好的组织管理能力。宿主数据结构可以千变万化,但是其嵌入的kobject很简单,可以基于该结构做很多通用的事情。sysfs就是利用这一点实现的。该文件系统以很简单的方式实现了对内核中各种复杂部件(尤其是原创 2014-01-25 21:37:06 · 3848 阅读 · 0 评论 -
块设备之三
一、I/O调度器1.1 数据结构在将请求提交给块设备时,内核提供了各种调度策略,这些调度器用于重排和调度I/O请求以获得最优的性能。I/O调度器在内核中被称为elevator。内核使用了如下数据结构来实现和管理I/O调度器:struct elevator_type{ /* managed by elevator core */ struct kmem_cache *icq_cac原创 2014-02-20 22:10:22 · 2094 阅读 · 0 评论 -
访问IO设备
一、I/O端口和I/O内存1.1 I/O端口和I/O内存的概念外设都是通过读写其寄存器来进行访问的,可以通过寄存器来对其进行配置、获取其运行状态。由于不是处理器自己的寄存器,因而无法直接使用指令访问,外设的寄存器需要通过其地址来进行访问。外设寄存器的地址可能位于内存地址空间也可能位于单独的I/O地址空间。在为外设提供了单独的I/O地址空间的架构上,处理器提供了称为I/O端口的独立的原创 2013-11-28 00:46:13 · 5820 阅读 · 0 评论 -
sysfs文件系统
一、sysfssysfs是用来向用户空间导出内核对象的一种文件系统,通过它,用户空间程序可以查看、甚至修改内核数据结构。该文件系统是基于内核数据结构kobject建立起来的,同时该文件系统的目录结构反映了相关内核数据结构的层次结构。由于kobject是组成设备模型的基本结构,因此sysfs也包括了系统中设备的信息,它提供了系统硬件的拓扑信息。由于sysfs提供了访问、修改内核数据结构的一种原创 2014-01-23 15:23:29 · 2148 阅读 · 1 评论 -
设备IO之二(DMA)
一、DMADMA是硬件的一种能力,具备这种能力的硬件可以直接从主存中读写数据,也就是它可以直接使用主存进行I/O而不需要处理器的干预,这可以节省处理器资源并提高整个系统的IO吞吐量,因为IO操作相对来说是较慢的,如果每个IO都要使用处理器资源,则毫无以为会耗费大量CPU时间在单个IO上,最终导致系统IO性能下降。1.1 DMA工作方式对于I/O来说,在输入端存在两种工作模式:软原创 2013-11-26 21:29:27 · 8422 阅读 · 0 评论 -
linux内核同步之信号量、顺序锁、RCU、完成量、关闭中断
一、信号量1.信号量的概念信号量也是一种锁,当信号量不可用时,尝试获取信号量的任务将挂起直到它拿到了信号量。由于尝试获取信号量的任务可能挂起,因而中断服务程序以及可延迟函数不能使用信号量。对于信号量来说需要注意:只有对信号量计数值的操作是原子的信号量的自旋锁只用于保护信号量的等待队列信号量是比较特殊的,其up操作不是必须由down操作的调用者发起。如果把信号量也看作原创 2013-06-02 14:44:04 · 5692 阅读 · 0 评论 -
linux-uart
uart是Universal Asynchronous Receiver and Transmitter的缩写.翻译成中文即为”通用异步收发器”.它是串口设备驱动的封装层。它是linux在tty的基础上又做了一层封装,通过该封装层,可以比较容易的编写新的串口驱动程序。一、uart数据结构uart建立在tty之上,它是真实的驱动和tty之间的桥梁,其涉及到的关键数据结构及其相互关系如下图所示原创 2013-10-30 00:00:33 · 5836 阅读 · 3 评论 -
linux-tty
一、TTY设备在*nix中,tty设备用来抽象串口类型的设备,它位于字符驱动之下,抽象了串口设备需要的特性、功能,抽象后的一个tty设备即可表示一个串行输入、输出接口(比如控制台口,串口、pty设备接口)。TTY的实现由两部分组成:Tty core:它以统一一致的方式来处理流向某个tty设备的数据以及来自某个tty设备的数据,并向用户空间提供了统一一致的用户接口,向底层即真实的设备原创 2013-10-28 22:11:00 · 6071 阅读 · 0 评论 -
open ipmi内核实现简介(使用串口)
智能平台管理接口 (IPMI) 是一种开放标准的硬件管理接口规格,定义了嵌入式管理子系统进行通信的特定方法。IPMI 信息通过基板管理控制器 (BMC)(位于 IPMI 规格的硬件组件上)进行交流。使用低级硬件智能管理而不使用操作系统进行管理,具有两个主要优点: 首先,此配置允许进行带外服务器管理;其次,操作系统不必负担传输系统状态数据的任务。ipmi在linux下的实现由几个模块组成:ipm原创 2013-08-13 23:20:40 · 9367 阅读 · 1 评论 -
字符设备驱动
一、设备驱动概述linux内核的驱动模型为编写驱动提供了抽象,将驱动公共的部分提取了出去简化了驱动的编写工作,但是那并不是实际的驱动,如果要实现真正的驱动,还要给予驱动模型做一些其它的工作。根据外设和内核交互数据的方式,内核将驱动分成了几种类别。基本上设备可以分为两类,一类适合于面向字符的交换,一类适合于处理包含固定数目字节的数据块,这两类分别称为字符设备和块设备(网络设备是一种特殊的设备,它原创 2014-01-28 22:39:50 · 1847 阅读 · 0 评论 -
linux内核的子系统(或者说功能模块的)初始化
内核启动过程中需要完成各个部分的初始化,比如中端、页面管理、slab分配器、任务调度器、网络、PCI设备等等的初始化,这些初始化大概可以分为两种:一种是关键的,必须完成的而且必须以特定的顺序来完成的初始化,这部分的代码往往是直接便如内核的而且是直接调用的另一种是非关键的的子系统(或者说模块、功能)的初始化,这部分根据配置可以不加载,可以以built-in的方式编到内核的可执行文件中,也可以原创 2013-10-16 22:42:29 · 4160 阅读 · 0 评论 -
总线和设备
一、总线总线是处理器与设备之间的通道。在linux设备模型中,所有的设备都通过总线相连,总线可能是实际的总线,比如usb总线,pci总线,也可能是虚拟的总线。1.1 数据结构linux使用bus_type来表示总线。其定义如下:struct bus_type { const char *name; const char *dev_name; struct device原创 2014-01-26 22:15:11 · 1919 阅读 · 0 评论 -
proc文件系统
一、proc文件系统proc文件系统是一种无存储的文件系统,当读其中的文件时,其内容动态生成,当写文件时,文件所关联的写函数被调用。每个proc文件都关联的字节特定的读写函数,因而它提供了另外的一种和内核通信的机制:内核部件可以通过该文件系统向用户空间提供接口来提供查询信息、修改软件行为,因而它是一种比较重要的特殊文件系统。1.1 proc文件系统的内容由于proc文件系统以文件的形式原创 2013-11-28 21:39:15 · 12506 阅读 · 0 评论 -
ubuntu安装GTK2.0
1、安装gcc/g++/gdb/make 等基本编程工具sudo apt-get install build-essential2、安装 libgtk2.0-dev libglib2.0-dev 等开发相关的库文件sudo apt-get install gnome-core-devel3、用于在编译GTK程序时自动找出头文件及库文件位置sudo apt-g转载 2014-10-11 13:29:57 · 19312 阅读 · 1 评论 -
linux内核“任务”之软中断、tasklet、工作者队列
一. 软中断和Tasklets1.中断的延迟处理在中断的处理中,有一些不紧急不关键的任务在需要的时候可以被延迟一段时间来执行。对于中断服务程序来说,一般情况下如果它不结束执行,就不应该产生新的中断;而这些延迟的任务可以在打开中断的情形下执行,因而把它们从中断服务程序中提取出来可以降低内核的响应时间。linux支持两种非紧迫的、可中断的内核函数: 可延迟函数(包括软中断和tasklets )原创 2013-06-01 17:23:59 · 4958 阅读 · 0 评论 -
linux内核内存分配
内核中的内存分配通常通过kmalloc/kfree来进行,但是也有其它的方式来获取内存,所有这些方式共同提供了内核中分配、释放内存的接口。一、kmalloc/kfree类似于标准C中的malloc/free,kmalloc/kfree是内核中的用于常规内存分配的接口。kmalloc/kfree是工作在slab分配器的基础上的,在系统启动时会调用kmem_cache_init,该函数会创原创 2013-11-18 20:56:07 · 6388 阅读 · 0 评论 -
块设备驱动程序之一
一、块设备概述linux支持的两种重要的设备类型分别是字符设备和块设备,块设备可以随机地以固定大小的块传送数据。与字符设备相比,块设备有以下几个特殊之处:块设备可以从数据的任何位置进行访问块数据总是以固定长度进行传输,即便请求的这是一个字节对块设备的访问有大量的缓存。当进行读时,如果已经缓存了,就直接使用缓存中的数据,而不再读设备,对于写也通过缓存来进行延迟处理。在块系统中,数据块原创 2014-02-10 23:41:00 · 5510 阅读 · 0 评论 -
块设备驱动之二
一、将块设备添加到系统register_blkdev并没有真正将设备添加到系统中,想要将设备添加到系统中,需要使用如下API:void blk_register_region(dev_t devt, unsigned long range, struct module *module, struct kobject *(*probe)(dev_t, int *, void *),原创 2014-02-12 00:00:56 · 5510 阅读 · 0 评论 -
设备IO之一(mmap、直接IO以及异步IO)
现在,在linux中经常可以看到在用户空间编写的驱动程序,比如X服务器,一些厂商的私有驱动等等,这就意味着用户空间取得了对硬件的访问能力,这通常是通过mmap将设备内存映射到了用户进程空间,从而使得用户可以通过读写这些内存来获取对硬件的访问能力。内核一般会对I/O操作进行缓冲以获取更好的性能,但是也提供了直接I/O以及异步I/O的能力。在和硬件进行数据交互时,有的硬件支持DMA,DMA可以原创 2013-11-22 18:58:40 · 7312 阅读 · 0 评论 -
linux内核内存管理学习之三(slab分配器)
一、概述在linux内核中伙伴系统用来管理物理内存,其分配的单位是页,但是向用户程序一样,内核也需要动态分配内存,而伙伴系统分配的粒度又太大。由于内核无法借助标准的C库,因而需要别的手段来实现内核中动态内存的分配管理,linux采用的是slab分配器。slab分配器不仅可以提供动态内存的管理功能,而且可以作为经常分配并释放的内存的缓存。通过slab缓存,内核能够储备一些对象,供后续使用。采原创 2013-08-17 20:20:58 · 15181 阅读 · 0 评论 -
linux内核同步之每CPU变量、原子操作、内存屏障、自旋锁
linux内核中的各种“任务”都能看到内核地址空间,因而它们之间也需要同步和互斥。linux内核支持的同步/互斥手段包括:技术功能作用范围每CPU变量为每个CPU复制一份数据所有CPU原子操作原子的读-修改-写一个计数器的指令所有CPU内存屏障避免指令被重新排序本地CPU或所有CPU自旋锁原创 2013-06-02 14:01:13 · 5024 阅读 · 0 评论