
linux 内核
yedushu
这个作者很懒,什么都没留下…
展开
-
Linux 内存管理浅析 - 页面映射管理之页表管理
(4). 页表管理下面我们来看下页表的建立过程。前面我说过,进程分为用户进程和内核进程。用户进程可以有多个,而内核进程则只有一个。因此,对于内核进程页表,我们只有一份。下面我以e6500平台为例说明内核进程页表和用户进程页表是怎么建立和管理的。我们先来思考下,在什么时候,我们才需要真正的创建一个页表呢。前面我说过,页表是按需创建的,就是说在物理页面分配之后,我们才会创建相应的页表项。这里说下...转载 2019-12-03 15:27:22 · 434 阅读 · 0 评论 -
msc和gcc编译器的内置函数(Compiler Intrinsics/Built-in Functions)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。本文链接:https://blog.youkuaiyun.com/10km/article/details/49122651msc和gcc编译器都提供了丰富的内置函数,虽然函数名各有不同,但总是有不少共通的内容,对于跨平台开发非常有用,善用这些函数,可以提高程序的效率同时也减少开发工作量。msc的内...转载 2019-12-01 18:49:02 · 707 阅读 · 0 评论 -
详析进程异常退出
进程退出意味着进程生命期的结束,系统资源被回收,进程从操作系统环境中销毁。进程异常退出是进程在运行过程中被意外终止,从而导致进程本来应该继续执行的任务无法完成。首先我们来看导致进程异常退出的这两类情况:●第一类:向进程发送信号导致进程异常退出;●第二类:代码错误导致进程运行时异常退出。第一类:向进程发送信号导致进程异常退出信号:UNIX 系统中的信号是系统响应某些状况而产...转载 2019-11-27 10:44:03 · 9360 阅读 · 0 评论 -
Linux slab 分配器剖析
Linux slab 分配器剖析了解 Linux 内存管理的方式M. Jones2010 年 9 月 20 日发布WeiboGoogle+用电子邮件发送本页面4动态内存管理内存管理的目标是提供一种方法,为实现各种目的而在各个用户之间实现内存共享。内存管理方法应该实现以下两个功能:最小化管理内存所需的时间 最大化用于一般应用的可用内存(最小化管理开销)...转载 2019-11-22 15:19:29 · 198 阅读 · 0 评论 -
内存管理
Linux内存管理(最透彻的一篇)https://blog.youkuaiyun.com/csdn_whb/article/details/81251713Linux 虚拟内存和物理内存的理解https://www.linuxidc.com/Linux/2015-02/113981.htmLinux内核空间内存管理(一):内存寻址、内存管理机制综述https://blog.csdn....原创 2019-10-27 22:40:23 · 243 阅读 · 0 评论 -
Linux源码目录结构和Linux文件系统目录结构
转载链接:https://blog.youkuaiyun.com/qq_38892883/article/details/79557715学习Linux也有一段时间了,具体来整理一下Linux源码的目录结构和文件系统的目录结构,以便加深记忆。一、Linux源码的目录结构首先上一张截图,如下所示:再看各个文件的介绍,借用一下其他资源。arch:这个为目录是架构相关,里面存放了许多CPU架构,比...转载 2019-10-27 21:45:54 · 265 阅读 · 0 评论 -
uboot之CONFIG_SPL_BUILD
首先进行第一步,下载工作:输入 U-Boot 下载的地址,找到自己要下载的 U-Boot 版本,点击开始下载,下载完成之后开始解压。U-Boot 下载之后压缩包的压缩方式是.tar.bz2 的,所以解压命令为 tar jzvf **.tar.bz2而我们平时经常解压的压缩包为.tar.gz 格式的,所以它的解压命令为 tar zxvf **.tar.gz。这两个解压命令只有一个参数的差别,...翻译 2018-12-18 19:41:40 · 1546 阅读 · 0 评论 -
Qemu搭建ARM vexpress开发环境(一)
转载地址:https://www.jianshu.com/p/94833e841742嵌入式开发离不开硬件设备比如:开发板、外设等,但是如果只是想学习研究Linux内核,想学习Linux内核的架构,工作模式,需要修改一些代码,重新编译并烧写到开发板中进行验证,这样未必有些复杂。然而Qemu的使用可以避免频繁在开发板上烧写版本,如果进行与外设无关,仅仅是内核方面的调试,Qemu模拟ARM开发环境...转载 2018-11-27 08:57:50 · 529 阅读 · 0 评论 -
C语言(C++语言)中##(两个井号)和#(一个井号)用法[转]
C语言(C++语言)中的宏(Macro)属于编译器预处理的范畴,属于编译期概念(而非运行期概念)。下面对常遇到的宏的使用问题做了简单总结。关 于#和##在C语言的宏中,#的功能是将其后面的宏参数进行字符串化操作(Stringfication),简单说就是在对它所引用的宏变量通过替换后在其左右各加上一个双引号。比如下面代码中的宏:#define WARN_IF(EXP) \do{ if...转载 2018-11-30 17:51:08 · 670 阅读 · 0 评论 -
利用__attribute__((section()))构建初始化函数表【转】
转自:https://mp.weixin.qq.com/s?__biz=MzAwMDUwNDgxOA==&mid=2652663356&idx=1&sn=779762953029c0e0946c22ef2bb0b754&chksm=810f28a1b678a1b747520ba3ee47c9ed2e8ccb89ac27075e2d069237c13974aa43...转载 2018-12-01 14:17:32 · 5828 阅读 · 0 评论 -
Linux内核很吊之 module_init解析 二
简单来说上篇博文介绍module_init如何注册驱动的init函数,这篇博文将详细分析kernel启动过程又是如何执行我们注册的init函数。如果了解过linux操作系统启动流程,那么当bootloader加载完kernel并解压并放置与内存中准备开始运行,首先被调用的函数是start_kernel。start_kernel函数顾名思义,内核从此准备开启了,但是start_kernel做的事...转载 2018-12-12 22:25:29 · 179 阅读 · 0 评论 -
module_init解析
module_init这个函数的具体功能和执行过程在kernel源码目录中找到include\linux\init.h文件 #define module_init(x) __initcall(x); 有对module_init 的定义,我们发现 module_init(x)是一个宏定义,那么_initcall(x)又是什么呢? [cpp] view plain cop...转载 2018-12-12 22:32:53 · 182 阅读 · 0 评论 -
Linux内核镜像格式
Linux内核镜像格式<Linux内核镜像格式> Linux内核有多种格式的镜像,包括vmlinux、Image、zImage、bzImage、uImage、xipImage、bootpImage等.➤kernel镜像格式vmlinux vmlinux是可引导的、未压缩、可压缩的内核镜像,vm代表Virtual Memory。(表示Linux支持虚拟内存,因此得名v...转载 2018-11-25 22:53:09 · 439 阅读 · 0 评论 -
Linux下编写 makefile 详细教程
Linux下编写 makefile 详细教程近期在学习Linux下的C编程,买了一本叫《Linux环境下的C编程指南》读到makefile就越看越迷糊,可能是我的理解能不行。于是google到了以下这篇文章。通俗易懂。然后把它贴出来,方便学习。后记,看完发现这篇文章和《Linux环境下的C编程指南》的makefile一章所讲述的惊人的相似,仅仅是这篇文章从一个实例切入,在有些地方比較好...转载 2018-11-24 16:44:33 · 210 阅读 · 0 评论 -
shell脚本学习
http://c.biancheng.net/view/733.html转载 2018-11-20 20:32:17 · 102 阅读 · 0 评论 -
ARM交叉编译工具链 gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi区别
为什么要用交叉编译器?交叉编译通俗地讲就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。交叉编译工具链是一个由编译器、连接器和解释器组成的综合开发环境,交叉编译工具链主要...转载 2018-10-30 10:09:03 · 667 阅读 · 0 评论 -
Android层次架构
Android其本质就是在标准的Linux系统上增加了Java虚拟机Dalvik,并在Dalvik虚拟机上搭建了一个JAVA的application framework,所有的应用程序都是基于JAVA的application framework之上。Android主要应用于ARM平台,但不仅限于ARM,通过编译控制,在X86、MAC等体系结构的机器上同样可以运行。android分为...转载 2018-10-15 09:41:28 · 6315 阅读 · 0 评论 -
linux 内存管理之kmalloc、vmalloc、malloc、get_gree_pages的区别
简述:1、kmalloc和vmalloc是分配的是内核的内存,malloc分配的是用户的内存2、kmalloc保证分配的内存在物理上是连续的,内存只有在要被DMA访问的时候才需要物理上连续,malloc和vmalloc保证的是在虚拟地址空间上的连续3、kmalloc能分配的大小有限,vmalloc和malloc能分配的大小相对较大4、vmalloc比kmalloc要慢。尽 管在某些情...转载 2018-09-21 17:46:08 · 433 阅读 · 0 评论 -
高通开机流程(brew方案)
摘要: 本文试图通过代码来深入剖析Qualcomm手机开机的整个过程,即从按下开机键一直到出现待机界面,Qualcomm的手机软件在整个流程中究竟完成了哪些工作。本文的主要目标是理清手机的初始化流程,并为今后Amoi定做初始化工作提供一个参考。关键字:开机、Rex、TMC、ui_task、CoreApp一、开机的简要流程分析 Qualcomm的平台软件支持两种启动方式:一种是...转载 2018-10-11 11:05:31 · 1242 阅读 · 0 评论 -
Linux-内存管理子系统
Linux-内存管理子系统内存管理子系统职能:1. 管理虚拟地址和物理地址的映射;2. 管理物理内存的分配虚拟内存空间空间分布:1. 用户空间 如 0-3G地址空间 被用户进程所使用与内核的直接映射区使用的是同个内存区域。2. 内核空间2-1. 直接映射区(3G-3G+896MB),896MB以下为物理内存的低端内存,896MB以上为物理内存的高端内存;在直...转载 2018-09-15 15:36:13 · 1201 阅读 · 0 评论 -
U-boot 开始文件Start.s的异常向量表CONFIG_SPL_BUILD宏及VBAR地址映射
#include <asm-offsets.h> /* 头文件在根目录下的include及根#include <config.h> 目录下的arch/arm/include目录 */ #include <version.h>#include <asm/system.h>#include <lin...转载 2018-12-19 14:20:03 · 476 阅读 · 0 评论 -
module_init 和 late_initcall 区别
在init.h 中有如下定义 #define pure_initcall(fn) __define_initcall("0",fn,1)#define core_initcall(fn) __define_initcall("1",fn,1)#define core_initcall_sync(fn) __define_initcall("1s",fn,1s)#define ...转载 2018-12-13 17:31:39 · 192 阅读 · 0 评论 -
Linux MTD (Memory Technology Device) subsystem analysis For Atheros char device
读了Linux MTD 源代码分析 对这部分有了整体的认识,结合现有代码,分析一下Atheros的MTD是如何使用的。Linux kernel: 2.6.31.Atheros platform: QCA9890??? 参考Linux MTD 源代码分析,这里把MTD分为4层,从上到下依次是:字符设备节点、字符设备、MTD 核心、FLASH 硬件驱动。字符设备节点:/dev/mt...转载 2018-12-13 20:08:46 · 407 阅读 · 0 评论 -
关于linux的tun/tap原理
Linux网络 - 数据包的发送过程https://segmentfault.com/a/1190000009249039Linux网络 - 数据包的接收过程https://segmentfault.com/a/1190000008836467Linux虚拟网络设备之tun/taphttps://segmentfault.com/a/1190000009249039Linu...转载 2019-06-07 15:23:18 · 1160 阅读 · 0 评论 -
Linux多线程编程初探
https://www.cnblogs.com/xiehongfeng100/p/4620852.htmlhttps://www.cnblogs.com/Nancy5104/p/5338062.html转载 2019-04-07 23:10:20 · 174 阅读 · 0 评论 -
linux驱动篇之 driver_register 过程分析(二)bus_add_driver
个人笔记,欢迎转载,请注明出处,共同分享 共同进步http://blog.youkuaiyun.com/richard_liujh/article/details/48245715kernel版本3.10.141.概述本篇主要围绕driver_register中的第二步bus_add_driver展开分析。在上一篇博文中主要分析了driver_find的过程,在driver_regis...转载 2019-04-01 19:42:09 · 180 阅读 · 0 评论 -
linux内核之进程管理详解
https://blog.youkuaiyun.com/heliangbin87/article/details/774419081、进程描述符(1)进程与线程进程是处于执行期的程序以及相关资源的总称。线程在linux上称为轻量级进程,没有独立的地址空间,一个进程下的所有线程共享地址空间、文件系统资源、文件描述符、信号处理程序等。(2)进程描述符task_struct...转载 2019-04-06 16:15:41 · 307 阅读 · 0 评论 -
linux驱动注册过程分析--driver_register(一)
http://blog.youkuaiyun.com/richard_liujh/article/details/45825333kernel版本3.10.14driver_register顾名思义,是驱动程序的注册。但是很少是由我们写的驱动直接调用的,例如framebuffer中调用platform_driver_register,i2c中调用i2c_add_driver等等函数注册对应的驱动程序。...转载 2019-04-05 22:41:10 · 1249 阅读 · 0 评论 -
SERDES介绍
转自https://www.cnblogs.com/liujinggang/p/10125727.html一、SERDES介绍 随着大数据的兴起以及信息技术的快速发展,数据传输对总线带宽的要求越来越高,并行传输技术的发展受到了时序同步困难、信号偏移严重,抗干扰能力弱以及设计复杂度高等一系列问题的阻碍。与并行传输技术相比,串行传输技术的引脚数量少、扩展能力强、采用点对点的连接方式...转载 2019-01-01 21:52:36 · 16323 阅读 · 0 评论 -
交叉编译工具链命名详解
转载地址:https://www.cnblogs.com/wxishang1991/p/5322499.html交叉编译就是在一种平台上编译出能运行在体系结构不同的另一种平台上的程序,比如在PC平台(X86 CPU)上编译出能运行在以ARM为内核的CPU平台上的程序,编译得到的程序在X86 CPU平台上是不能运行的,必须放到ARM CPU平台上才能运行,虽然两个平台用的都是Linux系统。 交...转载 2018-12-31 17:24:48 · 419 阅读 · 0 评论 -
linux shell中 2>/dev/null和/dev/null 2>&1 的解释
shell中可能经常能看到:>/dev/null 2>&1命令的结果可以通过%>的形式来定义输出分解这个组合:“>/dev/null 2>&1” 为五部分。1:> 代表重定向到哪里,例如:echo "123" > /home/123.txt2:/dev/null 代表空设备文件3:2> 表示stderr标准错误4:&..转载 2018-12-31 16:40:27 · 369 阅读 · 0 评论 -
shell脚本报错:-bash: xxx: /bin/bash^M: bad interpreter: No such file or directory
今天写了一个shell脚本,然后在执行的时候报错,脚本内容很简单,仅供测试:Shell代码 #!/bin/sh echo "test shell " 具体报错信息如下:Shell代码 [root@localhost test]# ./test.sh -bash: ./test.sh: /bin/bash^M: bad interpreter: No s...转载 2018-12-31 16:30:05 · 1112 阅读 · 0 评论 -
使用buildroot创建自己的交叉编译工具链
转:https://blog.youkuaiyun.com/linczone/article/details/45894181转:https://blog.youkuaiyun.com/Lidroid/article/details/50393531转载 2018-12-25 20:20:08 · 462 阅读 · 0 评论 -
从零开始制作rootfs
1、什么是rootfs,为什么需要rootfs?内核启动后会开启三个进程,分别是:进程0(idle进程),空闲进程,也就是死循环进程1(init进程),挂载根文件系统,并执行Linuxrc这个应用程序从内核态转为用户态,开启用户态的进程1(init进程),逐步开启其他进程进程2(kthreadd进程)linux内核的守护进程,负责提供操作系统的核心功能(进程调度、内存管理、设备管理、文件体...转载 2019-01-03 23:38:18 · 1521 阅读 · 0 评论 -
Uboot中start.S源码的指令级的详尽解析
转载:https://www.crifan.com/files/doc/docbook/uboot_starts_analysis/release/html/uboot_starts_analysis.html版本:v1.9 Crifan Li摘要本文对Uboot中的Start.S的源码的几乎每一行,都进行了详细的解析 本文提供多种格式供: 在线阅读 ...转载 2018-12-18 20:09:38 · 1188 阅读 · 0 评论 -
LINUX系统初始化
转载地址:https://blog.youkuaiyun.com/runner668/article/details/79844423说明BIOS是位于位于主板flash rom(掉电不丢失0)中的程序,操作系统Boot Loader位于硬盘MBR中。BIOS在完成硬件检测和资源分配后。将硬盘MBR中的Boot Loader读到系统的RAM中,然后将控制权交给操作系统Boot Loader。Boo...转载 2018-12-17 11:00:49 · 343 阅读 · 0 评论 -
处理器启动过程
1 处理器启动过程简介处理器上电后,PC寄存器固化了一个默认值PC默认值用于决定第一条执行的指令第一条执行指令隶属于启动程序2 启动程序(BootLoader)系统上电后运行的第一个程序(Not Os)根据运行阶段、体积和功能的不同分为三个部分 BL0 - 固化于硬件中,用于初始化硬件,加载并运行BL1BL1 - 存储于外部设备中,用于初始化主存,加载并运行BL2BL2 ...转载 2018-12-19 17:09:21 · 321 阅读 · 0 评论 -
一篇了解TrustZone
版权声明:本文为guyongqiangx原创,欢迎评论、转载和收藏。微信公众号:洛奇看世界。 https://blog.youkuaiyun.com/guyongqiangx/article/details/78020257这篇文章源于老板想了解TrustZone,要求我写一篇文章简单介绍TrustZone的原理。既然是给领导看的,只介绍原理哪里够,因此也添加了公司自己现有TEE环境的设计、实现和发展,也...转载 2018-09-07 15:04:23 · 2549 阅读 · 0 评论 -
Linux kernel scatterlist API介绍
Linux kernel scatterlist API介绍作者:wowo 发布于:2017-10-13 22:20 分类:内存管理1. 前言我们在那些需要和用户空间交互大量数据的子系统(例如MMC[1]、Video、Audio等)中,经常看到scatterlist的影子。对我们这些“非英语母语”的人来说,初见这个词汇,脑袋瞬间就蒙圈了。scatter可翻译成“散开、分散”,list是“列表”的意...转载 2018-06-27 21:09:48 · 302 阅读 · 0 评论 -
linux工作队列 - workqueue总览
workqueue归入中断子系统是由于和中断处理有密切关系,写博客重要在于整理自己的思绪,写的时候会把一些不懂的细节问题暴露出来,这样会把问题看的更透彻,workqueue的代码在文件kernel/workqueue.c中,大约5K+行,本文基于linux 4.6.3编写,由于能力有限,本文介绍不全面或者理解有误之处还请见谅,欢迎指正一起探讨。文章系列1.linux工作队列 - workqueue...转载 2018-06-10 23:21:28 · 211 阅读 · 0 评论