uboot引导S3C44B0X有关PID问题.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
uboot引导S3C44B0X有关PID问题

这是一个令我很开心的日子,公司在做一个基于ARM7的三星S3C44B0X处理器的项目,要用到uClinux。我刚开始学习linux 在网上查了很多资料,最主要的是公司的一个搭档,他算是linux 前辈了,在他的帮助下2014年3月17日星期一,我的uClinux终于跑起来了,下面主要讲一个我卡的时间最长的地方。(关于其他的移植网上大师讲的都很好。) 我主要卡的地方生是uboot引导uClinux时超级终端停在这里 其中drivers/serial/serial_s3c44b0x 这两行是搭档给我的串口驱动而打印出来的,因为内核里面实现的是一个简易串口驱动,如果没有这个串口驱动终端会停在 Error:unable to open an initial console (说一下移植过程中我主要参考的文章/skdev/article/details/1771870 ) 下面说一下解决终端停在PID hash table entries :64 的方法: 因为是新手uboot-1.3.4能够引导内核后就没有怀疑过是他出现的问题,一边又一边的重新配置linux2.6.9。后来搭档让我在内核里面一步一步的用printk()跟踪看看内核停在那里,果然我跟踪后发其实内核停在 local_iqr_enable 这个函数跳不过去(函数具体在linux2.6.9/init/main.c里面)看意思应该是中断出了问题。后来在网上看到两篇文章让我明白了其中的原因:主要内容是: 中断向量表的设置 U-Boot 是一款非常流行的开源 Bootloader,不仅支持多种体系结构的微处 理器,还能够引导多种操作系统,如 Linux/uClinux、NetBSD, VxWorks, QNX, RTEMS等。但是,对于引导不同操作系统, 其中断向量的设置会有所差别。下面就 U-Boot在S3C44B0X引导不同操作系统时 中断向量表的设置给予介绍。S3C44B0是不 支持存储器重映射(remap)的一款处理器, 其一级向量表是固定的,位置是ROM或者 flash 中的0x00-0x1c,分别对应为复位 (reset)、未处理(undef)、软中断(SWI)、 预取指令错误(PAbor d)、数据错误 (DAbord)、未定义(保留)、RIQ以及FIQ。 当U-Boot用于引导uClinux的时候,由 于uClinux的中断向量是由内核启动后设置 的,其中中断向量表的基地址由vector_base 决定,而S3C44B0X的默认中断向量表在 0x00-0x1c之间,因此为了满足uClinux中断 的要求,需要由U-Boot通过一次转跳跳转 到由uClinux设置的向量表中。中断向量表 设置如图1。假设vector-base 的地址为 0X0C000000 而在引导像uC/OS-II 这样的不需要在 引导后重新设置中断向量表的操作系统时 候,可以直接使用默认中断向量表中跳转指 令跳转到相应的中断服务程序,故当引导这 些操作系统的时候不需要在U-Boot的中断 向量表中安装二次跳转指令。中断向量表设 置如图2。 从以上分析可以得出,当在一些不支持 remap的处理器上移植U-Boot的时候,如果 被引导的操作系统会重新设置中断向量表, 那么需要默认的中断向量表中放置跳转指 令地址为重新设置的中断向量表的地址;否 则,该地址即为相应中断服务程序的地址。 因为S3C44B0X不支持remap功能所以在uboot的start.s里面需要修改中断向量表如下 .globl _start _start: b reset ldr pc, Undefined_Addr ldr pc, SWI_Addr ldr pc, Prefetch_Addr ldr pc, Abort_Addr ldr pc, Reserve_Addr ldr pc, IRQ_Addr ldr pc, FIQ_Addr .balignl 16,0xdeadbeef Undefined_Addr: .word 0x0c000004 SWI_Addr: .word 0x0c000008 Prefetch_Addr: .word 0x0c00000C Abort_Addr: .word 0x0c000010 Reserve_Addr: .word 0x0c000014 IRQ_Addr: .word 0x0c000018 FIQ_Addr: .word 0x0c00001C 修改好了之后重新烧写uboot到norflash。期待已久的sh终于看到了。我启动后的中断时这样的: U-Boot 1.3.4 Mar 16 2014 - 20:46:59 DRAM: 8 MB Flas

文档评论(0)

ah82299 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档