S3C44B0X如何软复位

bigpeon 2008-05-15 11:03:01
CPU: S3C44B0X
OS: uclinux 2.4

在shell下执行reboot总是出现
reboot failed!

查了些资料,只能看到诸如 architecture was unable to reboot 这样的描述。
既然不支持,那就打算模拟硬件reset的方式,在程序里强制跳转到 0x00000000 地址来进行复位,asm volatile("b 0x00000000");
但是仍然不成功,
提示:
Unhandled fault: alignment exception (93) at 0x00000001
fault-common.c(97): start_code=0xc780040, start_stack=0xc783f94)
Internal error: Oops: 0
CPU: 0
pc : [<0c01ac14>] lr : [<0c0157e4>] Not tainted
sp : 0c68bfb8 ip : 0c7802e8 fp : 00000000
r10: 0c781b84 r9 : 00000000 r8 : 00000000
r7 : 0c780328 r6 : 0c780280 r5 : 0c78031c r4 : 0c286d44
r3 : 0c68bff4 r2 : ffffffff r1 : 20000010 r0 : 0c783566
Flags: nzCv IRQs off FIQs on Mode SVC_32 Segment user
Control: 0
Process rb (pid: 26, stackpage=0c68b000)
Stack:
0c68bfa0: 0c0157e4 0c01ac14 20000093 ffffffff 0c781d34 0c781b
d0
0c68bfc0: 0c781bd4 0c7802d4 00000000 0c78031c 0c780280 0c780328 00000000 000000
00
0c68bfe0: 0c781b84 0c7802f4 0c7802e8 0c7802e8 0c780268 0c783566 20000010 ffffff
ff
Backtrace: no frame pointer
Code: e3a00001 e1a0f00e (e5904000) e1140aa4 e0c11001
pid 26: failed 11

请教各位是怎么实现软复位的呢?致谢!
...全文
298 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjxiaolangzi 2011-10-30
  • 打赏
  • 举报
回复
我用j-Jink烧写SST39VF1601,cpu使用s3C44B0X01L,只能烧写1M以内的程序,超过1M就会提示出错...是不是J-JINK有1M的使用限制哦?ERROR: Program (0x200010 - 0x400020) does not fit into selected flash sectors.
有这个报警是不是文件太大了!老大!怎么搞请教下哦!!!!!!!!QQ::425491878
footooman 2008-05-19
  • 打赏
  • 举报
回复
我要
niphnet 2008-05-19
  • 打赏
  • 举报
回复
分分分~~~
正在搞s3c4510b的bootloader bios-dy1.4
bigpeon 2008-05-17
  • 打赏
  • 举报
回复
分全部送人,要者来取
bigpeon 2008-05-17
  • 打赏
  • 举报
回复
已经解决了。

uclinux/linux-2.4.x/include/asm-armnommu/arch-s3c44b0x/system.h

arch_idle is the code executed by the idle process when there is no other process to run. This function should put the hardware in a low power mode. arch_reset is used to reset the processor during a system reset.

/*
* linux/include/asm-armnommu/arch-s3c44b0x/system.h
*
*/

#ifndef __ASM_ARCH_SYSTEM_H
#define __ASM_ARCH_SYSTEM_H

static inline void arch_idle(void)
{
while (!current->need_resched && !hlt_counter)
cpu_do_idle(IDLE_WAIT_SLOW);
}

extern inline void arch_reset(char mode)
{
switch (mode) {
case 's':
/* software reset jump to address 0x0*/
cpu_reset(0);
break;
case 'h':
/* hardware reset watchdog timer? */
break;
}
}

#endif
bigpeon 2008-05-16
  • 打赏
  • 举报
回复
这么跳转是不是太简单粗暴了?

21,615

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 驱动开发/核心开发
社区管理员
  • 驱动开发/核心开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧