
Linux Kernel
文章平均质量分 60
江南3708
好好学习,天天向上。
展开
-
Linux电源管理(五)thermal
thermal子系统概述thermal子系统是内核提供的温控管理框架,一套软件温度解决方案,配合ic内部温度传感器,对ic温度进行管控,保证系统稳定性。thermal系统多用于对ic内部的重点发热模块的功能管控,如cpu、gpu。thermal sensor驱动负责读取硬件温度sensor的温度,并传给thermal 子系统,thermal子系统将根据调控对象的温度,决定是否触发对应的冷...转载 2019-05-28 16:25:30 · 2985 阅读 · 0 评论 -
linux内核中的GPIO系统之(5):gpio subsysem和pinctrl subsystem之间的耦合
1. 前言按理说,kernel中gpio subsystem和pinctrl subsystem的关系应该非常清楚:pinctrl subsystem管理系统的所有管脚,GPIO是这些管脚的用途之一,因此gpio subsystem应该是pinctrl subsystem的client(也可叫做backend、consumer),基于pinctrl subsystem提供的转载 2018-01-01 19:23:57 · 657 阅读 · 0 评论 -
linux内核中的GPIO系统之(4):pinctrl驱动的理解和总结
1. 前言本站之前的三篇文章[1][2][3]介绍了pin controller(对应的pin controller subsystem)、gpio controller(对应的GPIO subsystem)有关的基本概念,包括pin multiplexing、pin configuration等等。本文将基于这些文章,单纯地从pin controller driver的角度(屏蔽掉p转载 2018-01-01 19:22:03 · 2361 阅读 · 1 评论 -
Linux内核中的GPIO系统之(3):pin controller driver代码分析
一、前言对于一个嵌入式软件工程师,我们的软件模块经常和硬件打交道,pin control subsystem也不例外,被它驱动的硬件叫做pin controller(一般ARM soc的datasheet会把pin controller的内容放入GPIO controller的章节中),主要功能包括:(1)pin multiplexing。基于ARM core的嵌入式处理器一般会提转载 2018-01-01 19:17:52 · 611 阅读 · 0 评论 -
linux内核中的GPIO系统之(2):pin control subsystem
一、前言在linux2.6内核上工作的嵌入式软件工程师在pin control上都会遇到这样的状况:(1)启动一个新的项目后,需要根据硬件平台的设定进行pin control相关的编码。例如:在bootloader中建立一个大的table,描述各个引脚的配置和缺省状态。此外,由于SOC的引脚是可以复用的,因此在各个具体的driver中,也可能会对引脚进行的配置。这些工作都是比较繁琐转载 2018-01-01 19:15:35 · 471 阅读 · 0 评论 -
linux内核中的GPIO系统之(1):软件框架
一、前言作为一个工作多年的系统工程师,免不了做两件事情:培训新员工和给新员工分配任务。对于那些刚刚从学校出来的学生,一般在开始的时候总是分配一些非常简单的任务,例如GPIO driver、LED driver。往往CPU datasheet的关于GPIO或者IO ports的章节都是比较简单的,非常适合刚入行的工程师。虽然GPIO子系统相关的硬件比较简单,没有复杂的协议,不过,对于软件抽象转载 2018-01-01 19:12:14 · 474 阅读 · 0 评论 -
eMMC的MMC模式与SPI模式
原文地址:http://blog.51cto.com/laokaddk/1248818MMC存贮卡可以分为MMC和SPI两种工作模式,MMC模式是标准的默认模式,具有MMC的全部特性。而SPI模式则是MMC存贮卡可选的第二种模式,这个模式是MMC协议的一个子集,主要用于只需要小数量的卡(通常是1个)和低数据传输率(和MMC协议相比)的系统,这个模式可以把设计花费减到最小,但性能转载 2017-11-23 14:53:09 · 6387 阅读 · 0 评论 -
zImage和uImage的区别联系
注:本文是学习朱老师课程整理的笔记,基于linux2.6.35.7和九鼎X210BV3S开发板进行移植。linux内核经过编译后会生成一个elf格式的可执行程序,叫vmlinux或vmlinuz,这个就是原始的未经任何处理加工的原版内核elf文件;嵌入式系统部署时烧录的一般不是这个vmlinuz/vmlinux,而是要用objcopy工具去制作成烧录镜像格式,经过制作加工成转载 2017-12-01 16:45:10 · 302 阅读 · 0 评论 -
linux内核驱动编译
在内核编译obj-m和obj-y的区别一文中,我们提到内核编译所涉及的文件,其中kernel/driver目录下的Makefile文件与Kconfig文件与驱动编写密切相关。下面我们对这两个文件进行讨论。我们以 kernel/driver/i2c/目录下的文件为例进行说明。在内核源码目录下,内核编译后会生成一个 .config文件,在.config文件中,我们发现有的选项是y,即编译进内核原创 2017-11-21 13:28:44 · 1010 阅读 · 0 评论 -
hello.ko---linux设备驱动程序
Hello World 模块#include #Include static int __init hello_init(void){printk("This is my first driver module-hello.ko\n");printk("Hello World\n");return 0;}static void __exit he原创 2017-11-20 15:44:20 · 364 阅读 · 0 评论 -
内核编译obj-m和obj-y的区别
在内核编译时,主要涉及一下文件:kernel/arch/arm/configs/*.defconfig kernel/driver/*/Makefilekernel/driver/*/Kconfig如果我们想要往内核中增加新的节点,还要涉及到设备树文件,kernel/arch/arm/boot/dts/在进行模块编译时,主要有两个选项,obj-m和obj-y,而与内核密切相关的原创 2017-11-20 17:18:21 · 39145 阅读 · 1 评论 -
hello.ko---Makefile
hello.ko的Makefile文件与普通的hello.c编译成hello可执行文件有些不同。hello.ko是要进行交叉编译,所谓的交叉编译是在本机上编译的程序不在本机上运行,在其他机器上执行。Makefile:obj-m := hello.oexport ARCH=armexport CROSS_COMPILE=arm-none-linux-gnueabi-KERDI原创 2017-11-20 16:20:13 · 7042 阅读 · 0 评论 -
clk_get_rate函数
在 kernel/include/linux/clk.h中定义函数原型:unsigned long clk_get_rate(strcut clk *clk);含义:获得时钟源(clock source)的当前时钟频率(HZ),前提是此时钟源已经enable。而对于clk_get_rate函数而言,其实是从clk_get得到的某设备结构体中获得该设备的时钟频率。clk_get在原创 2017-11-20 14:02:35 · 3742 阅读 · 0 评论 -
kernel 启动过程之五, initcall 的来由, console 的初始化。
参见include/linux/init.h和vmlinux.lds1)所有标识为__init的函数在链接的时候都放在.init.text这个区段内,在这个区段中,函数的摆放顺序是和链接的顺序有关的,是不确定的。2)所有的__init函数在区段.initcall.init中还保存了一份函数指针,在初始化时内核会通过这些函数指针调用这些__init函数指针,并在整个初始化完成后,释放整个init区段...转载 2018-02-26 17:30:13 · 636 阅读 · 0 评论 -
Linux中__init、__devinit等初始化宏解析和入口函数
一、初始化宏1.1、定义 在内核里经常可以看到__init, __devinit这样的语句,这都是在init.h中定义的宏,gcc在编译时会将被修饰的内容放到这些宏所代表的section,编译器通过这些宏可以把代码优化放到合适的内存位置,以减少内存占用和提高内核效率。 其典型的定义如下:点击(此处)折叠或打开#define __init __section(.init....转载 2018-02-26 17:32:37 · 1356 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之一:概述
随着技术的发展,我们对CPU的处理能力提出了越来越高的需求,芯片厂家也对制造工艺不断地提升。现在的主流PC处理器的主频已经在3GHz左右,就算是智能手机的处理器也已经可以工作在1.5GHz以上,可是我们并不是时时刻刻都需要让CPU工作在最高的主频上,尤其是移动设备和笔记本电脑,大部分时间里,CPU其实工作在轻负载状态下,我们知道:主频越高,功耗也越高。为了节省CPU的功耗和减少发热,我们有必要根据转载 2018-02-07 10:06:23 · 408 阅读 · 0 评论 -
kernel 内存泄漏检测
检测系统是否存在内存泄漏,主要使用 procrank和kmemleak 配置选项1.procrankprocrank查看进程内存工具。有四个选项:VSS - Virtual Set Size 虚拟耗用内存(包含共享库占用的内存)RSS - Resident Set Size 实际使用物理内存(包含共享库占用的内存)PSS - Proportional Set Size 实际使用...原创 2019-02-28 12:14:24 · 1001 阅读 · 0 评论 -
Linux kernel 配置选项
General setup常规设置Cross-compiler tool prefixCONFIG_CROSS_COMPILE交叉编译工具前缀(比如"arm-linux-"相当于使用"make CROSS_COMPILE=arm-linux-"进行编译).除非你想配置后默认自动进行交叉编译,否则不要使用此选项.Local version - append to kernel rel...转载 2019-01-17 17:14:37 · 12439 阅读 · 0 评论 -
基于wakeup_source的linux内核睡眠机制
转载地址:https://blog.youkuaiyun.com/yuzaipiaofei/article/details/50868407一:wakeup_source简介: linux 3.4内核PM使用了wakeup_source来保持唤醒状态,也就是keep awake。之前android一直是基于Linux加入了wake_lock机制来阻止系统休眠,后来Linux 3.4内核加入了wakeu...转载 2018-04-23 15:45:46 · 2483 阅读 · 0 评论 -
Suspend to RAM和Suspend to Idle分析,以及在HiKey上性能对比
1. Linux内核suspend状态Linux内核支持多种类型的睡眠状态,通过设置不同的模块进入低功耗模式来达到省电功能。目前存在四种模式:suspend to idle、power-on standby(Standby)、suspend to ram(STR)和sudpend to disk(Hibernate),分别对应ACPI状态的S0、S1、S3和S4。State in LinuxLab...转载 2018-04-23 10:13:35 · 6949 阅读 · 1 评论 -
Linux 信号
信号是Linux编程中非常重要的部分,本文将详细介绍信号机制的基本概念、Linux对信号机制的大致实现方法、如何使用信号,以及有关信号的几个系统调用。 信号机制是进程之间相互传递消息的一种方法,信号全称为软中断信号,也有人称作软中断。从它的命名可以看出,它的实质和使用很象中断。所以,信号可以说是进程控制的一部分。 一、信号的基本概念 本节先介绍信号的一些基本概念,然后给出一些基本的信号类型和信号对...转载 2018-03-13 16:23:22 · 193 阅读 · 0 评论 -
LINUX SIGNAL
在终端使用kill -l 命令可以显示所有的信号。$kill -l1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR213) SIGPIPE 14) SIGALRM 15) SIGTERM 16) ...转载 2018-03-13 16:22:01 · 213 阅读 · 0 评论 -
Linux电源管理(6)_Generic PM之Suspend功能
1. 前言Linux内核提供了三种Suspend: Freeze、Standby和STR(Suspend to RAM),在用户空间向”/sys/power/state”文件分别写入”freeze”、”standby”和”mem”,即可触发它们。内核中,Suspend及Resume过程涉及到PM Core、Device PM、各个设备的驱动、Platform dependent PM、CPU co...转载 2018-03-06 09:42:37 · 594 阅读 · 0 评论 -
Linux电源管理(4)_Power Management Interface
1. 前言Linux电源管理中,相当多的部分是在处理Hibernate、Suspend、Runtime PM等功能。而这些功能都基于一套相似的逻辑,即“Power management interface”。该Interface的代码实现于“include/linux/pm.h”、“drivers/base/power/main.c”等文件中。主要功能是:对下,定义Device PM相关的回调函数...转载 2018-03-06 09:40:48 · 416 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之三:governor
在上一篇文章中,介绍了cpufreq的core层,core提供了cpufreq系统的初始化,公共数据结构的建立以及对cpufreq中其它子部件提供注册功能。core的最核心功能是对policy的管理,一个policy通过cpufreq_policy结构中的governor字段,和某个governor相关联,本章的内容正是要对governor进行讨论。/*******************转载 2018-02-07 10:10:54 · 1134 阅读 · 0 评论 -
Linux动态频率调节系统CPUFreq之二:核心(core)架构与API
上一节中,我们大致地讲解了一下CPUFreq在用户空间的sysfs接口和它的几个重要的数据结构,同时也提到,CPUFreq子系统把一些公共的代码逻辑组织在一起,构成了CPUFreq的核心部分,这些公共逻辑向CPUFreq和其它内核模块提供了必要的API,像cpufreq_governor、cpufreq_driver等模块通过这些API来完成一个完整的CPUFreq体系。这一节我们就来讨论一下核心转载 2018-02-07 10:09:15 · 350 阅读 · 0 评论 -
clk_get函数介绍
定义:kernel/include/linux/clk.h实现:kernel/drivers/clk/clkdev.c使用该函数时,我们一般第一个参数传入NULL,第二个参数是我们要查找的硬件上的那部分时钟。在kernel目录下,使用 grep -wrn "clk_get"命令,可以查找到内核中clk_get函数使用的地方。在传入dev=NULL时,该函数调用clk_get_s原创 2017-11-20 14:39:55 · 4452 阅读 · 0 评论 -
内核设备树简介-2
设备树组成: 设备树包含 DTC(device tree compiler)、DTS(device tree source)、DTB(device tree blob)dts & dtsi 通过dtc,生成DTB(device tree blob),设备树二进制文件,BootLoader在引导内核时,会预先读取.dtb到内存,进而由内核解析;dts和dtsi位于原创 2017-11-17 19:58:56 · 552 阅读 · 0 评论 -
Linux 获取内存页大小
如何查看Linux系统的内存页大小:1. getconf PAGESIZE/PAGE_SIZE 返回值单位为Bytes点击(此处)折叠或打开[root@localhost nginx-1.8.0]# getconf PAGESIZE4096[root@localhost nginx-1.8.0]# getconf PAGE_SIZE转载 2017-03-28 10:00:17 · 8881 阅读 · 0 评论 -
ARM-Linux程序开发
原文地址:http://www.cnblogs.com/beer/archive/2011/05/05/2037449.html目录一、Arm-Linux程序开发平台简要介绍... 31.1程序开发所需系统及开发语言... 31.2系统平台搭建方式... 4二、Linux开发平台搭建... 52.1安装虚拟工作站... 52.2安装Linux虚拟机... 5转载 2017-08-02 16:04:01 · 863 阅读 · 0 评论 -
嵌入式系统Boot Loader启动全过程详解
本文详细地介绍了基于嵌入式系统中的 OS 启动加载程序 ―― Boot Loader 的概念、软件设计的主要任务以及结构框架等内容。一. 引言在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行。一个嵌入式 linux 系统从软件的角度看通常可以分为四个层次:1. 引导加载程序。包括固化在固件(firmware)中的 boot 代码(可选),和 Boot转载 2017-08-08 10:22:16 · 12656 阅读 · 2 评论 -
FastBoot BootLoader Recovery 模式解释
转载地址:http://www.mamicode.com/info-detail-532540.html标签:理论上,所有的Android设备都存在着Fastboot/Bootloader模式,不过,由于android操作系统的开源特性,各厂商的对 自家的相关Android设备都有着各自不同的Fastboot/Bootlader模式。当然,并非所有的厂商的都转载 2017-08-11 16:39:36 · 7629 阅读 · 0 评论 -
U-boot分析与移植(1)----bootloader分析
转载地址:http://www.cnblogs.com/wi100sh/p/4255072.html一、Boot Loader 概念就是在操作系统内核运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境,他就是所谓的引导加载程序(Boot Loader)。转载 2017-08-11 17:04:42 · 393 阅读 · 0 评论 -
一张图看懂开源许可协议,开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别
原文链接:http://blog.youkuaiyun.com/testcs_dn/article/details/38496107英文原文:http://www.mozilla.org/MPL/MPL-1.1.html开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别首先借用有心人士的一张相当直观清晰的图来划分各种协议:开源许可证GPL、BSD、MIT转载 2017-08-13 12:12:37 · 452 阅读 · 0 评论 -
Linux下如何生成core dump文件
Linux下的C程序常常会因为内存访问错误等原因造成segment fault(段错误),此时如果系统core dump功能是打开的,那么将会有内存映像转储到硬盘上来,之后可以用gdb对core文件进行分析,还原系统发生段错误时刻的堆栈情况。这对于我们发现程序bug很有帮助。使用ulimit -a可以查看系统core文件的大小限制;使用ulimit -c [kbytes]可以设置系统允许生成的转载 2017-08-13 12:23:23 · 351 阅读 · 0 评论 -
CPU 内存
原文标题:What Your Computer Does While You Wait原文地址:http://duartes.org/gustavo/blog/[注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。] 本文以一个现代的、实际的个人电脑为对象,分析其中CPU(Intel Core 2 Duo 3.0GHz)以及各类子系统的转载 2017-08-13 12:26:10 · 344 阅读 · 0 评论 -
内存地址转换与分段
转: 内存地址转换与分段 原文标题:Memory Translation and Segmentation原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]转载 2016-12-21 11:52:37 · 378 阅读 · 0 评论 -
内核引导过程
转: 内核引导过程 原文标题:The Kernel Boot Process原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]转载 2016-12-21 11:51:36 · 340 阅读 · 0 评论 -
计算机的引导过程
转: 计算机的引导过程 原文标题:How Computers Boot Up原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]转载 2016-12-21 11:50:29 · 339 阅读 · 0 评论 -
主板芯片组与内存映射
[转]: 主板芯片组与内存映射 原文标题:Motherboard Chipsets and the Memory Map原文地址:http://duartes.org/gustavo/blog/ [注:本人水平有限,只好挑一些国外高手的精彩文章翻译一下。一来自己复习,二来与大家分享。]转载 2016-12-21 11:48:57 · 449 阅读 · 0 评论