linux busybox+core dump

目的:
嵌入式linux系统,busybox 制作的文件系统,开启core dump功能.设置为永久生效,
问题:
之前的配置如下:(重启后失效,,,,,)

vi /etc/rc.d/rc.local 
....
ulimit -c unlimited //在/etc/rc.d/rc.local 中增加
...
reboot -f//重启

1.如何使能/禁用 core dump 功能?

a>启用
启用:需要2个条件确一不可。

  • 编译时通过 make menuconfig 指定在 init 选项下启用 CONFIG_FEATURE_INIT_COREDUMPS。
  • 在根文件系统的根目录下创建名为 .init_enable_core 的空文件:touch /.init_enable_core。

重启系统后生效。
b>禁用
删去 /.init_enable_core 文件即可。
重启系统后生效。
c>修改coredump文件的存储位置
core文件默认的存储位置与对应的可执行程序在同一目录下,文件名是core,大家可以通过下面的命令看到core文件的存在位置:

   cat  /proc/sys/kernel/core_pattern

缺省值是core

修改:
在/etc/rc.local中加入如下指令内容,

echo "/var/crash/coredump.%e.%p" > /proc/sys/kernel/core_pattern

core_pattern参数含义:
%% 单个%字符
%p 所dump进程的进程ID
%u 所dump进程的实际用户ID
%g 所dump进程的实际组ID
%s 导致本次coredump的信号
%t coredump的时间戳
%h 主机名
%e 程序文件名

即重定向 /proc/sys/kernel/core_pattern的内容到/var/crash/文件夹下,,,
当然,这个重定向的文件夹不存在则需要创建.
重启生效…

d>永久生效
启动脚本写入:

ulimit -c unlimited

2. pthread_create 失败,说 Cannot allocate memory 这是什么原因?

是因为内存不够用了。推荐使用 strace 工具来跟踪此类问题。
busybox 默认的进程栈空间为 8 MB,从嵌入式应用的角度,这么大的进程栈空间有些太大了,在内存紧张的系统,很容易导致线程创建失败。
修改方法有二:
(1) 执行主进程前,执行命令 ulimit 来调整进程的栈空间大小:
ulimit -s <栈空间大小,单位KB>
(2) 直接修改 busybox 的 init.c 文件。参考 info getrlimit,或者 info setrlimit。


3. 为什么 mount -t nfs 失败?

请确认在 mout 选项中已经使能了 NFS 支持
Location: │
│ -> Linux System Utilities │
│ -> mount (MOUNT [=y])
[*] Support mounting NFS file systems


原文参见:
busybox+coredump

猜你喜欢

转载自blog.csdn.net/guozhongwei1/article/details/81260870