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查找
相关文档:
1. HCI层协议概述:
HCI提供一套统一的方法来访问Bluetooth底层。如图所示:
从图上可以看出,Host Controller Interface(HCI) 就是用来沟通Host和Module。Host通常就是PC, Module则是以各种物理连接形式(USB,serial,pc-card等)连接到PC上的bluetooth Dongle。
在Host这一端:application,SDP,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目录说明
/bin
这是放例如: ls, mv, rm, mkdir, rmdir, gzip, tar, telnet, 及 ftp 等等常用
的执行档的地方(这些执行档的执行方法会在后面提到),有时候这个目录的内容
与 /usr/bin 是一样的(有时候甚至会使用连结档哩),是给一般使用者使用的执
行程序放置的所在!
/boot
没错,这里就是放置你 Linu ......
关于linux环境变量文件
第一内容:
etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.
并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
第二内容:
~/.bash_profile:每个用户都可使用 ......
转自:
http://blog.chinaunix.net/u2/63316/showart_547992.html
Linux下的目录是依照标准来实作的,因此,您可以毫无问题地移殖到任何其它UNIX平台。
--------------------------------------------------------------------------------
getcwd/getwd : 取得目前所在目录
--------------- ......