reboot

以下は,kernel-2.6.18.1の話.
rebootシステムコール(kernel/sys.c:sys_reboot)を追ってくると,

(arch/arm/kernel/process.c)
void machine_restart(char * __unused)
{
  arm_pm_restart(reboot_mode);
}

となる.これは最終的にarch_reset(reboot_mode)となるのだが,

(include/asm-arm/arch-pxa/system.h)
static inline void arch_reset(char mode)
{
  if (mode == 's') {
    /* Jump into ROM at address 0 */
    cpu_reset(0);
  } else {
    /* Initialize the watchdog and let it fire */
    OWER = OWER_WME;
    OSSR = OSSR_M3;
    OSMR3 = OSCR + 368640;  /* ... in 100 ms */
  }
}

となっており,リブートされるのは引数が's'の時である.

static char reboot_mode = 'h';

int __init reboot_setup(char *str)                                                                                                       
{
  reboot_mode = str[0];
  return 1;
}

より,reboot_modeの初期値は'h'で,reboot_setup()にて変更が可能.
reboot_setup()は,arch/arm/kernel/setup.c:setup_arch()にて呼ばれ,
MACHINE_START〜MACHINE_ENDの間に

.soft_reboot = 1,

があった場合,reboot_setup('s')を実行する.
つまり,基板設定としてソフトウェアリブートを設定していないと,cpu_reset()が実行されない.
あー,busyboxのせいと疑ってごめんなさい,s君.
busyboxが渡すマジックナンバーは,machine_restart()を呼ぶときの分岐に使われていました.