A53
文章平均质量分 52
wuye110
这个作者很懒,什么都没留下…
展开
-
systemd-modules-load.service
systemd-modules-load.service原创 2022-09-20 22:53:58 · 476 阅读 · 0 评论 -
systemd-analyze blame
systemd-analyze blame原创 2022-09-19 21:31:37 · 684 阅读 · 0 评论 -
build_all_zonelists
关键函数 1.__build_all_zonelists() 2.nr_free_pagecache_pages()__build_all_zonelists(void *data): 对于UMA系统这个函数执行的子函数主要有以下几个:(CONFIG_HAVE_MEMORYLESS_NODES 没有配置) for_each_online_node(nid) {//循环找到系统的所有节点原创 2017-10-26 22:40:32 · 2822 阅读 · 0 评论 -
从物理内存角度描述内存之间的关系(bootmem_init)
1.内存条(bank):由内存插槽组成 2.节点(node):从一个cpu 访问速度相同的内存的集合,包含多个bank,使用pg_data_t 表示,称为节点描述符 3.uma:cpu 对所以内存访问的速度一致 numa:cpu 对所以内存访问的速度不一致 4.zone:节点中具有相同内存属性的区域,有zone 结构管理 一般分为dma,normal,hight 三个区域原创 2017-10-25 22:35:08 · 765 阅读 · 0 评论 -
内核proc文件系统简介
/proc文件系统是一个特殊的由内核创建的文件系统,她仅存在于内存之中而不在外存(硬盘、flash)上。内核用她来向用户空间进程输出消息,可以说是内核向用户空间打开的一扇窗户。 最初开发/proc文件系统是为提供一种内核及其模块向进程 (process) 发送信息的机制 (这就是proc名字的由来)。这个虚拟文件系统让你可以和内核内部数据结构进行交互,获取对于进程的有用信息,并可在运行转载 2017-11-12 17:10:22 · 1949 阅读 · 0 评论 -
proc_root_init
1.self_inum:是一个唯一的proc inode number. 虽然它是从proc 文件系统中分配的inode number, 但仅用在nsfs中, 它被用做nsfs的inode number, 只需要保证这个number在nsfs中唯一就可以了. 2.__xlate_proc_name:This function parses a name such as “tty/driver/se原创 2017-11-12 16:56:03 · 1149 阅读 · 0 评论 -
vfs_caches_init
调用层次 start_kernel() |____vfs_caches_init() |____dcache_init() |____inode_init() |____files_init()原创 2017-11-12 12:22:35 · 601 阅读 · 0 评论 -
Linux内核中namespace之PID namespace
PID框架的设计 一个框架的设计会考虑很多因素,相信分析过Linux内核的读者来说会发现,内核的大量数据结构被哈希表和链表链接起来,最最主要的目的就是在于查找。可想而知一个好的框架,应该要考虑到检索速度,还有考虑功能的划分。那么在PID框架中,需要考虑以下几个因素.如何通过task_struct快速找到对应的pid如何通过pid快速找到对应的task_struct如何快速的分配一个唯一的pid这些转载 2017-11-12 11:42:07 · 1261 阅读 · 0 评论 -
softirq_init
硬件中断需要做尽可能少的事情,多时间要求不严的事情,交给中断下半部分去做。有三种不同形式的下半部实现机制:软中断、tasklet、工作队列。 软中断 内核定义了下面的软中断类型,用户尽量不要自己去创建软中断类型 enum { HI_SOFTIRQ=0, TIMER_SOFTIRQ, NET_TX_SOFTIRQ, NET_RX_SOFTIRQ,原创 2017-11-03 21:35:24 · 452 阅读 · 0 评论 -
time_init
主要是调用clocksource_of_init 函数来实现定时器初始化 这个函数在clksrc-of.c中,通过在__clksrc_of_table 中匹配of_device_id和device_node。 最终执行of_device_id 中的data指向的函数,实现timer 的初始化 执行的查找函数 of_find_matching_node_and_match—–>__of_mat原创 2017-11-03 22:18:27 · 1445 阅读 · 0 评论 -
linux clk驱动框架
clk common framework(ccf)子系统,用来完成对clock的统一管理. 如今,可运行Linux的主流处理器平台,都有非常复杂的clock tree,我们随便拿一个处理器的spec,查看clock相关的章节,一定会有一个非常庞大和复杂的树状图,这个图由clock相关的器件,以及这些器件输出的clock组成。下图是一个示例: clock相关的器件包括:用于产生clock的Os转载 2017-11-14 23:12:56 · 5338 阅读 · 0 评论 -
amba 设备,总线
基础介绍 ARM官网的介绍:http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.ddi0224b/index.html 高级微控制器总线结构Advanced Microcontroller Bus Architecture(AMBA)定义了高性能嵌入式微控制器的通信标准。可以将RISC处理器集成在其他IP芯核和外设中,它是有效连原创 2017-11-20 22:48:19 · 888 阅读 · 0 评论 -
Linux时间子系统的软件架构(一)
一.软件架构 但是随着技术发展,出现了下面两种新的需求: (1)嵌入式设备需要较好的电源管理策略。传统的linux会有一个周期性的时钟,即便是系统无事可做的时候也要醒来,这样导致系统不断的从低功耗(idle)状态进入高功耗的状态。这样的设计不符合电源管理的需求。 (2)多媒体的应用程序需要非常精确的timer,例如为了避免视频的跳帧、音频回放中的跳动,这些需要系统提供足够精度的timer 和转载 2017-11-15 21:24:19 · 1382 阅读 · 0 评论 -
arm64_device_init
这个函数将设备树上的资源填充到平台设备里面,同时创建平台设备,smab 总线。 of_platform_populate:for_each_child_of_node(root, child) { rc = of_platform_bus_create(child, matches, lookup, parent, true); if (rc)原创 2017-11-21 23:04:10 · 519 阅读 · 0 评论 -
early_irq_init
设置irq_default_affinity 值,可以在proc 下看到。 动态分配中断描述符实例,并将其加到radix 树中去。 树的根:irq_desc_tree在用数组来分配中断描述符的,中断描述符的数组为: struct irq_desc irq_desc[NR_IRQS] __cacheline_aligned_in_smp = { [0 … NR_IRQS-1] = {转载 2017-11-16 23:33:59 · 903 阅读 · 0 评论 -
setup_arch(&command_line)
void __init setup_arch(char **cmdline_p){setup_processor();setup_machine_fdt(__fdt_pointer);init_mm.start_code = (unsigned long) _text;init_mm.end_code = (unsigned long) _etext;i原创 2017-10-06 19:28:42 · 706 阅读 · 0 评论 -
setup_processor
struct cpu_info __initdata cpu_table[] = {{.cpu_id_val = 0x000f0000,.cpu_id_mask = 0x000f0000,.cpu_name = "AArch64 Processor",.cpu_setup = __cpu_setup,},{ /* Empty */ },};cpu原创 2017-10-06 19:34:36 · 397 阅读 · 0 评论 -
map_mem
static void __init map_mem(void){struct memblock_region *reg;/* map all the memory banks */for_each_memblock(memory, reg) {phys_addr_t start = reg->base;phys_addr_t end = start + r原创 2017-10-10 23:00:55 · 913 阅读 · 0 评论 -
bootmem_init
难点1.bootmem_init------------------->arm64_memory_present------>memory_present/* Record a memory area against a node. */void __init memory_present(int nid, unsigned long start, unsigned long end)原创 2017-10-09 22:32:33 · 367 阅读 · 0 评论 -
unflatten_device_tree
void __init unflatten_device_tree(void) { __unflatten_device_tree(initial_boot_params, &of_allnodes, early_init_dt_alloc_memory_arch);/* Get pointer to "/chosen" and "/aliasas" n原创 2017-10-11 21:56:06 · 881 阅读 · 0 评论 -
__unflatten_device_tree
void __unflatten_device_tree(struct boot_param_header blob,struct device_node **mynodes,void (*dt_alloc)(u64 size, u64 align)) 1.解析设备树头信息 2.计算设备节点的个数,根据个数来为设备节点分配内存 3.从设备树上将设备节点解析出来 4.解析完成后,校验一下解析原创 2017-10-11 22:24:30 · 1244 阅读 · 0 评论 -
lockdep_info
打印锁依赖的信息 可以参考:Linux 死锁检测模块 Lockdep 简介 http://kernel.meizu.com/linux-dead-lock-detect-lockdep.html 了解lockdep locking_selftest:死锁检测原创 2017-11-08 22:37:12 · 488 阅读 · 0 评论 -
mem_init
mem_init() marks the free areas in the mem_map and tells us how much memory is free. 即释放内存到伙伴系统,对一些内存方面的全局变量设置 首先我们需要明白mem_map作用,其是描述所有的物理内存采用的struct page结构的数组的基指针。比如说,对于4GB的内存来说,如果一个页定义为4KB,即2^12字节。原创 2017-10-15 21:38:24 · 2739 阅读 · 0 评论 -
free_low_memory_core_early
static unsigned long __init free_low_memory_core_early(void) { unsigned long count = 0; phys_addr_t start, end, size; u64 i;for_each_free_mem_range(i, MAX_NUMNODES, &start, &end, NULL)原创 2017-10-23 22:41:44 · 453 阅读 · 0 评论 -
alloc_large_system_hash
void *__init alloc_large_system_hash(const char *tablename, unsigned long bucketsize, unsigned long numentries, int scale,原创 2017-10-16 23:42:08 · 1322 阅读 · 0 评论 -
kmem_cache_init
新版本的改动: kmem_cache_boot—->cache_cache init_kmem_cache_node—->initkmem_list3 slab_caches———>cache_chain size_index——–>malloc_sizes 主要函数: create_boot_cache(create_kmalloc_cache 实际也是调用这个函数)原创 2017-10-23 23:05:52 · 519 阅读 · 0 评论 -
percpu_init_late
void __init percpu_init_late(void) { struct pcpu_chunk *target_chunks[] = { pcpu_first_chunk, pcpu_reserved_chunk, NULL }; struct pcpu_chunk *chunk; unsigned long flags; i原创 2017-10-25 22:16:24 · 294 阅读 · 0 评论 -
初始化中的kmem_cache 实例
1.radix_tree_node_cachep:radix_tree_init() 2.obj_cache:debug_objects_mem_init()不一定打开 3.object_cache,scan_area_cache:kmemleak_init()不一定打开 4.policy_cache,sn_cache:numa_policy_init()不一定打开 5.init_pid_n原创 2017-11-12 10:19:17 · 716 阅读 · 0 评论 -
linux 内核启动 arm64 汇编 head.s
/* * Low-level CPU initialisation * Based on arch/arm/kernel/head.S * * Copyright (C) 1994-2002 Russell King * Copyright (C) 2003-2012 ARM Ltd. * Authors: Catalin Marinas * Will Deacon原创 2017-10-06 19:22:08 · 1435 阅读 · 1 评论