易截截图软件、单文件、免安装、纯绿色、仅160KB

Linux内核及ARM的内存管理

arch\arm\kernel\head.S
该文件末尾包含了语句:#include "head-common.S",__lookup_processor_type函数在arch\arm\kernel\head-common.S中定义。
关键数据结构:struct proc_info_list,在arch\arm\include\asm\procinfo.h文件中定义,Cortex对此数据结构的填充在arch\arm\mm\proc-v7.s文件中定义。
head.s中,kernel的关键入口如下:
ENTRY(stext)
 ARM( msr cpsr_c, #PSR_F_BIT | PSR_I_BIT | SVC_MODE ) @ ensure svc mode
 THUMB( mov r9, #PSR_F_BIT | PSR_I_BIT | SVC_MODE )
 THUMB( msr cpsr_c, r9 ) @ ensure svc mode
@ and irqs disabled
mrc p15, 0, r9, c0, c0 @ get processor id
bl __lookup_processor_type @ r5=procinfo r9=cpuid
movs r10, r5 @ invalid processor (r5=0)?
beq __error_p @ yes, error 'p'
bl __lookup_machine_type @ r5=machinfo
movs r8, r5 @ invalid machine (r5=0)?
beq __error_a @ yes, error 'a'
bl __vet_atags
bl __create_page_tables
/*
* The following calls CPU specific code in a position independent
* manner.  See arch/arm/mm/proc-*.S for details.  r10 = base of
* xxx_proc_info structure selected by __lookup_machine_type
* above.  On return, the CPU will be ready for the MMU to be
* turned on, and r0 will hold the CPU control register value.
*/
ldr r13, __switch_data @ address to jump to after
@ mmu has been enabled
badr lr, __enable_mmu @ return (PIC) address
 ARM( add pc, r10, #PROCINFO_INITFUNC )
 THUMB( add r12, r10, #PROCINFO_INITFUNC )
 THUMB( mov pc, r12 )
ENDPROC(stext)
语句“add pc, r10, #PROCINFO_INITFUNC”通过查表调用proc-v7.s中__v7_setup函数,该函数末尾通过将lr寄存器赋给pc,导致对__enable_mmu的调用,完成使能mmu的操作,之后将r13寄存器值赋给pc,调用__switch_data数据结构中的第一个函数__mmap_switched,该函数指向最后的初始化函数,定义在head-common.s文件中,该函数最终调用init\main.c文件中的start_kernel函数。
语句“mrc p15, 0, r9, c0, c0”将协处理器寄存器CP15读入寄存器r9,此寄存器保存CPUID;之后调用函数__lookup_processor_type查找


相关文档:

实战Linux Bluetooth编程(六) L2CAP编程实例

例一:发送Signaling Packet:
Signaling Command是2个Bluetooth实体之间的L2CAP层命令传输。所以得Signaling Command使用CID 0x0001.
多个Command可以在一个C-frame(control frame)中发送。
 如果要直接发送Signaling Command.需要建立SOCK_RAW类型的L2CAP连接Socket。这样才有机会自己填充Command Code,Identi ......

实战Linux Bluetooth编程 (七) SDP协议

Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......

Linux设备模型之input子系统详解

一:前言
最近在研究android的sensor driver,主要是E-compass,其中用到了Linux input子系统.在网上也看了很多这方面的资料,感觉还是这篇分析的比较细致透彻,因此转载一下以便自己学习,同时和大家分享!
(这篇博客主要是以键盘驱动为例的,不过讲解的是Linux Input Subsystem,可以仔细的研究一下!)
键盘驱动将检 ......

ARM嵌入式Linux系统开发详解——前言

前  言
随着超大规模集成电路的发展,计算机处理器技术不断提高,计算机芯片的处理能力越来越强,体积越来越小,计算机技术应用到生活的方方面面。与人们日常生活打交道最多的就是嵌入式系统,从目前广泛使用的手机、MP3播放器到家用电器,嵌入式系统的应用无处不在。嵌入式系统的开发占整个计算机系统开发的比重也越 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号