自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(80)
  • 收藏
  • 关注

转载 内存管理小结(2)--伙伴系统API

伙伴系统分配内存以2的整数幂次的页数为单位。提供的API主要分为分配类与释放类。1.分配类1.1unsigned long __get_free_pages(gfp_t gfp_mask, unsigned int order)#define __get_free_page(gfp_mask) \ __get_free_pages((gfp_mask)...

2018-08-26 21:35:00 192

转载 内存管理小结(1)--全局变量与宏

1.全局变量赋值1.1high_memoryvoid * high_memory; /*mm/memory.c*/unsigned long max_low_pfn; /*mm/bootmem.c*/unsigned long min_low_pfn; /*mm/bootmem.c*/unsigned long max_pfn; /*mm/bootmem....

2018-08-26 21:05:00 274

转载 mem_init()

原本由bootmem管理的内存在mem_init函数中交由伙伴系统管理。1.free_unused_memmap_node相邻的membank间可能存在空洞,但在bootmem阶段这些空洞页也分配了page结构体。该函数的作用是找到这些page结构体所占用的内存并且释放掉。static void __init free_unused_memmap_node(int nod...

2018-08-24 21:39:00 1003

转载 构建借用内存的后台

Linux管理内存分阶段抽象,用数据结构管理。先用节点集合管理内存,然后用zone的集合管理节点,再用页的集合管理zone.pglist_data结构描述节点typedef struct pglist_data { struct zone node_zones[MAX_NR_ZONES]; struct zonelist node_zonelists[...

2018-08-18 22:21:00 171

转载 ARM linux中断总结

Linux异常处理体系结构Linux异常体系之vector_stub宏解析Linux异常体系之stubs_offsetLinux中断体系结构ARM系统调用转载于:https://www.cnblogs.com/yangjiguang/p/9490480.html...

2018-08-16 22:16:00 133

转载 request_resource

1.全局变量resource结构体定义如下,指针parent、sibling、child用于构建树状结构。struct resource { resource_size_t start; resource_size_t end; const char *name; unsigned long flags; struct res...

2018-08-16 21:58:00 852

转载 分配初始化零页

1.从bootmem分配一页/*这里zero_page指向虚拟地址*/void *zero_page = alloc_bootmem_low_pages(PAGE_SIZE);2.找出zero_page对应的页框描述符page结构体struct page * empty_zero_page = virt_to_page(zero_page);3.flu...

2018-08-15 20:45:00 297

转载 devicemaps_init(mdesc)

devicemaps_init的参数为machine_desc结构体。以s3c6410为例,在arch/arm/mach-s3c64xx/mach-smdk6410.c中使用上述宏声明machine_desc结构体MACHINE_START(SMDK6410, "SMDK6410") /* Maintainer: Ben Dooks <ben-linux@fluf...

2018-08-15 20:41:00 284

转载 bootmem API总结

bootmem_init()函数执行完成后,linux启动初期的bootmem分配器就初始化完成了,可以调用bootmem提供的API分配内存。这些API在include/linux/bootmem.h中定义1.alloc_bootmem与alloc_bootmem_pages的不同之处在于分配内存时的对齐方式不同,alloc_bootmem以cache_line大小对齐,...

2018-08-14 20:47:00 133

转载 bootmem_free_node

该函数设置:1.pgdata节点的成员2.pgdata->zone的成员3.初始化zone->free_area4.初始化zone所包含的所有页对应的页框描述符page结构体/*为buddy系统设置为无可用的页。初始化zone->free_area,设置为buddy系统中没有可用的页框。*/static void __init b...

2018-08-13 21:24:00 117

转载 init_bootmem_node

初始化pg_data_t->bdtat结构体,/* * node_bootmem_map is a map pointer - the bits represent all physical * memory pages (including holes) on the node. */typedef struct bootmem_data { ...

2018-08-12 21:12:00 121

转载 bootmem_init_node

static unsigned long __init bootmem_init_node(int node, struct meminfo *mi)in arch/arm/mm/init.c1.1 根据内存信息重新映射页表,此处为低端内存的线性映射  -->map_memory_bank(bank);    -->create_mapping(&...

2018-08-11 21:59:00 189

转载 for_each_node(node)

遍历各个pg_data_t节点。1.定义在include/linux/nodemask.h中/* * Bitmasks that are kept for all the nodes. */enum node_states { N_POSSIBLE, /* The node could become online at some point...

2018-08-11 19:28:00 717

转载 build_mem_type_table

该函数设置mem_types结构体数组,结构体定义如下:struct mem_type {   unsigned int prot_pte; //二级页表属性   unsigned int prot_l1; //二级映射中的一级页表属性   unsigned int prot_sect; //一级页表属性,只一级映射   unsigned int do...

2018-08-08 23:47:00 417

转载 __vet_atags

参考:atags--__vet_atags标签   arch/arm/include/asm/setup.h 1 /* 2 * linux/include/asm/setup.h 3 * 4 * Copyright (C) 1997-1999 Russell King 5 * 6 * This program is...

2018-08-04 19:27:00 174

转载 ARM Linux内核源码剖析索引

start_kernel  -->asm-offset.h 生成  -->proc_info_list  -->machine_desc  -->__vet_atags  -->cpu位图  -->setup_arch    -->parse_tags    -->命令行参数处理1    ...

2018-08-03 21:45:00 220

转载 asm-offset.h 生成

转自:https://blog.csdn.net/linglongqiongge/article/details/50008301http://www.cnblogs.com/wendellyi/p/3993404.html关键文件:arch/arm/kernel/asm-offsets.casm-offsetcs.c-->asm-offsets.s-->a...

2018-08-03 20:50:00 136

转载 linux系统装载ELF过程

参考:程序员的自我修养fork -->execve() //----kenerl space--------------- sys_execve() /*arch\i386\kernel\process*/ -->do_execve -->1.根据名字查找...

2018-06-14 22:04:00 126

转载 从零分配内存

1.解压缩内核阶段,对整个4G的虚拟内存做1:1映射,只一级映射,一个页表项对应1MB,共4096个页表项,一级页表占用16KB内存空间。/*arch/arm/boot/compressed/head.S中*/start -->__setup_mmu2. 解压后,打开MMU之前.映射当前执行的指令所在地址pa的1MB的地址。映射KERNEL_START...

2018-03-30 14:24:00 172

转载 console_init()分析

启动阶段初始化控制台流程分析,start_kernel console_init(); -->tty_ldisc_begin(); /* Setup the default TTY line discipline. */ -->(void) tty_register_ldisc(N_TTY...

2018-03-24 21:42:00 1095

转载 errno的定义

1./include/asm-generic/errno-base.h -->包含errno=1~342./arch/arm/include/asm/errno.h -->包含/include/asm-generic/errno-base.h -->包含errno=1~343./include/asm-generi...

2018-03-15 10:14:00 320

转载 S3C6410串口平台设备注册流程分析

1.mdesc->map_io()start_kernel -->setup_arch(&command_line); -->paging_init(mdesc); -->devicemaps_init(mdesc) -->mdesc->map...

2018-03-13 22:34:00 107

转载 内核线程

Linux内核线程只运行在内核态,使用PAGE_OFFSET的线性地址空间。下面的函数负责创建一个内核线程,可以看到关键代码是使用CLONE_VM|CLONE_UNTRACED参数调用do_fork函数。pid_t kernel_thread(int (*fn)(void *), void *arg, unsigned long flags){ struct p...

2018-02-26 17:46:00 91

转载 ARM系统调用

参考:Linux异常处理体系结构 linux系统调用表(system call table)   Arm Linux系统调用流程详细解析-SWIARM系统调用是通过SWI异常处理函数实现的,这里简要概述系统调用流程。arch/arm/kernel/entry-armv.S中定义的vector_swi负责处理系统调用,代码如下ENTRY...

2018-02-24 16:34:00 563

转载 rootfs注册挂载过程分析

参考:Linux Filesystem: 解析 Linux 中的 VFS 文件系统机制主要代码,init_rootfs();init_mount_tree();1.init_rootfs()解析init_rootfs() -->bdi_init(&ramfs_backing_dev_info); /* 注册过程实...

2018-02-14 20:33:00 128

转载 vfs_caches_init函数解析

vfs_caches_init函数初始化VFS,下面梳理函数调用流程start_kernel() -->vfs_caches_init_early(); -->dcache_init_early(); -->static struct hlist_head *dentry_hashtabl = alloc_l...

2018-02-12 19:14:00 697

转载 vmalloc_init

/* linux/mm/vmalloc.c*/struct vmap_area { unsigned long va_start; unsigned long va_end; unsigned long flags; struct rb_node rb_node; /* address sorted rbtree */...

2018-01-24 22:52:00 237

转载 timer event

/* linux/kernel/time/jiffies.c*/static cycle_t jiffies_read(struct clocksource *cs){ return (cycle_t) jiffies;}struct clocksource clocksource_jiffies = { .name = "...

2018-01-22 15:13:00 144

转载 sort_main_extable

参考:Linux异常表1.函数调用关系asmlinkage void __init start_kernel(void) -->sort_main_extable(); -->sort_extable(__start___ex_table, __stop___ex_table); -->sort(star...

2018-01-16 21:09:00 343

转载 module_param

该宏定义在include/linux/moduleparam.h中#define ___module_cat(a,b) __mod_ ## a ## b#define __module_cat(a,b) ___module_cat(a,b)#define __MODULE_INFO(tag, name, info) \sta...

2018-01-15 23:35:00 188

转载 percpu之静态变量

参考:Linux内核同步机制之(二):Per-CPU变量    CPU私有变量(per-CPU变量)    动态PCPU变量setup_per_cpu_areas()初始化per-cpu数据。static void __init setup_per_cpu_areas(void){ unsigned long size, i; char *pt...

2018-01-12 21:14:00 163

转载 arm页表在linux中的融合

参考:arm-linux内存页表创建arm的第一级页表条目数为4096个,对于4K页第二级目录条目个数为256个,一级二级条目都是每个条目4字节。在linux下二级分页如下:虚拟地址——> PGD转换——> PTE转换——>物理地址。arm-linux假装第一级目录只有2048个条目,但其实每个条目是2个ulong大小即8字节,所以最终设置MMU的还是409...

2018-01-08 22:27:00 110

转载 boot_mem分配器

#define alloc_bootmem_low_pages(x) \ __alloc_bootmem_low(x, PAGE_SIZE, 0) void * __init __alloc_bootmem_low(unsigned long size, unsigned long align, uns...

2018-01-06 09:47:00 92

转载 内存统计

#!/bin/shif [ -z "$1" ]; then modlist="ServiceManager DSVMCUCOMSVC DSVSystemSVC DSVProxySVC Lifecycle AppManager DSVConfigSVC NadService Loc_Service DSVAudioSVC DSVUpdateSVC DSVNetwork...

2018-01-03 13:39:00 138

转载 build_mem_type_table

1.函数调用关系start_kernel -->setup_arch -->paging_init -->build_mem_type_table2.全局变量在arch/arm/mm/mmu.c中定义以下全局变量2.1 int cachepolicystatic unsigned in...

2017-12-31 09:46:00 171

转载 proc_info_list

内核中每种处理器架构抽象为一个proc_info_list结构体,在arch/arm/include/asm/procinfo.h中定义,struct proc_info_list { unsigned int cpu_val; unsigned int cpu_mask; unsigned long __c...

2017-12-29 22:28:00 335

转载 IRQ中断处理流程

基于Linux2.6.30.4分析IRQ中断的处理流程。1.中断入口/* arch/arm/kenel/entry-armv.S*/b vector_irq + stubs_offset2.vector_irqvector_stub 宏展开即为vector_irq, 参考Linux异常体系之vector_stub宏解析。/* * Inter...

2017-12-28 00:10:00 1804

转载 cpu位图

SMP处理器中要用到cpu位图,用来维护系统内CPU的状态信息,具有代表性的有:cpu_possible_map、cpu_online_map、cpu_present_map。static DECLARE_BITMAP(cpu_possible_bits, CONFIG_NR_CPUS) __read_mostlystatic DECLARE_BITMAP(cpu_onl...

2017-12-26 22:29:00 307

转载 启动参数处理

内核中定义了以下全局变量保存启动参数相关的字符串,in init/main.c/* Untouched command line saved by arch-specific code.与default_command_line一致 */char __initdata boot_command_line[COMMAND_LINE_SIZE];/* Untouch...

2017-12-25 22:24:00 177

转载 atag信息处理

machine_desc->boot_params参数保存的是u-boot传入的启动参数的地址,如果没有传入启动参数,使用如下的默认参数:/* * This holds our defaults.默认的tags */static struct init_tags { struct tag_header hdr1; struct tag_cor...

2017-12-25 21:19:00 364

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除