可见fixmap的作用,即在1.内存管理模块建立之前 2.并且虚拟地址固定(链接器帮忙确定好了)物理地址也是确定的情况下(DTB放在哪里在kernel运行时作为第一个参数传入了),采用提前分配好的swapper_pg_dir(这部分在vmlinux里)存放页表映射关系,达到使用虚拟地址访问物理内存的目的。可见fixmap并不好用,有这1,2两个限制呀。
我们今天就以tf-a实现psci接口结合linux kernel一起进行管理为例,分析下linux kernel和tf-a如何部署了runtime service握手的接口,start_kernel中如何进行smp上电的吧。 一.接口的方式 首先我们基于刚才说的,所有cpu的power控制一定要在secure world对PPU操作进行实现,而我们的linux kernel运行在non-secure world,所以...
这个入口的函数是start_kernel函数,它主要更进一步地初始化系统相关的内容,以便系统进入一种服务状态,提供一种虚拟机的服务,提供各种API调用的服务。 在start_kernel函数里,需要非常注意的是里面初始化函数的顺序,这些初始化函数不能随便调换初始化顺序,否则就会导致系统运行出错。 由于这个函数的内容非常多,涉及的内容也...
//void unlock_kernel(void); // //该函数用于释放大内核锁。当然必须与lock_kernel配对使用,调用了多少次lock_kernel,就需要调用多少次unlock_kernel。 //大内核锁的API使用非常简单,按照以下方式使用就可以了: //lock_kernel(); //对被保护的共享资源的访问 … unlock_kernel(); //http://blog.csdn.net...
start_kernel函数分析 1. set_task_stack_end_magic(&init_task); 抽取关键部分 //找到栈顶位置并设置个魔术字,防止堆栈 将 thread_info 的数据覆盖; //如果是向上生长的栈,直接通过(task_thread_info + 8K - 1)找到栈底并设置魔术字 //内核栈大小一般为4K或者8K. set_task_stack_end_magic(&init_task...
start_kernel在 /linux/init/main.c中定义: asmlinkage void __init start_kernel(void) { char * command_line; unsigned long mempages; extern char saved_command_line[]; lock_kernel(); printk(linux_banner); setup_arch(&command_line); //arm/kernel/setup.c ...
start_kernel函数 如图4.6所示,内核的初始化过程由start_kernel函数开始,至第一个用户进程init结束,调用了一系列的初始化函数对所有的内核组件进行初始化。其中,start_kernel、rest_init、kernel_init、init_post等4个函数构成了整个初始化过程的主线。 (点击查看大图)图4.6 内核初始化...
Start_kernel函数分析 char * command_line;//命令行,用来存放bootloader传递过来的参数 extern conststructkernel_param __start___param[], __stop___param[];//这两个变量为地址指针,指向内核启动参数处理相关结构体在内存的位置,ARM平台定义的位置在kernel/include/asm-generic/Vmlinux.lds.h /* Need to...
start_kernel函数分析 1. set_task_stack_end_magic(&init_task); 抽取关键部分 代码语言:javascript 代码运行次数:0 复制 Cloud Studio代码运行 //找到栈顶位置并设置个魔术字,防止堆栈 将 thread_info 的数据覆盖;//如果是向上生长的栈,直接通过(task_thread_info + 8K - 1)找到栈底并设置魔术字//内核栈...
2、压缩的内核中的开始处,内核的startup在arch/arm/kernel/head.S中,进行页表初始化和处理器缓存初始化等工作,然后跳到C代码init/main.c中的start_kernel,接下来的事情就是大众化工作了,在这里,我们继续分析解压缩后的工作,即是arch/arm/kernel/head.S的工作内容。首先先说下内核的启动条件:1. CPU必须处于SVC...