中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 操作系统 > Linux > Linux综合
uclinux启动
作者:未知 时间:2005-09-13 22:02 出处:Blog.ChinaUnix.net 责编:chinaitpower
              摘要:uclinux启动
关于uClinux在ARM7上的启动分析

uclinux初始化---1

第零个文件 arch/armnommu/Makefile 

在这个文件中定义了你编译好的内核的入口的地址和MACHINE类型,一般是通过条件编译 

TEXTADDR = 0x10008000 这个值完全是根据cpu和内存状况确定的 

MACHINE      = your_processor 

 

指定连接文件 

LINKFLAGS :=-p -X -T arch/armnommu/vmlinux.lds 

 

替换vmlinux-$(PROCESSOR).lds.in中的TEXTADDR,生成实际需要的连接脚本 

arch/armnommu/vmlinux.lds: arch/armnommu/vmlinux-$(PROCESSOR).lds.in dummy 

ifeq ($(CONFIG_ARCH_DSC21),y) 

 @sed "s/TEXTADDR/$(TEXTADDR)/" <$< >tmp.ld 

 @sed "s/DATAADDR/$(DATAADDR)/" $@ 

 $(RM) tmp.ld 

else 

 @sed "s/TEXTADDR/$(TEXTADDR)/" <$< >$@  

endif 

 

一般连接脚本的前面几句是这样的 

ENTRY(stext)---------指定入口 

SECTIONS 

{ 

 . = $(TEXTADDR);-----设定入口的绝对地址 

第一个文件linux/arch/armnommu/kernel/head-armv.S 

#define K(a,b,c) ((a) << 24 | (b) << 12 | (c)) 

#ifndef CONFIG_UCLINUX 

设置符号swapper_pg_dir的地址 

  .globl SYMBOL_NAME(swapper_pg_dir) 

  .equ SYMBOL_NAME(swapper_pg_dir), TEXTADDR - 0x4000  

定义了一个宏,该宏可以获得swapper_pg_dir的地址 

  .macro pgtbl, reg, rambase 

  adr \reg, stext 

  sub \reg, \reg, #0x4000 

  .endm 

 

/* 

 * Since the page table is closely related to the kernel start address, we can convert the page table base address to the base address of the section 

 * containing both. 

 */ 

  .macro krnladr, rd, pgtable, rambase 

  bic \rd, \pgtable, #0x000ff000 

  .endm 

#endif 

 

/* 

 *  Kernel startup entry point. 

 * 

 * The rules are: 

 *  r0      - should be 0 

 *  r1      - unique architecture number 

 *  MMU     - off 

 *  I-cache - on or off 

 *  D-cache - off 

 * 

 * See linux/arch/arm/tools/mach-types for the complete list of numbers for r1. 

 */ 

.section ".text.init",#alloc,#execinstr 

  .type stext, #function  

   

  请注意,这里是入口点,而且此时r1中应该保存唯一的一个architecture number 

ENTRY(stext) 

 

保存r0寄存器的值????? 

  mov r12, r0 

  

 #if defined(CONFIG_ARCH_NETWINDER) 

。。。。。 

#endif 

#if defined(CONFIG_ARCH_L7200) 

  mov r1, #MACH_TYPE_L7200 

#elif defined(CONFIG_ARCH_INTEGRATOR) 

  mov r1, #MACH_TYPE_INTEGRATOR 

#elif defined(CONFIG_ARCH_P52) 

  mov r1, #MACH_TYPE_P52 

#elif defined(CONFIG_ARCH_SWARM) 

  mov r1, #MACH_TYPE_SWARM 

#elif defined(CONFIG_ARCH_SAMSUNG) 

  mov r1, #MACH_TYPE_SAMSUNG 

#endif 

前面预定义了部分的ARCH,如果匹配的上,R1中包含了architecture number 

 

其实系统复位之后,ARM就处于SVC 模式,而且禁止了FIQ IRQ, 的确如注视所说--make sure 

  mov r0, #F_BIT | I_BIT | MODE_SVC @ make sure svc mode 

  msr cpsr_c, r0   @ and all irqs disabled 

 

使用的是atmelarm处理器吗???跳过去吧 

#if defined(CONFIG_ARCH_ATMEL) 

。。。。。 

#endif 

又来,使用的是samsumgarm处理器吗???跳过去吧 

#if defined(CONFIG_ARCH_SAMSUNG) 

。。。。。 

#endif 

 

重点还是分析通用的arm处理器的内容吧 

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有