• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
zd_ad
博客园    首页    新随笔    联系   管理    订阅  订阅
arm linux演艺(五)

长篇连载--arm linux演艺---第五回
--------------------------------------------------------------------------------

好,从本节开始,我们走过了bootloader的漫长征途,开始进入linux的内核:说实话,linux宝典的确高深莫测,洋人花了十几年修炼,各种内功心法层处不穷。有些地方反复推敲也领悟不了其中奥妙,炼不到第九重啊。。

linux的入口是一段汇编代码,用于基本的硬件设置和建立临时页表,对于ARM LINUX是 linux/arch/arm/kernle/head-armv.S, 走!

#if defined(CONFIG_MX1)
mov r1, #MACH_TYPE_MX1
#endif

这第一句话好像就让人看不懂,好像葵花宝典开头的八个字:欲练神功。。。。

那来的MACH_TYPE_MX1?其实,在head-armv.S中的一项重要工作就是设置内核的临时页表,不然mmu开起来也玩不转,但是内核怎么知道如何映射内存呢?linux的内核将映射到虚地址0xCxxx xxxx处,但他怎么知道把哪一片ram映射过去呢?

因为不通的系统有不通的内存影像,所以,LINUX约定,内核代码开始的时候,R1放的是系统目标平台的代号,对于一些常见的,标准的平台,内核已经提供了支持,只要在编译的时候选中就行了,例如对X86平台,内核是从物理地址1M开始映射的。如果老兄是自己攒的平台,只好麻烦你自己写了。

小弟拿人钱财,与人消灾,用的是摩托的MX1,只好自己写了,定义了#MACH_TYPE_MX1,当然,还要写一个描述平台的数据结构:

MACHINE_START(MX1ADS, "Motorola MX1ADS")
MAINTAINER("SPS Motorola")

BOOT_MEM(0x08000000, 0x00200000, 0xf0200000)

FIXUP(mx1ads_fixup)
MAPIO(mx1ads_map_io)
INITIRQ(mx1ads_init_irq)
MACHINE_END

看起来怪怪的,但现在大家只要知道他定义了基本的内存映象:RAM从0x08000000开始,i/o空间从0x00200000开始,i/o空间映射到虚拟地址空间0xf0200000开始处。摩托的芯片i/o和内存是统一编址的。
其他的项,在下面的初始化过程中会逐个介绍到。

好了好了,再看下面的指令:

mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode //设置为SVC模式,允许中断和快速中断
//此处设定系统的工作状态,arm有7种状态
//每种状态有自己的堆栈

msr cpsr_c, r0 @ and all irqs diabled
bl __lookup_processor_type

//定义处理器相关信息,如value, mask, mmuflags,
//放在proc.info段中
//__lookup_processor_type 取得这些信息,在下面
//__lookup_architecture_type 中用

这一段是查询处理器的种类,大家知道arm有arm7, arm9等类型,如何区分呢?
在arm协处理器中有一个只读寄存器,存放处理器相关信息。__lookup_processor_type将返回如下的结构:

__arm920_proc_info:
.long 0x41009200 //CPU id
.long 0xff00fff0 //cpu mask
.long 0x00000c1e @ mmuflags
b __arm920_setup
.long cpu_arch_name
.long cpu_elf_name
.long HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT
.long cpu_arm920_info
.long arm920_processor_functions

第一项是CPU id,将与协处理器中读出的id作比较,其余的都是与处理器相关的信息,到下面初始化的过程中自然会用到。。

arm linux 第五回终。。。

posted on 2010-11-18 14:10  zd_ad  阅读(174)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3