Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1250024
  • 博文数量: 479
  • 博客积分: 12240
  • 博客等级: 上将
  • 技术积分: 4999
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-24 17:12
文章分类

全部博文(479)

文章存档

2014年(1)

2013年(1)

2012年(1)

2011年(95)

2010年(177)

2009年(167)

2008年(16)

2007年(21)

分类: LINUX

2009-10-14 20:46:12

Feed WDT before kernel start


从bootloader到内核中喂狗,主要时间在解压的时候,而这个时候内核还没有运行,是无法使用内核定时器来喂狗的,只能操直接操作端口进行手工喂狗。但是加压前一集刚解压完内核还没有运行之前,是不能使用系统已经定义好的寄存器进行IO操作的,而只能通过指针方式定义寄存器进行操作。

在内核运行之前喂狗,保证解压后系统能够正常运行,
在arch/arm/boot/compressed/misc.c文件进行喂狗操作:

GPIO14喂狗:

    307     arch_decomp_setup();
    308
    309     makecrc();
    310     *((volatile unsigned long *)0x40E00054) &= (~(3<<28)); //ABING GPAF0_L
    311     *((volatile unsigned long *)0x40E0001C) = (1<<14); //ABING GPDR0
    312     *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0
    313     putstr("Uncompressing Linux...");
    314     *((volatile unsigned long *)0x40E00018) = (1<<14); //ABING GPSR0
    315     gunzip();
    316     *((volatile unsigned long *)0x40E00024) = (1<<14); //ABING GPCR0
    317     putstr(" done, booting the kernel.\n");
    318     return output_ptr;

阅读(1215) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~