PowerPC 学习笔记

E500  内核的寄存器和运行模式:

E500 内核有两组寄存器,分别是用户模式寄存器(User-Level Register, ULR)与超级用户模式寄存器(Supervisor-Level Register, SLR)。

E500 内核有两种运行模式,即用户模式(User Mode)和超级用户模式(Supervisor Mode)。

PowerPC 处理器在用户模式或超级用户模式下可以访问用户模式寄存器ULR,而PowerPC处理器在超级用户模式下可以访问超级用户模式寄存器SLR。

用户可以通过修改E500内核的处理器状态寄存器MSR(Machine State Register)的PR 位进行用户模式和超级用户模式的切换


Linux 系统使用E500内核提供的用户模式和超级用户模式。Linux 系统包含两类地址空间,核心空间和用户空间。 其中核心进程和在linux 核心中执行的用户进程运行在linux核心空间中,而用户进程大多数时间运行在linux用户空间中。

在Linux PowerPC 中,一个进程MSR寄存器的值存放在进程描述符中,当进程获得处理器资源后,再将这些存放在进程描述符中的寄存器写入到处理器对应的寄存器中。

Linux PowerPC 在创建新的用户进程时,必然要通过execve,而系统调用execve的执行顺序如下图:

接下来,看下./arch/powerpc/kernel/process.c 中,start_thread 对与MSR 寄存器的初始设置代码:

/*
 * Set up a thread for executing a new program
 */
void start_thread(struct pt_regs *regs, unsigned long start, unsigned long sp)
{
... ...
#ifdef CONFIG_PPC32
	regs->mq = 0;
	regs->nip = start;
	regs->msr = MSR_USER;
#else

ULR 寄存器组分为几类,主要包括 通用寄存器组GPR(General Purpose Register),指令状态寄存器组 IAR(Instruction Accessible Register),etc.

其中,通用寄存器组GPR 有32 个通用寄存器组成,GPR0~GPR31. LR(Link Register)隶属于 状态寄存器组 IAR。

SLR寄存器组主要 包括CPU 配置,内存管理,中断控制,SPR 寄存器等一系列寄存器。

在E500 内核中,主要使用两条指令操作这些寄存器,mtspr和mfspr 指令。

mtspr 指令用于对寄存器赋值,mfspr 用于对SLR 寄存器读取。

E500 内核对SLR 寄存器进行编址访问,如TBL 寄存器的地址为268, 而TBU 寄存器的地址为269, 在PowerPC 中使用spr268, spr269表示TBL 和TBU 寄存器。 E500内核使用mtspr 268, r3 指令对TBL 寄存器进行赋值,使用mfspr r3, 268 指令读取 TBL 寄存器。

MSR 寄存器不能使用mtslr, mfslr 进行赋值和读取,使用专门的指令mtmsr, mfmsr 进行赋值,读取。


总结一下PowerPC的指令集:

注意: PowerPC 使用的内存存储方式是大端模式,这个不同与ARM 处理器的小端模式。

通过readelf /bin/bash 这个可执行文件的elf 头信息可以获取到当前的处理器是大端模式还是小端模式。




PowerPC SC-Form 指令,sc 指令用于实现系统调用。

系统调用的方式由处理器架构决定,前些年做ARM 的时候是用swi 指令实现系统调用。

PowerPC 系统调用分析的不错的帖子:

http://blog.chinaunix.net/uid-24148050-id-344199.html

PowerPC 处理器没有专门的堆栈指针寄存器,而是使用r1 寄存器模拟堆栈指针寄存器。


E500 PowerPC 处理器的ABI:



E500 PowerPC 处理器的栈帧结构:





学习PowerPC linux 特别好的文档:

http://download.csdn.net/detail/chenqiang0721/5214796


http://www.cnblogs.com/autosar/archive/2010/03/16/1687635.html

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值