Linux 2.6.14.1 内存管理代码阅读笔记
文章平均质量分 57
orient
这个作者很懒,什么都没留下…
展开
-
start_kernel 函数之前的汇编代码运行过程
linux-2.6.14.1/arch/arm/kernel/head.S .type __create_page_tables, %function__create_page_tables: ldrr5, [r8, #MACHINFO_PHYSRAM]@ physram /* #define S3C2410_CS6 (0x30000000) //arch-s3c2410/map.h #define S3C2410_SDRAM_PA (S3C2410_CS6原创 2011-05-22 16:52:00 · 1504 阅读 · 1 评论 -
linux kernel内存管理自低向上组成图
原创 2012-05-25 19:34:16 · 1405 阅读 · 0 评论 -
start_kernel->setup_arch->request_standard_resources
static void __init request_standard_resources(struct meminfo *mi, struct machine_desc *mdesc) { struct resource *res; int i; kernel_code.start = virt_to_phys(&_text); kernel_code.end = virt_to_phys(&_etext - 1);原创 2011-05-25 19:52:00 · 764 阅读 · 0 评论 -
板级支持包BSP之 mdesc->map_io()
paging_init -->mdesc->map_io() 之回调函数(面向对象思想应用!!!) [关于S3C2410板级支持包的内容将在讨论完虚拟内存后补上] MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switch * to SMDK2410 */ /* Maintainer: Jonas Dietsche */ .phy原创 2011-05-24 21:49:00 · 1320 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->memtable_init
/* * Setup initial mappings. We use the page we allocated for zero page to hold * the mappings, which will get overwritten by the vectors in traps_init(). * The mappings must be in virtual address order. */ void __init memtable_init(stru原创 2011-05-24 16:50:00 · 470 阅读 · 0 评论 -
start_kernel->mem_init
/* * mem_init() marks the free areas in the mem_map and tells us how much * memory is free. This is done after various parts of the system have * claimed their memory after the kernel image. */ void __init mem_init(void) { unsi原创 2011-05-26 16:00:00 · 1062 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init-->free_area_init_node 之 1
void __init free_area_init_node(int nid, struct pglist_data *pgdat, unsigned long *zones_size, unsigned long node_start_pfn, unsigned long *zholes_size) { pgdat->node_id = nid; pgdat->node_start_pfn = node_start_pfn;原创 2011-05-25 14:31:00 · 805 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->alloc_bootmem_low_pages
#define alloc_bootmem_low_pages(x) / __alloc_bootmem((x), PAGE_SIZE, 0) __alloc_bootmem -->__alloc_bootmem_limit void * __init __alloc_bootmem_limit (unsigned long size, unsigned long align, unsigned long goal, unsigned long limit原创 2011-05-24 16:27:00 · 652 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->bootmem_init() 之 2
上节中描述了bootmem_init()函数的总体过程,接下来具体分析其中包含的几个重要函数。 static unsigned int __init find_memend_and_nodes(struct meminfo *mi, struct node_info *np) { unsigned int i, bootmem_pages = 0, memend_pfn = 0; for (i = 0; i nr_banks; i++) { //mi->nr原创 2011-05-24 15:32:00 · 875 阅读 · 0 评论 -
Linux kernel 内存管理重要数据结构关系组织图
None原创 2011-05-24 15:20:00 · 1665 阅读 · 0 评论 -
start_kernel->build_all_zonelists
void __init build_all_zonelists(void) //建立系统内存页区链表 { int i; for_each_online_node(i) build_zonelists(NODE_DATA(i)); printk("Built %i zonelists/n", num_online_nodes()); cpuset_init_current_mems_allowed(); } static原创 2011-05-25 20:32:00 · 1722 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->memtable_init-->create_mapping
/* * Create the page directory entries and any necessary * page tables for the mapping specified by `md'. We * are able to cope here with varying sizes and address * offsets, and we take full advantage of sections and * supersections.原创 2011-05-24 17:18:00 · 680 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->bootmem_init() 之 3
static unsigned int __init find_bootmap_pfn(int node, struct meminfo *mi, unsigned int bootmap_pages) { unsigned int start_pfn, bank, bootmap_pfn; start_pfn = O_PFN_UP(__pa(&_end)); //内核代码所在物理空间的尾部 bootmap_pfn = 0;原创 2011-05-24 15:56:00 · 495 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init-->free_area_init_node 之 2
static void __init free_area_init_core(struct pglist_data *pgdat, unsigned long *zones_size, unsigned long *zholes_size) { unsigned long i, j; int cpu, nid = pgdat->node_id; unsigned long zone_start_pfn = pgdat->node_start原创 2011-05-25 15:51:00 · 534 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->bootmem_init() 之 4
/* * Reserve the various regions of node 0 */ static __init void reserve_node_zero(unsigned int bootmap_pfn, unsigned int bootmap_pages) { pg_data_t *pgdat = NODE_DATA(0); unsigned long res_size = 0; /* * Register th原创 2011-05-24 16:13:00 · 472 阅读 · 0 评论 -
start_kernel->setup_arch->paging_init->bootmem_init() 之 1
linux-2.6.14/arch/arm/mm/init.c static void __init bootmem_init(struct meminfo *mi) { struct node_info node_info[MAX_NUMNODES], *np = node_info; unsigned int bootmap_pages, bootmap_pfn, map_pg; int node, initrd_node; b原创 2011-05-24 15:11:00 · 960 阅读 · 0 评论 -
start_kernel 之 2
linux-2.6.14/arch/arm/kernel/setup.cvoid __init setup_arch(char **cmdline_p){ struct tag *tags = (struct tag *)&init_tags; struct machine_desc *mdesc; char *from = default_command_line; setup_processor(); mdesc = setup_machine(machine_arch_t原创 2011-05-22 20:21:00 · 480 阅读 · 0 评论 -
start_kernel 之 1
printk(KERN_NOTICE);printk(linux_banner);/*const char linux_banner[] = "Linux version " UTS_RELEASE " (" LINUX_COMPILE_BY "@" LINUX_COMPILE_HOST ") (" LINUX_COMPILER ") " UTS_VERSION "/n";*/printk(linux_banner) 打印出上图中第三行的信息。原创 2011-05-22 20:02:00 · 444 阅读 · 0 评论 -
Linux Kernel网络数据接收过程
原创 2012-09-11 14:32:24 · 1570 阅读 · 0 评论