linux内核
文章平均质量分 70
lieye_leaves
这个作者很懒,什么都没留下…
展开
-
内存分配之CMA
一.CMA相关的宏RESERVEDMEM_OF_DECLARE(cma, "shared-dma-pool", rmem_cma_setup);#define RESERVEDMEM_OF_DECLARE(name, compat, init) \_OF_DECLARE(reservedmem, name, compat, init, reservedmem_of_init_fn)//////////////////////////////////////////////////...原创 2020-12-25 11:51:27 · 1023 阅读 · 0 评论 -
内存分配之DMA操作
DMA操作DMA内存分配有两种方式,一致性DMA和流式DMA,在早期的内存区域中有一个DMA ZONE,占用内存地址0至16M的空间,供ISA设备的DMA内存,现在有的设备DMA操作时没有地址的限制,可以在全内存范围内分配内存来用于DMA操作,所以也就不需要DMA ZONE了。\linux-4.12.4\include\linuxstatic inline void *dma_alloc_coherent(struct device *dev, size_t size,dma_addr_t *d原创 2020-12-25 11:30:50 · 3126 阅读 · 0 评论 -
perf性能分析测试
perf性能分析测试一.内核配置./kernel/tracekernel hacking TRACER NOP TRACER TRACER TRACE CLOCK TRACER RING BUFFER TRACER EVENT TRACING TRACET TRACING Tracers ./init...原创 2019-12-25 23:14:09 · 407 阅读 · 0 评论 -
perf性能分析
好文章,留个log,欢迎共享https://www.cnblogs.com/arnoldlu/p/6241297.html系统级性能分析工具perf的介绍与使用原创 2019-11-11 22:45:22 · 359 阅读 · 0 评论 -
GPU Index
https://dri.freedesktop.org/docs/drm/gpu/index.htmlLinux GPU Driver Developer's Guidehttp://www.landley.NET/kdocs/htmldocs/drm.htmlLinux DRM Developer's Guide转载 2019-10-26 22:43:00 · 481 阅读 · 0 评论 -
Linux内存模块解析(一)
Linux内存模块解析(一)一. 概述在linux系统中有几个容易混淆的概念,如节点,内存域,页框,页描述符,free_area数组等;不同的概念下由不同的数据结构来表述。节点,pglist_data{struct zone node_zones[MAX_NR_ZONES];};每个节点包含内存域,一般情况下有如DMA, NORMAL,HIGHMEM等原创 2015-06-13 14:04:16 · 797 阅读 · 0 评论 -
LINUX进程调度之CFS算法
LINUX进程调度之CFS算法一.概述Linux自2.6.23以来引入了完全公平调度算法;在调度中通过调度器类sched_class对不同的调度算法做了很好的封装,优先级在0-99的实时进程采用调度器类rt_sched_class,对于优先级在100-139的普通进程采用调度器类fair_sched_class,即为完全公平调度类,即本文重点要阐述的内容,空闲进程使用调原创 2015-07-11 22:37:40 · 2352 阅读 · 0 评论 -
Linux进程调度算法之O(1)算法
Linux进程调度算法之O(1)算法一.概述 在一个运行操作系统中的进程数一般都是大于CPU的数目,但是用户看起来好像这些进程是同时在运行的,其原因就是这些进程通过调度算法使每个进程每隔一段时间就放入CPU运行,该时间段非常短,给人的感觉就是这些进程在同时运行。因此需要一些规则来确定调度的时机,即调度策略。 调度策略有多种,常见的如:分时技术,给原创 2015-07-09 21:30:55 · 2905 阅读 · 0 评论 -
linux运行的空间
linux的运行空间------《linux内核设计和实现》运行linux的处理器在任何时间点上的活动范围可以概括为下面三者之一:1.运行于内核空间,处于进程上下文,代表某个特定的进程运行;2.运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断;3.运行于用户空间,执行运行进程;以上所列几乎包括所有情况,例如:当C原创 2015-02-27 20:47:47 · 631 阅读 · 0 评论 -
JFFS2底层驱动的挂载
JFFS2底层驱动的挂载一. Jffs2超级块的挂载static struct file_system_typejffs2_fs_type = { .owner= THIS_MODULE, .name= "jffs2", .get_sb= jffs2_get_sb,原创 2014-08-09 21:20:40 · 906 阅读 · 0 评论 -
如何从uboot传参到内核
如何从uboot传参到内核一.设置环境变量setenv("hw_name", "param");二.将变量定义到传递参数setenv bootargs ${bootargs} hw_name=${hw_name};三.内核解析Int data;static int __init do_parse_args(char *line){if (line){...原创 2019-09-09 09:55:34 · 969 阅读 · 0 评论 -
在linux-4.12.4中增加系统调用
在linux-4.12.4中增加系统调用1.在文件./include/linux/syscalls.h中定义新的系统调用函数asmlinkage long sys_statxtest(char __user*filename); 2.在文件./arch/arm/tools/syscall.tbl中增加定义行398 common statxtest ...原创 2018-06-09 19:44:01 · 603 阅读 · 0 评论 -
如何实现Linux下的U盘(USB Mass Storage)驱动
如何实现Linux下的U盘(USB Mass Storage)驱动版本:v0.7How to Write LinuxUSB MSC (Mass Storage Class) DriverCrifan Li摘要本文主要介绍了USB Mass Storage的相关的各种协议之间的关系,以及如何在Linux的USB驱动框架下实现U盘驱动 本文提供多种格式供: ...转载 2018-04-23 21:05:18 · 5398 阅读 · 0 评论 -
打开Linux内核启动早期的log
打开Linux内核启动早期的log有时会遇到当在u-boot中执行完bootm后,打印出start kernel后串口就没有再输出任何信息了。此时就需要打开内核早期的log:makemenuconfig Kernel hacking ---> [*] Kernel low-level debugging functions(read转载 2017-08-22 22:31:13 · 3569 阅读 · 0 评论 -
linux各个版本的changelog
linux各个版本的changeloghttps://kernelnewbies.org/LinuxVersions原创 2017-03-31 21:19:16 · 2592 阅读 · 0 评论 -
linux内核栈和用户栈(二)
linux用户栈和内核栈(二)一.中断向量ARM执行的时候,有时会产生中断,根据中断的来源不同,执行不同的中断向量:中断向量地址异常中断类型异常中断模式优先级(6最低)0x0复位SVC原创 2016-07-12 22:59:22 · 638 阅读 · 0 评论 -
linux内核栈和用户栈
Linux内核栈和用户栈一.概述Linux进程在运行的时候有不同的状态,可以有用户态、内核态、中断异常状态,用户态由于系统调用等原因可以进入内核态,或者产生外部中断则执行中断流程。同时由于函数的调用需要进行压栈和出栈的操作,cpu硬件以arm为例存在栈指针,arm不同的运行模式下分别有对应的栈操作SP寄存器。简单的说,linux进程用户态有用户栈,内核态有内核栈原创 2016-05-24 22:58:52 · 2330 阅读 · 0 评论 -
Linux内核页表
Linux内核页表一. Linux地址空间ARM的32位系统共支持4G的内存空间,其中0-3G为用户空间,3G-4G是内核空间,ARM采用2级页表,32位地址空间ADDRESS分别为 PGD|PTE|12Bits, 在内核代码中分别为PGD 11位,PTE 9 位,页内地址12位;但是在MMU系统中对于ARM的二级分页设置分别为PGD 12位,PTE 8位,页内地址为12...原创 2016-03-05 18:00:16 · 6452 阅读 · 0 评论 -
Linux进程管理之SMP负载平衡
------------------------------------------本文系本站原创,欢迎转载!转载请注明出处:http://ericxiao.cublog.cn/------------------------------------------一:前言之前在分析Cpuset的时候提起过cpu负载平衡(load balance),当时因为分析的对象是转载 2015-09-13 18:09:52 · 1527 阅读 · 0 评论 -
【内核】调度域(Scheduling Domain)
转自 http://www.ibm.com/developerworks/cn/linux/l-cn-schldom/Scheduling Domains 引入的背景Scheduling Domains 是现代硬件技术尤其是多 CPU 多核技术发展的产物。现在,一个复杂的高端系统由上到下可以这样构成:它是一个 NUMA 架构的系统,系统中的每个 Node 访问系统中转载 2015-09-13 16:02:23 · 756 阅读 · 0 评论 -
arm的2级页表在Linux内核创建过程解析
//转载自http://blog.csdn.net/cosmoslhf/article/details/42742975系统DDR的基地址为0x0,内存为1GB,所以TTB的基地址为0x4000。下面要创建虚拟地址0xfe700000到物理地址0xffff0000之间的映射,映射大小为64KB,即16页。由于物理地址不是1MB字节对齐,所以必须创建两级映射。 用户空间/内核空间划转载 2015-09-05 20:46:29 · 1330 阅读 · 0 评论 -
Linux内核的硬件相关性
Linux内核的硬件相关性一.Linux及硬件概述Linux内核由以下几个部分组成:内存管理,进程描述及调度,文件系统,驱动部分,中断机制,内核协议栈,系统调用,同步机制(如互斥,信号量,自旋锁等)。Linux支持不同的CPU体系结构,如X86,MIPS, ARM等,在linux的最底层需要与不同的硬件平台进行适配,以支持不同的CPU体系结构。原创 2015-02-21 13:17:02 · 1200 阅读 · 0 评论 -
initcall func(一)
Initcall func1. net_ns_init()\net\core\net_namespace.cObj-ypure_initcall(net_ns_init);该函数初始化网络命名空间,初始化struct net init_net,在命名空间中定义该空间中的网络参数,具体结构如下(以ipv4为例):Struct net{……….原创 2014-12-06 13:58:46 · 911 阅读 · 0 评论 -
initcall fucn(六)
51. cmdline_parser_init\drivers\mtd\cmdlinepart.cobj-$(CONFIG_MTD_CMDLINE_PARTS) += cmdlinepart.omodule_init(cmdline_parser_init); tatic struct mtd_part_parser cmdline_parser = { .ow原创 2014-12-06 14:08:43 · 1410 阅读 · 0 评论 -
使用u-boot引导linux的启动过程
使用u-boot引导linux的启动过程在使用u-boot引导linux的过程中,需要进行一系列的步骤,以下从内核映像的制作开始概述linux的整个启动过程。一.内核映像的制作在u-boot编译过程中有生成工具mkimage,该工具用来生成u-boot的bootm命令引导的内核映像,命令如下:#mkimage –n “linux-2.6.26.5” –A arm –O linux原创 2013-09-27 08:46:13 · 2941 阅读 · 0 评论 -
fs2410调试笔记
Fs2410调试笔记FS2410开发板基本情况:Norflash:2M字节,地址0x0000 0000 ------0x0020 0000 内存:64M字节, 地址0x3000 0000------0x3400 0000在nor flash的0x0000 0000已经有引导程序u-boot,所以采用它进行引导,超级终端通过串口输出和控制,u-原创 2013-09-03 21:44:41 · 864 阅读 · 0 评论 -
s3c2410 MMU 启用后设置中断跳转指令遇到的问题
s3c2410 MMU 启用后设置中断跳转指令遇到的问题来自normandy 博客事情是这样的, 前些日子在 FS2410 (核心板为三星 s3c2410)开发板上实现了中断,包括响应时钟 Timer0, 响应按键,并实现了串口通信,能把任何数据通过 UART0 发送到 PC 机上的超级终端上进行显示,这样也便于调试。前两天又实现了 MMU 的启用代码,欢呼雀跃啊..., 可就转载 2013-08-29 21:33:18 · 754 阅读 · 0 评论 -
ARM-linux异常向量表的建立
ARM-linux异常向量表的建立http://blog.chinaunix.net/uid-12567959-id-160972.html当有异常产生时,处理器总会跳转到对应的向量处取指令执行。异常向量表是各个异常处理机制的入口,通过异常向量表我们可以管窥系统整个的异常处理的框架。它就仿佛是我们研究Linux系统复杂的异常处理机制的地图一般。所以,我们自然要先对异常向量表有一定的转载 2013-08-29 21:24:14 · 2418 阅读 · 0 评论 -
嵌入式学习记录:内存管理单元(MMU)介绍
嵌入式学习记录:内存管理单元(MMU)介绍[日期:2011-09-22] 来源:Linux社区 作者:Linux [字体:大 中 小] 嵌入式系统中,存储系统差别很大,可包含多种类型的存储器件,如 FLASH , SRAM , SDRAM , ROM 等,这些不同类型的存储器件速度和宽度等各不相同;在访问存储单元时,可能采取平板式的地址映射机制对其操作,或需要使用虚拟地址对其进行读写转载 2013-08-28 17:51:55 · 762 阅读 · 0 评论 -
S3C2410启动流程分析
开发板fs2410(S3C2410)的启动过程中抓的log如下,加入了一些分析,整体流程来看,有的部分冗余,需要进行裁剪。Starting kernel ...Uncompressing Linux...test1.......................................................................................原创 2013-04-14 21:17:50 · 2832 阅读 · 2 评论 -
u-boot的NAND Flash启动
u-boot-2010.12移植到2440支持nand flash启动http://www.linuxidc.com/Linux/2011-02/32772p4.htm [日期:2011-02-28]来源:Linux社区 作者:bscbem [字体:大中小] 在这篇中,我们将移植nand flash部分,支持NAND启动及NAND FLASH的读写访问。首先转载 2013-04-25 19:36:38 · 959 阅读 · 0 评论 -
fs2410 linux系统部署
Fs2410 linux系统部署一.系统资源介绍:Fs2410采用S3C2410的嵌入式微处理器,基于ARM920T内核,主频203MHz。外部存储器,内存:64M字节,地址0x30000000; NOR Flash: 2M字节; NAND Flash: 64M字节;S3C2410支持两种启动方式:一种是从NAND FLASH启动原创 2013-04-25 15:22:50 · 1139 阅读 · 0 评论 -
tftp和NFS服务器的建立
tftp和NFS服务器的建立在嵌入式linux的开发环境中经常通过tftp服务器在U-boot启动后加载内核,内核启动后通过NFS挂载根文件系统,以下详细介绍两个服务器的建立过程。1.tftp服务器的建立 sudo apt-get install tftpd xinetd sudo mkdir /tftpboot sudo chmod -R 777 /tftpboot su转载 2012-02-29 21:02:50 · 854 阅读 · 0 评论 -
Fs2410上基于linux触摸屏的移植
Fs2410上基于linux触摸屏的移植device 设备的增加增加如下的两个结构:static struct platform_device s3c_ts = { .name = "s3c2410ts", .id = 4, .num_resources = 0,原创 2012-07-11 21:19:48 · 579 阅读 · 0 评论 -
Linux内核访问外设I/O资源的方式
http://hi.baidu.com/liu_bin0101/blog/category/linux_os/index/0 我们知道默认外设I/O资源是不在Linux内核空间中的(如sram或硬件接口寄存器等),若需要访问该外设I/O资源,必须先将其地址映射到内核空间中来,然后才能在内核空间中访问它。Linux内核访问外设I/O内存资源的方式有两种:动态映射(ioremap)和静态映转载 2012-03-05 14:37:15 · 557 阅读 · 0 评论 -
linux启动流程分析
Linux启动流程分析一.概述Linux从汇编跳转到C语言执行的第一个函数是start_kernel(),在该函数中执行一定的函数后,会启动第一个内核进程,即kernel_init(),其中一个主要的执行函数是do_basic_setup(),里面又调用了函数do_initcalls(),在该函数中加载编译时声称的不同模块,可根据需要决定是否加载。本文根据通过make menuconfig进行初步原创 2014-04-13 11:50:26 · 1350 阅读 · 0 评论 -
initcall func(四)
Initcall func31. init_sched_debug_procfs\kernel\sched_debug.cObj-y += sched.o //该文件包含在sched.o中__initcall(init_sched_debug_procfs); static int __init init_sched_debug_procfs(void){原创 2014-12-06 14:05:42 · 665 阅读 · 0 评论 -
Initcall func(二)
Initcall func11. init_aout_binfmt()\fs\binfmt_auto.cobj-$(CONFIG_BINFMT_AOUT) += binfmt_aout.ocore_initcall(init_aout_binfmt); static struct linux_binfmt aout_format = { .modu原创 2014-12-06 14:01:00 · 545 阅读 · 0 评论 -
initcall func(七)
Initcall func61. pm_qos_power_init\kernel\pm_qos_params.cObj-y = pm_qos_params.olate_initcall(pm_qos_power_init); static int __init pm_qos_power_init(void){ int ret = 0;原创 2014-12-06 14:11:05 · 970 阅读 · 0 评论 -
initcall func(五)
41. init_per_zone_pages_min()\mm\page_alloc.cObj-y = page_alloc.omodule_init(init_per_zone_pages_min) static int __init init_per_zone_pages_min(void){ unsigned long lowmem_kbytes;原创 2014-12-06 14:07:21 · 598 阅读 · 0 评论