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

Linux内核及ARM的内存管理

一个人勃一次不难,难的是勃一辈子……
最近分心的事很多,勃得越来越少了!
打开mmu是一件神圣的工作,需要仔细、再仔细……
从__v7_setup函数返回来,进入到__enable_mmu过程,做起飞前的最后确认:
__enable_mmu:
#ifdef CONFIG_ALIGNMENT_TRAP
orr r0, r0, #CR_A
#else
bic r0, r0, #CR_A
#endif
根据配置选项,决定是否打开数据对齐检查,一般是要打开的;
#ifdef CONFIG_CPU_DCACHE_DISABLE
bic r0, r0, #CR_C
#endif
根据配置选项,决定是否关闭开数据缓冲区,一般是不需要关闭的;
#ifdef CONFIG_CPU_BPREDICT_DISABLE
bic r0, r0, #CR_Z
#endif
根据配置选项,决定是否要关闭分支预测功能,一般是不需要关闭的;
#ifdef CONFIG_CPU_ICACHE_DISABLE
bic r0, r0, #CR_I
#endif
根据配置选项,决定是否关闭开指令缓冲区,一般是不需要关闭的;
mov r5, #(domain_val(DOMAIN_USER, DOMAIN_MANAGER) | \
     domain_val(DOMAIN_KERNEL, DOMAIN_MANAGER) | \
     domain_val(DOMAIN_TABLE, DOMAIN_MANAGER) | \
     domain_val(DOMAIN_IO, DOMAIN_CLIENT))
结合数据手册,此段是将D0、D1两个域,D1对应于USER域,D0对应于KERNEL和TABLE域,配置为管理模式,对这两个域的访问和执行不受TLB中相应标志位影响,D2域,对应于IO域,配置为客户模式,对此域的访问受TLB中相应标志位的检查;
mcr p15, 0, r5, c3, c0, 0 @ load domain access register
写入域访问控制寄存器,其实和__v7_setup函数中写入的值相同;
mcr p15, 0, r4, c2, c0, 0 @ load page table pointer
__v7_setup函数中也已经写过这个寄存器了;
b __turn_mmu_on
__turn_mmu_on就在后面紧跟着,不明白为何还要b一下;
ENDPROC(__enable_mmu)
再看看紧接着的__turn_mmu_on函数:
/*
 * Enable the MMU.  This completely changes the structure of the visible
 * memory space.  You will not be able to trace execution through this.
 * If you have an enquiry about this, *please* check the linux-arm-kernel
 * mailing list archives BEFORE sending another post to the list.
 *
 *  r0  = cp#15 control register
 *  r13 = *virtual* address to jump to upon co


相关文档:

实战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,可以仔细的研究一下!)
键盘驱动将检 ......

linux 32位与64位系统下数据类型长度的区别

近日在centos下用c写东西,这个程序的服务端运行在64位的centos下,客户端有可能是32机,也有可能是64位的。
为了保证数据传输的一致性制定了一套协议,用struct实现。为了保证输出过程中,数据的完整性,特别针对系统的不同对struct里变量的类型进行了优化。为了保证内存对齐方式的一致和数据存储空间的紧凑,都用 #pragm ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号