uClinux中无法实现fork()只能用vfork()。父进程在调用vfork()后必须在子进程调用exec()或者exit()前阻塞; uClinux为可执行程序在紧随它的数据段结束处分配堆栈空间。如果堆增长太大,可能覆盖程序的静态数据段和代码段;因此,有时我们自己(计算)需要合寻找一个适的栈大小:设置的栈空间过大则浪费内存;过小则会导致内存溢出。 uClinux中没有自动扩展的栈,也没有brk()调用。用户必须使用mmap()分配内存空间,也可在程序编译过程中,通过LDFLAGS += -Wl,-elf2flt="131072" 参数来指定使用栈的大小,也可以使用下面命令来调整生产的可执行文件中栈的大小: #arm-elf-flthdr -s 131072 busybox
arm-elf-flthdr命令详解:
arm-elf-flthdr --help
arm-elf-flthdr: invalid option -- -
invalid option
usage: arm-elf-flthdr [options] flat-file
Allows you to change an existing flat file
-p : print current settings
-z : compressed flat file
-d : compressed data-only flat file
-Z : un-compressed flat file
-r : ram load
-R : do not RAM load
-k : kernel traced load (for debug)
-K : normal non-kernel traced load
-s size : stack size
-o file : output-file
(default is to modify input file)
技术资讯 技术方案 技术应用 技术新品 技术前沿 行业资讯 行业方案 行业应用 行业新品 行业前沿