02全志r58平台Android4.4.4下关闭内核中的CPU的开启关闭提示
2017/8/18 13:53
版本:V1.0
开发板:SC5806(全志R58平台)
SDK:android4.4.4
1、系统编译:(略)
原始编译的系统,在串口中会有很多打印:(并且还是不停的显示打印!)
[ 3277.071614] CPU1: shutdown
[ 3277.534023] CPU2: shutdown
[ 3277.080857] CPU1: Booted secondary processor
[ 3277.540563] CPU2: Booted secondary processor
[ 3275.490031] CPU3: Booted secondary processor
[ 3279.121504] CPU2: shutdown
[ 3279.552958] CPU3: shutdown
[ 3279.577345] CPU1: shutdown
[ 3279.580034] CPU1: Booted secondary processor
[ 3279.130678] CPU2: Booted secondary processor
[ 3279.561647] CPU3: Booted secondary processor
[ 3282.023760] CPU2: shutdown
[ 3282.032309] CPU2: Booted secondary processor
[ 3283.102187] CPU3: shutdown
[ 3283.382554] CPU1: shutdown
2、
W:\vxiaoyu_s5k5eya\lichee\linux-3.4\arch\arm\kernel\smp.c
/*
* called on the thread which is asking for a CPU to be shutdown -
* waits until shutdown has completed, or it is timed out.
*/
void __cpuinit __cpu_die(unsigned int cpu)
{
if (!wait_for_completion_timeout(&cpu_died, msecs_to_jiffies(5000))) {
pr_err("CPU%u: cpu didn't die\n", cpu);
return;
}
//printk(KERN_NOTICE "CPU%u: shutdown\n", cpu);
if (!platform_cpu_kill(cpu))
printk("CPU%u: unable to kill\n", cpu);
}
/*
* This is the secondary CPU boot entry. We're using this CPUs
* idle thread stack, but a set of temporary page tables.
*/
asmlinkage void __cpuinit secondary_start_kernel(void)
{
struct mm_struct *mm = &init_mm;
unsigned int cpu;
/*
* The identity mapping is uncached (strongly ordered), so
* switch away from it before attempting any exclusive accesses.
*/
cpu_switch_mm(mm->pgd, mm);
enter_lazy_tlb(mm, current);
local_flush_tlb_all();
/*
* All kernel threads share the same mm context; grab a
* reference and switch to it.
*/
cpu = smp_processor_id();
atomic_inc(&mm->mm_count);
current->active_mm = mm;
cpumask_set_cpu(cpu, mm_cpumask(mm));
//printk("CPU%u: Booted secondary processor\n", cpu);
cpu_init();
preempt_disable();
trace_hardirqs_off();
/*
* Give the platform a chance to do its own initialisation.
*/
platform_secondary_init(cpu);
notify_cpu_starting(cpu);
calibrate_delay();
smp_store_cpu_info(cpu);
/*
* OK, now it's safe to let the boot CPU continue. Wait for
* the CPU migration code to notice that the CPU is online
* before we continue - which happens after __cpu_up returns.
*/
set_cpu_online(cpu, true);
complete(&cpu_running);
local_irq_enable();
local_fiq_enable();
/*
* OK, it's off to the idle thread for us
*/
cpu_idle();
}
3、重新编译boot/内核打包即可!