arm linux内核升级,linux-kernel – Linux内核ARM转换表库(TTB0和TTB1)

TTBR寄存器一起用于确定完整32位或40位地址空间的寻址.哪个寄存器用于通过TTBCR中的tXsz位控制的地址范围.对应于TTBR0的t0sz和TTBR1的t1sz有一个条目.

每个TTBRx寄存器寻址的页表是独立的,但您通常会发现大多数Linux实现只使用TTBR0. Linux希望能够使用3G / 1G地址空间分区方案,ARM不支持该方案.如果查看“ARMv7体系结构参考手册”的B3-1345页,您会看到t0sz和t1sz的值分别决定了TTBR0和TTBR1支持的地址范围.为了增加对迷失方向的困惑,甚至可能有脱离的地址空间,其中TTBR0和TTBR1支持不连续的范围,从而导致系统地址空间出现漏洞.美好时光!

但是,为了回答您的主要问题,ARM建议使用TTBR0将偏移量存储到USER进程使用的页表中,并使用TTBR1将偏移量存储到KERNEL使用的页表中.我还没有看到实际执行此操作的单个实现.在所有情况下都使用TTBR0,TTBR1包含L1表的副本.

那怎么办? TTBR的值存储为过程状态的一部分,并且每次切换过程时都会简单地恢复.这就是它的工作方式.最初,TTBR1将为内核表保持一个常量值,永远不会被替换或换出,而每次上下文在进程之间切换时,TTBR0都会被更改.显然,ARM的大多数Linux实现决定基本上消除TTBR1的使用并坚持使用TTBR0来实现一切.

如果你想在你的设备上测试这个理论,试试whacking TTBR1并注意什么都没发生.然后尝试敲击TTBR0并观察系统崩溃.我还没有遇到一个没有产生完全相同结果的实例.简而言之,TTBR1对于Linux来说是无用的,而且TTBR0几乎只用于交换.

现在,一旦你获得LPAE支持,抛弃所有这些并重新开始.这是一个实现,你将开始看到t0sz和t1sz的值不是零,因此也是N.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值