heap について

uClinux 調査環境について - まだ見えない先の
詳解LINUXカーネルp.420

asmlinkage unsigned long sys_brk(unsigned long brk) p.421

MMU(ELFバイナリ) 時は,heap 用の vma は fs/binfmt_elf.c set_brk()にて do_brk() を呼び出すことで生成される(はず).sys_brk() でも do_brk() を呼び出し vma の伸張を行う.また,mm->brk の増加を行う.
noMMU 時は,mm->start_brk と mm->context.end_brk の中であれば,mm->brk の変化を許す.それ以外では現在の mm->brk を返す.プロセス起動時に割り当てた heap 領域の増減は行わない.

unsigned long do_brk(unsigned long addr, unsigned long len) p.422

noMMU 時は下記になる.

return -ENOMEM;

これは,前述したように heap 領域を変化させないためだと考えられる.