kernel
文章平均质量分 61
showstopper_x
这个作者很懒,什么都没留下…
展开
-
内核读写文件
filp_open fp->f_op->read fp->f_op->write原创 2015-04-20 14:40:50 · 1064 阅读 · 0 评论 -
CPU动态调频二:interactive governor
Linux提供了多种governor供用户选择,这里以interactive为例,毕竟现在的android手机中都是采用该governor. 基于linux 3.14 以下代码若未指明位置则默认在drivers/cpufreq/cpufreq_interactive.c中.首先需要定义一个cpufreq_governor类型的结构体用来描述interactive governor.struct原创 2015-05-13 19:33:46 · 9452 阅读 · 1 评论 -
kernel 系统调用----system call
Init在trap_init中对SYSCALL_VECTOR(编号0x80)的向量进行初始化。 808 set_system_trap_gate(SYSCALL_VECTOR, &system_call);将system call初始化为trap门,加入到IDT table中,发生中断以后,会跳转到对应system_call的地址去执行后续的中断流程。发生中断到跳转执行中断向量的过程在ker原创 2017-02-28 15:56:05 · 1580 阅读 · 0 评论 -
Linux cmdline 解析(CMA 预留内存)
Linux Version:3.14 Android : Lcmdline在kernel启动的时候被解析. cmdline启动的log中可以看到,比如我的是command_line = androidboot.bootloader=1537.100_M1S1 androidboot.serialno=004999010640000 bl_shared_ram=4k@0xfff4f000 con原创 2015-09-25 10:55:23 · 4890 阅读 · 0 评论 -
start_kernel——setup_per_cpu_areas
setup_per_cpu_areas是为了对内核的内存管理(mm)进行初始化而调用的函数之一。只在SMP系统中调用,UP中不执行任何操作。 setup_per_cpu_areas函数为SMP的每个处理器生成per-cpu数据。 per-cpu数据按照不同的CPU类别使用,以将性能低下引发的缓存一致性(cache coherency)问题减小到最小。per-cpu数据由各cpu独立使用,即使不锁原创 2015-07-07 12:29:27 · 1884 阅读 · 0 评论 -
start_kernel——mm_init_owner
所有任务都具有自己的内存,启动阶段中的当前任务必须具备属于自己的内存。 mm_init_owner()函数传递init_mm和init_task参数 mm/init-mm.cstruct mm_struct init_mm = { .mm_rb = RB_ROOT, .pgd = swapper_pg_dir, .mm_users = ATOM原创 2015-07-06 17:49:46 · 1207 阅读 · 0 评论 -
start_kernel——boot_cpu_init及PER_CPU
init/main.c/* * Activate the first processor. */static void __init boot_cpu_init(void){ int cpu = smp_processor_id(); /* Mark the boot cpu "present", "online" etc for SMP and UP case */原创 2015-07-06 14:31:34 · 2231 阅读 · 0 评论 -
start_kernel——page_address_init
mm/highmem.cvoid __init page_address_init(void){ int i; for (i = 0; i < ARRAY_SIZE(page_address_htable); i++) { INIT_LIST_HEAD(&page_address_htable[i].lh); spin_lock_init(&page_原创 2015-07-06 16:12:58 · 752 阅读 · 0 评论 -
start_kernel——setup_nr_cpu_ids
kernel/smp.c/* An arch may set nr_cpu_ids earlier if needed, so this would be redundant */void __init setup_nr_cpu_ids(void){ nr_cpu_ids = find_last_bit(cpumask_bits(cpu_possible_mask),NR_CPUS) +原创 2015-07-06 18:58:18 · 2829 阅读 · 2 评论 -
start_kernel——local_irq_disable
在启动初期需要关闭CPU的IRQ,原因: 由于尚未对中断代码,向量表,中断处理器进行初始化,所以必须关闭中断。我的源代码里面定义了 CONFIG_TRACE_IRQFLAGS_SUPPORT,所以调用的是 include/linux/irqflags.h#define local_irq_disable() \ do { raw_local_irq_disable(); trace_ha原创 2015-07-03 15:03:52 · 756 阅读 · 0 评论 -
从cgroup_init_early函数学习cgroup——初始化代码
前面分析了cgroup机制的框架及数据结构之间的关系,现在看代码就比较见简单了。 代码部分 在init/main.c的start_kernel函数中会调用cgroup_init_early函数进行cgroup的初始化。其实对cgroup的初始化分两次,分别是cgroup_init_early和cgroup_init。这么做的原因是,系统初始阶段需要使用一些 subsystem,先对这一部分进行初原创 2015-07-03 13:51:38 · 1837 阅读 · 0 评论 -
从cgroup_init_early函数学习cgroup——框架
一些概念的理解cgroup cgourp是一种机制 作用:集成各个进程,对进程分组实现进程组,分配或限制进程组使用的资源(这部分主要有个各个subsystem完成)。 另一个角度,在研究代码的时候,我们更愿意将cgroup理解为一种控制资源的行为。比如:我想要控制进程的CPU使用率为20%,那么我可以创建一个cgroup,这cgroup的作用就是控制指定进程的cpu使用率为20%。subsys原创 2015-07-02 19:27:41 · 1818 阅读 · 0 评论 -
start_kernel----lcokdep_init
void lockdep_init(void){ int i; /* * Some architectures have their own start_kernel() * code which calls lockdep_init(), while we also * call lockdep_init() from the start_kernel原创 2015-07-01 18:53:53 · 1157 阅读 · 0 评论 -
start_kernel----smp_setup_processor_id(以及weak属性)
在init/main.c中有定义void __init __weak smp_setup_processor_id(void){}这是一个__weak属性的空函数。 先了解一下__weak属性:和gcc编译器相关: weak属性可以让编译器在编译的时候忽略函数未定义的错误弱符号: 若两个或两个以上全局符号(函数或变量名)名字一样,而其中之一声明为weak symbol(弱符号),则这些全局原创 2015-07-02 16:24:09 · 1307 阅读 · 0 评论 -
start_kernel——boot_init_stack_canary
/* * Initialize the stackprotector canary value. * * NOTE: this must only be called from functions that never return, * and it must always be inlined. */static __always_inline void boot_init_stac原创 2015-07-01 20:15:28 · 1710 阅读 · 0 评论 -
__init属性的函数
内核中有众多__init属性的函数,这些函数被用作初始化。 比如:/*******************************************************Function: Driver Install function.Input: None.Output: * Executive Outcomes. 0---succeed.********原创 2015-06-16 18:40:38 · 1030 阅读 · 0 评论 -
CPU动态调频(linux 3.14.0)一
cpufreq 动态调频 android原创 2015-04-21 10:42:10 · 3427 阅读 · 0 评论 -
将安卓驱动编译成moudle开机后自动启动
module 安卓 insmod原创 2015-04-20 15:48:21 · 748 阅读 · 0 评论 -
CPU动态调频三:interactive governor如何选频
choose_freq函数用来选频,使选频后的系统workload小于或等于target load. 核心思想是:选择最小的频率来满足target load. 影响选频结果的因素有两个: 1.两次统计时间内系统频率的平均频率loadadjfreq, 2.系统设定好的target load,在INIT的时候设定,tunables->target_loads = default_target_原创 2015-05-15 11:06:17 · 5428 阅读 · 0 评论